16 min read • Guide 69 of 877
Optimizing Sprint Planning Sessions
Sprint planning sets the trajectory for the entire sprint. Poorly planned sprints lead to constant re-planning, missed commitments, and team frustration. Effective sprint planning is a skill that improves with deliberate practice. GitScrum provides the structure and data to make planning sessions focused, data-driven, and consistently productive.
Pre-Planning Preparation
Backlog Readiness Check
BEFORE PLANNING MEETING:
┌─────────────────────────────────────────────────────────────┐
│ READY FOR PLANNING CHECKLIST │
├─────────────────────────────────────────────────────────────┤
│ │
│ PRODUCT OWNER RESPONSIBILITIES (1-2 days before): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ [ ] Top 15-20 items refined and prioritized ││
│ │ [ ] Acceptance criteria clear for top items ││
│ │ [ ] Dependencies identified and flagged ││
│ │ [ ] Questions from refinement answered ││
│ │ [ ] Sprint goal draft prepared ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ DEFINITION OF READY: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Story is "Ready" when: ││
│ │ ││
│ │ ✓ Clear user story format or task description ││
│ │ ✓ Acceptance criteria defined ││
│ │ ✓ Story pointed (from refinement) ││
│ │ ✓ No unresolved questions ││
│ │ ✓ Dependencies identified ││
│ │ ✓ Design/mockups available if needed ││
│ │ ││
│ │ NOT READY = Should not be discussed in planning ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ GITSCRUM BACKLOG STATE: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Backlog View: ││
│ │ ││
│ │ Priority │ Title │ Pts │ Status ││
│ │──────────┼───────────────────────┼─────┼───────────────││
│ │ 1 │ User auth flow │ 8 │ ✓ Ready ││
│ │ 2 │ Payment integration │ 13 │ ✓ Ready ││
│ │ 3 │ Email notifications │ 5 │ ✓ Ready ││
│ │ 4 │ Dashboard widgets │ 8 │ ✓ Ready ││
│ │ 5 │ Report export │ 5 │ ✓ Ready ││
│ │ 6 │ API versioning │ 13 │ ⚠ Needs AC ││
│ │ 7 │ Mobile responsive │ ? │ ⚠ Not pointed ││
│ │ ││
│ │ → Items 1-5 can be planned. Items 6-7 need refinement. ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Capacity Calculation
TEAM CAPACITY FOR SPRINT:
┌─────────────────────────────────────────────────────────────┐
│ DETERMINING AVAILABLE CAPACITY │
├─────────────────────────────────────────────────────────────┤
│ │
│ BASE CAPACITY (10-day sprint, 5-person team): │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ Member │ Available Days │ Focus % │ Effective Days ││
│ │────────────┼────────────────┼─────────┼─────────────────││
│ │ Anna │ 10 │ 80% │ 8.0 ││
│ │ Mike │ 8 (2 PTO) │ 80% │ 6.4 ││
│ │ Chen │ 10 │ 70%* │ 7.0 ││
│ │ Sarah │ 10 │ 80% │ 8.0 ││
│ │ Luis │ 9 (1 training) │ 80% │ 7.2 ││
│ │────────────┼────────────────┼─────────┼─────────────────││
│ │ TOTAL │ │ │ 36.6 days ││
│ │ ││
│ │ *Chen has on-call rotation this sprint ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ FOCUS FACTOR ADJUSTMENTS: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Standard: 80% ││
│ │ (meetings, reviews, context switching) ││
│ │ ││
│ │ Reduce for: ││
│ │ ├── On-call duty: -10% ││
│ │ ├── Interview hosting: -5% per interview ││
│ │ ├── Major company event: -10-20% ││
│ │ ├── New team member onboarding others: -10% ││
│ │ └── Being onboarded: 50% first sprint, 70% second ││
│ │ ││
│ │ Increase for: ││
│ │ └── Focused sprint (no demos, fewer meetings): +5% ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ HISTORICAL VELOCITY: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ GitScrum Analytics - Last 6 Sprints: ││
│ │ ││
│ │ Sprint 19: 42 pts (similar capacity) ││
│ │ Sprint 20: 38 pts (1 person sick) ││
│ │ Sprint 21: 45 pts (full team, focused) ││
│ │ Sprint 22: 35 pts (holiday week) ││
│ │ Sprint 23: 40 pts (similar capacity) ││
│ │ Sprint 24: 44 pts (similar capacity) ││
│ │ ││
│ │ Average (full capacity): 42 pts ││
│ │ This sprint adjusted: ~38 pts (reduced capacity) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Planning Meeting Structure
Efficient Agenda
SPRINT PLANNING MEETING:
┌─────────────────────────────────────────────────────────────┐
│ 2-HOUR PLANNING FOR 2-WEEK SPRINT │
├─────────────────────────────────────────────────────────────┤
│ │
│ PART 1: WHAT (45 min) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ 0:00 - 0:10 Sprint Goal ││
│ │ PO proposes, team refines ││
│ │ ││
│ │ 0:10 - 0:15 Capacity Check ││
│ │ Review availability, calculate capacity ││
│ │ ││
│ │ 0:15 - 0:45 Story Selection ││
│ │ Review top items, confirm understanding ││
│ │ Pull items until capacity reached ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ BREAK (5 min) │
│ │
│ PART 2: HOW (60 min) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ 0:50 - 1:40 Task Breakdown ││
│ │ For each story: identify tasks ││
│ │ Assign initial owners ││
│ │ Identify dependencies ││
│ │ ││
│ │ 1:40 - 1:50 Dependency Review ││
│ │ Check for blockers ││
│ │ Confirm external dependencies ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PART 3: COMMIT (10 min) │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ 1:50 - 2:00 Final Review ││
│ │ Team confirms commitment ││
│ │ Any final concerns? ││
│ │ Sprint officially started ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ TIMEBOX STRICTLY: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ If not refined → Don't discuss in planning ││
│ │ If debates on how → Spike or offline discussion ││
│ │ If can't decide → PO makes call, move on ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Sprint Goal Setting
DEFINING SPRINT GOAL:
┌─────────────────────────────────────────────────────────────┐
│ OUTCOME-FOCUSED GOALS │
├─────────────────────────────────────────────────────────────┤
│ │
│ GOOD SPRINT GOALS: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✓ "Users can complete checkout with credit card" ││
│ │ → Clear outcome, testable, valuable ││
│ │ ││
│ │ ✓ "API performance improved to <200ms response time" ││
│ │ → Measurable, specific target ││
│ │ ││
│ │ ✓ "Mobile app ready for internal beta testing" ││
│ │ → Clear milestone, stakeholders understand ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ POOR SPRINT GOALS: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✗ "Complete PROJ-123 through PROJ-145" ││
│ │ → Just a ticket list, no outcome ││
│ │ ││
│ │ ✗ "Work on authentication improvements" ││
│ │ → Vague, no success criteria ││
│ │ ││
│ │ ✗ "Finish everything in the sprint" ││
│ │ → Not meaningful ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ GOAL STRUCTURE: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Template: "[User/System] can [do what] [value/metric]" ││
│ │ ││
│ │ Sprint 25 Goal: ││
│ │ "New users can sign up, verify email, and complete ││
│ │ their first project creation within 5 minutes" ││
│ │ ││
│ │ Supporting items: ││
│ │ ├── User registration flow (8 pts) ││
│ │ ├── Email verification (5 pts) ││
│ │ ├── Project creation wizard (8 pts) ││
│ │ ├── Onboarding tooltips (3 pts) ││
│ │ └── Welcome email template (2 pts) ││
│ │ ││
│ │ Stretch (if capacity allows): ││
│ │ └── Progress indicator (3 pts) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Story Selection and Estimation
Confirming Estimates
ESTIMATION IN PLANNING:
┌─────────────────────────────────────────────────────────────┐
│ HANDLING ESTIMATES EFFICIENTLY │
├─────────────────────────────────────────────────────────────┤
│ │
│ ESTIMATES SHOULD COME FROM REFINEMENT: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Planning is for SELECTING items, not estimating them. ││
│ │ ││
│ │ If item isn't estimated: ││
│ │ ├── Quick sanity check (1 min max) ││
│ │ ├── Team agrees? Use the estimate ││
│ │ ├── Disagreement? Send back to refinement ││
│ │ └── Critical? PO decides if we take the risk ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ RE-ESTIMATION TRIGGERS: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Reconsider estimates if: ││
│ │ ││
│ │ ├── New information since refinement ││
│ │ ├── Different team member will implement ││
│ │ ├── Dependencies changed ││
│ │ └── Significant time passed (>2 weeks since pointing) ││
│ │ ││
│ │ Process: ││
│ │ "Does anyone think this 8 is wrong given what we ││
│ │ now know? No? Let's proceed." ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PULLING ITEMS INTO SPRINT: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ GitScrum Sprint View: ││
│ │ ││
│ │ Sprint 25 Capacity: 40 points ││
│ │ ││
│ │ Committed: ││
│ │ ┌─────────────────────────────────────────────────────┐ ││
│ │ │ ☑ User registration flow │ 8 pts │ → 8 total │ ││
│ │ │ ☑ Email verification │ 5 pts │ → 13 total │ ││
│ │ │ ☑ Project creation wizard │ 8 pts │ → 21 total │ ││
│ │ │ ☑ Onboarding tooltips │ 3 pts │ → 24 total │ ││
│ │ │ ☑ Welcome email template │ 2 pts │ → 26 total │ ││
│ │ │ ☑ Bug: Login timeout │ 3 pts │ → 29 total │ ││
│ │ │ ☑ Tech debt: Auth cleanup │ 5 pts │ → 34 total │ ││
│ │ │ ☑ Dashboard widget fix │ 3 pts │ → 37 total │ ││
│ │ └─────────────────────────────────────────────────────┘ ││
│ │ ││
│ │ Stretch (if complete early): ││
│ │ ┌─────────────────────────────────────────────────────┐ ││
│ │ │ ☐ Progress indicator │ 3 pts │ │ ││
│ │ │ ☐ Settings redesign │ 5 pts │ │ ││
│ │ └─────────────────────────────────────────────────────┘ ││
│ │ ││
│ │ Buffer: 3 pts (37/40 = 92.5% capacity) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Task Breakdown
Decomposing Stories
TASK BREAKDOWN PROCESS:
┌─────────────────────────────────────────────────────────────┐
│ FROM STORIES TO ACTIONABLE TASKS │
├─────────────────────────────────────────────────────────────┤
│ │
│ WHY BREAK DOWN IN PLANNING: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ✓ Reveals hidden complexity ││
│ │ ✓ Enables parallel work ││
│ │ ✓ Creates daily progress visibility ││
│ │ ✓ Identifies missing skills/dependencies ││
│ │ ✓ Improves estimate accuracy ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ BREAKDOWN EXAMPLE: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Story: User registration flow (8 pts) ││
│ │ ││
│ │ Tasks: ││
│ │ ├── Create registration form component (2h) ││
│ │ ├── Add form validation (2h) ││
│ │ ├── Create user API endpoint (3h) ││
│ │ ├── Add password hashing (1h) ││
│ │ ├── Create email confirmation trigger (2h) ││
│ │ ├── Write unit tests (3h) ││
│ │ ├── Write integration tests (2h) ││
│ │ ├── Update API documentation (1h) ││
│ │ └── Code review + fixes (2h) ││
│ │ ││
│ │ Total: ~18h (≈3 days of focused work) ││
│ │ ││
│ │ Dependencies: ││
│ │ ├── Design mockup (available ✓) ││
│ │ └── Email service setup (Chen to complete Day 1) ││
│ │ ││
│ │ Owner: Anna (Mike to assist with email integration) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ TASK GRANULARITY: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Ideal task size: 2-8 hours ││
│ │ ││
│ │ Too big (>1 day): ││
│ │ ├── "Implement registration" → Break down more ││
│ │ ││
│ │ Too small (<1 hour): ││
│ │ ├── "Add button" → Combine with related work ││
│ │ ││
│ │ Just right: ││
│ │ ├── "Create form with validation" (half day) ││
│ │ ├── "Add API endpoint with tests" (half day) ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Dependency Mapping
IDENTIFYING DEPENDENCIES:
┌─────────────────────────────────────────────────────────────┐
│ PLANNING AROUND DEPENDENCIES │
├─────────────────────────────────────────────────────────────┤
│ │
│ DEPENDENCY TYPES: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ INTERNAL (within sprint): ││
│ │ ├── Task A blocks Task B ││
│ │ ├── Story 1 needed before Story 2 ││
│ │ └── Team member availability ││
│ │ ││
│ │ EXTERNAL (outside team): ││
│ │ ├── API from another team ││
│ │ ├── Design review approval ││
│ │ ├── Infrastructure provisioning ││
│ │ └── Third-party service access ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ DEPENDENCY VISUALIZATION: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ ││
│ │ Day 1-2 Day 3-4 Day 5-6 Day 7-8 ││
│ │ ────────────────────────────────────────────────────────││
│ │ ││
│ │ [Email setup]──┐ ││
│ │ │ ││
│ │ [Reg form]─────┼──>[API endpoint]──>[Integration]──>Done││
│ │ │ ││
│ │ [Design review]┘ ││
│ │ ││
│ │ ⚠ Dependency: Email setup must complete before ││
│ │ confirmation trigger can be implemented. ││
│ │ ││
│ │ Mitigation: Chen starts email setup Day 1. ││
│ │ Fallback: Mock email service for testing if delayed. ││
│ │ ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ GITSCRUM DEPENDENCY TRACKING: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Link tasks with "blocked by" relationship: ││
│ │ ││
│ │ Task: Email confirmation trigger ││
│ │ Blocked by: Email service setup ⚠ ││
│ │ ││
│ │ External dependency: ││
│ │ Task: Payment integration ││
│ │ Blocked by: Stripe account approval (External) ││
│ │ Expected: Day 3 ││
│ │ Fallback: Use test keys, switch to prod keys later ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Common Pitfalls and Solutions
Avoiding Planning Anti-Patterns
SPRINT PLANNING PROBLEMS:
┌─────────────────────────────────────────────────────────────┐
│ WHAT GOES WRONG AND HOW TO FIX IT │
├─────────────────────────────────────────────────────────────┤
│ │
│ PROBLEM: Planning takes 4+ hours │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Symptoms: ││
│ │ - Discussing unclear stories ││
│ │ - Re-estimating everything ││
│ │ - Debating implementation details ││
│ │ ││
│ │ Solution: ││
│ │ - Better refinement sessions ││
│ │ - Enforce "Ready" definition ││
│ │ - Defer technical debates to after planning ││
│ │ - Strict timeboxing ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PROBLEM: Over-commitment │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Symptoms: ││
│ │ - "We can squeeze in one more story" ││
│ │ - Ignoring velocity data ││
│ │ - Underestimating interruptions ││
│ │ ││
│ │ Solution: ││
│ │ - Commit to 80-90% of capacity ││
│ │ - Use stretch goals for extra capacity ││
│ │ - Trust historical velocity ││
│ │ - Include buffer for unknowns ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PROBLEM: Uneven workload distribution │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Symptoms: ││
│ │ - One person overloaded ││
│ │ - Skills bottleneck ││
│ │ - Work not parallelizable ││
│ │ ││
│ │ Solution: ││
│ │ - Review workload during planning ││
│ │ - Pair on critical paths ││
│ │ - Cross-train on bottleneck skills ││
│ │ - Sequence work to enable parallelism ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ PROBLEM: Missing dependencies discovered mid-sprint │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Symptoms: ││
│ │ - "We didn't know we needed X" ││
│ │ - External teams surprised by requests ││
│ │ - Blocked waiting on prerequisites ││
│ │ ││
│ │ Solution: ││
│ │ - Explicit dependency identification in planning ││
│ │ - Confirm external dependencies before committing ││
│ │ - Build in slack for dependency delays ││
│ │ - Define fallback plans ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Post-Planning Actions
Sprint Kickoff
AFTER PLANNING MEETING:
┌─────────────────────────────────────────────────────────────┐
│ SPRINT LAUNCH ACTIVITIES │
├─────────────────────────────────────────────────────────────┤
│ │
│ IMMEDIATELY AFTER: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ [ ] Sprint goal documented and visible ││
│ │ [ ] All committed items in sprint backlog ││
│ │ [ ] Tasks created for first stories ││
│ │ [ ] Initial assignments made ││
│ │ [ ] Dependencies flagged in GitScrum ││
│ │ [ ] Sprint start date set ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ DAY 1 OF SPRINT: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ [ ] Team starts first tasks ││
│ │ [ ] Dependency work initiated ││
│ │ [ ] External teams notified of needs ││
│ │ [ ] First standup includes sprint goal reminder ││
│ └─────────────────────────────────────────────────────────┘│
│ │
│ COMMUNICATION: │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Share with stakeholders: ││
│ │ ││
│ │ "Sprint 25 Started 🚀 ││
│ │ ││
│ │ Goal: New users can complete registration and first ││
│ │ project creation within 5 minutes. ││
│ │ ││
│ │ Key deliverables: ││
│ │ - User registration flow ││
│ │ - Email verification ││
│ │ - Project creation wizard ││
│ │ ││
│ │ Demo: [Date]" ││
│ └─────────────────────────────────────────────────────────┘│
│ │
└─────────────────────────────────────────────────────────────┘
Best Practices
Do's
EFFECTIVE SPRINT PLANNING:
✓ REFINE BEFORE PLANNING
Items should be ready, not discussed in planning
✓ USE HISTORICAL DATA
Trust velocity over optimism
✓ COMMIT CONSERVATIVELY
80-90% capacity, use stretch goals
✓ TIMEBOX STRICTLY
2 hours max for 2-week sprint
✓ BREAK DOWN STORIES
Tasks reveal hidden work
✓ IDENTIFY DEPENDENCIES EARLY
Flag blockers, confirm external needs
Don'ts
PLANNING ANTI-PATTERNS:
✗ PLANNING WITHOUT REFINEMENT
Leads to 4-hour meetings
✗ 100% CAPACITY COMMITMENT
No room for surprises
✗ IGNORING VELOCITY
"This sprint will be different"
✗ VAGUE SPRINT GOALS
"Complete the tickets"
✗ SKIPPING TASK BREAKDOWN
Hidden complexity surprises you mid-sprint