15 min read • Guide 26 of 877
Balancing Feature Work with Bug Fixes
Development teams constantly struggle with the tension between building new features and fixing existing bugs. Too much focus on features leads to technical debt and user frustration, while too much focus on bugs stalls product progress. GitScrum enables balanced allocation through dedicated bug workflows, priority-based automation, and metrics that help teams maintain the right equilibrium.
The Feature vs. Bug Dilemma
Imbalanced allocation creates problems:
- Feature-heavy sprints — Users suffer from unresolved issues
- Bug-heavy sprints — Roadmap slips, stakeholders frustrated
- Context switching — Developers lose productivity jumping between
- Hidden bugs — Features ship with known issues
- Technical debt accumulation — Quick fixes create future problems
- Team morale issues — Bug duty seen as punishment
GitScrum Balance Solutions
Tools for maintaining equilibrium:
Balance Mechanisms
| Mechanism | GitScrum Implementation |
|---|---|
| Sprint allocation | Percentage-based capacity |
| Bug prioritization | Severity + impact labels |
| Bug rotation | Auto-assign policies |
| Quality gates | Checklists preventing releases |
| Metrics tracking | Bug vs. feature velocity |
| Visibility | Separate views and reports |
Sprint Allocation Strategies
Capacity-Based Allocation
Sprint Capacity Planning:
Team Capacity: 60 story points
Allocation Model A: Fixed Percentage
─────────────────────────────────────
├── New Features: 70% (42 points)
├── Bug Fixes: 20% (12 points)
├── Tech Debt: 10% (6 points)
└── Total: 100% (60 points)
Allocation Model B: Rolling Average
────────────────────────────────────
├── Base Features: 60% (36 points)
├── Base Bugs: 15% (9 points)
├── Buffer: 25% (15 points)
│ └── Allocated during sprint based on emerging bugs
└── Total: 100% (60 points)
Allocation Model C: Quality-Triggered
─────────────────────────────────────
├── If open P0/P1 bugs < 5:
│ └── Features: 80% / Bugs: 15% / Debt: 5%
├── If open P0/P1 bugs 5-10:
│ └── Features: 60% / Bugs: 35% / Debt: 5%
├── If open P0/P1 bugs > 10:
│ └── Features: 40% / Bugs: 55% / Debt: 5%
└── Automatically adjust each sprint
Sprint 15 Allocation (Model A):
┌─────────────────────────────────────────────────┐
│ SPRINT CAPACITY: 60 points │
├─────────────────────────────────────────────────┤
│ Features (42 pts) │████████████████████░░░░│ │
│ Bugs (12 pts) │██████░░░░░░░░░░░░░░░░░░│ │
│ Tech Debt (6 pts) │███░░░░░░░░░░░░░░░░░░░░░│ │
├─────────────────────────────────────────────────┤
│ Committed: │ 55 points │
│ Remaining Capacity: │ 5 points (buffer) │
└─────────────────────────────────────────────────┘
Bug Budget Reservation
Reserving Bug Capacity:
Sprint Planning Protocol:
─────────────────────────
1. Start with Total Capacity (60 points)
2. Reserve Bug Allocation First
├── Check P0/P1 bug count (currently 7)
├── Estimate bug points (average 2 pts each)
├── Reserved: 7 × 2 = 14 points for bugs
└── Plus buffer: +4 points for discovered bugs
Total Bug Reserve: 18 points
3. Reserve Tech Debt (if any critical)
├── Critical debt items: 2
├── Points: 6 points
└── Total Debt Reserve: 6 points
4. Remaining for Features
├── Total: 60 points
├── Minus bugs: -18 points
├── Minus debt: -6 points
└── Available for features: 36 points
5. Fill Feature Backlog
├── Select features totaling ≤36 points
├── Prioritize by business value
└── Confirm with Product Owner
Sprint Backlog Result:
├── Features: 34 points (5 items)
├── Bugs: 18 points (9 items)
├── Tech Debt: 6 points (2 items)
└── Buffer: 2 points (unallocated)
Bug Prioritization System
Severity-Impact Matrix
Bug Priority Classification:
IMPACT
Low Medium High
┌─────────┬──────────┬──────────┬──────────┐
High │ │ P1 │ P0 │ P0 │
│ │ 24-48h │ 4-8h │ <4h │
SEVERITY ├─────────┼──────────┼──────────┼──────────┤
Medium │ │ P2 │ P1 │ P0 │
│ │ Sprint │ 24-48h │ 4-8h │
├─────────┼──────────┼──────────┼──────────┤
Low │ │ P3 │ P2 │ P1 │
│ │ Backlog │ Sprint │ 24-48h │
└─────────┴──────────┴──────────┴──────────┘
Severity Definitions:
├── High: System crash, data loss, security breach
├── Medium: Feature broken, workaround exists
└── Low: Cosmetic, minor inconvenience
Impact Definitions:
├── High: All users affected, revenue impacting
├── Medium: Significant user segment affected
└── Low: Few users, edge case
Response Time (SLA):
├── P0: Drop everything, fix immediately
├── P1: Fix within 24-48 hours
├── P2: Fix within current sprint
└── P3: Add to backlog, prioritize later
Bug Triage Workflow
Bug Triage Process:
New Bug Reported:
─────────────────
Step 1: Initial Triage (Within 4 hours)
├── Assign to Triage Lead (rotation)
├── Verify bug is reproducible
├── Assess severity (High/Medium/Low)
├── Assess impact (High/Medium/Low)
├── Determine priority (P0/P1/P2/P3)
└── Add appropriate labels
Step 2: Categorization
├── Add labels:
│ ├── severity/high, severity/medium, severity/low
│ ├── impact/high, impact/medium, impact/low
│ ├── priority/P0, priority/P1, priority/P2, priority/P3
│ ├── component/[area] (UI, API, Database, etc.)
│ └── regression/yes or regression/no
└── Link to related issues if any
Step 3: Routing
├── P0: Immediately assign to available senior dev
├── P1: Add to "Urgent Bugs" column, assign owner
├── P2: Add to current sprint bug allocation
├── P3: Add to Bug Backlog, await prioritization
└── Update bug status to "Triaged"
Step 4: Communication
├── P0/P1: Notify team immediately (Slack alert)
├── P2: Include in daily standup
├── P3: Review in weekly backlog grooming
└── Reporter notified of triage decision
Triage Board:
┌─────────────────────────────────────────────────────────────┐
│ BUG TRIAGE │
├──────────────┬──────────────┬─────────────┬────────────────┤
│ New (5) │ Triaging (2) │ Triaged (8) │ Assigned (12) │
├──────────────┼──────────────┼─────────────┼────────────────┤
│ BUG-234 │ BUG-231 │ BUG-225 P2 │ BUG-220 P1 │
│ BUG-233 │ BUG-230 │ BUG-224 P3 │ BUG-218 P2 │
│ BUG-232 │ │ BUG-223 P2 │ BUG-215 P2 │
│ ... │ │ ... │ ... │
└──────────────┴──────────────┴─────────────┴────────────────┘
Bug Rotation System
Fair Distribution
Bug Rotation Policy:
Principles:
├── Every developer takes bug duty
├── Rotation is fair and predictable
├── Senior/Junior pairing for learning
└── No one stuck on bugs indefinitely
Rotation Schedule:
──────────────────
Week │ Primary Bug Dev │ Backup │ Focus
────────┼─────────────────┼─────────────┼─────────────
1 │ Alice │ Bob │ UI bugs
2 │ Bob │ Carol │ API bugs
3 │ Carol │ David │ DB bugs
4 │ David │ Emma │ UI bugs
5 │ Emma │ Alice │ API bugs
(repeat)
During Bug Duty Week:
├── Responsible for P0/P1 immediate response
├── First to triage new bugs in component area
├── Expected to complete 60% of allocated sprint bugs
├── Paired with backup for complex issues
└── Feature work reduced proportionally
GitScrum Automation:
├── Auto-assign new P0/P1 bugs to current rotation dev
├── Notify in Slack when bug assigned
├── Alert if bug unassigned >4 hours
└── Weekly rotation reminder on Sunday night
On-Call Integration
Bug Duty + On-Call Coordination:
Integration with PagerDuty/Opsgenie:
────────────────────────────────────
On-Call (Production Issues):
├── 24/7 coverage
├── Critical system outages
├── Security incidents
├── Requires immediate action
└── Separate from sprint work
Bug Duty (Sprint Bugs):
├── Business hours coverage
├── Prioritized bug fixes
├── Part of sprint capacity
├── Planned work
└── Different rotation
Handoff Protocol:
├── If on-call fixes production issue:
│ ├── Log time separately (not sprint capacity)
│ ├── Create bug ticket for permanent fix
│ ├── Assign to bug duty dev for follow-up
│ └── Post-mortem if needed
└── If bug duty finds critical issue:
├── Escalate to on-call if production impact
├── Otherwise, prioritize in sprint
└── Communicate to team
Weekly Sync (Monday):
├── On-call: Report weekend incidents
├── Bug duty: Review incoming bugs
├── Team: Discuss capacity adjustments
└── Update sprint allocation if needed
Board Configuration for Balance
Dual-Track Kanban
Board Structure:
Option 1: Separate Swimlanes
────────────────────────────
┌─────────────────────────────────────────────────────────────┐
│ SPRINT 15 BOARD │
├─────────────────────────────────────────────────────────────┤
│ Features │
├──────────────┬──────────────┬─────────────┬────────────────┤
│ To Do (5) │ In Progress │ Review (2) │ Done (3) │
│ │ (3) │ │ │
├──────────────┴──────────────┴─────────────┴────────────────┤
│ Bugs │
├──────────────┬──────────────┬─────────────┬────────────────┤
│ To Do (8) │ In Progress │ Review (1) │ Done (5) │
│ │ (2) │ │ │
├──────────────┴──────────────┴─────────────┴────────────────┤
│ Tech Debt │
├──────────────┬──────────────┬─────────────┬────────────────┤
│ To Do (2) │ In Progress │ Review (0) │ Done (1) │
│ │ (1) │ │ │
└──────────────┴──────────────┴─────────────┴────────────────┘
Option 2: Label-Based Filtering
───────────────────────────────
Single board with filter toggles:
├── [All] [Features Only] [Bugs Only] [Tech Debt Only]
├── Labels: type/feature, type/bug, type/tech-debt
├── Quick switch between views
└── Combined progress visible in "All" view
Option 3: Separate Boards
─────────────────────────
├── Feature Board: Sprint features only
├── Bug Board: All bugs (sprint + backlog)
├── Tech Debt Board: Improvement items
└── Linked via task relationships
WIP Limits by Type
Work-in-Progress Limits:
Combined Team WIP: 12 items maximum
Per-Type Limits:
├── Features: Max 6 in progress
├── Bugs: Max 4 in progress
├── Tech Debt: Max 2 in progress
└── Total: 12 (enforced)
Per-Developer Limits:
├── Features: Max 2 per developer
├── Bugs: Max 1 per developer
└── Total: Max 2 items per developer
Enforcement:
├── GitScrum prevents moving to "In Progress" if WIP exceeded
├── Warning shown if approaching limit
├── Override requires team lead approval
└── Documented if override used
Why These Limits:
├── Prevents feature overload neglecting bugs
├── Ensures bugs get attention
├── Reduces context switching
└── Keeps work flowing
Quality Metrics Tracking
Balance Dashboard
Feature/Bug Balance Dashboard:
Sprint 15 Progress:
───────────────────
Work Distribution:
├── Features: ████████████████░░░░ 80% complete (34/42 pts)
├── Bugs: ████████████░░░░░░░░ 60% complete (7/12 pts)
├── Tech Debt:█████████░░░░░░░░░░░ 50% complete (3/6 pts)
└── Overall: ███████████████░░░░░ 73% complete
Bug Metrics:
├── Open Bugs: 23 (↓5 from sprint start)
├── P0/P1 Open: 2 (target: 0)
├── Bugs Fixed This Sprint: 9
├── New Bugs This Sprint: 4
├── Net Bug Change: -5 (good!)
└── Bug Escape Rate: 2% (1 bug per 50 features)
Quality Trend (Last 6 Sprints):
────────────────────────────────
Sprint │ Features │ Bugs │ Net Bugs │ Escape Rate
───────┼──────────┼──────┼──────────┼────────────
10 │ 38 pts │ 12 │ +3 │ 5%
11 │ 42 pts │ 10 │ -2 │ 4%
12 │ 45 pts │ 8 │ -4 │ 3%
13 │ 40 pts │ 14 │ +2 │ 4%
14 │ 44 pts │ 11 │ -3 │ 2%
15 │ 42 pts │ 12 │ -5 │ 2%
Trend: Bug count decreasing, escape rate improving ✓
Bug Debt Tracking
Bug Debt Analysis:
Current Bug Inventory:
──────────────────────
By Priority:
├── P0 (Critical): 1 bug, 3 days old
├── P1 (High): 4 bugs, avg 5 days old
├── P2 (Medium): 12 bugs, avg 18 days old
├── P3 (Low): 18 bugs, avg 45 days old
└── Total: 35 bugs
Bug Age Analysis:
├── < 1 week: 8 bugs (acceptable)
├── 1-2 weeks: 6 bugs (monitor)
├── 2-4 weeks: 9 bugs (concerning)
├── > 4 weeks: 12 bugs (debt)
└── Oldest bug: 89 days (P3)
Bug Debt Score: 67/100 (Fair)
├── Score factors:
│ ├── Total count: -10 points (35 is above target 25)
│ ├── P0/P1 count: -5 points (5 is above target 3)
│ ├── Age distribution: -8 points (too many old bugs)
│ ├── Trend: +15 points (improving)
│ └── Escape rate: +15 points (below 3%)
└── Recommendation: Focus on P2 bugs older than 2 weeks
Sprint 16 Bug Focus:
├── Clear P0/P1 backlog (5 bugs, ~10 points)
├── Address oldest P2s (5 bugs, ~10 points)
├── Normal allocation: (~8 points new bugs)
└── Total bug allocation: 28 points (increased from 20)
Preventing Bug Escape
Quality Gates
Quality Gate Checkpoints:
Before Moving to "Done":
────────────────────────
Feature Completion Checklist:
├── □ Unit tests written and passing
├── □ Integration tests if applicable
├── □ Edge cases tested
├── □ Error handling implemented
├── □ Security review (if applicable)
├── □ Performance acceptable
├── □ No new bugs introduced (checked against test suite)
├── □ Code reviewed by peer
├── □ Documentation updated
└── □ QA sign-off
Bug Fix Completion Checklist:
├── □ Root cause identified and documented
├── □ Fix implemented
├── □ Regression test added
├── □ Original issue verified fixed
├── □ Related areas tested (no side effects)
├── □ Code reviewed
└── □ Ready for production
Automation:
├── All checklist items required for "Done" transition
├── CI/CD pipeline must pass
├── Test coverage threshold met (80%)
└── No critical static analysis issues
Regression Prevention
Preventing Repeat Bugs:
Every Bug Fix Must Include:
───────────────────────────
1. Root Cause Analysis
├── Why did this bug occur?
├── Why wasn't it caught earlier?
├── What process could prevent similar bugs?
└── Document in bug ticket
2. Regression Test
├── Write test that would have caught this bug
├── Add to automated test suite
├── Verify test fails before fix, passes after
└── Include edge cases from investigation
3. Related Code Review
├── Are similar patterns elsewhere in codebase?
├── Could same bug exist in other modules?
├── If yes, create additional bug tickets
└── Proactive prevention
4. Documentation Update
├── Update any affected documentation
├── Add to "common mistakes" if pattern
├── Update code comments if tricky area
└── Share in team learning session
Template in Bug Ticket:
┌────────────────────────────────────────┐
│ ROOT CAUSE ANALYSIS │
├────────────────────────────────────────┤
│ What: ________________________________ │
│ Why: _________________________________ │
│ How to prevent: ______________________ │
│ │
│ REGRESSION TEST │
│ Test file: ___________________________ │
│ Test name: ___________________________ │
│ │
│ RELATED AREAS CHECKED │
│ [ ] Searched for similar patterns │
│ [ ] No other instances found │
│ OR │
│ [ ] Created tickets: BUG-xxx, BUG-yyy │
└────────────────────────────────────────┘
Team Culture Around Bugs
Making Bug Work Valued
Bug Work Recognition:
Reframing Bug Duty:
───────────────────
Instead of: Say:
"Stuck on bugs" → "Quality guardian this sprint"
"Just bug fixes" → "Improving user experience"
"Bug duty punishment" → "Critical expertise building"
"Not real development" → "Protecting product reputation"
Recognition Practices:
├── Celebrate bug-zero days
├── Highlight complex bug fixes in standup
├── Include bug metrics in sprint review
├── Acknowledge quick P0/P1 response
└── Rotate fairly so no one feels stuck
Career Development:
├── Bug investigation builds debugging skills
├── Root cause analysis shows system thinking
├── Complex bug fixes demonstrate expertise
├── Quality mindset valued for senior roles
└── Document bug fix wins for reviews
Sprint Review Recognition:
├── "This sprint, [Name] fixed the login timeout bug
│ that was affecting 200 users daily"
├── "Our bug count is down 15% thanks to focused
│ quality work by the team"
└── "Zero P0 bugs for 4 consecutive sprints"
Learning from Bugs
Bug Learning Sessions:
Weekly Bug Review (30 min):
───────────────────────────
Agenda:
├── New bugs this week: Quick overview
├── Interesting bug deep-dive: 1 complex bug analysis
├── Pattern recognition: Are we seeing recurring issues?
├── Process improvement: What can we change?
└── Knowledge sharing: Tips and tricks
Deep-Dive Format:
├── Bug presenter: Person who fixed it
├── Show the bug: Reproduction steps
├── Explain the cause: What went wrong
├── Walk through fix: Code changes
├── Discuss prevention: How to avoid in future
└── Q&A: Team questions
Document Learning:
├── Add to team wiki / confluence
├── Tag by category (performance, security, logic, etc.)
├── Reference in onboarding materials
└── Review quarterly for patterns
Example Entry:
┌────────────────────────────────────────────┐
│ BUG LEARNING: Race Condition in User Sync │
├────────────────────────────────────────────┤
│ Bug: BUG-234 │
│ Impact: Duplicate user records created │
│ Root Cause: Missing database transaction │
│ Fix: Wrapped operations in transaction │
│ Learning: Always use transactions for │
│ multi-step DB operations │
│ Category: Database, Concurrency │
│ Date: 2024-03-15 │
│ Author: @alice │
└────────────────────────────────────────────┘
Best Practices
For Product Owners
- Budget for bugs — Include bug allocation in sprint planning
- Prioritize by impact — Not all bugs are equal
- Accept trade-offs — Can't fix all bugs immediately
- Communicate balance — Explain to stakeholders why bugs matter
- Track trends — Monitor bug counts over time
For Developers
- Own your bugs — Take pride in quality work
- Write tests first — Prevent bugs before they happen
- Investigate thoroughly — Find root cause, not just symptoms
- Share knowledge — Help team learn from bugs
- Balance fairly — Take your turn on bug duty
For Team Leads
- Set clear allocation — Define and communicate percentages
- Rotate fairly — No one should feel singled out
- Recognize quality work — Celebrate bug victories
- Monitor balance — Adjust allocation based on metrics
- Build culture — Make bug work valued, not punished