Markdown Editor

Technical Debt Register Template

Debt register with Fowler quadrant taxonomy, interest, principal, risk-weighted priority score, triage, budget and reporting

Cara menggunakan: Use to record and prioritise technical debt for a product or team. Agree the definitions and capacity budget first, then estimate interest as well as principal for each item. The main pitfall is a register without a repayment budget, which becomes a list nobody acts on.

Pratinjau

Technical Debt Register: [Product, system or team]

Register for recording, prioritising and paying down technical debt: a shared taxonomy (including Martin Fowler's technical debt quadrant), the register itself with interest, principal and a priority score, the triage process, the capacity budget for repayment and how progress is reported. Based on common engineering practice. Replace every [bracketed] value and every row marked Example.

FieldValue
Register ID[TDR-PRODUCT]
Scope[Systems, repositories or services covered]
Owner[@tech-lead]
Contributors[Teams]
Review cadence[e.g. Every two weeks in backlog refinement; quarterly summary]
Last reviewedYYYY-MM-DD
Related[Architecture description], [Fitness functions], [Risk register]

1. Purpose and definitions

Technical debt is any design or implementation choice that makes future change slower, riskier or more expensive than it needs to be, compared with a reasonable alternative. Defects with user-visible impact go to the bug tracker; missing features go to the product backlog. A debt entry may reference either when they are a symptom.

TermMeaning in this register
PrincipalEffort to remove the debt, in engineer-hours
InterestRecurring extra cost the debt causes, in engineer-hours per month (slower changes, incidents, manual work, workarounds)
Risk factorMultiplier from 1 to 3 for security, compliance or outage exposure not captured by interest
Payoff horizonPeriod over which interest is counted when prioritising; Example: 12 months

2. Debt taxonomy

2.1 Technical debt quadrant

Martin Fowler's quadrant classifies debt by intent (deliberate or inadvertent) and by judgement (prudent or reckless). The descriptions below are written for this template.

DeliberateInadvertent
RecklessThe team knowingly skipped good practice with no plan to repay; example: no tests to hit a demo date and no follow-up ticketThe team did not know a better practice existed; example: hand-built SQL strings because nobody knew about parameterised queries
PrudentThe team chose a shortcut consciously, recorded it and planned repayment; example: single-region launch with a ticket to add a second region before scale-upThe team learned later what the design should have been; example: the domain model only became clear after a year in production

Use the quadrant in retrospectives: reckless entries point to process or skills gaps; prudent-inadvertent entries are a normal result of learning.

2.2 Categories

CodeCategoryTypical examples
ARCArchitectureTight coupling between services, shared database, missing boundaries
CODCodeDuplication, very large classes, dead code, poor naming
TSTTestMissing or flaky tests, slow suites, no contract tests
INFInfrastructureManual provisioning, unpatched base images, snowflake servers
DEPDependenciesEnd-of-life frameworks, unmaintained libraries, pinned old versions
DOCDocumentationMissing runbooks, outdated diagrams, undocumented APIs
SECSecurityHard-coded secrets, weak crypto, missing audit logging
DATDataUnclear ownership, missing constraints, inconsistent schemas

3. Register

3.1 Priority score

Priority compares the interest paid over the payoff horizon with the cost of fixing, adjusted for risk:

P=R×I×HCP = R \times \frac{I \times H}{C}

where II is interest in engineer-hours per month, HH is the payoff horizon in months, CC is principal in engineer-hours and RR is the risk factor (1 to 3). P>1P > 1 means fixing the item is expected to pay back within the horizon. Rank by PP, then by due dates imposed by compliance or end-of-life events.

Example for TD-001 with H=12H = 12: P=1.5×16×1280=1.5×2.4=3.6P = 1.5 \times \frac{16 \times 12}{80} = 1.5 \times 2.4 = 3.6.

3.2 Register table

IDDescriptionLocationQuadrant / categoryImpactInterest II (h/month)Principal CC (h)RRPriority PPOwnerStatus
TD-001Example: Order and invoice services share one database schema; every schema change needs both teamsorders-db, services order-svc, invoice-svcPrudent-inadvertent / ARCReleases blocked twice a month16801.53.6[@team-orders]In progress
TD-002Example: Reporting module duplicates tax calculation logicreporting/tax.pyReckless-inadvertent / CODDivergent totals found twice a year41201.00.4[@team-finance]Accepted (not now)
TD-003Example: Payment SDK version reaches end of support in 5 monthspayments/Prudent-deliberate / DEPNo security patches after end of support10402.06.0[@team-payments]Planned for sprint 42
TD-004Example: Database password in a deployment scriptdeploy/legacy.shReckless-deliberate / SECCredential exposure2163.04.5[@platform]Open
[TD-nnn][What and why it hurts][Path, service, component][Quadrant / code][Effect][h][h][1-3][P][@name][Open / Planned / In progress / Accepted / Closed]

Arithmetic check for the examples: TD-002 =1.0×48/120=0.4= 1.0 \times 48 / 120 = 0.4; TD-003 =2.0×120/40=6.0= 2.0 \times 120 / 40 = 6.0; TD-004 =3.0×24/16=4.5= 3.0 \times 24 / 16 = 4.5.

3.3 Status definitions

StatusMeaning
OpenRecorded and estimated, not yet triaged
PlannedAccepted for repayment in a named iteration or quarter
In progressWork has started; link the ticket
AcceptedConsciously left in place; review date set; reason recorded
ClosedRepaid or the affected code was retired; date and evidence recorded

4. Triage process

  1. Capture. Anyone adds an entry with a description, location and rough impact. Shortcuts taken deliberately during delivery are logged in the same pull request that introduces them.
  2. Estimate. The owning team estimates interest and principal at the next refinement session. Use ranges when unsure and record the midpoint.
  3. Score. Compute PP and set the risk factor. Security and compliance items with R=3R = 3 are escalated to [@security-lead].
  4. Decide. At the review, each item becomes Planned, Accepted with a review date, or is merged with another entry.
  5. Verify. When closed, record the evidence (merged change, metric improvement, removed component).
TriggerAction
New item with R=3R = 3Review within 5 working days
Item with P≥3P \geq 3 open for more than one quarterEscalate to engineering manager
End-of-life date within 6 monthsPlan regardless of PP

5. Budget allocation

ItemValue
Capacity share for debt repaymentExample: 20% of each iteration's planned capacity
Capacity this quarterExample: 6 engineers x 60 days x 6 h x 20% = 432 engineer-hours
Allocation ruleExample: Highest PP first; at least one item with R≥2R \geq 2 per iteration
ExceptionsExample: Budget may be lent to a release for at most one iteration and is repaid in the next
Approver for changes[@engineering-manager]

Planned use this quarter: [list the items and hours]. Example: TD-003 (40 h), TD-004 (16 h), TD-001 (80 h), leaving 296 h for items raised during the quarter.

6. Reporting

MetricDefinitionLast quarterThis quarterTrend
Open itemsCount of Open, Planned and In progressExample: 3429Improving
Total monthly interestSum of II over open items142 h118 hImproving
Items added / closedNew entries versus closures9 / 67 / 12Improving
Budget usedHours spent on repayment / hours allocated380 / 432410 / 432Stable
High-risk items openCount with R=3R = 331Improving
[Metric][Definition][ ][ ][ ]

Narrative: [Two or three sentences for leadership on the effect of repayment.] Example: Splitting the shared order database (TD-001) removed the most frequent release blocker; lead time for order changes dropped from 6 to 3 days.

Standard and licence note

Based on common engineering practice for technical debt management. The technical debt quadrant is a concept by Martin Fowler ("TechnicalDebtQuadrant", martinfowler.com, 2009), described here in original words. Original text written for this collection; examples are illustrative. Template licence: MIT.

Templat terkait