Software maintenance constitutes a crucial phase within the software development lifecycle. It encompasses the necessary activities to adequately support the software’s operation across its diverse aspects and usage cycles. In many projects, maintenance tasks are conducted concurrently with other development activities, often prior to delivery. All subsequent maintenance efforts are meticulously planned and anticipated, and the software must be designed to guarantee its maintainability. Nevertheless, the majority of the effort is exerted post-delivery. These activities encompass all modifications made to uphold the software’s value and quality.
Software maintenance classification
Effective systems may remain operational for numerous years, undergoing periodic modifications and the launch of new versions and updates. Changes can arise from several factors, including shifts in the business landscape, evolving user expectations, rectification of bugs, adaptation to new platforms, enhancement of performance, and more. A notable outcome of this ongoing evolution is the persistent rise in maintenance expenses, both in absolute figures and in relation to the overall investment costs, as illustrated in the subsequent figure.

The findings from multiple studies indicate that currently, between 60% and 90% of total expenses are attributed to maintenance costs. This significantly influences job distribution and the workforce structure within the industry. Recent research reveals that, on average, 75% of software engineers are engaged in maintenance tasks while simultaneously participating in standard development activities.
Given their role in the overall development cycle and the variety of tasks involved, different types of maintenance exist based on their purpose in maintaining the software’s operational effectiveness. In our earlier article discussing software maintenance costs and best practices, we identified only two fundamental types. Nevertheless, there are broader classifications that offer a more accurate categorization of various tasks and activities. The most widely recognized classification is outlined in the ISO/IEC/IEEE 14764 standard, which enumerates the following types
- Adaptive – Modification of a software product made after delivery to preserve the usability of the product in a changed or changing environment
- Corrective – Correcting observed errors, which may be errors in coding, design, or specification
- Perfective – Covers post-delivery modifications to improve performance or add new features
- Preventive – Modification of a product after delivery to identify and correct persistent/latent errors before any damage is done to the system.
While the definitions of these categories are fairly straightforward, identifying the specific type of maintenance required upon receiving a request can be quite difficult. For instance, when software is modified to function in a new operating environment, such as a different operating system or server platform, it may be possible to introduce new features that leverage the capabilities of the new environment. In this scenario, both adaptive and perfective maintenance are involved concurrently.
The categorization of maintenance is essential as it establishes guidelines for the activities and responsibilities of individual developers. It also influences costs, clarifying which expenses are borne by the developer organization and which are the responsibility of the client organization. Furthermore, a comprehensive sub-classification is vital, particularly for corrective maintenance, which encompasses the classification of software failures and defects.
Maintenance prediction and metrics
Maintenance prediction involves estimating the extent of changes in the system and identifying the parts that will be the most expensive to maintain. This prediction helps in estimating the total costs of maintaining the system over a certain period and provides a budget for the maintenance.
To conduct a prediction, it is crucial to comprehend the relationship between the system and its surrounding environment. Certain systems exhibit intricate interactions with their environment, particularly information systems that involve various users with defined roles and procedures. Modifications in the environment may necessitate corresponding adjustments in the system. Furthermore, it is vital to identify the elements that are most likely to require changes over time, as this evaluation can be regarded as an investment in enhancing those components to limit future costs.
The following process metrics are used for predicting the maintainability:
- Number of requests for corrective maintenance
- Average time needed to analyze the impact on the system
- Average time required to implement change requests
- Number of pending change requests.
By closely monitoring these metrics, we can gain a clear understanding of the system long-term sustainability. If any of these values show a significant increase within a specific time frame, it is a clear indication that the system’s sustainability is decreasing, and it may be necessary to initiate a system re-engineering process.
If multiple software installations are used by different customers, each metric should be calculated twice. The first way is individually, once for each deployment/installation, followed by the total average for each metric.

