Agile and Software Maintenance
People often ask me if Agile can be applied during the maintenance phase of a software project?
Its a common misconception that Agile is meant only for Green-field development.
One of the things that has really worked well for me is ‘Short Releases’, anything between one week to 3 months depending on the project. To fully utilize the value of Agile you need to practice short releases. According to the IEEE definition of Software Maintenance:
â€œSoftware maintenance is the process of modifying a software system or component after delivery to correct faults, improve performances or other attributes, or adapt to a changed environment”.
Which means immediately after the first release [max 2-3 months] the project is in a maintenance mode. Agile does not assume a big-bang approach. We try to build a system incrementally in baby steps. Release after release, we add new features or enhance existing feature to satisfy the business needs. For Agile to work, it has to be geared towards maintenance specific practices, which is very true. Lets consider some practices from XP:
- Planning Game: The customer can make a choice between enhancement/bug-fix story or new feature story
- Continuous Integration: Makes sure the currently checked-in code integrates with the rest of the code base and leaves the system in a functional state, which includes running regression tests. We also makes sure the code is always in a production ready state [one cannot have failing test when they check-in].
- Simple Design: We try to keep the design as simple as possible to meet today’s needs of the system. We know the design is going to evolve as we add new functionality. While there are a huge number of unknowns in a software project, one thing we know for sure is that change is inevitable.
- Refactoring: To keep the design simple and to avoid code smells, we constantly refactor the system. We want to have a clean shiny ball. If you have ever maintained a project, you will know how important it is.
- Test Driven Design
- Collective Code Ownership
All these practices and many more, really are geared towards software maintenance.
To add, I also think applying Lean principles to software maintenance can greatly improve customer satisfaction. Just the three simple principles of quick feedback, short turn-around time and eliminate waste can result in great ROI for maintenance projects. Consider some XP practices which can really help you achieve these.