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

9.3 KiB
Raw Blame History

Hướng dẫn sử dụng — sa-4-evolution (Giai đoạn 4)

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

Hệ thống đã chạy thật. Câu hỏi bây giờ không còn là "thiết kế thế nào" mà là "kiến trúc ta thiết kế và kiến trúc đang chạy có phải một không".

Đầu vào là số liệu vận hành thật. Đầu ra là bảng đối chiếu cam kết × thực tế, và một roadmap kỹ thuật PO duyệt được.

Không làm ở giai đoạn này: thiết kế lại hệ thống (đó là vòng mới, quay về sa-1-context), post-mortem vận hành (thuộc SRE — ở đây chỉ làm phần kiến trúc).

Khi nào gọi

Tình huống Có nên gọi
Một tháng sau go-live ✅ --focus conf — lần đối chiếu đầu tiên
Định kỳ hàng tháng ✅ --focus conf
Hoá đơn cloud tăng bất thường ✅ --focus conf, đọc §b trước
Vừa có sự cố nghiêm trọng ✅ --focus review sau khi SRE xong post-mortem vận hành
Lập kế hoạch quý ✅ --focus roadmap
Đánh giá kiến trúc định kỳ ✅ --focus review mỗi quý
Cần thiết kế một hệ thống mới ❌ /sa-1-context
Chưa có telemetry gì ⚠️ Chạy được, nhưng CONF sẽ toàn "chưa đo được" — đó cũng là một phát hiện

Cú pháp

/sa-4-evolution <PROJECT> [--focus conf|roadmap|review] [--period 2026-09] [--out <path>] [go]
Tham số Ý nghĩa
--focus conf Đối chiếu QAS/TCO/sự cố/drift với thực tế
--focus roadmap Lập TRM từ phát hiện của CONF
--focus review Đánh giá kiến trúc định kỳ hoặc post-mortem sau sự cố
--period <YYYY-MM> Kỳ đối chiếu, mặc định tháng gần nhất
go Bỏ bước dừng xác nhận input
/sa-4-evolution Settlement --focus conf --period 2026-09
/sa-4-evolution Settlement --focus review   "sự cố INC-2026-0912: batch đối soát chạy 3 giờ, chặn báo cáo sáng"

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

🔴 Đây là giai đoạn phụ thuộc dữ liệu nhiều nhất. Không có số thì skill chỉ in ra bảng trống — và đó là kết luận, không phải lỗi.

Cần Lấy ở đâu Dùng cho
Số đo p50/p95/p99 các thao tác chính APM / dashboard QAS × thực tế
Uptime thật + tổng downtime trong kỳ uptime monitor QAS sẵn sàng
Thông lượng thật, đỉnh trong kỳ metric QAS thông lượng
Hoá đơn cloud chi tiết theo dịch vụ cổng thanh toán cloud TCO × thực tế
Danh sách sự cố trong kỳ + nguyên nhân log sự cố / ticket Sự cố × ADR
Lịch sử FIT trên CI CI Drift
Trace/log để biết interface thật đang gọi nhau thế nào tracing Drift

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

sa-output/<PROJECT>/04-evolution/
├── CONF_<PROJECT>_<YYYY-MM>.md   ← mỗi kỳ một file, không ghi đè
├── TRM_<PROJECT>_v1.0.md         ← roadmap, lên version
└── PMR_<PROJECT>_<YYYY-Qn>.md    ← đánh giá định kỳ
    PMR_<PROJECT>_<INC-id>.md     ← post-mortem sau sự cố

Đọc bảng đối chiếu thế nào

QAS × thực tế · kỳ 2026-09
┌──────────┬──────────────────┬──────────────┬──────────┬─────────────────────────┐
│ QAS-001  │ p95 ≤ 300ms      │ p95 = 240ms  │ ✅ đạt   │                         │
│ QAS-004  │ batch ≤ 45 phút  │ 52 phút      │ ❌       │ TD-05 · TRM mục 1       │
│ QAS-007  │ SLA 99.9%        │ 99.94%       │ ✅ đạt   │ downtime 26/43 phút     │
│ QAS-011  │ cảnh báo ≤ 3 phút│ chưa đo được │ ⚠️       │ thiếu bài đo — bài học  │
└──────────┴──────────────────┴──────────────┴──────────┴─────────────────────────┘
  • ✅ đạt · ❌ không đạt ⇒ vào TRM · ⚠️ chưa đo được ⇒ AG2 định nghĩa cách đo không khả thi, hoặc observability thiếu

⚠️ không xấu hơn ❌. Nó xấu hơn: ❌ ta biết mình đang ở đâu, ⚠️ ta không biết gì cả.

Ví dụ hội thoại

Bạn:    /sa-4-evolution Settlement --focus conf --period 2026-09
        Đính kèm: hoá đơn AWS tháng 9, export dashboard Grafana, log sự cố

