When it comes to custom software development do not be tricked into thinking that things are over after the installation/deployment stage of the software development life cycle (SDLC). Be aware, that it is just the beginning of a long phase of a software life cycle known as maintenance.
Software is always evolving and the product is never finished as long as it is being used. Anytime a change needs to be made to an existing software product that’s exactly what software maintenance is. This means more than just fixing bugs, de facto only 20% of maintenance is attributed to bug fixing. It also involves the repair, upkeep and continual optimization of the products. There are four types of maintenance: corrective, adaptive, perfective, and preventive. In this article, we will outline these four types and help you understand how to properly undergo maintenance with your software product.
Costs of software maintenance
You already paid a software house for your project so why should you invest even more to maintain it? Well, a study on estimating overall software development costs discovered that on average the maintenance phase of SDLC makes up over 50% of the total cost of the entire project. The study found that in some instances maintenance took up as much as 67% of the overall SDLC cost.
Maintenance is always ongoing for the life of the product and can continue for multiple years after initial deployment.
This is the cost of keeping software products up to date and issue-free. Be prepared for the cost of maintenance and know you may have to allocate over 50% of your development budget towards it, although that cost is spread across a much longer time.
Why do I need software maintenance?
Even if your product comes straight from the development company bug-free you will still inevitably need to perform software maintenance on it. If not now, that in a couple of weeks! Software products are often plugged into dynamic systems that can evolve and change. Many circumstances might change and force you to adapt your software to them. Here are a few examples of such external factors:
- Compliance Change: a software product needs to be altered to comply with new laws or regulations.
- External Dependencies Change: for example, Facebook authentication ceases to work when Facebook changes its authentication protocols and your application needs to be updated accordingly.
- Usage Pattern Change: scaling website architecture to keep up with increased web traffic.
- Market Environment Change: integrating an application with a popular new third-party system.
- Security Changes: security vulnerabilities were discovered in 3rd party libraries used in your applications and they need to be upgraded to newer versions to keep your software secure.
Types of software maintenance
The maintenance phase is an important part of the software development life cycle. There are four key types that you need to understand:
This type involves fixing bugs, defects, and flaws in the deployed code. It consists of fast and small updates that occur with semi-regular consistency. It is unlikely to cause major issues for users. In fact, it can improve user experience by improving software performance and reliability. It focuses on correcting faults and errors in a product that may derive from software design, code or logic. Often the impetus for this type of work is bug reports generated by users. Another common corrective maintenance action is to fix security vulnerabilities in the code. Corrective maintenance makes up around 20% of overall software maintenance.
Adaptive maintenance involves the infrastructure of software and is generated by changes in the software’s environment. This type of maintenance is done in response to new hardware, operating systems, or platforms in order to keep software compatible. It can be triggered by changes in software dependencies and organizational policies. In a quickly changing tech environment, adapting to new changes keeps everything up to date and secure. This type of software maintenance typically has a low impact on users. It makes up 20-25% of overall maintenance.
Perfective maintenance is the largest category. On average, 50-55% of maintenance work can be attributed to this phase. This type of maintenance revolves around the usability and functionality of the software product. Perfective maintenance includes improving existing product functionality by deleting, refining or adding new features. In addition to changing the way a product functions, perfective maintenance can also involve changing the look and feel of your application. UI alterations, redesigns or other aesthetic changes are also a part of this type of maintenance. Users will likely notice perfective changes you make so communicating with them is of paramount importance. Try getting feedback and offering accessible support. These types of changes are necessary for the health of your software product so make sure to manage them well.
Preventive maintenance involves making alterations to a software product in order to ‘future proof’ it and prepare in advance for any likely changes down the road. It helps lower the deterioration of software over the long term. Typical examples of preventive maintenance include updating documentation, restructuring, and optimizing code. Going through this process makes your software more stable, scalable, and easy to understand and maintain. It also involves managing legacy content as well as identifying and correcting latent defects in a product before they turn into operational faults. This type of maintenance tends to go on in the background and generally does not affect the usability of the software while it is undertaken. Preventive maintenance can help make implementing large changes easier as well as improve the stability of the software product. It makes up around 5% of overall software maintenance.
7 phases of software maintenance
Software maintenance is best implemented via a process known as the software maintenance life cycle (SMLC). This involves seven phases which are as follows:
During this phase requests to modify the software are identified and then analyzed. Each modification request (MR) is checked in order to classify it under the type of maintenance activity it requires. These requests can be generated by software, logs, error messages, or user feedback. After being classified each MR is given a priority in order to determine what order they should be processed in.
Each approved modification request is analyzed to understand its feasibility and scope and then a plan is made to integrate these changes into the product. For each MR a feasibility analysis is done, which results in a feasibility report containing information on:
- the impact of the changes,
- alternative solutions,
- an analysis of conversion requirements,
- security and safety implications,
- human factors,
- short and long term cost.
During this stage of the software maintenance life cycle, the modifications that will be made to the project are actually planned as per requirements specified earlier. This phase will generate information: a detailed analysis of user requirements in addition to an implementation plan. The design phase contains:
- information about the existing system
- project documentation
- information about the database and existing software
- a refined detailed analysis from the previous phase,
- a test plan,
- a list of constraints and risks associated with implementation.
Part of this phase involves creating test cases for the validation and verification of the software.
The implementation phase is where all the action happens. Modifications are made to software code, new features (that support the specifications of present software) are added, and modified software is implemented. This phase involves:
- custom code assimilation,
- risk analysis and review
Regression Testing Phase
In this phase, regression testing is performed on the modified system in order to make sure that there are no bugs, defects or errors. Besides, these tests validate that no new issues were accidentally introduced to the system via maintenance activity. The output of the system testing phase is a tested and integrated software system as well as a test report.
Acceptance Testing Phase
During this phase, the fully integrated system has acceptance testing performed on it.). The goal of this phase is to check whether all features of the program are in line with the requirements for change.
During the delivery phase, the modified (or new) software is delivered to the user after acceptance tests are completed. The system's final test is performed by the customer after the system is submitted. The customer is provided with documentation in the form of manuals and help files that describe the software in addition to its hardware requirements.
Software maintenance is the final phase of the software development life cycle. It can also be the longest and most expensive phase. However, it is absolutely necessary for the long term survival, success and evolution of your software product. Bug fixing, also known as corrective maintenance, makes up less than a quarter of maintenance work overall. The other types of maintenance to be aware of are adaptive, perfective, and preventive. Having a holistic understanding of the software maintenance life cycle can help keep your project on track. Get in touch to ask about the maintenance of your software.