# PMR — Architecture Review / Post-mortem — | | | |---|---| | **Loại** | 🔄 Đánh giá định kỳ *(ATAM rút gọn)* / 🚨 Post-mortem sau sự cố | | **Version** | 1.0 | | **Date** | YYYY-MM-DD | | **Author** | (skill sa-4-evolution) | | **Status** | 🟡 Draft | | **Approved by** | Tech Lead: — · EA: — | | **Source** | CONF_… · QAS_… · ADR-… · log sự cố … | | **Scope** | Kỳ … / Sự cố `INC-…` | | **Confidence** | 🟢 | ## Change Log | Version | Date | Người sửa | Thay đổi | |---|---|---|---| | 1.0 | | | Bản đầu | --- # CHẾ ĐỘ A — Đánh giá định kỳ (ATAM rút gọn) *Dùng mỗi quý. Xoá phần B nếu dùng chế độ này.* ## A1. `QAS` còn đúng không *Nhu cầu đổi thì thuộc tính chất lượng cũng đổi. `QAS` viết một năm trước có thể đang bảo vệ thứ không ai cần nữa.* | `QAS` | Còn đúng | Lý do | Hành động | |---|---|---|---| | `QAS-001` | ✅ | | | | `QAS-006` | ❌ thừa | Tính năng đã bỏ | Đánh dấu `[DROPPED]`, giữ ID | | — | ❌ thiếu | Nhu cầu mới: … | Thêm `QAS-nnn` | ## A2. Điểm nhạy cảm *Chỗ một thay đổi nhỏ làm một thuộc tính chất lượng đổi nhiều. Đây là chỗ phải cẩn thận nhất khi sửa, và là chỗ phải có `FIT` bảo vệ.* | # | Điểm | Thuộc tính bị ảnh hưởng | Thay đổi nhỏ nào cũng gây tác động lớn | Có `FIT` bảo vệ | |---|---|---|---|---| | 1 | | `QAS-nnn` | | ☐ | ## A3. Điểm đánh đổi *Chỗ cải thiện thuộc tính này làm hỏng thuộc tính kia. Phải được nói ra để người sau không "tối ưu" một chiều rồi phá chiều còn lại.* | # | Điểm | Cải thiện | Đánh đổi bằng | Cân bằng hiện tại | Ai quyết | |---|---|---|---|---|---| | 1 | | `QAS-nnn` | `QAS-nnn` | | PO | ## A4. `ADR` chạm điều kiện xét lại | `ADR` | Điều kiện (§7 của ADR) | Ngưỡng | Thực tế | Chạm chưa | Hành động | |---|---|---|---|---|---| ## A5. Rủi ro mới | Nguồn | Rủi ro | Mức | Hành động | `ARISK` | |---|---|---|---|---| | Vendor | *(đổi giá, đổi điều khoản, ngừng dịch vụ)* | | | | | Vòng đời công nghệ | *(phiên bản hết hỗ trợ, thư viện ngừng bảo trì)* | | | | | Tuân thủ | *(luật mới, chuẩn kiểm toán mới)* | | | | | Nhân sự | *(người duy nhất biết một phần hệ thống)* | | | | | Quy mô | *(tải sắp vượt ngưỡng thiết kế)* | | | | ## A6. Kết luận định kỳ | | | |---|---| | **Kiến trúc còn phù hợp không** | ✅ còn / ⚠️ còn nhưng có điểm phải xử lý / ❌ cần vòng thiết kế mới | | **Ba việc quan trọng nhất** | ⟶ `TRM` | | **Có cần mở vòng `sa-1-context` mới không** | ☐ · vì sao | --- # CHẾ ĐỘ B — Post-mortem kiến trúc sau sự cố *Chỉ cho sự cố có nguyên nhân kiến trúc. Post-mortem vận hành (dòng thời gian, cách xử lý, hành động khắc phục ngay) thuộc SRE — tài liệu này không lặp lại phần đó. Xoá phần A nếu dùng chế độ này.* ## B1. Tham chiếu | | | |---|---| | **Sự cố** | `INC-…` | | **Post-mortem vận hành** | *(đường dẫn — đọc trước tài liệu này)* | | **Ảnh hưởng** | … phút · … người dùng · … giao dịch | | **Ngân sách lỗi tiêu tốn** | … / … phút của tháng | ## B2. Ba câu hỏi kiến trúc > 🔴 **Không đổ lỗi cho người.** "Dev quên đặt timeout" là triệu chứng. Câu hỏi kiến trúc là > "vì sao hệ thống cho phép một lời gọi không timeout tồn tại, và làm sao để lần sau không > thể". Câu trả lời thường là một `FIT` mới, không phải một lời nhắc nhở. ### Câu 1 — Kiến trúc đã CHO PHÉP sự cố này ở chỗ nào | Điều kiện cho phép | Ở đâu | Có trong thiết kế không | |---|---|---| | | `SAD` §… / `FAIL` `FM-nn` / không có ở đâu cả | | ### Câu 2 — Thiết kế đã dự đoán tình huống này chưa | | | |---|---| | **Có trong `FAIL` không** | ☐ có (`FM-nn`) — vậy vì sao biện pháp không hiệu lực? · ☐ không — đây là điểm mù | | **Có `QAS` liên quan không** | | | **Có `ASM` nào sai không** | `ASM-nn`: … | **Nếu ĐÃ có trong thiết kế mà vẫn xảy ra** — vấn đề nằm ở một trong ba: | | Kiểm | |---|---| | Biện pháp không được cài đặt | ☐ | | Cài đặt nhưng tham số sai *(timeout, ngưỡng)* | ☐ | | Cài đặt đúng nhưng không đủ *(giả định về quy mô sai)* | ☐ | ### Câu 3 — Sửa ở tầng nào | Tầng | Sửa gì | Ngăn được lần sau | Chi phí | Chọn | |---|---|---|---|---| | Code | | chỉ chỗ này | | ☐ | | Cấu hình | | chỉ chỗ này | | ☐ | | **Kiến trúc** | | cả lớp vấn đề | | ☐ | | Quy trình / bài kiểm tự động | | cả lớp vấn đề, không phụ thuộc trí nhớ | | ☐ | 🔴 **Sửa ở tầng code chỉ ngăn được đúng lần này.** Hỏi thêm: *"Còn bao nhiêu chỗ khác trong hệ thống có cùng vấn đề?"* — nếu > 1 thì phải sửa ở tầng kiến trúc hoặc bài kiểm. ## B3. Chỗ khác có cùng vấn đề | Chỗ | Đã kiểm | Có cùng vấn đề | Xử lý | |---|---|---|---| ## B4. Hành động | # | Hành động | Tầng | Chủ | Hạn | Ngăn được gì | Ghi ở đâu | |---|---|---|---|---|---|---| | 1 | | `FIT` mới | | | cả lớp lỗi này | `FIT-nn` | | 2 | | `ADR` mới | | | | `ADR-nnn` | | 3 | | cập nhật `FAIL` | | | | `FM-nn` | ## B5. Cập nhật tài liệu | Tài liệu | Cập nhật gì | Đã làm | |---|---|---| | `FAIL` | Thêm `FM-nn` cho tình huống này | ☐ | | `QAS` | Thêm `QAS-nnn` về thời gian phát hiện | ☐ | | `ADR-nnn` | Bổ sung hệ quả chưa lường trước vào §5 | ☐ | | `ASM` | Sửa giả định sai, rà mọi thứ dựa trên nó | ☐ | | `AGD` | Thêm ràng buộc | ☐ | *Không sửa quyết định trong `ADR` cũ — chỉ bổ sung hệ quả quan sát được. Quyết định sai ⇒ ADR mới có `Supersedes:`.* --- ## Bài học *(cả hai chế độ)* | Bài học | Áp dụng vào | Ai chịu trách nhiệm | |---|---|---| | | dự án này / dự án sau / chuẩn chung của tổ chức | | ## Open Questions | ID | Câu hỏi | Hỏi ai | Từ ngày | Chặn gì | |---|---|---|---|---|