Software development does not stop when a system is delivered but continues throughout the lifetime of the system. After a system has been deployed, it inevitably has to change if it is to remain useful. Business changes and changes to user expectations generate new requirements for the existing software. Parts of the software may have to be modified to correct errors that are found in operation, to adapt it for changes to its hardware and software platform, and to improve its performance or other non-functional characteristics.
Software evolution is important because organizations have invested large amounts of money in their software and are now completely dependent on these systems. Their systems are critical business assets and they have to invest in system change to maintain the value of these assets. Consequently, most large companies spend more on maintaining existing systems than on new systems development. Based on an informal industry poll, Erlikh (2000) suggests that 85–90% of organiza tional software costs are evolution costs. Other surveys suggest that about two-thirds of software costs are evolution costs. For sure, the costs of software change are a large part of the IT budget for all companies.
Studies of software evolution show that, on average, over 50% of the costs of a software system are spent on system change after the system has been deployed (Jones, 2008). For large systems, this proportion may be as high as 80%. Therefore, if you are involved in software development, you should expect to spend more time and money on system change than on initial development.
Software evolution may be triggered by changing business requirements, by reports of software defects, or by changes to other systems in a software system’s environment. Hopkins and Jenkins (2008) coined the term ‘brownfield software development’ to describe situations in which software systems have to be developed and managed in an environment where they depend on many other software systems.
The Spiral Model
You should, therefore, think of software engineering as a spiral process with requirements, design, implementation, and testing going on throughout the lifetime of the system.
This model of software evolution implies that a single organization is responsible for both the initial software development and the evolution of the software.
In practice, this is often not the case. Many software systems are developed by one organization and then sold to another organization that is responsible for the evolution of the system. This is true of most packaged software systems.
Evolution vs. Servicing
Rajlich and Bennett (2000) proposed an alternative view of the software evolution life cycle, distinguishing between evolution and servicing.
In this stage, the software moves from evolution to servicing. During the servicing phase, the software is still useful and used but only small tactical changes are made to it. During this stage, the company is usually considering how the software can be replaced. In the final stage, phase-out, the software may still be used but no further changes are being implemented. Users have to work around any problems that they discover.