Sources of Debt

What areas of the codebase have accumulated technical debt?

The user authentication module is overly complex and hard to maintain due to numerous hacks and workarounds over time.
We have a lot of duplicated code across different components that should be refactored into shared utilities.
Many of our core data models are tightly coupled, so extending or modifying functionality risks regressions.
Impact and Risks

How is this technical debt impacting the team and product?

Onboarding new developers is extremely difficult due to the complexity and lack of documentation in certain areas.
We're constantly fighting fires and unable to deliver new features at a reasonable pace because of instability caused by debt.
Our deployment process is fragile and error-prone, leading to frequent production issues and outages.
Prioritization

Which areas of debt should be tackled first?

We should start with the authentication module since it's a core dependency impacting multiple areas of the application.
Improving test coverage for our most volatile components would provide a solid foundation for future refactoring efforts.
Upgrading our frontend to the latest React version should be a top priority to take advantage of performance improvements and new features.
Action Plan

How can we systematically address the prioritized debt?

We'll allocate 20% of each sprint to focus on high-priority debt items, starting with the authentication module refactor.
Every other week, we'll have a dedicated 'debt downpayment' day for making incremental improvements based on prioritization.
For the next quarter, one senior developer will be fully dedicated to leading our technical debt reduction efforts.

What is a Technical Debt Retrospective?

A Technical Debt Retrospective is a focused session where your team maps the debt in its codebase or system, agrees on what it's costing, and decides what to pay down first. It ends with a plan that has owners and dates. Technical debt is the build-up of shortcuts and less-than-ideal solutions in a codebase. Some of it comes from choosing short-term delivery over long-term quality, some from gaps in understanding, and some from refactoring that kept getting pushed back. Left alone, it makes every change slower and riskier. The board has four columns. Sources of Debt is where people name the specific problem areas: tangled modules, duplicated code, missing tests, outdated frameworks. Impact and Risks covers what that debt is doing to delivery, quality, onboarding and morale. Prioritization ranks the items by impact, effort and importance. Action Plan turns the top items into work with owners, timelines and check-ins, such as a fixed share of each sprint set aside for paydown. Run it every quarter or so, or whenever the team feels debt is slowing it down, so the debt stays visible and small.

Technical Debt Retrospective format

Sources of Debt

What areas of the codebase have accumulated technical debt?

Ask people to be specific about the kind of debt and where it lives: code smells, architectural problems, missing tests, outdated dependencies.

Impact and Risks

How is this technical debt impacting the team and product?

Talk about what the debt is actually costing: slower delivery, bugs customers see, painful onboarding, frustrated developers. Concrete costs make the case for paying it down.

Prioritization

Which areas of debt should be tackled first?

Rank the debt items by impact, effort and how much they block other work. A quick impact-versus-effort grid helps the team agree.

Action Plan

How can we systematically address the prioritized debt?

Build a concrete plan: who does what, by when, and when you'll check progress. Decide how much capacity each sprint goes to paydown.

When to use this retrospective

  • When your codebase is getting harder to maintain and extend with every change.
  • When the team spends its time fighting fires and new features keep slipping because of instability.
  • When onboarding new developers is slow because some areas are convoluted or undocumented.
  • When maintenance and bug fixes take up more time than new work.
  • When developers are frustrated by the same problem areas sprint after sprint.

Suggested icebreaker questions

  • If our codebase were a building, what would it look like and why?
  • What's the funniest or most painful run-in with technical debt you've had?

Want a warm-up your team plays, not just answers out loud? Browse free icebreakers →

Ideas and tips for your retrospective meeting

  • Keep the discussion blame-free. Every codebase builds up debt; the question is what to do about it now.
  • Make sure non-technical people in the room understand what technical debt is and why it matters to delivery.
  • Rank debt by impact, effort and importance instead of trying to fix everything at once.
  • Give the plan timelines, owners and regular check-ins so it doesn't stall.
  • Set aside a fixed share of each sprint or cycle for paying down debt.
  • Automate linting, testing and parts of code review so less new debt gets in.

Frequently asked questions

What is a technical debt retrospective?
It's a focused team meeting to find where technical debt has built up, discuss what it's costing, rank what to address first and plan how to pay it down.
When should you run a technical debt retrospective?
Run one when you notice slowing delivery, recurring bugs or a pile of shortcuts from past decisions. Many teams also run it on a regular rhythm, such as once a quarter, alongside their usual sprint retrospectives.
How do you prioritize technical debt in the retrospective?
Score each item by impact, effort and importance rather than tackling everything at once. Then turn the top items into an action plan with owners and timelines.
Who should attend a technical debt retrospective?
The developers who work in the code, plus the product owner or whoever sets priorities. If the person who decides what gets built isn't there, the plan rarely gets time in the sprint.
How much time should we spend paying down technical debt?
There's no single right number. Many teams set aside a fixed share of every sprint, which keeps paydown steady instead of waiting for a dedicated cleanup sprint that never arrives.
Ready to run this retrospective?Try this retrospective live