| name | agile-sprint-planning |
| description | Plan and execute effective sprints using Agile methodologies. Define sprint goals, estimate user stories, manage sprint backlog, and facilitate daily standups to maximize team productivity and deliver value incrementally. |
Agile Sprint Planning
Overview
Agile sprint planning provides a structured approach to organize work into time-boxed iterations, enabling teams to deliver value incrementally while maintaining flexibility and responding to change.
When to Use
- Starting a new sprint cycle
- Defining sprint goals and objectives
- Estimating user stories and tasks
- Managing sprint backlog prioritization
- Handling mid-sprint changes or scope adjustments
- Preparing sprint reviews and retrospectives
- Training team members on Agile practices
Instructions
1. Pre-Sprint Planning
# Sprint Planning Checklist
## 1-2 Days Before Planning Meeting
- [ ] Groom product backlog (ensure top items are detailed)
- [ ] Update user story acceptance criteria
- [ ] Identify dependencies and blockers
- [ ] Prepare estimates from previous sprints
- [ ] Review team velocity (average story points per sprint)
- [ ] Identify team availability/absences
- [ ] Prepare sprint goals draft
## Information to Gather
- Product Owner priorities
- Team capacity (working hours available)
- Previous sprint metrics
- Upcoming holidays or interruptions
- Technical debt items to address
2. Sprint Planning Meeting Structure
class SprintPlanner {
constructor(team, sprintLength = 2) {
this.team = team;
this.sprintLength = sprintLength;
this.userStories = [];
this.sprintGoal = '';
this.capacity = 0;
}
calculateTeamCapacity() {
const workHours = 40;
const meetingHours = 5;
const bufferPercent = 0.2;
const capacityPerPerson = (workHours - meetingHours) * (1 - bufferPercent);
this.capacity = capacityPerPerson * this.team.length * this.sprintLength;
return this.capacity;
}
conductPlanningMeeting() {
return {
part1: {
duration: ,
: ,
:
},
: {
: ,
: ,
:
},
: {
: ,
: ,
:
}
};
}
() {
currentCapacity = capacity;
sprintBacklog = [];
( story stories) {
(currentCapacity >= story.) {
sprintBacklog.({
...story,
: ,
: .
});
currentCapacity -= story.;
}
}
{
: .,
: sprintBacklog,
: currentCapacity,
: ((capacity - currentCapacity) / capacity * ).() +
};
}
}
3. Story Point Estimation
class StoryEstimation:
ESTIMATE_OPTIONS = [1, 2, 3, 5, 8, 13, 21, 34]
@staticmethod
def calculate_story_points(complexity, effort, risk):
"""
Estimate story points based on multiple factors
Factors should be rated 1-5
"""
base_points = (complexity * effort) / 5
risk_multiplier = 1 + (risk * 0.1)
estimated_points = base_points * risk_multiplier
for estimate in StoryEstimation.ESTIMATE_OPTIONS:
if estimated_points <= estimate:
return estimate
return StoryEstimation.ESTIMATE_OPTIONS[-1]
@staticmethod
def conduct_planning_poker(team_estimates):
"""
Handle Planning Poker consensus process
"""
estimates = sorted(team_estimates)
median = estimates[len(estimates) // 2]
if estimates[-1] - estimates[0] > 5:
return {
'consensus': False,
: median,
: estimates[],
: estimates[-],
:
}
{: , : median}
(StoryEstimation.calculate_story_points(
complexity=,
effort=,
risk=
))
4. Sprint Goal Definition
Sprint Goal Template:
Sprint: Sprint 23 (Nov 7 - Nov 20)
Goal Statement: |
Enable users to manage multiple payment methods with a secure,
intuitive interface that reduces checkout time by 40%
Success Criteria:
- Payment method management UI implemented
- 95% test coverage on payment logic
- Performance: <200ms payment processing
- Zero critical security issues
- Feature released to 20% of users for A/B testing
Team Commitment: 89 story points
Expected Velocity: 85-95 points
Key Risks:
5. Daily Standup Management
class DailyStandup {
constructor(team) {
this.team = team;
this.standups = [];
}
conductStandup(date) {
const standup = {
date,
startTime: new Date(),
participants: [],
timeboxed: true,
durationMinutes: 15
};
for (let member of this.team) {
standup.participants.push({
name: member.name,
yesterday: member.getYesterdayWork(),
today: member.getPlanForToday(),
blockers: member.getBlockers(),
helpNeeded: member.getHelpNeeded()
});
}
return {
standup,
followUpActions: this.identifyFollowUps(standup),
blockerResolutionOwners: this.assignBlockerOwners(standup)
};
}
identifyFollowUps(standup) {
return standup.
.( p.. > )
.( ({
: p.,
: p.,
: (.() + * * * )
}));
}
}
Best Practices
✅ DO
- Base capacity on actual team velocity from past sprints
- Include buffer time for interruptions and support work
- Focus sprint goal on business value, not technical tasks
- Timeboxe planning meeting (2 hours max for 2-week sprint)
- Include entire team in planning discussion
- Break down large stories into smaller, manageable pieces
- Track story points for velocity trending
- Review and adjust estimates based on actual completion
- Maintain consistent sprint length
- Include retrospective improvements in planning
❌ DON'T
- Plan for 100% capacity utilization
- Skip story grooming before planning meeting
- Add stories after sprint starts (unless emergency)
- Let one person estimate for entire team
- Use story points as employee performance metrics
- Ignore team velocity trends
- Plan without clear sprint goal
- Force stories into sprints to match capacity numbers
- Skip sprint planning to save time
- Use planning poker results as final estimate without discussion
Sprint Planning Tips
- Keep stories to 5-13 points (break larger stories down)
- Maintain 85-90% capacity utilization (leave buffer for interruptions)
- Document sprint goal visibly (physical board or Jira)
- Track velocity over 5-10 sprints to identify trends
- Use historical data for better estimates
- Celebrate sprint successes in reviews
- Identify and address estimation biases
- Adjust processes based on retrospective feedback