Skip to main content

Using a "Technical Debt Register" in Scrum

March 26, 2017

"Debts and lies are generally mixed together" - Rabelais

As I get older, I'm turning into one of those annoying nostalgic-types who reminisces too much. Things were better back in the day, son. We had standards see, and there was less of this "dumbing-down". Yip.

But sometimes at dusk, as I rise from my rocking chair on the porch, hitting the spittoon one last time and leaning over to fix the crick in my back, I reckon there's one thing that's actually better now than in the early 2000's. What modern kids don't stop to appreciate is that these days a man can talk about "technical debt", and folks don't always assume he's a nut-job.

Technical debt can be defined as the longer-term consequences of poor design decisions. Originally described as a metaphor by Ward Cunningham, pretty much everyone now accepts that technical debt is a real risk which can genuinely be incurred. That recognition is good. Shoveling Java and damning the consequences isn't really "agile", it's just being a cowboy. In truth it always was, but for years this went unrealized until the debt certain goons racked up became unsustainable.

It's worth bearing in mind, however, that not all flaws and defects constitute technical debt. This is because they don't reflect "design decisions" which were actually taken. They are often just errors, no matter how irresponsible or egregious they might be. Also, if a decision doesn't directly compromise product quality, then it isn't technical debt. Hence a team may wish for a slick new IDE or plug-in, but the failure to provide the same isn't "technical debt", since it doesn't put the quality of the product itself at risk. It might very well reduce velocity, because they have to limp on using the old development platform, but that's a separate concern.

In Scrum, the expectation is that a Definition of Done should be sufficiently robust for unmanageable levels of genuine debt not to accrue. Hence if technical debt is known to be building up, the Definition of Done should be revisited. It's essential to find out why the debt is being incurred and how this can be avoided.

There are certain other controls which can be used to keep debt down. For example, a team should allow for refactoring (and indeed any other tasks) when deciding how much work they can induct into a Sprint Backlog without compromising long-term quality. Yet apart from these checks and balances, there's no prescription for how technical debt should be handled once you've got it. This isn't an oversight, since Scrum is deliberately as non-prescriptive as possible. It's a framework, and it's up to teams how they implement it.

Note however that implementing "special sprints" to clean up technical debt isn't an option. Technical debt sprints, also referred to as hardening sprints, are essentially an anti-pattern. Each and every Sprint must yield an increment of genuine release quality. That's why the Definition of Done is the primary bulwark against debt building up in the first place.

What some teams do is to maintain a technical debt register, whereby the design decisions which lead to debt can be rationalized. You can think of this register as a RAID log (Risks, Assumptions, Issues, and Dependencies) which is under the team's own purview. It details the technical consequences of expedient decisions on the quality of product implementation, often in terms of probability, impact, and suggested remedy. It may be possible to recommend mitigation during a certain Sprint, if the team have sight of a sufficiently well ordered Product Backlog. Assumptions and dependencies may also feature in the register, and of course some risks can eventually turn into issues which are pressing.

A technical debt register can help inform teams about how the debt they incur should be managed. They can make sensible, informed decisions about whether or not to incur debt and when to pay it back. The use of a register like this isn't part of Scrum, but nonetheless it can help a team to get a grip on the technical debt they decide to take on. Sometimes, for example, technical debt can be paid off when implementing related backlog items. In other cases that might not be possible and the debt must be addressed separately.

Certain instances of debt may need to be exposed to the Product Owner for consideration, and others may not. In severe cases technical debt may have been accumulated which exceeds the value of the project itself, possibly by multiple times. In such extreme cases the most pragmatic approach may be to can the project and start again. Needless to say, this variation on "fail now, not later" takes extreme courage.

