PHẦN 3 — QUY TRÌNH BẢY GIAI ĐOẠN
G0 Tiếp nhận → G1 Làm rõ → G2 Chốt yêu cầu → G3 Đặc tả → G4 Thực thi → G5 Nghiệm thu → G6 Đo lường
(BA+PM) (BA+AI) (BA+PM+KH) (DEV→BA) (DEV+AI) (PM+AI) (PM+AI)

Chú giải màu:
- xám = hai vai trò cùng làm
- tím = BA chủ trì
- xanh lá = DEV chủ trì
- cam đất = PM chủ trì
G3 màu xám vì đây là giai đoạn duy nhất DEV và BA phải cùng ngồi xuống chốt một tài liệu. Ba đường nét đứt là vòng lặp ngược; đường G3 → G1 đáng giá nhất — nó bắt lỗi yêu cầu khi chi phí sửa còn là năm phút.
G0 — TIẾP NHẬN YÊU CẦU (BA + PM)
| Bước | Người | Hành động |
|---|---|---|
| G0.1 | BA + PM | Họp khách hàng. Người không dẫn dắt sẽ ghi chép. |
| G0.2 | BA | Trong 24h: đổ nguyên liệu thô vào 00-inbox/meetings/YYYY-MM-DD-<chủ đề>.md. Không diễn giải, không làm đẹp. |
| G0.3 | BA | Đính kèm file khách hàng gửi vào 00-inbox/attachments/. |
| G0.4 | PM | Ghi các cam kết về thời gian và phạm vi vào cuối biên bản. |
Đầu ra: biên bản thô. Commit ngay. Không cho AI xử lý ở bước này — nguyên liệu thô là bằng chứng, khi hai tháng sau có tranh cãi "khách hàng có nói vậy không" thì cần bản gốc chưa qua diễn giải.
G1 — LÀM RÕ YÊU CẦU (BA + AI)
| Bước | Người | Hành động |
|---|---|---|
| G1.1 | BA + AI | /clarify — AI đọc 00-inbox/, sinh câu hỏi làm rõ, phân mức P1/P2/P3. |
| G1.2 | BA | Duyệt và cắt gọt. Giữ tối đa 5–7 câu mỗi lượt gửi khách hàng. |
| G1.3 | BA | Ghi 01-analysis/open-questions.md, trạng thái open. Gửi khách hàng. |
| G1.4 | BA | Khách hàng trả lời → ghi clarification-log.md → chuyển resolved. |
| G1.5 | BA + AI | Dựng as-is / to-be, vẽ flowchart. BA kiểm chứng lại với khách hàng. |
| G1.6 | BA + AI | Bổ sung glossary.md. |
Điều kiện thoát: không còn open question mức P1.
Ba mức Open Question dùng xuyên suốt quy trình:
| Mức | Định nghĩa | Xử lý |
|---|---|---|
| P1 | Không trả lời thì không code được | Chặn |
| P2 | Ảnh hưởng thiết kế | Mang theo kèm giả định ghi rõ ở PRD mục 10 |
| P3 | Chi tiết nhỏ | Hỏi sau |
G2 — CHỐT YÊU CẦU (BA + PM + khách hàng)
| Bước | Người | Hành động |
|---|---|---|
| G2.1 | BA + AI | Viết PRD vào 02-requirements/prd/FE-XXX-<slug>.md. Mỗi AC phải có mã `FE-XXX-AC-YY`. |
| G2.2 | BA | Chạy self-review checklist (Phần 5). |
| G2.3 | PM | Review ở góc độ: đo lường được không, ước lượng được không, có trong hợp đồng không. |
| G2.4 | BA + PM | Trình khách hàng. Duyệt → status: baselined, gắn tag git FE-001-v1.0. |
| G2.5 | BA | Tạo GitLab issue, link PRD tại tag baseline, dán checklist AC ID. |
| G2.6 | PM | Xếp Milestone, gán prio::, assignee. Chuyển status::spec. |
Đầu ra: PRD baseline + issue có checklist AC. Chưa ước lượng ở giai đoạn này — ước lượng trước khi có spec là đoán mò, DEV chưa biết mình phải xử lý bao nhiêu trường hợp biên.
Toàn bộ luồng yêu cầu G0 → G2:

