Technical Debt Checklist
Identify, prioritize, and systematically reduce technical debt to improve development velocity and code maintainability.
Checklist: Technical Debt (engineering)
Technical debt slows development, increases bug rates, and makes onboarding new engineers painful. This checklist provides a structured approach to assessing and prioritizing debt reduction so you can improve velocity without stopping feature work.
Checklist Items
- Audit test coverage and quality [critical]: Measure test coverage and identify critical paths with no tests. Prioritize testing for high-risk code.
- Identify and document known code smells [critical]: Catalog long methods, god classes, duplicated logic, and other code smells with refactoring priority.
- Update outdated dependencies [critical]: Inventory all dependencies, identify outdated or EOL packages, and create an upgrade plan.
- Remove dead code and unused features [important]: Identify code paths, feature flags, and database tables that are no longer used and remove them.
- Standardize coding patterns [important]: Document and enforce consistent patterns for error handling, logging, data access, and API design.
- Improve documentation coverage [important]: Document architecture decisions, API contracts, deployment procedures, and onboarding guides.
- Refactor database schema issues [important]: Fix missing indexes, denormalization problems, inconsistent naming, and unused columns.
- Set up linting and formatting enforcement [recommended]: Configure and enforce linting rules, formatting, and type checking in CI to prevent new debt.
- Create architectural decision records [recommended]: Document past and future architecture decisions with context and rationale for team knowledge.
- Allocate recurring debt reduction time [recommended]: Dedicate 15-20% of each sprint to debt reduction. Make it a standing commitment, not a when-we-have-time activity.
Common Mistakes
- Big-bang rewrites: Incremental refactoring is safer and delivers value continuously. Large rewrites often fail or take twice as long as estimated.
- No measurement of debt impact: Track metrics like deployment frequency, bug rate, and onboarding time to justify debt reduction investment.
- Fixing debt without preventing new debt: Add linting, code review checklists, and CI checks to prevent the same types of debt from recurring.
Frequently Asked Questions
- How do I convince leadership to invest in tech debt?
- Quantify the impact: slower feature delivery, higher bug rates, longer onboarding. Frame debt reduction as a velocity investment, not cleanup work.
- How much time should we spend on tech debt?
- Allocate 15-20% of sprint capacity consistently. This prevents debt from compounding without stopping feature work.
- Should I track tech debt as tickets?
- Yes. Track debt items in your issue tracker with severity labels. This makes debt visible and prioritizable alongside feature work.