agile-sprint-planning について
Agile Sprint Planningは、チームの作業を期間限定のスプリントに整理するスキルです。バックログの準備、見積もり、目標設定、デイリースタンドアップを扱い、チームのベロシティやフィードバックに基づく計画調整も支援します。
主な機能
- 01プロダクトバックログの準備と整理
- 02Planning 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)
}));
}
}
ベストプラクティス
✅ DO
- 過去のスプリントにおける実際のチームベロシティを基にキャパシティを設定する
- 割り込みやサポート作業に備えて予備時間を確保する
- スプリントの目標は技術的なタスクではなく、ビジネス価値を重視する
- 計画ミーティングの時間を制限する(2週間のスプリントなら最大2時間)
- 計画の話し合いにはチーム全員が参加する
- 大きなストーリーを、管理しやすい小さな単位に分割する
- ベロシティの傾向を把握するためにストーリーポイントを追跡する
- 実際の完了状況に基づいて見積もりを見直し、調整する
- スプリントの期間を一定に保つ
- レトロスペクティブでの改善点を計画に反映する
❌ DON'T
- キャパシティを100%使用する計画を立てない
- 計画ミーティングの前にストーリーの整理を省略しない
- スプリント開始後にストーリーを追加しない(緊急時を除く)
- 1人だけでチーム全体の見積もりを行わない
- ストーリーポイントを従業員のパフォーマンス指標として使わない
- チームのベロシティの傾向を無視しない
- 明確なスプリント目標なしで計画しない
- キャパシティの数値に合わせるためにストーリーをスプリントに押し込まない
- 時間を節約するためにスプリント計画を省略しない
- 話し合いをせずにプランニングポーカーの結果を最終見積もりとして使わない
スプリント計画のヒント
- ストーリーは5~13ポイントに収める(大きなストーリーは分割する)
- キャパシティの85~90%を使用する(割り込みに備えて余裕を残す)
- スプリント目標を目につく場所に記録する(物理的なボードまたはJira)
- 傾向を把握するために、5~10スプリントにわたってベロシティを追跡する
- より適切な見積もりのために過去のデータを活用する
- レビューでスプリントの成功を称える
- 見積もりの偏りを特定し、対処する
- レトロスペクティブでのフィードバックに基づいてプロセスを調整する
コメント
Markdown 対応