Problem
Debt lists grow without ranking, and the loudest voice wins. Product teams see debt as unquantified cost, so it loses against features. Meanwhile some debt silently slows delivery or threatens reliability and security.
Decide which technical debt to repay first by weighing business impact, risk, and cost of delay against remediation effort.
Debt lists grow without ranking, and the loudest voice wins. Product teams see debt as unquantified cost, so it loses against features. Meanwhile some debt silently slows delivery or threatens reliability and security.
Not all debt deserves repayment. Some is cheap to carry, some compounds. The framework gives engineers and product partners a shared method to separate the two and to spend limited capacity where it pays back most.
Avoid the term debt for deliberate, accepted tradeoffs that have an agreed review date. Distinguish prudent debt, taken knowingly to meet a deadline, from reckless debt that came from neglect, because the response differs: schedule the first, and fix the process behind the second.
Each debt item is expressed as interest and principal. Interest is the ongoing cost: slower changes, extra incidents, manual work, or security exposure. Principal is the effort to fix. Priority is roughly interest times affected scope, divided by principal, adjusted for risk. Items are also tagged by type, such as code, architecture, test, infrastructure, dependency, or documentation, and by whether they sit on a frequently changed path. Hot-path debt in areas that change weekly outranks equivalent debt in dormant code.
Lead time for change in hot areas, change failure rate, recurring incident count by cause, share of capacity spent on repayment, register size and age, and measured reduction in interest after each repayment.
Present these metrics alongside product metrics in quarterly planning. When repayment is shown to reduce incidents or cycle time, product partners treat it as an investment instead of a concession.
id: TD-0187
title: Hand-rolled retry logic duplicated in 14 services
type: architecture
affected: [checkout, billing, notifications]
interest:
incidents_per_quarter: 3
engineer_hours_per_month: 18
security_exposure: low
principal_weeks: 4
change_frequency: weekly
priority_score: 8.1
plan: Replace with shared client library, migrate three services per sprint
done_when: No custom retry loops remain; incident class closed