Chuyển tới nội dung chính

08 - Sprint Management (Quản lý Sprint)

Mục tiêu: Quản lý Sprint hiệu quả trên GitHub Projects

Thời lượng: 60 phút Đối tượng: PM, QA Lead, Scrum Master


🎯 Sprint trong GitHub Projects

Sprint là gì?

Sprint = Một khoảng thời gian cố định (thường 1-2 tuần) để team hoàn thành một tập hợp issues đã commit.

Mục tiêu:

  • Focus: Team làm việc focused trên sprint goal
  • Predictability: Stakeholder biết được gì sẽ ship khi nào
  • Continuous improvement: Mỗi sprint học được gì để cải thiện

📅 Sprint Lifecycle

┌─────────────────┐
│ Sprint Planning │ (1-2 giờ: chọn issues, estimate, commit)
└────────┬────────┘

┌─────────────────┐
│ Daily Standup │ (15 phút mỗi ngày: sync progress, unblock)
└────────┬────────┘

┌─────────────────┐
│ Sprint Review │ (1 giờ: demo features done, collect feedback)
└────────┬────────┘

┌─────────────────┐
│ Retrospective │ (1 giờ: what went well, what to improve)
└────────┬────────┘

(Repeat)

🛠️ Setup Sprint trong GitHub Projects

GitHub Projects có Iteration field native:

Bước 1: Add Iteration field

Project Settings → Fields → Add field
Field type: Iteration
Field name: Sprint
Duration: 2 weeks
Start date: Monday

Bước 2: Tạo iterations

Sprint 1: 2024-06-03 - 2024-06-16
Sprint 2: 2024-06-17 - 2024-06-30
Sprint 3: 2024-07-01 - 2024-07-14
...

Bước 3: Assign issues vào sprint

Issue #123 → Sprint = "Sprint 2"
Issue #124 → Sprint = "Sprint 2"

Option 2: Sử dụng Milestone

Create Milestone:
Title: Sprint 15
Due date: 2024-06-16
Description: Focus on "Save for Later" feature

Assign issues:
Issue #123 → Milestone = Sprint 15

📋 Sprint Planning Meeting

Trước meeting (PM chuẩn bị)

PM Checklist (1 ngày trước):

- [ ] Review & prioritize backlog
- [ ] Đảm bảo top 20 issues có:
- [ ] AC rõ ràng
- [ ] Design/mockup (nếu cần)
- [ ] Labels, priority
- [ ] Check team capacity:
- [ ] Ai nghỉ phép?
- [ ] Ai onboard mới (capacity thấp hơn)?
- [ ] Holidays?
- [ ] Chuẩn bị sprint goal draft
- [ ] Send calendar invite + agenda

Agenda gửi team:

Sprint Planning - Sprint 15
Date: Mon, June 3, 2:00 PM - 3:30 PM

Agenda:
1. Sprint 14 review (15 min)
2. Sprint 15 goal (10 min)
3. Issue selection & estimation (60 min)
4. Commitment (5 min)

Pre-read:
- Backlog: [link to GitHub Project Board]
- Sprint goal draft: "Complete Save for Later feature + 3 P0 bugs"

Trong meeting (90 phút)

Part 1: Sprint Review (15 phút)

PM:
- Demo features done trong sprint 14
- Metrics: Velocity, completion rate
- What went well, what didn't

Team:
- Feedback, lessons learned

Ví dụ:

Sprint 14 Results:
✅ Completed: 28/30 points (93%)
✅ Features: 5/6 done
❌ Carry-over: Issue #100 (blocked by design)

Lessons:
✓ AC rõ ràng hơn → dev hiểu ngay
✗ Issue #100 thiếu design → blocked 1 tuần

Part 2: Sprint Goal (10 phút)

PM present sprint goal:

Sprint 15 Goal:
"Ship 'Save for Later' feature to production
+ Fix 3 critical bugs from production"

