·

Quy trình Thực tế: Lập kế hoạch Sprint & Phân loại Bug

Đi qua một quy trình thực tế dùng Jira MCP để AI agent đọc và cập nhật issue, sprint và board từ đầu đến cuối.

Các bài trước đã hướng dẫn cấu hình Jira MCP cho từng công cụ cụ thể (Claude Code, OpenCode, Gemini CLI, Cursor). Bài này gộp lại thành một workflow đầu-cuối (end-to-end) mà bạn có thể áp dụng ngay cho team thật: từ backlog grooming, lập kế hoạch sprint, đến triage bug và cập nhật issue theo thời gian thực trong lúc code. Đây không phải là ba tính năng tách rời — mà là một chuỗi công việc liên tục trong đó AI agent đóng vai trò trợ lý xuyên suốt cả sprint, còn quyết định cuối luôn thuộc về con người.

Tổng quan Workflow: Từ Backlog Grooming đến Hoàn thành Sprint Với AI

Trước khi đi vào từng bước cụ thể, cần hình dung rõ workflow tổng thể và vị trí của AI agent trong đó — để tránh kỳ vọng sai rằng AI "tự chạy sprint", điều này chưa hợp lý và cũng không nên để xảy ra.

Bốn giai đoạn chính trong một sprint có AI hỗ trợ

Một sprint điển hình có AI hỗ trợ qua Jira MCP thường trải qua bốn giai đoạn: (1) backlog grooming — AI giúp phân loại, ước lượng sơ bộ, phát hiện issue thiếu thông tin; (2) sprint planning — AI đề xuất danh sách issue cho sprint tới dựa trên velocity và priority; (3) trong sprint — AI cập nhật issue song song với code, tự động triage bug mới phát sinh; (4) sprint review/retro — AI tổng hợp báo cáo hoàn thành, issue carry-over, nguyên nhân trễ. Ba giai đoạn giữa sẽ được đi sâu ở các bước dưới, giai đoạn retro có thể tái sử dụng đúng pattern truy vấn tổng hợp đã học ở các bài trước.

Nguyên tắc "AI đề xuất, người quyết định" xuyên suốt workflow

Điểm chung quan trọng nhất của cả workflow: mọi output từ AI agent (đề xuất sprint, gợi ý priority, phân loại bug) đều là input cho một quyết định của người, không phải quyết định tự động. Jira là hệ thống production ảnh hưởng trực tiếp đến việc theo dõi tiến độ và giao tiếp trong team — một sai sót do prompt mơ hồ có thể gây nhiễu dữ liệu khó dò ngược. Workflow dưới đây được thiết kế theo pattern "read → propose → human approve → write", lặp lại ở cả ba bước.

Công cụ giả định trong bài này

Ví dụ dùng chung cấu hình Jira MCP qua mcp-atlassian (đã hướng dẫn setup ở các bài trước), có thể dùng với bất kỳ AI coding agent nào hỗ trợ MCP (Claude Code, Cursor, Gemini CLI, OpenCode). Các prompt mẫu dưới đây viết theo cách trung lập, áp dụng được cho công cụ bạn đang dùng.

Mẹo: Trước khi áp dụng workflow này cho sprint thật, hãy chạy thử toàn bộ ba bước trên một board test hoặc một project ít quan trọng trong 1-2 sprint, để cả team quen với việc đọc và duyệt đề xuất của AI trước khi tin tưởng giao dữ liệu production.

Bước 1: AI Đề xuất Kế hoạch Sprint Từ Backlog

Trước buổi sprint planning, thay vì để Scrum Master hoặc lead tự lọc backlog bằng tay, AI agent có thể chuẩn bị sẵn một bản đề xuất dựa trên dữ liệu lịch sử.

Thu thập velocity lịch sử

Lấy story points completed của 3 sprint gần nhất trong board "PLAT Sprint Board".
Với mỗi sprint, cho biết: tổng story points ban đầu commit, tổng story points
hoàn thành, và số issue bị carry-over sang sprint sau.

Agent gọi search JQL riêng cho từng sprint đã đóng (Jira không có tool tổng hợp velocity sẵn, agent phải tự tính dựa trên danh sách issue trả về), rồi tính trung bình trong phần suy luận của chính nó.

Lấy và lọc backlog

Lấy toàn bộ backlog của board PLAT Sprint Board, sắp theo priority giảm dần.
Loại các issue: (a) có label "blocked", (b) có issue link "is blocked by"
chưa resolve, (c) chưa có estimate và priority dưới Medium.

Đề xuất danh sách issue cho sprint tới

