Files
sys-analysis-design/.claude/skills/ba-3-specification/GUIDE.md
Leonard-ThindPad-P50 c81f249920 init git
2026-09-08 10:26:21 +07:00

10 KiB
Raw Blame History

Hướng dẫn sử dụng — ba-3-specification (Giai đoạn 3)

Giai đoạn này giải quyết gì

Đầu vào là BACKLOG đã qua G2. Đầu ra là tài liệu mà dev code được không phải đoán và QA test được không phải hỏi.

Đây là sản phẩm chính của nghề BA, và là gate nghiêm nhất. Một chỗ mơ hồ lọt qua G3 sẽ thành bug hoặc CR — đắt hơn nhiều so với việc hỏi cho rõ ở đây.

Không làm ở giai đoạn này: quyết kiến trúc, chọn thư viện, viết test case chi tiết (QA làm từ AC), ước lượng công sức.

Khi nào gọi

Tình huống Có nên gọi
US đã qua G2, cần viết spec cho dev ✅ Chạy đầy đủ
Dev hỏi "field này bao nhiêu ký tự" liên tục ✅ Bảng field đang thiếu — chạy Bước 3
QA bảo "AC này không test được" ✅ Chạy Bước 4 để viết lại AC
Cần bảng mã lỗi thống nhất cho module ✅ Chạy Bước 5
Chỉ cần NFR hoặc chỉ cần API contract ✅ Dùng --only nfr / --only api
Backlog chưa chốt, PO còn đang đổi ý ❌ Quay lại GĐ2 — viết SRS bây giờ là viết để vứt

PART 2 thay đổi theo loại sản phẩm

🔴 Điểm khác biệt lớn nhất của giai đoạn này. PART 1 và PART 3–8 của SRS dùng chung cho mọi loại; PART 2 được nạp từ biến thể theo PRODUCT trong profile:

PRODUCT PART 2 mô tả gì Tiêu chí G3 riêng
screen Màn hình, bảng thành phần, bảng field 10 cột Hai trạng thái rỗng khác nhau; mọi thành phần có điều kiện ẩn/khoá
api-service Người tiêu thụ, khả năng, hợp đồng dữ liệu Idempotency · tương thích ngược · phân trang đã chốt
data-pipeline Luồng, data contract, chất lượng Có mục đối soát nguồn–đích; chạy lại/backfill/đến muộn đã trả lời
ml-model Bài toán, nhãn, metric + ngưỡng Tập test cách ly; mọi ngưỡng truy về chi phí nghiệp vụ; có fallback
batch-job Job, lịch, idempotency Idempotency và thất bại giữa chừng đã trả lời; có cảnh báo "job không chạy"
process-only — Không có PART 2

Một US thường có nhiều loại (màn hình + API, hoặc màn hình + job đêm) ⇒ skill nạp nhiều biến thể, mỗi cái một mục con 2.A, 2.B, 2.C.

Loại chưa có biến thể (nhúng/IoT/firmware): skill sẽ nói thẳng là PART 2 phải tự viết và đề xuất khung dựa trên biến thể gần nhất — không im lặng nhét vào biến thể sai.

Cú pháp

/ba-3-specification <US-id...> [--product <loại>] [--only srs|ac|nfr|api] [--lang vi,en,ko] [--out <path>] [go]
Tham số Ý nghĩa
<US-id...> Một hoặc vài US. Quá 3 US một lần thì chất lượng giảm rõ rệt
--product Ghi đè PRODUCT của profile cho lần chạy này. Nhiều loại: --product screen,api-service
--only Chỉ sinh một loại tài liệu
--lang Ngôn ngữ text hiển thị. Bỏ qua nếu PRODUCT không có giao diện
go Bỏ bước dừng xác nhận input

Ví dụ:

/ba-3-specification US011
/ba-3-specification US011 US012 --lang vi,ko
/ba-3-specification US011 --only api

