Thursday, November 5, 2009

Technical Debt

What is technical debt:

Any code violations, undocumented code, lack of or less coverage of unit tests, lack of integration testing, build deficiencies, lack of code review process resulting in any or all of the above. In short, any areas that that cause impediments in delivering quality software.

Identify and deal with it:

Help/Coach the team understand and quantify the technical debt, so that it is more visible and not just a topic of side discussions that cause anguish and slows down quality software delivery.

What is required is the recognition and admittance that it will get more costly to take care of technical debt as time goes by. The ScrumMaster/Product Owner recognize this as a need and garner support by management to allow the team to be empowered to work on the technical debt.

Here comes the need for balance where along with empowerement comes the responsibility on the team to strike a balance between business value delivery and reducing debt.

The initial impact of focusing on technical debt might slow down in the feature delivery, but the expectation is that it will pick up once technical debt is paid off.

Remedy: Create technical Debt backlog and address it short Sprints.

Goal: Identify the 'need' vs. 'want' and plan to address that.

Creating a backlog was also resonated by Johanna Rothman, who was a speaker at the AgilePalooza in Boston last week.

1. Create stories around the major areas identified.

2. Let the team meet and brainstorm on ideas to fix the issues, come up with a game plan. Make this as tasks under stories, just like you would break down user stories.

3. At this stage treat technical debt backlog as product backlog and prioritize from the perspective of what is most urgent. Another way to prioritize is to ask some questions for e.g. 'What should be do first to achieve continuous integration, because that is killing the software delivery'

4. Apply the same principles of story points, estimation and plan on who works on what.

5. Create a 1 week or a 2 week iteration to focus and burn off technical debt

6. Measure burndown rate of the team against the technical debt backlog to help in future planning.

Finally, the scrum teams employ good software practices to ensure that technical debt does not become a systemic issue.