This article on technical debt has some good points, including:
Working on the "technical matters" works best when it is driven by stories. The code base is probably in need of work everywhere, but the payoff will be received only where the code is going to be worked on for user-facing reasons. If no stories are going to pass through some crufty area, working on it is largely wasted.
Therefore, I prefer the approach of taking stories as usual (but probably fewer of them), and following the "boy scout rule" of leaving the campground better than you found it. In other words, wherever the stories lead us, let's write more tests, let's refactor more aggressively.
This approach has at least these advantages:
- maintains "best sensible" flow of stories;
- provides help from all team talent;
- provides for whole team to learn how to keep code clean;
- focuses improvement exactly where it is needed;
- does not waste improvement that "may" be needed;
I've seen code quality have a very big effect on long-term productivity, so I am a believer that technical debt should be taken care of. I think the post above makes sense, but I'm not so sure about the last two points. I'm interested in finding out real experiences of benefits from cleaning technical debt, even if it was not related to user stories.
What positive benefits have you seen from cleaning up your code base and ridding yourself of technical debt? What methods did you use to get the work done?