Dựa trên velocity trung bình vừa tính và backlog đã lọc, đề xuất danh sách
issue cho sprint tới sao cho tổng story points xấp xỉ velocity trung bình
(sai số +/-10%). Ưu tiên issue priority cao và đã có estimate. Với issue
priority cao nhưng chưa estimate, đưa vào danh sách riêng "cần estimate
trong buổi refinement" thay vì loại bỏ hoàn toàn.
Trình bày kết quả dạng bảng: Issue key | Summary | Story points | Priority | Ghi chú.

Duyệt và áp dụng

Sau khi team xem bảng đề xuất trong buổi planning và điều chỉnh (bỏ/thêm issue theo ý kiến thực tế mà AI không có context — ví dụ ai đang nghỉ phép, dependency với team khác), mới ra lệnh áp dụng:

Thêm các issue sau vào sprint mới "Sprint 24" của board PLAT: PLAT-501,
PLAT-503, PLAT-508, PLAT-512 (danh sách đã được team chốt trong buổi planning).
Với PLAT-515 và PLAT-517 (priority cao, chưa estimate), gắn label
"needs-estimate" và thêm comment "Cần estimate gấp trong buổi refinement tuần này."

Lưu ý: danh sách issue key trong lệnh áp dụng nên là danh sách đã được người chốt sau khi thảo luận, không phải copy thẳng nguyên bảng AI đề xuất — đây chính là điểm phân biệt giữa "AI hỗ trợ ra quyết định" và "AI tự ra quyết định".

Mẹo: Luôn yêu cầu agent tách riêng danh sách "issue priority cao nhưng chưa estimate" thay vì loại bỏ âm thầm khỏi đề xuất sprint — đây thường là các issue rủi ro cao (bug nghiêm trọng mới phát hiện, chưa ai ước lượng kỹ) mà team dễ bỏ sót nếu AI tự lọc bỏ theo tiêu chí "chưa có estimate" mà không cảnh báo riêng.

Bước 2: Tự động Phân loại Bug, Gán Priority và Label

Trong suốt sprint, bug mới liên tục được report vào backlog thiếu thông tin phân loại. Đây là tác vụ lặp lại nhiều, tốn thời gian thủ công, và rất phù hợp để AI hỗ trợ đề xuất trước khi người duyệt.

Prompt triage hàng loạt

Lấy tất cả issue type "Bug" trong project PLAT, status "Backlog" hoặc
"To Do", chưa có label nào. Với mỗi issue:
1. Đọc summary + description.
2. Gợi ý priority: Highest (crash/mất dữ liệu/security), High (chức năng
   chính không dùng được), Medium (ảnh hưởng một phần, có workaround),
   Low (UI/UX nhỏ, không ảnh hưởng chức năng).
3. Gợi ý 1-2 label trong bộ: frontend, backend, api, database, performance, security, ux.
4. Nếu description có nhắc rõ tên module/service, gợi ý component tương ứng.
Trình bày dạng bảng: Issue key | Summary | Priority đề xuất | Label đề xuất | Lý do ngắn.

Review và áp dụng theo lô

Không nên áp dụng toàn bộ bảng đề xuất tự động — nên chia theo mức độ tin tưởng: các issue AI đề xuất rõ ràng, có lý do cụ thể và priority thấp/trung bình có thể áp dụng theo lô; các issue được gợi ý Highest/High nên có người review riêng vì hậu quả sai sót lớn hơn (bug nghiêm trọng bị gán nhầm priority thấp có thể bị bỏ quên nhiều ngày).

Với các issue trong bảng có priority đề xuất là Medium hoặc Low, áp dụng
priority và label như đã đề xuất, thêm comment "Auto-triaged by AI, review
lại nếu chưa chính xác."
Với các issue có priority đề xuất Highest hoặc High, KHÔNG áp dụng, chỉ
liệt kê riêng ra để tôi review tay.

Xử lý bug trùng lặp (duplicate detection)

