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

  1. Audit test coverage and quality [critical]: Measure test coverage and identify critical paths with no tests. Prioritize testing for high-risk code.
  2. Identify and document known code smells [critical]: Catalog long methods, god classes, duplicated logic, and other code smells with refactoring priority.
  3. Update outdated dependencies [critical]: Inventory all dependencies, identify outdated or EOL packages, and create an upgrade plan.
  4. Remove dead code and unused features [important]: Identify code paths, feature flags, and database tables that are no longer used and remove them.
  5. Standardize coding patterns [important]: Document and enforce consistent patterns for error handling, logging, data access, and API design.
  6. Improve documentation coverage [important]: Document architecture decisions, API contracts, deployment procedures, and onboarding guides.
  7. Refactor database schema issues [important]: Fix missing indexes, denormalization problems, inconsistent naming, and unused columns.
  8. Set up linting and formatting enforcement [recommended]: Configure and enforce linting rules, formatting, and type checking in CI to prevent new debt.
  9. Create architectural decision records [recommended]: Document past and future architecture decisions with context and rationale for team knowledge.
  10. 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.