Why this goal:
- Save for Later: Top user request (500 votes)
- 3 bugs: Blocking checkout flow (revenue impact)

Success criteria:
- Save for Later tested & deployed
- 3 bugs fixed & verified
- No new critical bugs introduced

Part 3: Issue Selection & Estimation (60 phút)

PM: Present issues theo thứ tự priority

Issue #123: [Feature] Save for Later
Priority: P0
AC: (đọc AC)
Design: (show Figma)
Questions?

Dev:
- Estimate: 8 points (3 ngày)
- Dependencies: Cần API từ backend

QA:
- Estimate test: 1 ngày
- AC rõ ràng ✓

Estimate sử dụng Planning Poker:

PM: "Issue #123, please estimate"
Dev vote: 5, 5, 8, 8
Discussion: "Tại sao 8?"
Consensus: 8 points (safe estimate)

Add to sprint ✓

Repeat until:

  • Hết capacity, HOẶC
  • Hết high-priority issues

Capacity calculation:

Team capacity:
- 4 dev × 2 weeks × 10 points/dev/week = 80 points
- Meetings, emails, etc: -20% = 64 points
- Buffer (bugs, uncertainty): -10% = ~58 points

Selected issues: 56 points ✓ (fit capacity)

Part 4: Commitment (5 phút)

PM: "Team commit 56 points này nhé?"
Team: "OK ✓"
PM: "Awesome! Let's make it happen"

Actions:
- Update all issues: Sprint = "Sprint 15"
- Move issues: Backlog → Todo
- Share sprint board link in Slack

📊 Sprint Tracking (Daily)

Daily Standup (15 phút)

Format:

Team nhìn vào GitHub Project Board

Dev Alice:
- Yesterday: Completed #123 → PR #124 merged
- Today: Start #125
- Blockers: None

Dev Bob:
- Yesterday: Working on #126 → 70% done
- Today: Finish #126, create PR
- Blockers: Waiting design feedback for #127

QA Carol:
- Yesterday: Tested #123 → PASS
- Today: Test #126 when ready
- Blockers: Issue #128 unclear AC → need PM clarify

PM:
- Yesterday: Clarified #129, reviewed bugs
- Today: Will unblock #127 (ping designer), clarify #128
- Focus: Unblock team

PM notes:

  • Issue #127: Blocked → escalate designer
  • Issue #128: Unclear AC → clarify ngay sau standup

Sprint Health Metrics (Check daily)

View 1: Sprint Progress

Filter: Sprint = "Sprint 15"
Group by: Status

Backlog Todo In Progress Review Testing Done
0 5 8 3 2 12

Progress: 12/30 issues done (40%)
Day 5/10 of sprint → on track ✓

View 2: Blocked Issues

Filter: Status = Blocked AND Sprint = "Sprint 15"

Issue #127: Blocked (waiting design) - 3 days
→ PM escalate designer

View 3: Burndown (manual tracking)

Day  | Remaining Points
-----|------------------
1 | 56
2 | 52
3 | 48
4 | 45
5 | 38 (good progress)
6 | 35
7 | 30
8 | 22
9 | 15
10 | 0 (done!)

🚧 Sprint Management Best Practices

✅ Làm đúng

1. Protect sprint scope

✅ Stakeholder request mid-sprint:
PM: "Noted! I'll add to backlog, plan for Sprint 16"
(KHÔNG thêm vào sprint hiện tại)

Exception: Critical production bug
→ Team discuss: swap với issue khác
→ Transparent with stakeholder

2. Unblock nhanh

Issue blocked > 1 ngày:
PM action:
- Escalate designer/backend/stakeholder
- Provide workaround
- Swap với issue khác (nếu cần)

Goal: No issue blocked > 2 days

3. Transparent communication

Sprint progress:
- Daily: Update trong standup
- Mid-sprint: Send update to stakeholders
"Sprint 15: 50% done, on track ✓"
- End sprint: Share metrics

4. Consistent velocity

