In a perfect world, every software development project would start with a clean slate — no existing code base, no established user community, and no outstanding defects. Wouldn’t that be sweet! It rarely happens.
Most software projects start with a truckload of baggage — crappy code, impatient users, incomplete features, frustrating user experiences, slow performance, long defect histories, etc. The development team wants to take the software to the next level but lots of things need to be torn apart and re-assembled first. It can be a trying experience.
All of that baggage stems from technical debt in one form or another. It’s tough to be agile when you’re burdened with legacy software riddled with technical debt. Here are a few ideas to help you start paying off the debt burden.
Expose the Technical Debt: Conduct a comprehensive review of the system from architecture down to the source code. Compile a list of the areas in debt. Include open defect reports in the analysis.
Test for Debt: Write some tests to help in exposing more technical debt. In particular, performance testing will identify areas that need work. Also examine memory usage and bandwidth demands.
Prioritize the Debt: This is a crucial step. There will never be enough time to repair all the technical debt. Prioritize the debt by aligning it with the product backlog. You want the team to focus on areas that matter most to the business.
Incorporate Technical Debt into User Stories: Repairing the debt can be part of the acceptance criteria for user stories. After all, it makes little sense to add features and functions to code that’s already over-burdened.
Create a Debt Backlog, if you must: If the legacy code base is in really bad shape, it may be necessary to run a sprint (or two) focused only on paying off technical debt. Do that if you must but try to avoid it because the business won’t understand.
Take Advantage of Swarming: It’s likely that many areas of the code base suffer from the same problems. Have the team members swarm over the affected areas to resolve many problems at once.
Technical debt in legacy software systems is a widespread problem. Do some upfront planning to get a handle on the situation. Also recognize that more debt will be found during the project. Work through the issues systematically always striving to make things better.