Trong danh sách bug trên, tìm các issue có summary/description mô tả
cùng một vấn đề (ví dụ cùng nhắc "checkout timeout" hoặc "login fails on
Safari"). Gợi ý issue nào nên giữ làm "master", issue nào nên link
"duplicates" và đóng.

Agent chỉ có thể so sánh dựa trên nội dung text — không có tool "detect duplicate" có sẵn trong Jira MCP — nên với các case không rõ ràng, luôn cần người xác nhận trước khi đóng issue thật.

Mẹo: Chia rõ ngưỡng tin tưởng theo priority khi tự động áp dụng đề xuất triage — cho phép auto-apply với priority thấp để tiết kiệm thời gian, nhưng luôn giữ review tay cho priority cao. Sai sót ở nhóm priority thấp dễ sửa và ít ảnh hưởng; sai sót ở nhóm priority cao có thể khiến bug nghiêm trọng bị trì hoãn xử lý.

Bước 3: Cập nhật Issue Jira Theo Thời gian Thực Trong Quá trình Phát triển

Giai đoạn này diễn ra liên tục trong ngày làm việc — không phải một tác vụ chạy một lần như hai bước trên, mà là thói quen cập nhật Jira song song với việc code, để dữ liệu sprint luôn phản ánh đúng thực tế.

Cập nhật trạng thái ngay khi bắt đầu/kết thúc một task

Tôi bắt đầu làm PLAT-482. Chuyển status sang "In Progress" và gán
assignee là tôi nếu chưa có.
Tôi vừa push code và tạo PR cho PLAT-482 (link: github.com/org/repo/pull/213).
Chuyển sang "In Review", thêm comment kèm link PR và tóm tắt thay đổi chính
dựa trên diff hiện tại.

Việc để agent tự viết tóm tắt thay đổi từ diff giúp comment trên Jira có chất lượng đồng đều hơn so với việc kỹ sư bận rộn chỉ gõ vài chữ qua loa — nhưng vẫn nên đọc lại trước khi agent gửi, vì agent có thể tóm tắt sai trọng tâm nếu diff lớn và phức tạp.

Cập nhật khi phát sinh blocker giữa sprint

PLAT-490 đang bị block vì API bên team Payments chưa deploy endpoint mới.
Thêm label "blocked", comment mô tả lý do, và link issue liên quan nếu
team Payments có issue tương ứng trong project PAY.

Cập nhật kịp thời giúp burndown chart và báo cáo sprint phản ánh đúng lý do trễ, tránh tình trạng đến cuối sprint mới phát hiện nhiều issue bị block âm thầm không ai theo dõi.

Tổng hợp báo cáo cuối ngày/cuối sprint

Tổng hợp tất cả issue tôi đã cập nhật trạng thái hôm nay trong project PLAT.
Với mỗi issue, cho biết trạng thái cũ → mới, và có comment gì đáng chú ý không.
Sprint 24 sắp kết thúc. Liệt kê issue nào sẽ carry-over sang sprint sau,
kèm lý do (blocked, chưa xong, chưa test) dựa trên comment gần nhất của issue đó.

Báo cáo carry-over tự động này là input tốt cho buổi retro — giúp team nhìn lại nguyên nhân trễ theo dữ liệu thật thay vì chỉ dựa vào trí nhớ.

Mẹo: Tạo thói quen (không nhất thiết phải tự động hoá hoàn toàn) yêu cầu agent cập nhật Jira ngay tại các mốc chuyển trạng thái tự nhiên trong ngày — bắt đầu task, tạo PR, gặp blocker — thay vì dồn lại cập nhật một lần cuối ngày. Cập nhật rời rạc nhưng đúng lúc giúp dữ liệu sprint chính xác hơn nhiều so với cập nhật dồn, và giảm hẳn tình trạng burndown chart "đứng yên" rồi nhảy vọt vào cuối sprint.

Mẹo Hay

  • Luôn giữ pattern "read → propose → human approve → write" ở cả ba bước — đừng để agent tự động hoàn toàn từ đề xuất đến áp dụng, đặc biệt với sprint planning và priority cao trong triage.
  • Ghi lại các prompt đã dùng tốt trong workflow này thành một file playbook chung của team (docs/jira-mcp-sprint-workflow.md), cập nhật mỗi khi phát hiện prompt cần điều kiện chặt hơn.
  • Theo dõi định kỳ (ví dụ mỗi 2-3 sprint) mức độ chính xác của đề xuất AI so với quyết định cuối của người — nếu tỷ lệ AI đề xuất đúng ngày càng cao ở một loại tác vụ cụ thể (ví dụ gán label), có thể tăng dần mức tự động cho tác vụ đó.
  • Đừng dùng workflow này để thay thế hoàn toàn buổi sprint planning hoặc retro có mặt người — AI thiếu context ngoài Jira (nghỉ phép, dependency ngầm giữa team, độ phức tạp thực tế) mà chỉ con người mới nắm được.

Mẹo: Sau vài sprint áp dụng workflow này, tổ chức một buổi retro riêng chỉ để đánh giá chính AI workflow — hỏi team: bước nào AI đề xuất hữu ích nhất, bước nào gây nhiễu hoặc sai nhiều, prompt nào cần viết lại. Workflow AI-assisted cũng cần được cải tiến liên tục như bất kỳ process nào khác của team.