Today, software professionals recognize that change in software systems
is inevitable. There are many systems currently in operation, however,
which were developed before the need for change was understood. Such
systems are commonly referred to as "legacy systems", and were developed
with relatively short lifetimes in mind. Software engineering is a
relatively young discipline which is continually improving to provide
better support for the development of software systems. What were once
state-of-the-art techniques, tools, and processes are now dated, and
have resulted in systems which are not responsive to change. For
historical reasons, dated development practice traded maintainability
for other system attributes, such as cost and performance. A significant
number of legacy systems remain in operation because they are critical
to the business processes which they support. The combination of
extended lifetimes and poor maintainability means that legacy systems
are expensive to change, and in many cases they cannot accommodate
emerging requirements. This is clearly an undesirable situation, which,
until recently, has been tackled by replacing the system or attempting
to maintain it. Replacing a legacy system is dangerous, since you face
the risk of losing vital business knowledge which is embedded in many
old systems. In many cases, system replacement is not cost-effective.
Conversely, if you attempt to maintain a legacy system, there is often
little return on the investment in maintenance effort and the system
remains difficult and expensive to change.