When we need to update the software to keep it to the current market, without impacting its functionality, it is called software re-engineering It is a process where the design of software is changed and programs are re-written Legacy software cannot keep tuning with the latest technology available in the market For example, initially UNIX was developed in assembly language. When language C came into existence, UNIX was re-engineered in C, because working in assembly language was difficult. Other than this, sometimes programmers notice that few parts of software need more maintenance than others and they also need re-engineering (Figure: Re-engineering) Decide what to re-engineer. Is it whole software or a part of it? Perform Reverse Engineering, in order to obtain specifications of existing software Restructure Program if required, For example, changing function-oriented programs into object-oriented programs and re-structure data as required Apply Forward engineering concepts in order to get re-engineered software.