Another option when faced with substantial technical debt is to whittle it down gradually, Sprint by Sprint. The team may need to conspire with the Product Owner to deliver something, each and every iteration, which releases sufficient value to stakeholders. Clearly this isn't a great option. It can end up in horse-trading, where the scale and ownership of the debt problem is not admitted to or made known to those stakeholders. Technical debt then becomes more a case of technical embezzlement. Affected parties might be encouraged to turn a blind eye as long as they get something of immediate business value in return, but none of this is good for openness, trust, and transparency.

Now, although I've compared a technical debt register to a RAID log, I'm not suggesting that it should take the usual "documentary" form of one. In my experience it's generally better to use an information radiator. In some cases it may be as rudimentary as a sheet of paper taped to the back of a Scrum Master's chair, but I prefer to coach teams to use a separate card wall for this purpose. Typical states are To Do, In Progress, Done, and Escalate. Items are Done when they are either mitigated or accepted.

Incidentally, this also works for conventional RAID logs at project or program level. Escalation from a Technical Debt Register would imply promotion to such a level. Managers are thereby encouraged to take an active interest in these registers, as well as impediments on a Scrum board, and to query any unescalated problems that appear to have stalled. It can be a great way to encourage "gemba", where they get out of the office, walk around, put their reports and filters to one side, and actually see things for themselves.


What did you think about this post?

Comments (24)


Mark Chapman
10:17 pm March 26, 2017

"Technical debt sprints, also referred to as hardening sprints, are essentially an anti-pattern" - Not sure I agree, but having a separate list of debt is very much an anti-pattern. There should be one version of the truth, the backlog. If you need to do a piece of work to pay back debt it should be in the backlog, prioritised and be part of a sprint. It has value (as not doing it should be negative value or else why bother), it should be part of a sprint backlog in a sprint, and the Product Owner should be involved in setting priority (the product may run like a dog when this happens, but it's an edge case and realistically can wait a few sprints before we fix it). If you keep it in a separate list you will NEVER return to it, something else in the backlog will always be more important, and you will forget about it.


Bhuvan Misra
02:36 am March 27, 2017

Complementary techniques that work for the Scrum Team are all fine as long as they do not get into the way of pillars like Transparency (of artifacts - Product Backlog in this case).


Piyush Rahate
09:33 am March 28, 2017

Having a separate list for just the Tech Debt does not this stray away from the notion that Product Backlog is the single source of truth. Whatever is related to the Product, stays on the Product Backlog and the development team does not work on anything outside the Product Backlog.
Maintaining a separate list for Tech Debt, how would this tell that the development team will ever work on it. If it is a separate list, I believe that the PO doesn't order it.


Nick Meggoudis
07:37 pm March 28, 2017

Making "special sprints" is not the solution. This causes more disturbances in the long run than fixing something. It is preferable to just focus on the scope of the sprint and use the sprint time in order to make changes that are related to the sprint’s scope, or even the application that is related with. This only can work by having a robust definition of done.

I recently wrote a case study that shares the same consept, with a different perspective and can be found here https://nmeggoudis.org/adop...


4johnny
08:30 am April 3, 2017

Ya, technical debt should have first-class citizenship on the Backlog (single version of truth). Some capacity every sprint should be reserved for debt. That capacity can be dialled up or down, depending on other priorities or crunch time, but never to zero. Such capacity allocation also helps alleviate 100% utilization dysfunctions. The PO need not be involved in sequencing or selecting the debt.


Alan Larimer
11:53 am April 3, 2017

Agreed that "hardening" Sprints are an anti-pattern. Maintaining a separate list is also an anti-pattern. The Development Team must do everything possible to create and maintain a solid code base. When sub-optimal designs are chosen (technical debt) or inefficiencies are later discovered, giving the Product Owner authority over those items can be a delicate situation. It requires a Product Owner who respects the need for a solid code base by prioritizing the Development Team's concerns of quality and an organization that supports the Product Owner's authority over the Product Backlog.


Bartek k
02:15 pm April 3, 2017

I agree. Sprints addressing solely the tech debt should never happen, but sometimes it might just turn out that the top product backlog items are related to it, then so be it.
Separate lists, however, is something I would completely avoid. I don't like the concept because it reduces Focus. How? By being a separate artifact to be managed and maintained.


Alan Larimer
05:08 pm April 18, 2017

It's disheartening that the text area says "Join the discussion..." yet so many post authors are not involved.


Fredrik Wendt
07:07 am June 2, 2017

I like to argue both ways. :-)

