308 lines
9.3 KiB
Markdown
308 lines
9.3 KiB
Markdown
# Tech Debt Tracker
|
|
|
|
A comprehensive technical debt management system that helps engineering teams identify, prioritize, and track technical debt across codebases. This skill provides three interconnected tools for a complete debt management workflow.
|
|
|
|
## Overview
|
|
|
|
Technical debt is like financial debt - it compounds over time and reduces team velocity if not managed systematically. This skill provides:
|
|
|
|
- **Automated Debt Detection**: Scan codebases to identify various types of technical debt
|
|
- **Intelligent Prioritization**: Use proven frameworks to prioritize debt based on business impact
|
|
- **Trend Analysis**: Track debt evolution over time with executive-friendly dashboards
|
|
|
|
## Tools
|
|
|
|
### 1. Debt Scanner (`debt_scanner.py`)
|
|
|
|
Scans codebases to automatically detect technical debt signals using AST parsing for Python and regex patterns for other languages.
|
|
|
|
**Features:**
|
|
- Detects 15+ types of technical debt (large functions, complexity, duplicates, security issues, etc.)
|
|
- Multi-language support (Python, JavaScript, Java, C#, Go, etc.)
|
|
- Configurable thresholds and rules
|
|
- Dual output: JSON for tools, human-readable for reports
|
|
|
|
**Usage:**
|
|
```bash
|
|
# Basic scan
|
|
python scripts/debt_scanner.py /path/to/codebase
|
|
|
|
# With custom config and output
|
|
python scripts/debt_scanner.py /path/to/codebase --config config.json --output report.json
|
|
|
|
# Different output formats
|
|
python scripts/debt_scanner.py /path/to/codebase --format both
|
|
```
|
|
|
|
### 2. Debt Prioritizer (`debt_prioritizer.py`)
|
|
|
|
Takes debt inventory and creates prioritized backlog using proven prioritization frameworks.
|
|
|
|
**Features:**
|
|
- Multiple prioritization frameworks (Cost of Delay, WSJF, RICE)
|
|
- Business impact analysis with ROI calculations
|
|
- Sprint allocation recommendations
|
|
- Effort estimation with risk adjustment
|
|
- Executive and engineering reports
|
|
|
|
**Usage:**
|
|
```bash
|
|
# Basic prioritization
|
|
python scripts/debt_prioritizer.py debt_inventory.json
|
|
|
|
# Custom framework and team size
|
|
python scripts/debt_prioritizer.py inventory.json --framework wsjf --team-size 8
|
|
|
|
# Sprint capacity planning
|
|
python scripts/debt_prioritizer.py inventory.json --sprint-capacity 80 --output backlog.json
|
|
```
|
|
|
|
### 3. Debt Dashboard (`debt_dashboard.py`)
|
|
|
|
Analyzes historical debt data to provide trend analysis, health scoring, and executive reporting.
|
|
|
|
**Features:**
|
|
- Health score trending over time
|
|
- Debt velocity analysis (accumulation vs resolution)
|
|
- Executive summary with business impact
|
|
- Forecasting based on current trends
|
|
- Strategic recommendations
|
|
|
|
**Usage:**
|
|
```bash
|
|
# Single directory of scans
|
|
python scripts/debt_dashboard.py --input-dir ./debt_scans/
|
|
|
|
# Multiple specific files
|
|
python scripts/debt_dashboard.py scan1.json scan2.json scan3.json
|
|
|
|
# Custom analysis period
|
|
python scripts/debt_dashboard.py data.json --period quarterly --team-size 6
|
|
```
|
|
|
|
## Quick Start
|
|
|
|
### 1. Scan Your Codebase
|
|
|
|
```bash
|
|
# Scan your project
|
|
python scripts/debt_scanner.py ~/my-project --output initial_scan.json
|
|
|
|
# Review the results
|
|
python scripts/debt_scanner.py ~/my-project --format text
|
|
```
|
|
|
|
### 2. Prioritize Your Debt
|
|
|
|
```bash
|
|
# Create prioritized backlog
|
|
python scripts/debt_prioritizer.py initial_scan.json --output backlog.json
|
|
|
|
# View sprint recommendations
|
|
python scripts/debt_prioritizer.py initial_scan.json --format text
|
|
```
|
|
|
|
### 3. Track Over Time
|
|
|
|
```bash
|
|
# After multiple scans, analyze trends
|
|
python scripts/debt_dashboard.py scan1.json scan2.json scan3.json --output dashboard.json
|
|
|
|
# Generate executive report
|
|
python scripts/debt_dashboard.py --input-dir ./scans/ --format text
|
|
```
|
|
|
|
## Configuration
|
|
|
|
### Scanner Configuration
|
|
|
|
Create `config.json` to customize detection rules:
|
|
|
|
```json
|
|
{
|
|
"max_function_length": 50,
|
|
"max_complexity": 10,
|
|
"max_nesting_depth": 4,
|
|
"ignore_patterns": ["*.test.js", "build/", "node_modules/"],
|
|
"file_extensions": {
|
|
"python": [".py"],
|
|
"javascript": [".js", ".jsx", ".ts", ".tsx"]
|
|
}
|
|
}
|
|
```
|
|
|
|
### Team Configuration
|
|
|
|
Adjust tools for your team size and sprint capacity:
|
|
|
|
```bash
|
|
# 8-person team with 2-week sprints
|
|
python scripts/debt_prioritizer.py inventory.json --team-size 8 --sprint-capacity 160
|
|
```
|
|
|
|
## Sample Data
|
|
|
|
The `assets/` directory contains sample data for testing:
|
|
|
|
- `sample_codebase/`: Example codebase with various debt types
|
|
- `sample_debt_inventory.json`: Example debt inventory
|
|
- `historical_debt_*.json`: Sample historical data for trending
|
|
|
|
Try the tools on sample data:
|
|
|
|
```bash
|
|
# Test scanner
|
|
python scripts/debt_scanner.py assets/sample_codebase
|
|
|
|
# Test prioritizer
|
|
python scripts/debt_prioritizer.py assets/sample_debt_inventory.json
|
|
|
|
# Test dashboard
|
|
python scripts/debt_dashboard.py assets/historical_debt_*.json
|
|
```
|
|
|
|
## Understanding the Output
|
|
|
|
### Health Score (0-100)
|
|
|
|
- **85-100**: Excellent - Minimal debt, sustainable practices
|
|
- **70-84**: Good - Manageable debt level, some attention needed
|
|
- **55-69**: Fair - Debt accumulating, requires focused effort
|
|
- **40-54**: Poor - High debt level, impacts productivity
|
|
- **0-39**: Critical - Immediate action required
|
|
|
|
### Priority Levels
|
|
|
|
- **Critical**: Security issues, blocking problems (fix immediately)
|
|
- **High**: Significant impact on quality or velocity (next sprint)
|
|
- **Medium**: Moderate impact, plan for upcoming work (next quarter)
|
|
- **Low**: Minor issues, fix opportunistically (when convenient)
|
|
|
|
### Debt Categories
|
|
|
|
- **Code Quality**: Large functions, complexity, duplicates
|
|
- **Architecture**: Design issues, coupling problems
|
|
- **Security**: Vulnerabilities, hardcoded secrets
|
|
- **Testing**: Missing tests, poor coverage
|
|
- **Documentation**: Missing or outdated docs
|
|
- **Dependencies**: Outdated packages, license issues
|
|
|
|
## Integration with Development Workflow
|
|
|
|
### CI/CD Integration
|
|
|
|
Add debt scanning to your CI pipeline:
|
|
|
|
```bash
|
|
# In your CI script
|
|
python scripts/debt_scanner.py . --output ci_scan.json
|
|
# Compare with baseline, fail build if critical issues found
|
|
```
|
|
|
|
### Sprint Planning
|
|
|
|
1. **Weekly**: Run scanner to detect new debt
|
|
2. **Sprint Planning**: Use prioritizer for debt story sizing
|
|
3. **Monthly**: Generate dashboard for trend analysis
|
|
4. **Quarterly**: Executive review with strategic recommendations
|
|
|
|
### Code Review Integration
|
|
|
|
Use scanner output to focus code reviews:
|
|
|
|
```bash
|
|
# Scan PR branch
|
|
python scripts/debt_scanner.py . --output pr_scan.json
|
|
|
|
# Compare with main branch baseline
|
|
# Focus review on areas with new debt
|
|
```
|
|
|
|
## Best Practices
|
|
|
|
### Debt Management Strategy
|
|
|
|
1. **Prevention**: Use scanner in CI to catch debt early
|
|
2. **Prioritization**: Always use business impact for priority
|
|
3. **Allocation**: Reserve 15-20% sprint capacity for debt work
|
|
4. **Measurement**: Track health score and velocity impact
|
|
5. **Communication**: Use dashboard reports for stakeholders
|
|
|
|
### Common Pitfalls to Avoid
|
|
|
|
- **Analysis Paralysis**: Don't spend too long on perfect prioritization
|
|
- **Technical Focus Only**: Always consider business impact
|
|
- **Inconsistent Application**: Ensure all teams use same approach
|
|
- **Ignoring Trends**: Pay attention to debt accumulation rate
|
|
- **All-or-Nothing**: Incremental debt reduction is better than none
|
|
|
|
### Success Metrics
|
|
|
|
- **Health Score Improvement**: Target 5+ point quarterly improvement
|
|
- **Velocity Impact**: Keep debt velocity impact below 20%
|
|
- **Team Satisfaction**: Survey developers on code quality satisfaction
|
|
- **Incident Reduction**: Track correlation between debt and production issues
|
|
|
|
## Advanced Usage
|
|
|
|
### Custom Debt Types
|
|
|
|
Extend the scanner for organization-specific debt patterns:
|
|
|
|
1. Add patterns to `config.json`
|
|
2. Modify detection logic in scanner
|
|
3. Update categorization in prioritizer
|
|
|
|
### Integration with External Tools
|
|
|
|
- **Jira/GitHub**: Import debt items as tickets
|
|
- **SonarQube**: Combine with static analysis metrics
|
|
- **APM Tools**: Correlate debt with performance metrics
|
|
- **Chat Systems**: Send debt alerts to team channels
|
|
|
|
### Automated Reporting
|
|
|
|
Set up automated debt reporting:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Daily debt monitoring script
|
|
python scripts/debt_scanner.py . --output daily_scan.json
|
|
python scripts/debt_dashboard.py daily_scan.json --output daily_report.json
|
|
# Send report to stakeholders
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### Common Issues
|
|
|
|
**Scanner not finding files**: Check `ignore_patterns` in config
|
|
**Prioritizer giving unexpected results**: Verify business impact scoring
|
|
**Dashboard shows flat trends**: Need more historical data points
|
|
|
|
### Performance Tips
|
|
|
|
- Use `.gitignore` patterns to exclude irrelevant files
|
|
- Limit scan depth for large monorepos
|
|
- Run dashboard analysis on subset for faster iteration
|
|
|
|
### Getting Help
|
|
|
|
1. Check the `references/` directory for detailed documentation
|
|
2. Review sample data and expected outputs
|
|
3. Examine the tool source code for customization ideas
|
|
|
|
## Contributing
|
|
|
|
This skill is designed to be customized for your organization's needs:
|
|
|
|
1. **Add Detection Rules**: Extend scanner patterns for your tech stack
|
|
2. **Custom Prioritization**: Modify scoring algorithms for your business context
|
|
3. **New Report Formats**: Add output formats for your stakeholders
|
|
4. **Integration Hooks**: Add connectors to your existing tools
|
|
|
|
The codebase is designed with extensibility in mind - each tool is modular and can be enhanced independently.
|
|
|
|
---
|
|
|
|
**Remember**: Technical debt management is a journey, not a destination. These tools help you make informed decisions about balancing new feature development with technical excellence. Start small, measure impact, and iterate based on what works for your team. |