← New search

Other meanings of Software maintenance

Software engineering

Software maintenance

Software maintenance is the engineering process of modifying and updating a software system after its initial deployment, to correct faults, improve performance, adapt to a changed environment, or add new features.1 It is the longest and most expensive phase of the software life cycle, often consuming more than 60% of total project costs.2

60–90%
Total lifecycle cost
Cost share
4 types
IEEE 1219 categories
Classification
~50%
Effort on corrective maintenance
Effort distribution
1

Definition and scope

Software maintenance encompasses all changes made to a software system after it is delivered to the user. The IEEE Standard for Software Maintenance (IEEE 1219) defines four categories: corrective (fixing bugs), adaptive (adapting to changes in the environment), perfective (improving performance or maintainability), and preventive (preventing future failures). Contrary to common perception, maintenance is not only about bug fixing; perfective maintenance—enhancements and optimizations—accounts for the largest share of effort, often exceeding 50%.

2

Economic and organizational impact

Because maintenance spans years or decades, its cost typically dominates the total cost of ownership of a software system. A well-known study by Lientz and Swanson found that over 60% of software life-cycle costs are spent on maintenance, with perfective maintenance alone consuming about 50% of the maintenance budget. Large organizations often dedicate entire teams—sometimes called “legacy support” or “sustaining engineering”—to maintain systems that are critical to operations but too expensive to replace.1 Poor maintainability, caused by low-quality code or inadequate documentation, dramatically increases these costs over time.

3

Challenges and best practices

Key challenges include understanding legacy code written years ago, managing regression risks, and keeping documentation synchronized with changes. Research shows that up to 40% of maintenance effort is spent simply understanding the existing code to be modified. Best practices include rigorous version control, automated regression testing, continuous integration, and code refactoring. The Software Engineering Institute’s Capability Maturity Model Integration (CMMI) includes maintenance-specific process areas. Modern approaches such as DevOps and agile maintenance have shortened release cycles, but they require disciplined tooling and culture to avoid introducing new defects.

4

Lesser-known aspects

One often overlooked fact is that software maintenance is the primary driver of software evolution. The Lehman laws of software evolution, formulated in the 1970s, describe how software systems must be continuously changed to remain useful, and that their complexity tends to increase unless actively controlled.2 Another niche aspect is the role of software archaeology—the practice of recovering lost knowledge from abandoned or undocumented code. Some organizations employ “code graffiti” (embedded notes and warnings) that can outlive their authors. A lesser-known figure is Meir M. Lehman, who first codified the laws of software evolution. In safety-critical systems, the cost of a single incorrect maintenance change can be catastrophic, making maintenance arguably the most risk-prone phase of the life cycle.

Glossary

Corrective maintenance
Modifications made to fix discovered bugs or defects.
Adaptive maintenance
Changes to keep the software usable in a new or changed environment.
Perfective maintenance
Enhancements to improve performance, maintainability, or other attributes.
Preventive maintenance
Changes to prevent future failures, such as refactoring or documentation updates.
Software archaeology
The process of studying and recovering knowledge from legacy or undocumented code.

The term 'software maintenance' is sometimes confused with 'software support', but maintenance specifically refers to the technical activities of modifying code, not just helpdesk or operational assistance.