{
  "slug": "technical-debt-interest",
  "title": "Technical Debt Interest Calculator",
  "heading": "Technical Debt Interest Cost Calculator",
  "category": "financial",
  "url": "https://www.revenuelab.fyi/toolbox/technical-debt-interest",
  "summary": "Model tech debt like a loan — see the recurring cost of not fixing it.",
  "description": "Technical debt behaves like financial debt in a specific, useful way: it has a principal (the one-time cost to fix it properly) and an ongoing interest payment (the recurring extra time every future change on that code costs because of the shortcut), and left unpaid, some forms of debt compound as more code gets built on top of the fragile foundation. This calculator estimates monthly interest as the extra hours per change caused by the debt, multiplied by change frequency and developer hourly rate, and compares cumulative interest paid over a time horizon against the one-time principal cost of fixing it now, showing the break-even point where paying down the debt becomes cheaper than continuing to service it. This reframes a common, often-losing argument ('we should refactor this') into a financial comparison engineering leads can bring to a roadmap prioritization conversation with a real payback period attached.",
  "formula": "Monthly interest = changes per month × extra hours per change × hourly rate; break-even month = principal ÷ monthly interest.",
  "dateModified": "2026-09-30",
  "run_url": "https://www.revenuelab.fyi/api/public/calc?tool=technical-debt-interest",
  "inputs": [
    {
      "id": "principalHours",
      "label": "Hours to fix properly (principal)",
      "kind": "number",
      "hint": null,
      "default": 80,
      "unit": null,
      "min": 1,
      "max": null
    },
    {
      "id": "changesPerMonth",
      "label": "Changes touching this code per month",
      "kind": "number",
      "hint": null,
      "default": 6,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "extraHoursPerChange",
      "label": "Extra hours per change due to debt",
      "kind": "number",
      "hint": null,
      "default": 3,
      "unit": null,
      "min": 0,
      "max": null
    },
    {
      "id": "hourlyRate",
      "label": "Loaded developer hourly rate",
      "kind": "number",
      "hint": null,
      "default": 90,
      "unit": "$",
      "min": 0,
      "max": null
    },
    {
      "id": "compoundPct",
      "label": "Monthly compounding (debt worsening)",
      "kind": "number",
      "hint": null,
      "default": 1,
      "unit": "%",
      "min": 0,
      "max": 20
    },
    {
      "id": "horizonMonths",
      "label": "Time horizon to evaluate",
      "kind": "number",
      "hint": null,
      "default": 24,
      "unit": "months",
      "min": 1,
      "max": null
    }
  ],
  "outputs": [
    {
      "id": "cumulative",
      "label": "Total interest paid over horizon",
      "format": "currency",
      "hint": null,
      "primary": true
    },
    {
      "id": "breakEvenMonth",
      "label": "Break-even month (fix pays for itself)",
      "format": "number",
      "hint": null,
      "primary": false
    },
    {
      "id": "principal",
      "label": "One-time cost to fix now",
      "format": "currency",
      "hint": null,
      "primary": false
    },
    {
      "id": "currentMonthlyInterest",
      "label": "Current monthly interest cost",
      "format": "currency",
      "hint": null,
      "primary": false
    }
  ],
  "worked_example": {
    "inputs": [
      "Hours to fix properly (principal): 80",
      "Changes touching this code per month: 6",
      "Extra hours per change due to debt: 3",
      "Loaded developer hourly rate: 90 $",
      "Monthly compounding (debt worsening): 1 %",
      "Time horizon to evaluate: 24 months"
    ],
    "outputs": [
      "Total interest paid over horizon: $43,697",
      "Break-even month (fix pays for itself): 5",
      "One-time cost to fix now: $7,200",
      "Current monthly interest cost: $1,620"
    ]
  },
  "how_to": {
    "title": "How to use this",
    "steps": [
      "Enter hours to fix properly (principal).",
      "Enter changes touching this code per month.",
      "Enter extra hours per change due to debt.",
      "Enter loaded developer hourly rate ($).",
      "Enter monthly compounding (debt worsening) (%).",
      "Enter time horizon to evaluate (months).",
      "Read your total interest paid over horizon on the right — it updates as you type.",
      "Hit Share to keep the scenario or send it to someone."
    ]
  },
  "scenarios": [
    {
      "name": "Conservative",
      "description": "Lower-end numbers — what if things land soft?",
      "values": {
        "principalHours": 50,
        "changesPerMonth": 4,
        "extraHoursPerChange": 1.7999999999999998,
        "hourlyRate": 55,
        "compoundPct": 0.6,
        "horizonMonths": 14
      }
    },
    {
      "name": "Typical",
      "description": "Defaults — the most common real-world setup.",
      "values": {
        "principalHours": 80,
        "changesPerMonth": 6,
        "extraHoursPerChange": 3,
        "hourlyRate": 90,
        "compoundPct": 1,
        "horizonMonths": 24
      }
    },
    {
      "name": "Ambitious",
      "description": "Higher-end numbers — what if things really pop?",
      "values": {
        "principalHours": 130,
        "changesPerMonth": 10,
        "extraHoursPerChange": 4.800000000000001,
        "hourlyRate": 145,
        "compoundPct": 1.6,
        "horizonMonths": 38
      }
    }
  ],
  "limitations": [
    "Results are estimates before tax, fees, and inflation unless an input explicitly covers them.",
    "Rates are treated as fixed for the whole period — variable-rate products will drift from this projection.",
    "This is educational maths, not financial advice. Check anything contractual with the lender or your accountant."
  ],
  "faq": [
    {
      "q": "How do I estimate 'extra hours per change' honestly?",
      "a": "Look at your last 5-10 pull requests or tickets that touched the debt-laden code and compare actual time spent against a comparable change in clean code elsewhere in the codebase — the delta is your extra-hours estimate. If you don't have a clean comparison, ask the engineers who did the work to estimate the overhead directly; their gut estimate is usually more accurate than an outside guess."
    },
    {
      "q": "What kinds of technical debt actually compound versus staying flat?",
      "a": "Debt in shared, frequently-touched code (a core data model, an auth system, a widely-imported utility) compounds because every new feature built on top inherits and often worsens the problem. Debt in isolated, rarely-touched code (an old admin tool nobody extends) mostly stays flat — set the compounding input near zero for isolated debt and use a higher value only for debt in actively-growing shared code."
    },
    {
      "q": "If break-even is past my time horizon, does that mean don't fix it?",
      "a": "Not necessarily — a break-even beyond the horizon means the fix doesn't pay for itself within that window on pure hours-saved math, but it ignores harder-to-quantify factors like bug risk, onboarding friction for new engineers, and morale cost of working around known-bad code. Use the calculator as one input to prioritization, not the sole deciding factor, especially for debt with high failure-risk consequences."
    }
  ],
  "related": [
    "https://www.revenuelab.fyi/toolbox/developer-build-minute-cost",
    "https://www.revenuelab.fyi/toolbox/cicd-minutes-cost",
    "https://www.revenuelab.fyi/toolbox/mttr-impact-calculator"
  ],
  "license": "CC-BY-4.0",
  "citation": "RevenueLab — Technical Debt Interest Calculator (https://www.revenuelab.fyi/toolbox/technical-debt-interest)"
}