Improve the design of your existing system
Refactoring is a disciplined technique for restructuring an existing body of code, modifying its internal structure without changing its external behavior. At its heart is a series of small behavior-preserving transformations.
Software typically starts on a small scale, and may initially be well-designed. Over time, however, software size and complexity increase, errors are introduced, and thus code reliability decreases.
Software developers, particularly when not the original authors, find it increasingly difficult to maintain the code, and even more challenging to extend. The code base, which in any software company should be a valuable asset, at some point may become a liability.
This condition is known as "Software Entropy". What is needed to prevent the software from ageing prematurely? Strategically, the focused attention of management and software developers is the most important factor. On the practical side, application of sound development methods will slow this ageing down.
However, refactoring can reverse this ageing when applied properly. It is preferably performed with proven software tools that aid in the detection, analysis, and characterization of the problems, and ultimately allow errors to be corrected.