Luồng này không còn kết thúc ở `ready-for-dev` như v1.0 — nó dừng ở status::spec và bàn giao sang G3. Điều kiện thoát vòng lặp làm rõ vẫn là hết câu hỏi mức P1, không phải hết mọi câu hỏi.
G3 — ĐẶC TẢ (DEV sinh → BA duyệt)
Đây là bản dịch từ ngôn ngữ nghiệp vụ sang ngôn ngữ kiểm chứng được. Là hợp đồng giữa BA và DEV, và là artifact duy nhất cả hai con AI cùng đọc trước khi làm việc.
| Bước | Người | Hành động |
|---|---|---|
| G3.1 | DEV + AI | /spec — AI đọc PRD tại tag baseline + business-rules.md + glossary.md, sinh spec draft cho từng AC. |
| G3.2 | DEV | Rà từng mục: đủ Given / When / Then chưa? có dữ liệu mẫu cụ thể chưa? có liệt kê trường hợp biên chưa? |
| G3.3 | DEV | Ghi lại mọi chỗ phải đoán vào mục "Câu hỏi phát sinh" cuối file spec. Đây là sản phẩm giá trị nhất của giai đoạn này. |
| G3.4 | DEV | Mở MR đưa spec vào 02-requirements/spec/FE-XXX-spec.md, tag BA review. |
| G3.5 | BA | Duyệt từng AC. Ba khả năng: đúng ý → approve · DEV hiểu sai → comment sửa · PRD thật sự thiếu → quay lại G1, hỏi khách hàng. |
| G3.6 | BA + DEV | Chốt. Merge MR, đặt status: approved, gắn tag git FE-001-spec-v1.0. |
| G3.7 | DEV | Ước lượng /estimate, thống nhất weight với BA. |
| G3.8 | PM | Chạy /dor-check. Đạt → status::ready-for-dev. |
Đầu ra: spec đã duyệt + ước lượng đáng tin.

Vì sao DEV viết spec chứ không phải BA. Nghe ngược, nhưng lý do rất thực tế. Bắt DEV viết lại yêu cầu dưới dạng kiểm chứng được sẽ ép DEV đọc kỹ PRD, và mọi chỗ hiểu sai lộ ra ngay tại đây. Nếu BA viết cả spec, DEV vẫn có thể đọc lướt rồi code theo cách hiểu riêng — và không ai biết cho tới lúc UAT. Bước BA duyệt spec là lần duy nhất trong cả quy trình có hai người cùng đọc một mô tả và xác nhận "tôi hiểu giống anh".
Ba nhánh khi BA đọc spec:
| Tình huống | Xử lý |
|---|---|
| Đúng ý BA | Approve, merge, gắn tag |
| DEV hiểu sai PRD | Comment, DEV sửa spec, lặp lại — PRD giữ nguyên |
| PRD thật sự thiếu | Quay về G1 hỏi khách hàng, sau đó PRD lên version mới |
Phân biệt hai trường hợp cuối rất quan trọng. Nhầm "PRD thiếu" thành "DEV hiểu sai" sẽ khiến cùng một lỗ hổng tài liệu lặp lại ở mọi feature sau.
Definition of Ready — điều kiện gắn status::ready-for-dev:
- ☐ Issue link tới PRD tại tag baseline cụ thể
- ☐ Spec đã `approved`, tag `FE-XXX-spec-vX.Y`
- ☐ Mọi AC trong PRD đều có mục tương ứng trong spec, không sót
- ☐ Mục "Câu hỏi phát sinh" trong spec đã đóng hết mức P1
- ☐ Checklist AC ID đã có trong issue description
- ☐ API contract và thay đổi DB đã mô tả
- ☐ Có wireframe nếu có UI
- ☐ Đã có
weight,estimate,milestone,assignee,module::,prio::
🔒 Luật cứng: DEV không bắt đầu code khi spec chưa approved.
G4 — THỰC THI (DEV + AI)
| Bước | Người | Hành động |
|---|---|---|
| G4.1 | DEV | Lấy issue ready-for-dev, prio cao nhất. Chuyển status::in-dev. |
| G4.2 | DEV + AI | Nạp context theo thứ tự: issue → spec → PRD tại tag → glossary → business rules → code hiện tại. |
| G4.3 | DEV + AI | Viết tech note vào 04-dev/tech-notes/FE-XXX-tech-note.md. |
| G4.4 | DEV + AI | Viết test trước, mỗi AC một test, tên test chứa mã AC. |
| G4.5 | DEV + AI | Tạo branch feature/FE-001-slug. Code cho test pass. |
| G4.6 | DEV | Tick checklist AC trong issue khi từng mục xong. |
| G4.7 | DEV | /spend cập nhật mỗi ngày, không dồn cuối sprint. |
| G4.8 | DEV + AI | Chạy /trace — script đối chiếu AC ↔ test, không AC nào thiếu. |
| G4.9 | DEV | Mở MR, Closes #42, kèm bảng đối chiếu AC ↔ file ↔ test. Chuyển status::mr-review. |
| G4.10 | DEV | Merge → deploy staging → status::qc. |
Spec đứng trước PRD trong thứ tự nạp context. Spec chính xác hơn và đã được duyệt; PRD lúc này là tài liệu tham chiếu bối cảnh. Nếu ở G4.2 phát hiện spec vẫn thiếu — comment vào issue, gắn status::spec, trả về G3. Không tự suy diễn rồi code.
G5 — NGHIỆM THU (PM + AI)
| Bước | Người | Hành động |
|---|---|---|
| G5.1 | PM + AI | AI đọc spec (không phải PRD) → sinh test case vào 05-qa/test-cases/FE-XXX-tc.md. Mỗi test case gắn mã AC. |
| G5.2 | PM | Bổ sung case nghiệp vụ mà AI không biết. |
| G5.3 | PM | Test trên staging theo test case. Ghi pass/fail. |
| G5.4 | PM | Lỗi → issue type::bug, Related to #42, phân Sev1–Sev4, ghi defect-log.md. |
| G5.5 | PM + AI | Chạy /trace sinh 06-reports/trace-matrix.md. Đối chiếu DoD. |
| G5.6 | PM + BA | Demo khách hàng. Biên bản UAT vào 05-qa/uat/UAT-round-XX.md. |
| G5.7 | PM | UAT pass → status::done, đóng issue. |
Sinh test case từ spec chứ không từ PRD là thay đổi quan trọng. PRD viết bằng ngôn ngữ nghiệp vụ nên test case sinh ra dễ mơ hồ; spec đã có sẵn Given/When/Then và dữ liệu mẫu nên test case bám sát được.
Toàn bộ luồng thực thi G4 → G5:

