102 lines
4.3 KiB
Markdown
102 lines
4.3 KiB
Markdown
# TDEBT — Technical Debt Register — <PROJECT>
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Cập nhật** | YYYY-MM-DD |
|
||
| **Author** | <SA> (skill sa-3-enablement) |
|
||
| **Scope** | |
|
||
|
||
> **Đây là sổ sống** — ghi thêm liên tục, không lên version. Mục đóng vẫn giữ lại.
|
||
|
||
---
|
||
|
||
## 1. Tóm tắt
|
||
|
||
| | Số mục | Tổng lãi suất/tháng | Tổng chi phí trả nợ |
|
||
|---|---|---|---|
|
||
| 🔴 Cao | | … ngày công/tháng | … ngày công |
|
||
| 🟠 Trung bình | | | |
|
||
| 🟡 Thấp | | | |
|
||
| ✅ Đã trả | | — | — |
|
||
|
||
**Ba mục nên trả trước** *(lãi suất cao / chi phí trả thấp)*: `TD-…`, `TD-…`, `TD-…`
|
||
|
||
🔴 **Cột "lãi suất" là cột làm cho nợ được ưu tiên.** Không có nó, sổ nợ chỉ tăng không giảm.
|
||
Viết bằng ngôn ngữ PM hiểu: *"mỗi tính năng chạm module này tốn thêm 2 ngày"*, *"gây trung bình
|
||
1 sự cố/tháng"*.
|
||
|
||
## 2. Phân loại
|
||
|
||
| Loại | Nghĩa | Xử lý |
|
||
|---|---|---|
|
||
| 🎯 **Có ý thức, có kế hoạch** | Chấp nhận để kịp mốc, biết rõ sẽ sửa khi nào | Ghi hạn, theo dõi |
|
||
| 🌫️ **Có ý thức, chưa có kế hoạch** | Biết là sai, chưa biết sửa thế nào | Ghi, đưa vào `TRM` |
|
||
| 💥 **Vô ý** | Phát hiện qua review hoặc `FIT` đỏ | Đánh giá rồi xếp vào 2 loại trên |
|
||
| ⚠️ **Do kiến trúc sai** | Thiết kế không khả thi | **Không phải nợ** — mở `ADR` mới, đừng ghi ở đây |
|
||
|
||
## 3. Sổ nợ
|
||
|
||
| ID | Mô tả | Loại | Nguồn | Vì sao chấp nhận | **Lãi suất** | Chi phí trả | Mức | Chủ | Hạn xét lại | Trạng thái |
|
||
|---|---|---|---|---|---|---|---|---|---|---|
|
||
| `TD-01` | | 🎯 | `DREV-012` | | +2 ngày/tính năng chạm module | 5 ngày công | 🔴 | | | Mở |
|
||
| `TD-02` | | 💥 | `FIT-01` đỏ, 12 vi phạm | | | | | | | |
|
||
|
||
**Trạng thái:** Mở · Đang trả · Đã trả (kèm ngày) · Đã chuyển thành `ADR` · Chấp nhận vĩnh viễn
|
||
|
||
🔴 Mục "sẽ sửa sau" không có **chủ** và **hạn** ⇒ không phải mục nợ hợp lệ, chặn AG3.
|
||
|
||
## 4. Chi tiết mục mức cao
|
||
|
||
### `TD-01` — <tên>
|
||
|
||
| | |
|
||
|---|---|
|
||
| **Lệch so với** | `ADR-nnn` / `AGD` §… / `QAS-nnn` |
|
||
| **Ở đâu trong code** | `<đường dẫn>` |
|
||
| **Ai chấp nhận · ngày** | |
|
||
| **Vì sao chấp nhận** | *(lý do thật: mốc nào, đánh đổi gì)* |
|
||
| **Lãi suất** | *(con số)* |
|
||
| **Rủi ro nếu để lâu** | |
|
||
| **Cách trả** | *(các bước cụ thể)* |
|
||
| **Chi phí trả** | … ngày công |
|
||
| **Điều kiện phải trả ngay** | *(dấu hiệu nào thì không hoãn được nữa)* |
|
||
| **Ngoại lệ trong `FIT`** | `FIT-nn` whitelist mục … · hạn … |
|
||
|
||
🔴 **Whitelist trong `FIT` phải có hạn.** Whitelist không hạn là cách biến nợ tạm thời thành
|
||
kiến trúc vĩnh viễn.
|
||
|
||
## 5. Nợ đã trả
|
||
|
||
| ID | Mô tả | Trả ngày | Chi phí thực tế | So với ước lượng | Bài học |
|
||
|---|---|---|---|---|---|
|
||
|
||
*Cột "so với ước lượng" giúp lần sau ước lượng đúng hơn. Nợ thường tốn hơn ước lượng ban đầu
|
||
khoảng 1,5–2 lần.*
|
||
|
||
## 6. Nợ chấp nhận vĩnh viễn
|
||
|
||
*Nợ quyết định không trả. Ghi lại để người sau không mất thời gian điều tra "sao chỗ này lạ vậy".*
|
||
|
||
| ID | Mô tả | Vì sao không trả | Ai quyết · ngày | Cần biết gì khi động vào chỗ này |
|
||
|---|---|---|---|---|
|
||
|
||
## 7. Trình bày cho PM / PO
|
||
|
||
*Bảng này dùng để đưa nợ vào sprint. Dịch sang ngôn ngữ tiến độ và rủi ro.*
|
||
|
||
| Nợ | Đang làm chậm cái gì | Chậm bao nhiêu | Trả mất | Hoà vốn sau |
|
||
|---|---|---|---|---|
|
||
| `TD-01` | mọi tính năng chạm module Order | +2 ngày/tính năng | 5 ngày | 3 tính năng |
|
||
|
||
**Câu hỏi trình PM:** *"Quý tới có bao nhiêu tính năng chạm module Order?"* — nếu ≥ 3 thì trả
|
||
nợ ngay là lựa chọn rẻ hơn, và PM tự thấy điều đó.
|
||
|
||
## 8. Rà định kỳ
|
||
|
||
| Việc | Tần suất | Ai | Lần gần nhất |
|
||
|---|---|---|---|
|
||
| Rà mục quá hạn xét lại | 2 tuần/lần | SA | |
|
||
| Cập nhật lãi suất theo thực tế | hàng tháng | SA + Tech Lead | |
|
||
| Rà whitelist `FIT` hết hạn | hàng tháng | SA | |
|
||
| Trình bảng §7 cho PM | mỗi lần lập kế hoạch sprint/quý | SA | |
|