← CodeClarityLab Home
Browse by Category
+ added · updated 7d
← Back to glossary

Types of Technical Debt

quality Intermediate

Also Known As

tech debt technical debt quadrant Ward Cunningham

TL;DR

Technical debt is not uniform — deliberate vs inadvertent, reckless vs prudent quadrants define the nature of debt and the appropriate response to each type.

Explanation

Ward Cunningham's original metaphor: shipping imperfect code to meet a deadline is like taking a loan — the 'interest' is the ongoing cost of working around it. Martin Fowler's quadrant: Reckless-Deliberate ('no time for design'), Reckless-Inadvertent ('what's layering?'), Prudent-Deliberate ('ship now, fix later'), Prudent-Inadvertent ('now we know the better approach'). Reckless debt must be paid down aggressively. Deliberate-prudent debt should have a documented payback plan. Key insight: not all tech debt is bad — prudent debt accepted consciously with a plan is a legitimate business decision.

Common Misconception

All technical debt is bad and must be eliminated — prudent deliberate debt (shipping with a known compromise and a plan to fix it) is a legitimate business tool when the interest cost is understood.

Why It Matters

Treating all tech debt as equivalent prevents productive conversations about which debt is acceptable and which is costing more in interest than it saves — the quadrant helps prioritise.

Common Mistakes

  • Not documenting deliberate debt decisions — future developers don't know why a workaround exists or that it should be replaced.
  • Accumulating inadvertent reckless debt through code review gaps — this is the most damaging type and the hardest to quantify.
  • Using 'tech debt' as an excuse for poor quality — reckless inadvertent debt is not a legitimate business decision.
  • No tech debt budget in sprints — without scheduled time for paydown, interest compounds and velocity degrades.

Code Examples

✗ Vulnerable
// Reckless deliberate debt — no plan to fix:
// TODO: this is a hack, refactor someday
function calculateDiscount($order) {
    if ($order->customer_id === 42) return 0.5; // Hardcoded for VIP customer
    // ... no plan to fix, no ticket created, forgotten in 3 days
}
✓ Fixed
// Prudent deliberate debt — documented with a plan:
// TECH_DEBT: [JIRA-1234] Discount rules hardcoded until DiscountEngine is built (Q3 2026)
// Owner: @paul | Estimated cost: 2 days | Interest: manual work for each new VIP
function calculateDiscount(Order $order): float {
    // Temporary: static rules until pricing service is live
    return match($order->tier) {
        'vip'      => 0.2,
        'premium'  => 0.1,
        default    => 0.0,
    };
}

Added 15 Mar 2026
Edited 22 Mar 2026
Views 29
Rate this term
No ratings yet
🤖 AI Guestbook educational data only
| |
Last 30 days
0 pings F 1 ping S 1 ping S 0 pings M 0 pings T 0 pings W 0 pings T 0 pings F 1 ping S 0 pings S 0 pings M 0 pings T 0 pings W 4 pings T 0 pings F 1 ping S 0 pings S 0 pings M 0 pings T 0 pings W 1 ping T 1 ping F 1 ping S 0 pings S 0 pings M 0 pings T 0 pings W 0 pings T 0 pings F 0 pings S
No pings yet today
No pings yesterday
ChatGPT 10 Amazonbot 6 Perplexity 4 Google 4 Unknown AI 2 Ahrefs 1
crawler 26 crawler_json 1
DEV INTEL Tools & Severity
🟡 Medium ⚙ Fix effort: Medium
⚡ Quick Fix
Distinguish debt types to prioritise correctly: reckless/inadvertent debt (bugs) fix immediately; reckless/deliberate (shortcuts) pay down next sprint; prudent/deliberate (ship first, improve later) schedule explicitly
📦 Applies To
any web cli
🔗 Prerequisites
🔍 Detection Hints
All technical debt treated equally regardless of origin; no explicit debt tracking or paydown schedule; architecture decisions made under time pressure with no follow-up
Auto-detectable: ✗ No sonarqube jira
⚠ Related Problems
🤖 AI Agent
Confidence: Low False Positives: High ✗ Manual fix Fix: High Context: File

✓ schema.org compliant