Definition of Done:
- ☐ MR đã merge, không còn comment chưa xử lý
- ☐ Tech note khớp code thực tế
- ☐ Mọi AC trong spec đều có test tương ứng — script `/trace` pass
- ☐ Checklist AC trong issue đã tick đủ
- ☐ Không còn defect Sev1/Sev2 mở
- ☐ Deploy staging thành công
- ☐
/spendghi nhận đầy đủ - ☐ Biên bản UAT có xác nhận khách hàng (với
type::feature)
Phân mức defect:
| Mức | Định nghĩa | Chặn nghiệm thu? |
|---|---|---|
| Sev1 | Chặn nghiệp vụ, không có cách khác | Có |
| Sev2 | Sai nghiệp vụ nhưng có workaround | Có |
| Sev3 | Lỗi nhỏ, không ảnh hưởng nghiệp vụ | Không |
| Sev4 | Mỹ quan, chính tả | Không |
G6 — ĐO LƯỜNG (PM + AI)
| Bước | Người | Hành động |
|---|---|---|
| G6.1 | PM | Export GitLab vào 06-reports/raw/. |
| G6.2 | PM + AI | /weekly — AI đọc raw data + repo, sinh báo cáo. |
| G6.3 | PM | Kiểm chứng số liệu, bổ sung nhận định định tính. |
| G6.4 | PM | Gửi team + khách hàng. Lưu 06-reports/weekly/YYYY-Www.md. |
| G6.5 | PM + AI | Quét rủi ro sớm (Phần 6). |
G7 — LUỒNG NGOẠI LỆ: CHANGE REQUEST
Khách hàng đổi yêu cầu sau baseline
→ BA ghi 02-requirements/change-requests/CR-XXX.md
→ BA + AI phân tích tác động: module nào, AC nào đổi, issue nào làm lại
→ DEV cập nhật spec cho các AC bị ảnh hưởng, ước lượng lại
→ PM tính chi phí + tác động tiến độ, trình khách hàng
→ Duyệt → PRD v1.1 + tag mới → spec v1.1 + tag mới → issue type::cr
→ Không duyệt → CR status rejected, LƯU LẠI

Một CR kéo theo hai tài liệu phải lên version: PRD và spec. Trường prd_baseline trong header spec là thứ giúp phát hiện chỗ nào còn bám vào bản cũ — đưa việc kiểm trường này vào CI thì không ai quên được.
Ba điểm dễ sai:
- CR bị từ chối vẫn phải lưu. Nhiều team xóa đi cho gọn, rồi sáu tháng sau khách hàng hỏi "sao tính năng này không có" — không còn gì chứng minh là họ đã từ chối.
- Thay đổi nhỏ vẫn cần CR. Khách hàng thường mở đầu bằng "nhờ tí thôi". Hai mươi cái nhỏ cộng lại là một tháng công không có trong hợp đồng.
- Ước lượng CR phải gồm phần làm lại. Chi phí thật không phải code phần mới, mà là code lại phần đã xong cộng test lại vùng ảnh hưởng.