Looking at technical work, and imagine we can split all those things into two categories:

A) big efforts where both Risk and Cost is decided to be big enough that the PO should have a say - these items should go into the Product Backlog, the PO should have a say on order/when's a good time to do the work

B) it's big enough to put on a list, but not big enough to earn/waste the PO's attention.

In my experience, the B things above, happen all the time. It may come as "// TODO: improve this or replace with XYZ" in the code base, or "wow this could be done so much simpler, if we just took some time to refactor ABC" when pairing (or mobbing). Keeping these B items in check, is clearly the accountability of the Development Team. It should happen as part every day work in the Sprint. Not doing this enough, will some times lead to them piling up and becoming a A kind of thing.

If this happens a lot, lots of A, the Scrum Master should help the Scrum Team assess whether they're spending enough (right amount) effort on design and implementation strategy.

Keeping a separate list of smaller tech debt items (the background things to fix as we work in the sprint), could be seen as a separate source of work/truth, for sure. I can also see it as a key stakeholder having a list of "ideas" that address a certain user base (of the product), that somehow hasn't made it's way to the Product Backlog. Those "ideas" may be resolved in some other way, be deemed not important enough (and not make it to the PBL) or they do end up in the PBL.


piascikj
05:28 am October 22, 2017

I always use TODO comments to identify technical debt I encounter in the code. I feel like it's always best to capture it close to the code and immediately, then you can use a tool to integrate TODO comments straight into the product backlog.


Alan Larimer
01:43 am January 24, 2019

How many TODO and HACK comments are there in production code that were noted years ago? :-/


Sergey Shamin
04:50 pm March 8, 2019

may be it doesn't matter how many - the core idea is (if I understood correctly) - whoever is going to maintain it will see it and be aware that there is smth. left to do to enhance this or that part of code. I still see the value - even with code being on production already


Kevin Owens
12:23 pm November 11, 2019

Good points regarding anti-patterns. Although the article doesn’t say so, it does seem possibly that the technical debt items addressed in the register could also be tracked/prioritized in the product backlog; the register would be a tool that informs that prioritization.

It’s also interesting to note, given nearly unanimous objections in the comments, this post is in the PSPO certification Product Owner Learning Path under the heading “Developing and Delivering Products Professionally / Managing Technical Risk.” Seems like a pretty strong endorsement from scrum.org.


4johnny
11:16 pm November 11, 2019

Stigmergy


4johnny
11:19 pm November 11, 2019

Agile Industrial Complex ;-)


Alan Larimer
07:39 pm November 30, 2019

"The Product Backlog is an ordered list of everything that is known to be needed in the product. It is the single source of requirements for any changes to be made to the product." ( https://scrumguides.org/scr... )

Scrum.org has been failing in a manner similar to Scrum Alliance. The focus has shifted away from the philosophy in the Manifesto for Agile Software Development, which was based on the Scrum framework. The number of "Professional" Scrum practitioners, and revenue, has grown through certifications. It's become a well-paying consultancy of those who do not, and possibly can not, comprehend the philosophy of the system.

The inability of the average person to comprehend agility and the decline of intelligence to become a software "professional" are two of the most prolific factors in the failure of agile approaches in various arenas.


Fredrik Wendt
11:49 pm December 16, 2019

Thanks for sharing your opinion Alan. In short, I believe this industry grows very fast (new people start "doing" software development). Those of us that try to have an impact and improve our profession (in no way limiting to Scrum.org), I feel have no chance of keeping up with the growth rate. I don't know how many more failed projects, big brother, Facebooks the world needs before we see some real action happening (if ever - perhaps I'm confusing professionalism of an industry, with general behavior of the human population).