Track velocity:
Sprint 12: 50 points
Sprint 13: 52 points
Sprint 14: 48 points
Sprint 15: Plan 50 points (±10% is good)

Avoid:
Sprint 12: 50 points
Sprint 13: 80 points (overcommit → burnout)
Sprint 14: 30 points (undercommit → waste capacity)

❌ Làm sai

1. Thay đổi scope giữa sprint

❌ PM:
Stakeholder yêu cầu → thêm issue vào sprint
→ Dev overwhelmed → miss sprint goal

✅ PM nên:
Protect sprint scope
Add to next sprint

2. Không track progress

❌ PM:
Không check board
Cuối sprint mới biết miss target

✅ PM nên:
Check board daily
Catch risk sớm
Adjust kịp thời

3. Carry-over quá nhiều

❌ Team:
Sprint 15: Carry-over 10/30 issues (33%)
Sprint 16: Carry-over 12/30 issues (40%)
→ Sign of overcommit hoặc poor estimation

✅ Target:
Carry-over < 20%

🎯 Sprint Review Meeting (1 giờ)

Mục tiêu

  • Demo features done
  • Collect feedback từ stakeholders
  • Celebrate wins

Agenda

1. Sprint goal review (5 min)
2. Demo features (30 min)
3. Metrics (10 min)
4. Feedback & Q&A (15 min)

Demo features

PM/Dev:

"Issue #123: Save for Later"

Demo:
1. User add 3 items to cart
2. Click "Save for Later" on item #1
3. Item moves to "Saved Items" tab
4. Logout → Login → Still see saved item ✓

(Live demo trên staging)

Stakeholder feedback:
- Looks good ✓
- Can we add notification when price drops?
→ PM: Good idea! Add to backlog

🔄 Retrospective Meeting (1 giờ)

Mục tiêu

  • Reflect: Gì tốt, gì cần improve
  • Actionable: Commit cải thiện sprint sau

Format: Start-Stop-Continue

📗 START (Bắt đầu làm gì?)
- Dev: Review AC với PM trước khi estimate
- QA: Test regression mỗi PR (không chỉ cuối sprint)

📕 STOP (Ngưng làm gì?)
- PM: Ngưng thêm issues mid-sprint
- Dev: Ngưng merge PR không notify QA

📘 CONTINUE (Tiếp tục làm gì?)
- Daily standup focused (< 15 min)
- AC rõ ràng → dev hiểu ngay

Action items

Sprint 16 Actions:
1. PM: Add checklist "Review AC with dev before planning"
2. Dev: Add GitHub Action: auto-mention QA when PR merged
3. Team: Try mob programming 1x/week for complex issues

Owner + Deadline:
- Action 1: @pm-bob, by Sprint 16 planning
- Action 2: @dev-alice, by Day 3 Sprint 16
- Action 3: @team, try in Sprint 16

📈 Sprint Metrics

Track mỗi sprint

MetricCách đoTarget
VelocityStory points completedStable (±10%)
Completion Rate% issues done> 80%
Carry-over Rate% issues carry to next sprint< 20%
Bug Escape RateBugs found in production< 5%
Cycle TimeAvg days from Todo → Done< 5 days

Ví dụ sprint report

Sprint 15 Metrics:

Velocity: 52/56 points (93%) ✓
Completion: 28/30 issues (93%) ✓
Carry-over: 2 issues (7%) ✓
Bugs: 1 bug escaped (3%) ✓
Cycle time: 4.2 days ✓

🎉 Great sprint! All targets met

✅ Checklist sau khi đọc xong

  • Hiểu sprint lifecycle
  • Biết cách setup sprint trong GitHub Projects
  • Biết cách run Sprint Planning meeting
  • Biết cách track sprint progress daily
  • Biết cách protect sprint scope
  • Biết cách run Sprint Review & Retrospective
  • Biết metrics cần track

🚀 Tiếp theo: 09-release-management.md - Quản lý Release