关于 agile-sprint-planning
Agile Sprint Planning 是用于将团队工作组织为限时迭代的技能,涵盖待办事项准备、估算、目标设定和每日站会,并依据团队速度与反馈调整计划。
主要功能
- 01准备并梳理产品待办事项
- 02使用 Planning Poker 估算用户故事
- 03制定迭代目标
- 04组织并跟踪每日站会
- 05参考团队速度和回顾反馈
适用场景
- 01在迭代开始时规划工作
- 02排列并估算待办事项优先级
- 03根据迭代进展调整范围
- 04准备迭代评审和回顾
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ nicepkg/ ai-workflow --skill agile-sprint-planning安装后在 Claude Code 中输入/agile-sprint-planning确认已加载。
详细介绍
敏捷冲刺规划
概述
敏捷冲刺规划提供了一种结构化方法,可将工作组织成有时间限制的迭代,让团队在保持灵活性并响应变化的同时,逐步交付价值。
适用场景
- 开始新的冲刺周期
- 制定冲刺目标和目的
- 估算用户故事和任务
- 管理冲刺待办事项的优先级
- 处理冲刺中期的变更或范围调整
- 准备冲刺评审和回顾
- 培训团队成员掌握敏捷实践
说明
1. 冲刺前规划
# 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. 冲刺规划会议结构
// Example sprint planning agenda and execution
class SprintPlanner {
constructor(team, sprintLength = 2) {
this.team = team;
this.sprintLength = sprintLength; // weeks
this.userStories = [];
this.sprintGoal = '';
this.capacity = 0;
}
calculateTeamCapacity() {
// Capacity = available hours - meetings - buffer
const workHours = 40; // per person per week
const meetingHours = 5; // estimated standups, retros, etc.
const bufferPercent = 0.2; // 20% buffer for interruptions
const capacityPerPerson = (workHours - meetingHours) * (1 - bufferPercent);
this.capacity = capacityPerPerson * this.team.length * this.sprintLength;
return this.capacity;
}
conductPlanningMeeting() {
return {
part1: {
duration: '15 minutes',
activity: 'Product Owner presents sprint goal',
deliverable: 'Team understands business objective'
},
part2: {
duration: '45-60 minutes',
activity: 'Team discusses and estimates user stories',
deliverable: 'Prioritized sprint backlog with story points'
},
part3: {
duration: '15 minutes',
activity: 'Team commits to sprint goal',
deliverable: 'Formal sprint backlog committed'
}
};
}
createSprintBacklog(stories, capacity) {
let currentCapacity = capacity;
const sprintBacklog = [];
for (let story of stories) {
if (currentCapacity >= story.points) {
sprintBacklog.push({
...story,
status: 'planned',
sprint: this.currentSprint
});
currentCapacity -= story.points;
}
}
return {
goal: this.sprintGoal,
backlog: sprintBacklog,
remainingCapacity: currentCapacity,
utilization: ((capacity - currentCapacity) / capacity * 100).toFixed(1) + '%'
};
}
}
3. 故事点估算
# Story point estimation using Planning Poker approach
class StoryEstimation:
# Fibonacci sequence for estimation
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
# Round to nearest Fibonacci number
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 significant disagreement, discuss and re-estimate
if estimates[-1] - estimates[0] > 5:
return {
'consensus': False,
'median': median,
'low': estimates[0],
'high': estimates[-1],
'action': 'Discuss and re-estimate'
}
return {'consensus': True, 'estimate': median}
# Example usage
print(StoryEstimation.calculate_story_points(
complexity=3, # Medium complexity
effort=2, # Low effort
risk=1 # Low risk
)) # Output: 3 points
4. 定义冲刺目标
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:
- Payment gateway API changes
- Security compliance requirements
- Integration complexity
Acceptance:
- All criteria met
- Feature deployed to staging
- Security review approved
- Team and PO sign-off
5. 每日站会管理
// Daily standup structure and tracking
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.participants
.filter(p => p.blockers.length > 0)
.map(p => ({
owner: p.name,
blockers: p.blockers,
deadline: new Date(Date.now() + 24 * 60 * 60 * 1000)
}));
}
}
最佳实践
✅ 应做
- 根据团队以往冲刺的实际速度确定产能
- 为突发情况和支持工作预留缓冲时间
- 将冲刺目标聚焦于业务价值,而非技术任务
- 为规划会议设定时间限制(为期 2 周的冲刺最多 2 小时)
- 让整个团队参与规划讨论
- 将大型故事拆分成更小、更易管理的部分
- 跟踪故事点以观察速度趋势
- 根据实际完成情况审查并调整估算
- 保持冲刺时长一致
- 将回顾中提出的改进纳入规划
❌ 不应做
- 按 100% 的产能利用率进行规划
- 跳过规划会议前的故事梳理
- 在冲刺开始后添加故事(紧急情况除外)
- 让一个人为整个团队进行估算
- 将故事点用作员工绩效指标
- 忽略团队速度趋势
- 在没有明确冲刺目标的情况下进行规划
- 为了匹配产能数字而强行将故事塞进冲刺
- 为节省时间而跳过冲刺规划
- 不经讨论就将规划扑克结果作为最终估算
冲刺规划技巧
- 将故事控制在 5–13 点(拆分更大的故事)
- 保持 85–90% 的产能利用率(为突发情况留出缓冲)
- 将冲刺目标清晰地记录并展示出来(实体看板或 Jira)
- 跟踪 5–10 个冲刺的速度,以识别趋势
- 使用历史数据来改进估算
- 在评审中庆祝冲刺成果
- 识别并解决估算偏差
- 根据回顾反馈调整流程
评论
支持 Markdown