Custom Software Maintenance Is More Significant than You Think
Custom software maintenance is the last phase of the software development life cycle. Unlike software support services we’ve covered last time, maintenance services include backups, small changes to functionality, bug fixing, optimization for identified performance problems, and other tasks agreed upon in the contract. Software maintenance is complex and challenging, that is why you need to choose your maintenance team wisely.
All types of custom software maintenance are aimed at keeping the system usable and valuable for the company. At the same time, software maintenance has more service-like aspects when compared to software development because maintenance results in benefits for users. Software maintenance can thus be classified as:
- Corrective – deals with the repair of faults found.
- Adaptive – deals with adjusting the software to new hardware or recent operating system updates.
- Perfective – covers minor system improvements, such as the reorganization of data sets within a database so they can be searched faster or use less storage.
- Preventive – includes modifications that do not have a direct effect on the user. This type of maintenance aims to prevent problems that can happen in the future and to provide a better basis for future development. That is why it includes updates of documentation and comments.
Maintenance processes vary depending on the software and its complexity, but generally they include:
- Problem identification and tracing
- Analysis and determination of priorities
- Delivery and documentation updates
As you can see from the description of maintenance above, this is a complex process. But maintenance is frequently viewed as an undesirable type of work for mid-level, senior developers, because it seems too constraining. Most companies hire junior level developers for maintenance positions. This is not always a good idea, because a junior developer may not fully understand the purpose and value of the system, and may fix bugs in a clumsy way.
Assigning a different software development team member to be responsible for maintenance every week is a good idea. This way developers keep maintenance in mind and are more focused on producing high quality code. Additionally, programmers will learn from each other’s code. If you wish to maximize your effectiveness at maintenance activities, you need to change the way in which people are assigned to maintenance.
You should have mid-level developers doing custom software maintenance because:
Maintenance is intellectually and technically complex
Code maintenance is not easy as far as it requires finding innovative solutions to existing code problems. Moreover, the maintainer must be able to work with concept design and its code at the same time, and this ability comes with experience.
They know how to program well
Skilled programmers recognize what makes good code good, and working with lots of code will refine that skill. Through maintenance, developers learn how to write clear, optimized code, but new development in its turn helps them put into practice what they’ve learned.
They know how to prioritize
Programmers who do maintenance know better how to prioritize tasks when the platform is live and actively used. The prioritization of fixes sets rigid timeframes and thus improves the team’s productivity.
As Dave Thomas said, all programming is maintenance programming. Even in a new project the code is original only during the first couple of minutes, because afterwards the developer makes changes and optimizes it.
The good thing about maintaining your custom software is that you can save from 10 to 25% of the IT budget in case you decide to work with a third-party custom software maintenance company, because IT outsourcing service providers have lower costs of delivery if compared to original software vendors.
In summary, choose the maintenance team wisely, maintain all upgrades, archive older releases of custom software so you can find it easily, and help your software evolve by adding new features and improving the user experience.