Repaying technical debt

scroll down arrow
go back arrowGo Back
In Uncategorized

Circumstances often place developers in a situation where they face the decision: Do I write a cheap and nasty solution in order to move forward now? Or do I take more time to solve the problem properly and risk delivering less business value by the end of the sprint? In this situation, an agile developer should do the right thing.

Technical debt was a metaphor first coined by Ward Cunningham. Electing to implement a quick solution with dirty code can sometimes be the right thing to do. What’s important is to realize that it incurs technical debt which, like financial debt, requires repayment by returning at a later date to refactor the dirty code. Recognizing the implications of technical debt helps us to understand its effects and enables us to control our level of debt to ensure that it remains affordable.

It’s a responsible practice to repay technical debt frequently, and we are obligated to manage the repayment as we would with financial debt. However, the repayment plan can be flexible. Extending the financial debt metaphor, I like to use a special case – flexible mortgages – to describe the various methods I employ for repaying technical debt over a project’s lifetime. Flexible mortgages generally allow you to take the following actions:

Regular monthly repayments

In agreement with the product owner, a fixed part of each sprint can be reserved for repaying technical debt. In the interests of open and honest
communication and keeping things visible I maintain an explicit technical debt backlog as part of the product backlog. During sprint planning, the scrum team negotiates the inclusion of technical debt items with the product owner. Consequently, a typical sprint becomes a concoction
comprising a selection of high business-value user stories, a selection of the more risky technical debt items, and some slack containing a handful of low business-value user stories. I dedicate approximately 20% of the sprint’s velocity to slack, leaving 80% to be divided between delivering business value and repaying technical debt.

Lump-sum repayments

If it’s acceptable to the product owner, an entire sprint can be dedicated to repaying the technical debt incurred by previous sprints. This approach may be considered part of a recurring stabilization strategy (if you consider stabilization to be more than preparing a product for release), which occurs periodically throughout the project.

Borrow money back

Sometimes, in order to repay some technical debt in one place you inadvertently create a smaller piece of technical debt in another place. Perhaps, there’s not enough time left in the sprint to completely repay a piece of technical debt, e.g. a refactoring was more complex than anticipated and consequently a tactical solution had to be left in place that will require more refactoring later on.

Take payment holidays

Some dirty solutions may not require immediate refactoring if, given certain circumstances, they are considered to be of acceptable risk. Therefore, some sprints may not repay technical debt and instead focus entirely on delivering business value. However, it should be agreed with the product owner that deferred technical debt must be repaid sooner rather than later.

Underpayments

If the technical debt is small or it has acceptable risk, the scrum team
can spend less time in the sprint repaying technical debt and more time focusing on delivering business value.

Further reading:

Simon Baker
Simon Baker
Simon Baker is chief swashbuckler at Energized Work, a guerrilla technology lab based onboard HMS President in London. Simon cofounded Energized Work and in 2009 received the Agile Alliance Gordon Pask Award. He speaks internationally about applying agile and lean principles and techniques in business, software development, and information technology. With 22 years experience delivering software in the media, retail, healthcare, financial services and banking sectors, Simon is a leader doing things differently to find out what matters and get the right things done in the right way. He isn't afraid to question conventional thinking and disrupt the status quo. Simon feels strongly that work shouldn't feel like work and he has a track record creating exciting working conditions that help people change the way they deliver software for the better.

Leave a Comment

Contact Us

We're not around right now. But you can send us an email and we'll get back to you, asap.