tech-debt-analyzer
Technical Debt Analyzer
Overview
Systematically identify, analyze, document, and track technical debt in JavaScript/TypeScript codebases. This skill provides automated analysis tools, comprehensive debt categorization frameworks, and documentation templates to maintain a technical debt register.
Core Workflow
1. Automated Analysis
Run automated scripts to detect technical debt indicators across the codebase.
Code Smell Detection
Identify code quality issues using the automated detector:
python3 scripts/detect_code_smells.py src --output markdown
The script analyzes:
- Large Files: Files exceeding 500 lines
- Complex Functions: High cyclomatic complexity (>10) or long functions (>50 lines)
- Debt Markers: TODO, FIXME, HACK, XXX, BUG comments
- Console Statements: Debug statements left in code
- Weak Typing: Use of
anytype in TypeScript - Long Parameters: Functions with >5 parameters
- Deep Nesting: Code nested >4 levels deep
- Magic Numbers: Hardcoded numeric values
Output Example:
# Technical Debt Analysis Report
**Files Analyzed:** 127
**Total Lines:** 15,432
**Total Issues:** 89
### Issues by Severity
- HIGH: 23
- MEDIUM: 41
- LOW: 25
## Large Files (12 issues)
### High Priority
- src/components/Dashboard.tsx (847 lines): File too large
- src/services/DataProcessor.ts (623 lines): File too large
...
Dependency Analysis
Examine dependencies for debt indicators:
python3 scripts/analyze_dependencies.py package.json
The script identifies:
- Deprecated Packages: Known deprecated libraries (request, tslint, etc.)
- Duplicate Functionality: Multiple packages serving same purpose
- Version Issues: Overly loose or strict version constraints
- Security Concerns: Known vulnerable packages (requires audit data)
Output Example:
# Dependency Analysis Report
**Package:** expense-tracker
**Dependencies:** 24
**Dev Dependencies:** 18
**Total Issues:** 7
## Deprecated/Outdated Packages (3)
### request [HIGH]
Using deprecated package - use axios, node-fetch, or got instead
- Current version: ^2.88.0
## Duplicate Functionality (2)
### HTTP client [MEDIUM]
Multiple packages for HTTP client: axios, node-fetch
2. Manual Code Review
Complement automated analysis with manual review for issues that require human judgment.
Review Focus Areas
Architectural Debt:
- Tight coupling between components
- Missing abstractions
- Poor separation of concerns
- Circular dependencies
Test Debt:
- Missing test coverage for critical paths
- Fragile tests coupled to implementation
- No integration or E2E tests
- Slow test execution
Documentation Debt:
- Missing README or setup instructions
- No architecture documentation
- Outdated API docs
- Missing ADRs for major decisions
Performance Debt:
- N+1 query problems
- Inefficient algorithms
- Memory leaks
- Large bundle sizes
Security Debt:
- Missing input validation
- No authentication/authorization
- SQL injection vulnerabilities
- XSS vulnerabilities
- Exposed secrets
3. Categorize and Assess
Organize findings using the standardized debt categories.
Debt Categories
Refer to references/debt_categories.md for comprehensive details on:
- Code Quality Debt: Code smells, complexity, duplication
- Architectural Debt: Structure, coupling, abstractions
- Test Debt: Coverage gaps, fragile tests
- Documentation Debt: Missing or outdated docs
- Dependency Debt: Outdated or problematic dependencies
- Performance Debt: Inefficiencies and bottlenecks
- Security Debt: Vulnerabilities and weaknesses
- Infrastructure Debt: DevOps and deployment issues
- Design Debt: UI/UX inconsistencies
Severity Assessment
Assign severity based on impact and urgency:
Critical:
- Security vulnerabilities
- Production-breaking issues
- Data loss risks
- Action: Immediate fix required
High:
- Significant performance problems
- Architectural issues blocking features
- High-risk untested code
- Action: Fix within current/next sprint
Medium:
- Code quality issues in frequently changed files
- Missing documentation
- Outdated dependencies (non-security)
- Action: Address within quarter
Low:
- Minor code smells
- Optimization opportunities
- Nice-to-have improvements
- Action: Address when convenient
Priority Matrix
| Impact / Effort | Low Effort | Medium Effort | High Effort |
|---|---|---|---|
| High Impact | Do First | Do Second | Plan & Do |
| Medium Impact | Do Second | Plan & Do | Consider |
| Low Impact | Quick Win | Consider | Avoid |
4. Document Findings
Create comprehensive documentation of technical debt.
Technical Debt Register
Use the provided template to maintain a debt register:
Template Location: assets/DEBT_REGISTER_TEMPLATE.md
Structure:
## DEBT-001: Complex UserService with 847 lines
**Category:** Code Quality
**Severity:** High
**Location:** src/services/UserService.ts
**Description:**
UserService has grown to 847 lines with multiple responsibilities
including authentication, profile management, and notification handling.
**Impact:**
- Business: Slows down feature development by 30%
- Technical: Difficult to test, high bug rate
- Risk: Changes frequently break unrelated functionality
**Proposed Solution:**
Split into separate services:
- AuthenticationService
- UserProfileService
- NotificationService
**Effort Estimate:** 3 days
**Priority Justification:** High churn area blocking new features
**Target Resolution:** Sprint 24
Register Sections:
- Active Debt Items: Current technical debt needing attention
- Resolved Items: Historical record of fixed debt
- Won't Fix Items: Debt accepted as acceptable trade-off
- Trends: Analysis by category, severity, and age
- Review Schedule: Regular maintenance plan
Architecture Decision Records (ADRs)
Document major technical decisions using ADRs to prevent future debt.
Template Location: assets/ADR_TEMPLATE.md
When to Create ADRs:
- Choosing frameworks or libraries
- Architectural changes
- Major refactoring decisions
- Technology migrations
- Performance optimization strategies
Example:
# ADR-003: Migrate from Moment.js to date-fns
**Status:** Accepted
**Date:** 2024-01-15
## Context
Moment.js is deprecated and increases bundle size by 67KB.
Team needs a modern date library with tree-shaking support.
## Decision
Migrate to date-fns for date manipulation.
## Consequences
- Positive: Reduce bundle by 60KB, modern API, active maintenance
- Negative: Migration effort, learning curve for team
- Technical Debt: None - this resolves existing dependency debt
5. Prioritize and Plan
Create actionable plans to address technical debt.
Prioritization Approach
- Critical Items: Add to current sprint immediately
- High Items: Include in sprint planning
- Medium Items: Add to quarterly roadmap
- Low Items: Opportunistic fixes during related work
Time Allocation
Recommended Allocation:
- 20% of sprint capacity for technical debt
- Alternating sprints: feature sprint / debt sprint
- Dedicated quarterly "tech health" sprint
Tracking Progress
Monitor debt reduction over time:
Metrics to Track:
- Total debt items (trend down)
- Debt by severity (critical should be 0)
- Debt age (old debt is concerning)
- Resolution rate (items fixed per sprint)
- New debt rate (items added per sprint)
6. Prevention Strategies
Implement practices to minimize new technical debt.
Code Review Checklist
Before approving PRs, verify:
- No code smells introduced (complexity, size, nesting)
- Tests added/updated with adequate coverage
- Documentation updated (README, comments, ADRs)
- No security vulnerabilities
- Performance impact considered
- No new dependencies without justification
- Follows team conventions and patterns
Automated Prevention
Linting and Formatting:
{
"rules": {
"complexity": ["error", 10],
"max-lines-per-function": ["error", 50],
"max-params": ["error", 5],
"max-depth": ["error", 4],
"no-console": "warn"
}
}
Required Checks:
- TypeScript strict mode enabled
- Minimum test coverage threshold (80%)
- No high-severity security vulnerabilities
- Bundle size limits enforced
Regular Maintenance
Weekly:
- Review and triage TODO/FIXME comments
- Update debt register with new findings
Monthly:
- Dependency updates (security patches)
- Debt register review
- Plan fixes for high-priority items
Quarterly:
- Full codebase debt analysis
- Architecture review
- Major dependency updates
- Trend analysis and strategy adjustment
Decision Tree
Follow this workflow based on the situation:
Starting a new analysis? → Run automated scripts (detect_code_smells.py, analyze_dependencies.py) → Review output for high-severity issues → Conduct manual review for areas scripts can't detect → Go to documentation step
Documenting findings? → Copy DEBT_REGISTER_TEMPLATE.md to project root → Add each debt item with full details → Categorize by type and assign severity → Estimate effort and prioritize → Go to planning step
Planning debt reduction? → Sort by priority matrix (impact/effort) → Allocate sprint capacity (20% recommended) → Create tickets for top priority items → Schedule regular reviews
Making architectural decisions? → Copy ADR_TEMPLATE.md → Document context, options, and decision → Identify any debt being incurred → Add to debt register if applicable
Preventing new debt? → Implement code review checklist → Configure automated linting/testing → Set up regular maintenance schedule → Monitor metrics over time
Tools and Scripts
detect_code_smells.py
Purpose: Automated code quality analysis
Usage:
python3 scripts/detect_code_smells.py [src-dir] [--output json|markdown]
Detects:
- Large files (>500 lines)
- Complex functions (complexity >10)
- Technical debt markers (TODO, FIXME, HACK)
- Console statements
- Weak TypeScript typing
- Long parameter lists (>5 params)
- Deep nesting (>4 levels)
- Magic numbers
Output: Markdown report or JSON for programmatic processing
analyze_dependencies.py
Purpose: Dependency health analysis
Usage:
python3 scripts/analyze_dependencies.py [package.json-path]
Detects:
- Deprecated packages (request, tslint, node-sass, etc.)
- Duplicate functionality (multiple date libs, http clients, etc.)
- Unsafe version constraints (*, latest)
- Overly strict versions (exact versions without ^ or ~)
Output: Markdown report with recommendations
Reference Documentation
debt_categories.md
Comprehensive guide to technical debt types with:
- 9 major debt categories
- Indicators and examples for each
- Impact assessment criteria
- Severity level definitions
- Measurement metrics
- Prevention strategies
Load this reference when:
- Need detailed examples of specific debt types
- Assessing severity and impact
- Understanding root causes
- Planning prevention strategies
Documentation Templates
DEBT_REGISTER_TEMPLATE.md
Complete technical debt register template including:
- Debt item structure
- Status tracking
- Impact assessment format
- Trend analysis sections
- Review schedule
Use this template to:
- Start a new debt register
- Standardize debt documentation
- Track debt across team/project
ADR_TEMPLATE.md
Architecture Decision Record template including:
- Context and problem statement
- Options considered
- Decision rationale
- Consequences (positive and negative)
- Implementation plan
Use this template to:
- Document major technical decisions
- Prevent future "why did we do this?" questions
- Track technical debt incurred by decisions
Best Practices
Analysis Best Practices
- Run analysis regularly (weekly or bi-weekly)
- Combine automated + manual review for comprehensive coverage
- Focus on high-churn areas first for maximum impact
- Involve the team in debt identification
- Be objective - all codebases have debt
Documentation Best Practices
- Be specific - include file names, line numbers, examples
- Explain impact - why does this matter?
- Propose solutions - don't just complain, suggest fixes
- Estimate effort - helps with prioritization
- Track trends - is debt increasing or decreasing?
Remediation Best Practices
- Fix critical items immediately - especially security
- Allocate consistent time - 20% of sprint capacity
- Celebrate wins - track and recognize debt reduction
- Don't let perfect be the enemy of good - incremental improvement
- Prevent new debt - easier than fixing old debt
Communication Best Practices
- Make debt visible - share metrics with stakeholders
- Educate on impact - connect debt to business outcomes
- Get buy-in - explain ROI of debt reduction
- Regular updates - include in sprint reviews
- Avoid blame - focus on improvement, not fault
Example Workflow
Complete workflow from analysis to resolution:
Week 1: Analysis
# Run automated analysis
python3 scripts/detect_code_smells.py src --output markdown > debt_analysis.md
python3 scripts/analyze_dependencies.py package.json >> debt_analysis.md
# Manual review of critical areas
# - Authentication logic
# - Payment processing
# - Data models
Week 1-2: Documentation
# Create debt register from template
cp assets/DEBT_REGISTER_TEMPLATE.md TECHNICAL_DEBT.md
# Add findings to register with:
# - Category and severity
# - Impact assessment
# - Effort estimation
# - Priority assignment
Week 2: Prioritization
# Team review session
# - Review all high/critical items
# - Discuss quick wins (high impact, low effort)
# - Allocate sprint capacity
# - Create tickets for top 5 items
Weeks 3-6: Remediation
# Sprint work
# - Fix 2-3 debt items per sprint
# - Update debt register as items resolved
# - Create ADRs for major refactoring decisions
# - Monitor metrics
Monthly: Review
# Trend analysis
# - Total debt (should decrease)
# - New debt rate (should be low)
# - Age of oldest items (should decrease)
# - Categories most affected
# Adjust strategy based on trends
Success Metrics
Track these metrics to measure debt reduction effectiveness:
Quantity Metrics:
- Total debt items (trending down)
- Debt by severity (zero critical)
- Debt items per 1000 LOC
Quality Metrics:
- Test coverage (trending up)
- Cyclomatic complexity (trending down)
- Average file/function size (stable or decreasing)
Velocity Metrics:
- Debt items resolved per sprint
- New debt items per sprint (should be low)
- Time to resolve (should decrease)
Business Metrics:
- Bug rate (should decrease)
- Feature delivery speed (should increase)
- Developer satisfaction (should increase)