Alan Larimer
04:07 am June 8, 2020

Addressing technical debt could often be a value add examplified in user experience improvements such as product responsiveness as a result.


Saurabh Sharma
06:13 am December 23, 2020

One of the most commented posts for sure!
My POV on key points -
1. SHOULD we have separate list/register for tech debt - probably NO, as others also mentioned, Product Backlog should be the single source of truth for all the work needed to be done by team
2. CAN we have separate list/register for tech debt - YES, why not? Scrum spent stop you from additional practices that help the team
3. SHOULD/CAN Product Owner be involved in ordering the tech debts just like other PBIs- YES YES and YES! Anything that impacts the teams capability to deliver maximum value has to be an area of concern for PO to address and prioritize.
4. SHOULD/CAN there be a separate sprint for hardening / addressing only tech debts - NO or YES - NO if no VALUE (potentially releasable product increment) is delivered at the end of the sprint. YES if otherwise. Depending on what tech debt you are addressing and what impact it has to the overall value delivery, a call can be taken - PO takes a big ownership here in this decision. Generally, teams prefer addressing tech debt along with other functional stories/features.


TARUN MALIK
08:20 am January 17, 2021

Hardening Sprint is not a term as per Scrum Guide 2020. Should we not be using this term ?


George Haney
05:43 pm July 8, 2021

It is the teams responsibility to arm the PO with facts, and to push for the right things. If the PO wants to ignore Tech Debt, so be it. The teams responsibility becomes ensuring that all stakeholders are aware of - and appreciate - the facts. Let the stakeholders influence the PO, that ensures that the team is not dealing with an angry PO... a bad thing always


Fredrik Wendt
02:28 pm July 10, 2021

Thanks for sharing your thoughts @gehaney:disqus. I welcome some of the change in latest Scrum Guide, which emphasizes that it is the responsibility of the full Scrum Team (not just PO) to create valuable and useable Increments. Example: "Within a Scrum Team, there are no sub-teams or hierarchies." & "The entire Scrum Team is accountable for creating a valuable, useful Increment every Sprint."

A collaborative game it is.


Alan Larimer
06:48 pm October 4, 2021

It should NOT be used; it is an anti-pattern. Each Product Increment at the end of each Sprint needs to be "hardened" to meet the basic requirements of agile product development.


Michael Qolinezhad
08:03 pm January 25, 2024

Summary:

1. Technical Debt is Real and Needs Management:

Not just metaphorical, "shoveling code" can hurt long-term quality and sustainability.
Distinguish between genuine design decisions and mere errors - only the former constitute debt.
Decisions impacting product quality directly are considered technical debt.

2. Definition of Done (DoD) as the First Line of Defense:

A robust DoD helps prevent unmanageable debt buildup.
Revisit the DoD if debt accumulates, identifying root causes and avoidance strategies.

3. Controls and Practices for Managing Debt:

Allocate time for refactoring and other corrective tasks within Sprints.
Maintain a technical debt register:
Tracks decisions leading to debt, akin to a RAID log.
Details consequences, probability, impact, and potential remedies.
Informs decisions on incurring and paying off debt.

4. Technical Debt Sprints (Hardening Sprints) are Anti-Patterns:

Each Sprint should deliver a releasable increment, not just clean up debt.

5. Different Approaches to Tackle Existing Debt:

Pay off debt while implementing related backlog items, if possible.
In severe cases, assess if continuing is viable; even project cancellation might be necessary.
Gradually whittle down debt Sprint by Sprint, but avoid "technical embezzlement" by hiding the issue.

6. Information Radiators for Transparency and Visibility:

Use a technical debt card wall with simple states (To Do, In Progress, Done, Escalate).
Managers should actively engage with these radiators and impediments on the Scrum board.