Before we start discussing the intricacies of maintenance, it would be good to try to define it as it relates to software. One might think this is simple. A user submits a report that a program is not working. However maintenance consists more than just fixing bugs.
Even when problems are being resolved, the changes reach farther than just the code. Documentation often needs to be updated. The original design may need to be updated. Test plans may need to be updated or even written.
Some environmental changes result in maintenance work as well. The data being processed may change. Or there may be additional features required in the software. A new operating system and/or compiler could drive maintenance tasks.
A change that could be classified as bug fixing is resolving performance problems. These problems could stem from larger amounts of data. Or there could be unusual combinations of data which do not scale well. To the user this is just another problem. But the work performed to fix this may be much different.
As you can see, software maintenance does not fit neatly inside a box.
Mysterious Double Instance Hampering Performance - I study the existing code base. Confer with a colleague. Then I determine the optimal plan to change the functionality to load only a slice of all the dat...