Claude: [Bước 0]
        Input: QAS v1.1 ✅, TCO v1.0 ✅, hoá đơn AWS 09/2026, Grafana export, 3 sự cố.
        Đủ để đối chiếu QAS (8/11 mục) và TCO (đầy đủ).
        Thiếu: bài đo cho QAS-009 và QAS-011 (observability) → sẽ ghi "chưa đo được".
        Xác nhận ghi vào CONF_Settlement_2026-09.md?

Bạn:    ok

Claude: ② QAS × thực tế: 6 đạt · 2 không đạt · 3 chưa đo được

        ③ TCO × hoá đơn:
        | Compute        | ước 4,2tr | thật 4,0tr | −5%   ✅ |
        | CSDL           | ước 3,5tr | thật 3,3tr | −6%   ✅ |
        | Observability  | ước 1,0tr | thật 3,8tr | +280% 🔴 |
        | Egress         | ước 0,5tr | thật 2,1tr | +320% 🔴 |
        | Tổng           | ước 11tr  | thật 15,4tr| +40%     |

        Truy nguyên hai khoản vượt:
        - Observability: đang giữ log 90 ngày, INF §8 thiết kế 30 ngày.
          → drift cấu hình. Giảm về 30 ngày tiết kiệm ~2,5tr/tháng.
        - Egress: báo cáo tải file PDF trực tiếp từ service, không qua CDN.
          → không có trong thiết kế. Không thuộc 4 loại lý do hợp lệ ⇒ có thứ
            chạy mà thiết kế không biết. Cần xác nhận với dev.

        ④ Sự cố:
        - INC-0912 (batch 3 giờ)     → truy về QAS-004 không đạt, đã biết trước
        - INC-0918 (5xx 12 phút)     → truy về ASM-04 "API POS luôn trả trong 2s" SAI
                                       thực tế có lúc 30s ⇒ FM-02 timeout đặt quá cao
        - INC-0925 (sai số báo cáo)  → 🔴 ĐIỂM MÙ MỚI: cache không invalidate khi
                                       sửa đơn hàng cũ. DAT §7 không nói tới trường hợp này.

        Điểm mù mới là phát hiện giá trị nhất kỳ này → đề xuất QAS mới + FIT mới.

        ▶ Ba mục đầu cho TRM (PO xếp thứ tự):
        1. Giảm retention log về 30 ngày   · 0,5 ngày công · −2,5tr/tháng
        2. Đưa tải file qua CDN            · 3 ngày công   · −1,8tr/tháng
        3. Sửa chiến lược cache            · 5 ngày công   · ngăn tái diễn INC-0925

Lỗi thường gặp

"Không có dashboard, không đo được gì." Vậy kết luận của kỳ này là "hệ thống đang chạy mà không ai biết nó chạy thế nào" — một phát hiện nghiêm trọng và đáng trình. Mục đầu tiên của TRM là dựng observability.

"Chi phí vẫn trong ngân sách nên không cần xem." Trong ngân sách nhưng gấp 3 lần ước lượng nghĩa là mô hình chi phí sai — và nó sẽ sai tiếp, lớn hơn, khi tải tăng. Truy nguyên chênh lệch kể cả khi chưa vượt.

"Sự cố do dev quên đặt timeout, không phải lỗi kiến trúc." Câu hỏi kiến trúc không phải "ai quên" mà "vì sao hệ thống cho phép một lời gọi không timeout tồn tại". Câu trả lời thường là một FIT mới — và nó ngăn cả lớp lỗi đó, không chỉ một lần.

"PO không duyệt mục nào trong roadmap kỹ thuật." Roadmap đang viết bằng ngôn ngữ kỹ thuật. Đổi "tái cấu trúc module Order" thành "giảm 2 ngày cho mỗi tính năng chạm Order; quý tới có 6 tính năng như vậy ⇒ tiết kiệm 12 ngày". PO duyệt con số, không duyệt danh từ kỹ thuật.

"ADR-005 hoá ra sai, tôi sửa lại nội dung cho đúng." Đừng. Viết ADR mới có Supersedes: ADR-005, đổi trạng thái bản cũ thành Superseded by. Giá trị lớn nhất của ADR là ghi lại điều ta đã tin lúc đó — sửa đi là xoá mất bài học.

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

Đủ cả bốn:

  1. Bảng tự chấm AG4 toàn ✅
  2. PO + SRE + EA đã ký
  3. Mọi sự cố trong kỳ đã truy về ADR, ASM, hoặc được ghi nhận là điểm mù mới
  4. TRM đã được PO xếp thứ tự và các mục đầu đã vào backlog

Sau đó: quay lại --focus conf ở kỳ tiếp theo, hoặc mở vòng kiến trúc mới bằng /sa-1-context nếu driver kinh doanh đã đổi.

Liên quan

  • Tiêu chí gate AG4: ../sa-lifecycle/references/workflow.md §2
  • Nhịp chạy đề xuất: ../sa-lifecycle/references/workflow.md §7
  • Vòng đời ADR: ../sa-lifecycle/references/artifact-map.md §4
  • Template: templates/conformance-report.md · templates/technical-roadmap.md · templates/architecture-review.md