Chuẩn bị gì trước khi gọi

Bắt buộc:

  • BACKLOG chứa US cần đặc tả
  • BR — quy tắc nghiệp vụ đã chốt
  • RBAC — ma trận phân quyền

Rất nên có:

  • Quy ước UI của dự án (nếu có) — để khỏi tự phát minh lại
  • Danh sách mã lỗi đã dùng — để tiếp số, không mở dãy mới
  • Glossary — để dùng đúng thuật ngữ
  • Wireframe/prototype nếu đã có

Nếu dự án có sẵn guideline (như GLOBAL_UI_CONVENTION.md, GLOBAL_NFR.md của Berriz), nói rõ đường dẫn khi gọi. Skill sẽ tuân thủ thay vì tự định nghĩa.

Quy trình 7 bước — bạn tham gia ở đâu

Bước Skill làm Bạn làm
1. Khung + tóm tắt Dựng khung đủ mục, viết tóm tắt cho PO Duyệt phần tóm tắt
2. Chọn & nạp biến thể PART 2 Xác định PRODUCT, nạp biến thể, nêu tiêu chí G3 riêng Xác nhận loại sản phẩm
3. Điền biến thể Dựng bảng ràng buộc, đánh dấu chỗ thiếu Đi hỏi giới hạn, mặc định, nguồn giá trị
4. AC Viết 4 nhóm, sinh bảng dữ liệu biên Đưa QA review sớm
5. Mã lỗi & text Sinh bảng, đòi nguyên văn từng chuỗi Chốt giọng văn với PO/thiết kế
6. NFR Rà 7 nhóm, đòi số đo + cách verify Hỏi người dùng ngưỡng chấp nhận được
7. API contract Đề xuất contract, đánh dấu điểm cần BE chốt Gửi BE xác nhận

🔴 Bước 3 và Bước 5 là hai bước cần bạn đi hỏi nhiều nhất. Skill sẽ liệt kê chính xác những gì còn thiếu dưới dạng OQ — đó là danh sách việc của bạn.

Bạn sẽ nhận được gì

ba-output/<PROJECT>/03-specification/
├── SRS_<US-id>_v1.0.md      ← tài liệu chính
├── AC_<US-id>_v1.0.md        ← nếu tách riêng
├── NFR_<US-id>_v1.0.md
└── API_<US-id>_v1.0.md

Cộng năm bảng in ra màn hình: truy vết US→AC→BR→field→mã lỗi · tự chấm G3 · checklist W1–W13 (có chạy lệnh quét thật) · danh sách TBD còn lại · OQ mở.

Danh sách TBD là thứ đáng nhìn nhất. Còn TBD trong bảng field hoặc bảng mã lỗi thì G3 không pass được — skill sẽ nói thẳng điều đó thay vì để bạn phát hiện ở buổi họp duyệt.

Ví dụ hội thoại

Bạn:    /ba-3-specification US011

Claude: [Bước 0]
        Input:
        | BACKLOG_Settlement_v1.0.md | US-011 định nghĩa | ✅ Baselined |
        | BR_Settlement_v1.0.md      | BR-021, BR-022    | ✅ Baselined |
        | RBAC_Settlement_v1.0.md    | 4 vai trò         | ✅ Baselined |
        | Wireframe                  | Không tìm thấy    | — |

        G2: đã qua (PO 2026-08-28, Tech Lead 2026-08-29). ✅

        Guideline dự án tôi tìm thấy:
        - Chưa thấy quy ước UI hay bộ mã lỗi. Tôi sẽ mở dãy E-STL-0001,
          cần bạn xác nhận không trùng với module khác.

        Ngôn ngữ hiển thị: bạn muốn VI, hay VI+KO?

Bạn:    VI+KO. Mã lỗi thì dùng dãy E-STL, chưa ai dùng.

