Command
okulo debt
Separate active vs inactive debt and estimate hours (and money) you are losing.
planningcost
When to use it
You need a prioritization story for leads/PMs: what still costs time every month.
Usage
okulo debt [repo] [options]
Options
| Option | Default | Description |
|---|---|---|
--category | all | active-debt, inactive-debt, healthy-active, healthy-stable |
--hourly-rate | — | Enables money estimates |
--currency | USD | Currency label |
--hours-per-change | 2 | Hours for a typical change in healthy code |
--hours-per-bugfix | 4 | Hours for a typical bugfix in healthy code |
--unhealthy-below | 8 | Health threshold treated as debt |
Examples
Active debt with cost
okulo debt --category active-debt --hourly-rate 60 --currency EUR Scope to one product area
okulo debt --components backend --hourly-rate 80 --hours-per-change 3 JSON for a dashboard
okulo debt -f json -o debt.json
Sample output
Illustrative terminal output (column layout matches the real CLI):
Technical debt health × change frequency over 6 months
file category health revs overhead waste/mo 12m forecast refactor payback
──────────────────────── ──────────── ────── ──── ──────── ──────── ──────────── ──────── ───────
src/billing/invoice.py active-debt 3.1 48 +96% 14.2h 170h 21h 1.5m
web/checkout/Cart.tsx active-debt 4.8 31 +58% 7.1h 85h 13h 1.8m
legacy/report_v1.py inactive-debt 2.9 1 +102% 0.2h 2.4h 18h 90m
lib/auth/session.ts healthy-active 7.4 14 +8% 0.8h 9.6h 5h -
2 active debt · 1 inactive debt · Estimated waste: 21.5h/month ≈ 1,290 EUR
Active debt causes 94% of the waste; refactoring all active debt ≈ 34h
How to read it
- active-debt — unhealthy and still changing: interest you pay every month (waste/mo).
- inactive-debt — ugly but quiet. High payback months means refactoring rarely pays unless you must touch it.
- refactor vs 12m forecast — rough “cost to fix now” vs “cost if you do nothing”.
- Plan sprints from active-debt with short payback; do not start with inactive legacy unless strategy demands it.
Tips
- Proportions between files matter more than perfect hourly calibration.
- Inactive debt is usually not the next sprint — hotspots in active-debt are.