Managed Technical Debt

We should make a distinction between Managed and Unmanaged Technical Debt.

Published on 21 July 2013 by @mathiasverraes

Alberto Brandolini said at IDDD Belgium (quoting from memory):

We've always explained 'technical debt' badly to the business. If you have debt with a bank, you can talk to someone, negotiate, and agree on a payment plan. But technical debt is like debt with the mob: they come at night, pointing a gun to your head, and they want their money NOW.

Greg Young on the other hand, has talked on several occasions about how technical debt is not necessarily bad. Businesses take loans all the time. They are a powerful tool to make an investment now, and pay for it later. It’s a fundamental aspect of our economy.

Shortcuts

I get very irritated when a non-technical person tells me to take shortcuts to meet a deadline. Or – even worse – when a developer-turned-project-manager does so. Technical debt is often what made the project slow in the first place. And as a consultant being more and more specialized in “problem projects”, I’ve seen a lot of crappy code that grinds projects to a halt.

And yet, I myself tell teams to take shortcuts all the time. But there’s a difference. I know the codebase intimately. I know where it’s problematic, and where it’s under control. I know what is covered with tests, which parts are hurting us, and which parts are simply not elegant. And most importantly: when I introduce technical debt, I know how to get rid of it, and I refactor as soon as I feel it’s needed. I add comments in the code suggesting how to change it, and often I hang a sticky note in the backlog. Whenever new code is affected by earlier debt, I bump the priority of the backlog item.

Mapped Technical Debt (bottom)

Team discipline

When opinions are at odds, like in the quotes above, there’s often a problem in the language. There’s one term, and two concepts. In the interest of making the implicit explicit, I’d like to propose that we make a clear distinction between Managed Technical Debt, and Unmanaged Technical Debt. The former is defined as technical debt where most of the following conditions are present:

For Unmanaged Technical Debt on the other hand, most of the opposite conditions are present:

How we manage it

(Update September 12, 2013)

The photo above shows a project’s story map, and the bottom part is the map of technical debt, in columns per categories (blue stickies). The green stickies are prioritized, and the priorities regularly change: whenever we find that something makes us slower, the stickies move up. Sooner or later they move to the kanban board to be addressed in the sprint. We informally use the “three strikes and you refactor” rule of thumb, but mostly it’s gut feeling, experience, and discussion that help us decide whether something needs fixing – for example when we believe that future stories will be affected.

Visualizing the story map and the technical debt, is incidentally a great way to relieve stress: sure, there’s a lot of work ahead, but it never feels unmanageable.

(Update July 22, 2014)

Some people have started using the technique after seeing my lightning talk about it. Some early pictures:

Be sure to let me know your experience with if you’ve tried it as well!

Read more

Follow @mathiasverraes on Twitter.



Upcoming

2017
Topic Event Type Location Date
Modelling Heuristics Workshop @ Domain-Driven Design Europe workshop Amsterdam, NL Feb 1
Conference Domain-Driven Design Europe 2017 organiser Amsterdam, NL Jan 31 - Feb 3
Domain-Driven Design Neos Conference workshop Hamburg, DE Mar 30
Keynote (TBD) Neos Conference keynote Hamburg, DE Mar 31
Older entries...

Blog Atom

2016

2015

2014

2013

2012

2011

Creative Commons License This work by Mathias Verraes is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.