Technical Debt Prioritization | Impact-Effort Framework
Prioritize technical debt by impact, effort, and frequency. GitScrum tracks debt in backlogs with priority scoring to focus on what hurts productivity most.
7 min read
Not all technical debt is equal. Some debt blocks progress, some just slows things down, and some rarely matters. Good prioritization focuses effort where it creates the most value. This guide covers practical approaches to prioritizing tech debt.
Prioritization Matrix
| Impact | Effort | Priority |
|---|---|---|
| High | Low | Do First |
| High | High | Plan Carefully |
| Low | Low | Quick Wins |
| Low | High | Likely Never |
Categorizing Debt
Types of Tech Debt
TECHNICAL DEBT CATEGORIES
βββββββββββββββββββββββββ
BY TYPE:
βββββββββββββββββββββββββββββββββββββ
Architecture debt:
βββ System design problems
βββ Scalability issues
βββ Integration complexity
βββ Hard to refactor
βββ High impact, high effort
Code debt:
βββ Poor code quality
βββ Missing tests
βββ Duplicated code
βββ Unclear naming
βββ Medium impact, varies effort
Infrastructure debt:
βββ Outdated dependencies
βββ Legacy tooling
βββ Manual processes
βββ Security concerns
βββ Risk-based priority
Documentation debt:
βββ Missing docs
βββ Outdated information
βββ Tribal knowledge
βββ Onboarding pain
βββ Often overlooked
BY IMPACT:
βββββββββββββββββββββββββββββββββββββ
Blocking:
βββ Can't ship features
βββ Major bugs
βββ Security vulnerabilities
βββ Must address now
Slowing:
βββ Takes longer to develop
βββ Frequent bugs in area
βββ Hard to understand
βββ Address strategically
Annoying:
βββ Developer frustration
βββ Minor inefficiency
βββ Cosmetic issues
βββ Low priority
Assessment Framework
Evaluating Debt
DEBT ASSESSMENT
βββββββββββββββ
EVALUATION CRITERIA:
βββββββββββββββββββββββββββββββββββββ
For each debt item, score:
Impact (1-5):
βββ 5: Blocks major features
βββ 4: Significant slowdown
βββ 3: Noticeable friction
βββ 2: Minor inconvenience
βββ 1: Barely noticed
βββ How much does it hurt?
Frequency (1-5):
βββ 5: Touch daily
βββ 4: Touch weekly
βββ 3: Touch monthly
βββ 2: Touch quarterly
βββ 1: Rarely/never
βββ How often do we encounter it?
Risk (1-5):
βββ 5: Security vulnerability
βββ 4: Data loss potential
βββ 3: Service outage risk
βββ 2: Minor degradation
βββ 1: No risk
βββ What could go wrong?
Effort (1-5):
βββ 5: Months of work
βββ 4: Multiple sprints
βββ 3: Full sprint
βββ 2: Few days
βββ 1: Hours
βββ How hard to fix?
PRIORITY SCORE:
βββββββββββββββββββββββββββββββββββββ
Formula:
Priority = (Impact + Frequency + Risk) / Effort
Example:
Legacy auth system:
βββ Impact: 4
βββ Frequency: 4
βββ Risk: 5
βββ Effort: 4
βββ Score: 13/4 = 3.25
βββ High priority
Unused utility function:
βββ Impact: 1
βββ Frequency: 1
βββ Risk: 1
βββ Effort: 1
βββ Score: 3/1 = 3.0
βββ Quick win, but low value
Priority Buckets
Organizing Debt
PRIORITY BUCKETS
ββββββββββββββββ
CRITICAL (Now):
βββββββββββββββββββββββββββββββββββββ
βββ Security vulnerabilities
βββ Data loss risk
βββ Blocking feature work
βββ Production incidents
βββ Address immediately
βββ Drop other work
HIGH (This Quarter):
βββββββββββββββββββββββββββββββββββββ
βββ Major productivity impact
βββ Frequently encountered
βββ Growing worse
βββ Plan and schedule
βββ Dedicated time
MEDIUM (Backlog):
βββββββββββββββββββββββββββββββββββββ
βββ Moderate impact
βββ Occasional friction
βββ Stable (not worsening)
βββ Address opportunistically
βββ When in the area
LOW (Someday/Maybe):
βββββββββββββββββββββββββββββββββββββ
βββ Minor impact
βββ Rarely encountered
βββ Not getting worse
βββ May never address
βββ Don't invest now
IGNORE:
βββββββββββββββββββββββββββββββββββββ
βββ In code being replaced
βββ Never touched
βββ Theoretical concerns
βββ Premature optimization
βββ Not worth tracking
βββ Accept and move on
Making Decisions
Trade-off Analysis
DECISION MAKING
βββββββββββββββ
WHEN TO ADDRESS NOW:
βββββββββββββββββββββββββββββββββββββ
Address immediately when:
βββ Blocking current feature
βββ Security risk
βββ Getting worse rapidly
βββ Low effort, high impact
βββ Team agrees it's painful
βββ Clear ROI
WHEN TO DEFER:
βββββββββββββββββββββββββββββββββββββ
Defer when:
βββ Area not being changed
βββ System being replaced
βββ High effort, unclear benefit
βββ Not causing real problems
βββ Other priorities more urgent
βββ Opportunity cost too high
WHEN TO NEVER:
βββββββββββββββββββββββββββββββββββββ
Don't fix when:
βββ Legacy system end-of-life
βββ Rarely touched code
βββ Cost exceeds benefit
βββ Theoretical perfection
βββ "Nice to have" only
βββ Accept imperfection
TRADE-OFF QUESTIONS:
βββββββββββββββββββββββββββββββββββββ
Ask:
βββ What's the cost of NOT fixing?
βββ What features are we NOT building?
βββ How much slower are we really?
βββ Is this actually hurting?
βββ What's the trend?
βββ Honest assessment
Sprint Integration
Regular Investment
SPRINT INTEGRATION
ββββββββββββββββββ
SUSTAINABLE ALLOCATION:
βββββββββββββββββββββββββββββββββββββ
Options:
Percentage approach:
βββ 15-20% of sprint capacity
βββ Every sprint
βββ Consistent investment
βββ Never zero
βββ Sustainable
Dedicated sprints:
βββ 1 in 4 sprints = tech debt
βββ Full focus
βββ Larger refactoring
βββ Quarterly cadence
βββ Concentrated effort
Boy Scout Rule:
βββ Leave code better than found
βββ Small improvements continuously
βββ Part of feature work
βββ No separate tracking
βββ Cultural habit
SPRINT PLANNING:
βββββββββββββββββββββββββββββββββββββ
Include debt:
βββ Tech debt items in backlog
βββ Prioritized like features
βββ Included in sprint
βββ Team picks what to address
βββ Visible commitment
BALANCING:
βββββββββββββββββββββββββββββββββββββ
Sprint composition:
βββ Feature work: 70-80%
βββ Bug fixes: 5-10%
βββ Tech debt: 10-20%
βββ Continuous improvement
βββ Healthy balance
Tracking Debt
Visibility
TRACKING TECHNICAL DEBT
βββββββββββββββββββββββ
DEBT BACKLOG:
βββββββββββββββββββββββββββββββββββββ
Dedicated tracking:
βββ Label: tech-debt
βββ Category labels
βββ Priority assigned
βββ Effort estimated
βββ Visible backlog
βββ Tracked like features
GITSCRUM SETUP:
βββββββββββββββββββββββββββββββββββββ
βββ Tech debt label
βββ Debt category labels
βββ Priority field
βββ Regular grooming
βββ Sprint inclusion
βββ Treated seriously
DEBT REGISTER:
βββββββββββββββββββββββββββββββββββββ
Document:
β Item β Impact β Effort β Priority β
ββββββββββββββββΌβββββββββΌβββββββββΌβββββββββββ€
β Auth refactorβ High β High β Q2 β
β Test coverageβ Medium β Medium β Ongoing β
β API cleanup β Low β Low β Someday β
REGULAR REVIEW:
βββββββββββββββββββββββββββββββββββββ
βββ Quarterly debt review
βββ Update priorities
βββ Remove completed
βββ Add new discoveries
βββ Keep current
βββ Living document
Communication
Stakeholder Buy-in
STAKEHOLDER COMMUNICATION
βββββββββββββββββββββββββ
EXPLAINING DEBT:
βββββββββββββββββββββββββββββββββββββ
Business terms:
βββ "Shipping features takes 30% longer"
βββ "We have 2x more bugs in this area"
βββ "Security risk if not addressed"
βββ "Slows every developer"
βββ Impact they understand
NOT:
βββ "The code is ugly"
βββ "It's not using best practices"
βββ "I don't like how it was done"
βββ "It's not modern"
βββ Technical complaints
MAKING THE CASE:
βββββββββββββββββββββββββββββββββββββ
Show impact:
βββ Time spent on workarounds
βββ Bug frequency in area
βββ Onboarding difficulty
βββ Velocity trend
βββ Data over opinions
Propose solution:
βββ Specific investment
βββ Expected improvement
βββ Timeline
βββ Trade-offs
βββ Clear ask
GETTING APPROVAL:
βββββββββββββββββββββββββββββββββββββ
βββ Small, consistent investment
βββ Easier to approve than big bang
βββ Show results over time
βββ Build trust
βββ Sustainable approach
Best Practices
For Tech Debt Prioritization
Anti-Patterns
PRIORITIZATION MISTAKES:
β Fix everything
β Fix nothing
β Big bang rewrites
β Only address in crisis
β Prioritize by opinion
β No visibility
β Technical purity focus
β Ignoring until too late