In software engineering, the term software maintenance refers to “the modification of a software product after its delivery in order to fix bugs, improve performance or other attributes, or make adjustments to the changed environment.” The task of maintenance includes all measures to maintain the functionality of the IT processes and software used. This also includes necessary professional and technical adjustments to the IT infrastructure. This legal regulation deliberately distinguishes software maintenance from software maintenance by focusing on maintaining functionality.
Software Maintenance
In a broader sense, services and measures that accompany or support the changes described by the standard can also be counted as software maintenance. Software maintenance is usually used to maintain the functionality and operational reliability of software.
Traditionally, maintenance accounts for most of the software lifecycle. In addition, the amount of maintenance required for maintenance is steadily increasing – while in the 1970s it was still estimated that maintenance costs accounted for 35% to 60% of the total expenditure of the software life cycle, this rose to 80% to 90% by the end of the 1990s.
---
Whether and with how much effort software has to be maintained depends heavily on the use of the software in question (error disclosure through different application scenarios; the desire to improve certain attributes) and the duration of use (changing environment). In the case of mission-critical software, software maintenance usually makes a significant contribution to investment security, but on the other hand it also represents a significant cost factor. As a result, maintenance agreements are often found in mission-critical software. Depending on the agreed service level, the annual costs are usually in the order of 15% of the development costs of the software. Accordingly, IT companies charge relatively uniformly between 15 and 23% of the license amount for software maintenance with a one-off fee per year, even if the services in this regard differ in detail. Gartner Inc. estimates that maintenance accounts for 15 to 25% of total IT costs annually.
In addition, the maintenance effort is strongly influenced by the software itself (error density, maintainability) and the people involved in maintenance (experience, collaboration of specialists) and processes. In this way, the effort can be increased fivefold or reduced to a fifth.
If the necessary attention is paid to appropriate maintainability during the system design, unnecessarily high costs for software maintenance can be prevented. In the case of high maintenance costs, software maintenance is usually carried out by a firmly organized group of employees (maintenance organization) in an orderly maintenance process.

Software Maintainability
The maintainability, supportability or serviceability of software is the ease with which a software system or software component can be modified to fix errors, improve performance or other attributes, or make adjustments to the changed environment.
Maintainability is all the more important:
- the longer the planned period of use of the software
- the lower the availability of experts in the field
Important criteria for the maintainability of software are:
- Documentation, in particular the exact specification of interfaces
- A viable, scalable and extensible architecture
- An uncluttered design that also makes use of well-known and accepted design patterns
- High cohesion and loose coupling of the modules
- A modular, highly articulated structure (decomposition into elementary, individually testable units)
- The avoidance of duplicates (DRY principle)
- Clear and well-commented code that ensures local comprehensibility
- Checks of interface conditions built into the program (Design by Contract)
- The widest possible range of automatically executable tests for the system
- The absence of jump instructions (“GOTO” commands)
- Avoiding global variables
- The parameterizability of functions or methods
- Checks of the programmer’s assumptions about program states built into the program (assertions)
To determine maintainability, the Maintainability Index is calculated based on row metrics, McCabe and Halstead metrics.