Tech Debt Skill
Purpose
To transform silent code rot into managed, prioritized backlog items. This skill provides a systematic approach to identifying, quantifying, and scheduling technical debt repayment—preventing the "big bang" rewrite and enabling sustainable development velocity.
ROI Metric: Addressing debt early costs 1x. Addressing it late costs 10x. Ignoring it costs 100x (failed projects).
When to Use
- Trigger: When velocity is slowing down (features taking longer).
- Trigger: When
reflexionidentifies recurring issues. - Trigger: Before major feature work ("Clean the campsite first").
- Trigger: When code complexity metrics exceed thresholds.
- Trigger: When
pm-agentschedules a "debt sprint."
The Debt Management Protocol (The 4-Step Process)
1. Identification (Where Is The Debt?)
Scan for these debt signals:
| Signal | Detection Method | Example |
|---|---|---|
| Code Smells | Static analysis, complexity metrics | Functions >50 lines, nested conditionals >3 levels |
| Outdated Dependencies | npm outdated, cargo outdated | React 16 when 18 is available |
| Missing Tests | Coverage reports | Critical path has <50% coverage |
| Documentation Drift | Doc vs code comparison | API docs don't match implementation |
| Workarounds | Code comments (// HACK, // FIXME) | Temporary fixes that became permanent |
| Performance Issues | Profiling, metrics | Page load >3s, API latency >500ms |
| Security Vulnerabilities | npm audit, SAST scans | Known CVEs in dependencies |
2. Quantification (How Bad Is It?)
Score each debt item across three dimensions:
Impact (1-10): How much does this hurt?
- Development velocity
- System reliability
- Security posture
- User experience
Effort (1-10): How hard to fix?
- Lines of code to change
- Files affected
- Dependencies to update
- Tests to write
- Risk of breaking changes
Interest Rate (1-10): How fast is it growing?
- How often does this code change?
- How many new features touch this area?
- How many workarounds are being added?
Debt Score = Impact × Interest Rate / Effort
Higher score = Pay this debt first.
3. Categorization (What Type Of Debt?)
| Category | Description | Example | Typical Action |
|---|---|---|---|
| Design Debt | Architectural shortcuts | God class, tight coupling | Refactor with ADR |
| Code Debt | Implementation shortcuts | Copy-pasted code, long methods | Refactor incrementally |
| Test Debt | Missing or poor tests | No integration tests | Write tests before changes |
| Documentation Debt | Outdated or missing docs | API changes not documented | Update docs as you go |
| Dependency Debt | Outdated libraries | React 16 in 2026 | Scheduled upgrade |
| Infrastructure Debt | Ops shortcuts | Manual deploys | Automate via IaC |
| Skill Debt | Team knowledge gaps | No one knows GraphQL | Training + pairing |
4. Scheduling (When Do We Pay?)
Strategies:
A. Debt Sprints (20% Rule)
- Reserve 20% of every sprint for debt repayment.
- Pay highest-scored debt items first.
- Track debt burndown like feature burndown.
B. Boy Scout Rule
- "Leave the code better than you found it."
- Small improvements with every feature PR.
- Limit: 10-20% of PR scope should be cleanup.
C. Before New Features
- Clean debt in the area you're about to modify.
- Prevents building on shaky foundations.
D. Scheduled Maintenance
- Quarterly dependency updates.
- Bi-annual architecture reviews.
- Annual security audits.
Debt Item Template
# Tech Debt Item: [TITLE]
## Summary
**ID**: DEBT-XXX
**Category**: [Design/Code/Test/Doc/Dependency/Infra/Skill]
**Filed Date**: YYYY-MM-DD
**Status**: Identified | Scheduled | In Progress | Paid
## Problem Statement
[What is the debt? What are the symptoms?]
[Example: The UserService class has grown to 2000 lines and handles authentication, profile management, and preferences. Changes require touching 15+ methods.]
## Impact Assessment
| Dimension | Score (1-10) | Justification |
|:----------|:------------:|:--------------|
| **Impact** | 8 | Every user feature touches this class. Changes are slow and error-prone. |
| **Effort** | 6 | Requires splitting into 3-4 services. Estimated 3 days. |
| **Interest Rate** | 9 | We add 2-3 new user features per sprint. Debt grows fast. |
**Debt Score**: (8 × 9) / 6 = **12.0** [Pay Immediately: >10]
## Symptoms
- [ ] Feature X took 5 days instead of 2
- [ ] Bug Y introduced because of tight coupling
- [ ] Developer onboarding takes 3 days to understand UserService
- [ ] Tests are flaky due to too many responsibilities
## Proposed Solution
[What should we do to pay this debt?]
[Example: Split UserService into AuthService, ProfileService, and PreferenceService. Each <300 lines.]
### Steps
1. [ ] Step 1: Create ProfileService, move profile methods
2. [ ] Step 2: Update tests for ProfileService
3. [ ] Step 3: Create PreferenceService, move preference methods
4. [ ] Step 4: Update tests for PreferenceService
5. [ ] Step 5: Refactor UserService to AuthService only
6. [ ] Step 6: Update all imports and calls
7. [ ] Step 7: Verify all tests pass
## Risks & Mitigations
- **Risk**: Breaking changes to API → Mitigation: Maintain backward-compatible wrapper during transition
- **Risk**: Tests need major rewrite → Mitigation: Write new service tests before migration
## Payment Schedule
- **Strategy**: Before New Feature
- **Scheduled Sprint**: Sprint 12 (when we build User Preferences v2)
- **Owner**: @backend-team
- **Estimated Effort**: 3 days
## Notes
- **Related PRs**: #123, #456
- **Related ADRs**: ADR-002 (Service Boundaries)
- **Outcome (when paid)**: [To be filled]
Execution Template
Use this when running a debt audit.
## 🔍 Tech Debt Audit: [Scope]
### 1. Scan Results
| ID | Category | Location | Impact | Effort | Interest | Score | Priority |
|:---|:---------|:---------|:------:|:------:|:--------:|:-----:|:--------:|
| D-001 | Design | UserService.ts | 8 | 6 | 9 | 12.0 | HIGH |
| D-002 | Dependency | React 16.x | 6 | 4 | 7 | 10.5 | HIGH |
| D-003 | Test | auth/ | 7 | 3 | 6 | 14.0 | HIGH |
| D-004 | Code | utils/helpers.js | 4 | 2 | 3 | 6.0 | MEDIUM |
### 2. High Priority Items (Score >10)
#### D-003: Missing Auth Tests
**Problem**: Authentication flows have 23% test coverage.
**Impact**: Every auth change risks regression.
**Solution**: Write integration tests for all auth flows.
**Effort**: 2 days
**Schedule**: Next sprint (Sprint 11)
### 3. Payment Plan
**This Sprint (Sprint 10)**
- [ ] D-004: Refactor utils/helpers.js (1 day)
- Feature work: 80%
- Debt work: 20%
**Next Sprint (Sprint 11)**
- [ ] D-003: Auth test coverage (2 days)
- [ ] D-002: React upgrade planning (1 day)
- Feature work: 70%
- Debt work: 30%
**Following Sprint (Sprint 12)**
- [ ] D-001: Split UserService (3 days)
- Feature work: 60%
- Debt work: 40%
### 4. Debt Metrics
- **Total Items**: 4
- **High Priority**: 3
- **Estimated Total Effort**: 12 days
- **Debt Burndown Target**: 0 high-priority items by end of Q2
Debt Register
Maintain a central debt register:
# Technical Debt Register
## Active Debt
| ID | Title | Category | Score | Status | Owner | Target Sprint |
|:---|:------|:---------|:-----:|:-------|:------|:-------------:|
| D-001 | UserService too large | Design | 12.0 | Scheduled | Backend | 12 |
| D-002 | React 16 outdated | Dependency | 10.5 | Scheduled | Frontend | 11 |
| D-003 | Auth tests missing | Test | 14.0 | In Progress | Quality | 11 |
## Recently Paid
| ID | Title | Category | Paid Date | Effort | Outcome |
|:---|:------|:---------|:----------|:-------|:--------|
| D-000 | Legacy API wrapper | Code | 2026-01-15 | 2 days | API response time -30% |
Integration with Agents
architect: Identifies design debt, creates ADRs for major refactors.backend/frontend: Identifies code debt during implementation.quality: Identifies test debt from coverage reports.pm-agent: Schedules debt sprints, tracks debt burndown.reflexion: Surfaces recurring issues that become debt items.
Anti-Patterns (Avoid)
- ❌ "We'll fix it later" without scheduling → Becomes permanent
- ❌ Big Bang Rewrite → High risk, hard to validate
- ❌ Perfect is Enemy of Good → Don't gold-plate while debt accumulates
- ❌ Debt Amnesty → Don't ignore debt because "it's always been there"
- ❌ Paying Low-Score Debt First → Focus on high-impact, high-interest debt