Claude: [sinh SRS, in danh sách TBD]

        ⚠️ Còn 6 TBD chặn G3:
        - F01 độ dài mã cửa hàng — chưa ai chốt (OQ-021, hỏi chị Lan)
        - F04 nguồn dropdown "Loại" — lấy từ API nào? (OQ-022, hỏi anh Huy)
        - Múi giờ hiển thị createdAt (OQ-023)
        - 3 thông điệp lỗi chưa có bản KO

Lỗi thường gặp

"Skill để trống nhiều ô quá, tôi điền đại được không?" Không. Bịa một giá trị nghe hợp lý (255 ký tự, timeout 30s, giữ log 90 ngày) là cách phổ biến nhất tạo bug — vì nghe hợp lý nên không ai chất vấn, và sai thì phát hiện rất muộn. Mỗi ô trống là một OQ có người chịu trách nhiệm trả lời.

"AC của tôi chỉ có luồng thành công, vậy đủ chưa?" Chưa. Bốn nhóm là bắt buộc: thành công · validation · lỗi hệ thống · phân quyền. Nhóm "lỗi hệ thống" phải có AC "lưu thất bại thì dữ liệu đã nhập được giữ nguyên" — AC bị quên nhiều nhất và gây bực bội nhất.

"Hành vi tôi mô tả trong wireframe rồi, khỏi ghi lại nhé?" Không được (quy tắc W11). Ảnh nói bố cục, bảng nói hành vi. Viết "xem hình" ở cột hành vi là chưa đặc tả — và ảnh thì không grep được, không diff được, không dịch được.

"Field này giống US trước, tôi copy sang." Copy được, nhưng phải rà lại từng cột. Độ dài, default và thông điệp là ba thứ hay bị mang theo sai nhất. Mỗi field phải truy về một BR hoặc một câu trả lời cụ thể.

"Đặc tả 8 US một lượt cho nhanh." Quá 3 US thì các bảng bắt đầu sơ sài, và mâu thuẫn chéo giữa các US không ai phát hiện. Chia nhỏ, làm kỹ.

"NFR thì copy bộ chuẩn công ty vào là xong." Copy cả bộ làm loãng và không ai kiểm. Chỉ giữ cái áp dụng cho US này, mỗi cái phải có số đo + điều kiện đo + cách verify.

"API contract tôi tự viết, dev cứ thế code." Phải ghi rõ ⚠️ BA đề xuất — chờ BE xác nhận ở đầu file, và liệt kê điểm cần BE chốt. Contract BA đề xuất là giả định, không phải sự thật.

Ra khỏi giai đoạn này khi nào

Đủ cả năm:

  1. Không còn TBD trong bảng ràng buộc của PART 2 và bảng mã lỗi
  2. Không còn OQ mở ảnh hưởng tới hành vi hệ thống
  3. Bảng tự chấm G3 toàn ✅ — gồm cả tiêu chí riêng của biến thể PART 2 đã nạp
  4. QA xác nhận mọi AC đều test được — chữ ký hay bị bỏ qua nhất (bỏ được ở RIGOR = light)
  5. Đã ký đủ theo RIGOR: light chỉ PO · standard PO + Tech Lead + QA · strict thêm Bảo mật/Pháp chế, và API phải do BE xác nhận

Rồi bàn giao cho dev và chuyển sang /ba-4-delivery-support.

Liên quan

  • Chọn PRODUCT: ../ba-lifecycle/references/domain-profiles.md §1
  • Tiêu chí gate G3 + bảng bớt/thêm theo RIGOR: ../ba-lifecycle/references/workflow.md §2
  • Quy tắc viết W1–W13: ../ba-lifecycle/references/writing-rules.md
  • Ví dụ ở nhiều domain và nhiều PRODUCT: examples.md
  • Template: templates/srs.md · templates/srs-part2/<loại>.md · templates/acceptance-criteria.md · templates/nfr-checklist.md · templates/api-contract.md