# ADR- — *Tên file: `adr/ADR-_.md` — ví dụ `ADR-007_chon-postgres-thay-mongo.md`* | | | |---|---| | **Status** | `Proposed` / `Accepted` / `Rejected` / `Superseded by ADR-nnn` / `Deprecated` | | **Date** | YYYY-MM-DD | | **Người quyết** | *(ai ký — theo `decision-radar.md` §5)* | | **Người đề xuất** | | | **Điểm radar** | … /10 *(chấm theo `decision-radar.md` §2)* | | **Supersedes** | — | | **Superseded by** | — | | **Liên quan** | `ASR-nnn` · `QAS-nnn` · `CON-nn` · `ADR-nnn` | > ⚠️ **ADR bất biến sau khi `Accepted`.** Muốn đổi quyết định thì viết ADR mới có > `Supersedes: ADR-` và đổi trạng thái bản cũ thành `Superseded by`. Không sửa nội dung > ADR đã Accepted, không xoá ADR đã Rejected. --- ## 1. Bối cảnh *Tình huống buộc phải quyết. Viết ở **thì hiện tại**, mô tả sự thật đang có — không viết "chúng tôi sẽ…". Người đọc sau 2 năm phải hiểu được vì sao lúc đó việc này là một vấn đề.* **Ràng buộc đang chi phối:** | Nguồn | Nội dung | |---|---| | `CON-nn` | | | `QAS-nnn` | | | `ASR-nnn` | | **Cái đã biết chắc / cái còn là giả định:** | Điều | 🟢 Đã kiểm chứng / 🔴 Giả định | Bằng chứng | |---|---|---| | | | POC-nn / bài đo / tài liệu … | ## 2. Phương án đã cân nhắc *Bắt buộc ≥ 2 phương án (quy tắc `D3`). Một phương án duy nhất không phải quyết định.* ### PA-1 — | | | |---|---| | **Mô tả** | | | **Ưu** | | | **Nhược** | | | **Chi phí đảo ngược** | *(nếu sau này sai thì sửa mất bao lâu)* | ### PA-2 — *(cùng cấu trúc)* ### Bảng so sánh | Tiêu chí *(sinh từ `QAS`/`CON`)* | PA-1 | PA-2 | |---|---|---| | | | | ## 3. Quyết định > **Chọn PA-…** *Viết ở thể khẳng định, một câu, đủ cụ thể để kiểm chứng được là có tuân thủ hay không.* **Vì sao:** *(gắn với `CON-nn` hoặc `QAS-nnn` cụ thể, không phải sở thích)* **Phạm vi áp dụng:** *(toàn hệ thống / chỉ component nào / chỉ tới khi nào)* ## 4. Phương án bị loại và lý do | Phương án | Loại vì | Gắn với | Điều kiện nào thì xét lại | |---|---|---|---| | PA-… | | `CON-nn` / `QAS-nnn` | | *"Team quen công nghệ X" là lý do hợp lệ — nhưng phải viết thành `CON-nn` có tên, để sau này biết quyết định gắn với con người chứ không phải với kỹ thuật.* ## 5. Hệ quả *Phần quan trọng nhất và bị viết sơ sài nhất. Ghi cả hệ quả tốt lẫn xấu — ADR chỉ có hệ quả tốt là ADR viết để hợp thức hoá.* **Hệ quả tích cực** - **Hệ quả tiêu cực phải sống chung** - **Cái quyết định này khoá lại** *(chi phí đảo ngược sau này)* | Muốn đổi về sau thì | Tốn | |---|---| **Việc phát sinh** | Việc | Chủ | Hạn | Ghi ở đâu | |---|---|---|---| | Cập nhật `SAD` §… | | | | | Thêm fitness function | | | `FIT-nn` | | Đào tạo team về … | | | `TCO` §5 | ## 6. Cách kiểm chứng quyết định này được tuân thủ *Quy tắc `D8`: không verify tự động được thì chỉ là khuyến nghị.* | Cách kiểm | Công cụ | Chạy ở đâu | `FIT` | |---|---|---|---| | | ArchUnit / dependency-cruiser / lint / kiểm thử tải / kiểm tra hạ tầng | CI | `FIT-nn` | Không kiểm tự động được ⇒ ghi thẳng: `⚠️ Khuyến nghị — không tự kiểm được`, và nêu cách kiểm thủ công cùng tần suất. ## 7. Điều kiện xét lại *ADR không vĩnh viễn. Ghi trước dấu hiệu nào thì phải mở lại quyết định này.* | Dấu hiệu | Ngưỡng | Ai theo dõi | |---|---|---| | | *(ví dụ: thông lượng vượt … msg/s, chi phí vượt … /tháng, team vượt … người)* | | ## 8. Tham chiếu - POC: `ARISK_… §6 POC-nn` - Bài đo: - Tài liệu ngoài: - Thảo luận: *(link biên bản họp, ngày)*