Gọi đúng tên trước khi bàn chuyện trả
"Nợ kỹ thuật" bị dùng cho đủ thứ: code cũ, code xấu, thư viện lỗi thời, thứ kỹ sư không thích. Khi một từ chỉ mọi thứ, nó không giúp quyết định gì cả. Người làm sản phẩm nghe "nợ kỹ thuật" và hiểu là "kỹ sư muốn làm lại cho đẹp" — rồi xếp nó xuống cuối danh sách.
Định nghĩa hữu ích hơn: nợ kỹ thuật là một lối tắt hôm nay khiến những thay đổi sau này tốn hơn. Nó giống hệt một khoản vay. Bạn nhận được tốc độ ngay, và trả bằng công sức thêm về sau. Nhìn theo cách này, nợ không xấu cũng không tốt — nó là công cụ tài chính, và câu hỏi là vay có đáng không, lãi bao nhiêu, khi nào đến hạn.
Ba khái niệm mượn từ tài chính
| Khái niệm | Trong phần mềm | Đo bằng gì |
|---|---|---|
| Gốc | Công sức để làm lại phần đó cho đúng | Tuần-kỹ sư một lần |
| Lãi | Công sức thêm mỗi lần phải chạm vào phần đó, cộng chi phí sự cố nó gây ra | Tuần-kỹ sư mỗi quý |
| Kỳ hạn | Thời điểm buộc phải trả, dù muốn hay không | Ngày cụ thể hoặc ngưỡng tải |
Không phải cái gì cũ cũng là nợ cần trả
Điểm hay bị bỏ qua nhất: lãi chỉ phát sinh khi bạn chạm vào. Một module viết xấu từ năm 2019 nhưng hai năm nay không ai sửa, không gây sự cố, có lãi gần bằng không. Trả gốc cho nó là bỏ tiền ra mua sự gọn gàng, không mua tốc độ.
Ngược lại, một phần code trông không quá tệ nhưng đội nào cũng phải sửa mỗi tháng có thể đang ngốn lãi rất lớn. Vì vậy câu hỏi đầu tiên không phải "code này xấu cỡ nào" mà là "bao lâu chúng ta phải chạm vào nó một lần, và mỗi lần tốn thêm bao nhiêu".
Tính lãi bằng số — phí giao hàng ở ChởNhanh
Ở ChởNhanh (giả định), công thức tính phí giao hàng đang nằm ở ba nơi: app đặt đơn của shop hiển thị phí, hệ thống tính phí xuất hoá đơn, và hệ thống đối soát COD trừ phí khỏi tiền thu hộ. Ba nơi do ba đội viết vào ba thời điểm.
Mỗi lần kinh doanh đổi bảng giá — thêm vùng, thêm phụ phí cao điểm, khuyến mãi cho shop lớn — phải sửa cả ba nơi và kiểm thử để ba con số khớp nhau. Hưng, Engineering Manager đội Điều phối, đo lại hai quý gần nhất:
| Hạng mục | Con số |
|---|---|
| Số lần đổi giá mỗi quý | 8 |
| Công sức mỗi lần nếu chỉ có một nơi tính phí | 1 tuần-kỹ sư |
| Công sức thực tế mỗi lần | 3 tuần-kỹ sư |
| Lãi mỗi lần | 2 tuần-kỹ sư |
| Lãi mỗi quý | 8 × 2 = 16 tuần-kỹ sư |
| Gốc: gom về một dịch vụ tính phí dùng chung | 10 tuần-kỹ sư |
Khi Mai mang bảng này vào cuộc họp ưu tiên, không ai còn hỏi "có đáng không".
Bốn kiểu khoản vay
Không phải khoản nợ nào cũng sinh ra giống nhau. Phân loại giúp bạn biết nên phản ứng thế nào:
| Kiểu | Đặc điểm | Ví dụ | Nên làm gì |
|---|---|---|---|
| Vay có chủ đích | Biết là lối tắt, chọn nó vì lý do rõ, có kế hoạch trả | Gắn cứng chương trình đồng giá dịp Tết để kịp ra mắt | Ghi vào sổ nợ, đặt hạn trả |
| Vay liều | Biết là lối tắt nhưng không tính lãi, không định trả | "Cứ làm tạm, sau tính" mà không ai ghi lại | Chặn từ quy trình, buộc ghi sổ |
| Nợ phát hiện sau | Thiết kế hợp lý lúc đó, nay nhu cầu đổi | Lõi cũ thiết kế cho 5.000 đơn/ngày | Đánh giá lãi, lên kế hoạch thay |
| Nợ do thiếu hiểu biết | Đội không biết có cách tốt hơn | Tự viết cơ chế xếp hàng thay vì dùng giải pháp có sẵn | Đầu tư đào tạo, review thiết kế |
Khi nào nên vay
Vay có chủ đích là hợp lý khi có đủ ba điều kiện:
- Thời điểm có giá trị thật. Ra mắt trước dịp Tết, trước đối thủ, trước hạn hợp đồng với khách lớn. Không phải "sếp muốn sớm".
- Lãi thấp hoặc ngắn hạn. Phần code đó ít bị chạm lại, hoặc sẽ bị thay trong vài tháng.
- Có người, có ngày trả. Khoản vay được ghi vào sổ, có chủ sở hữu và có hạn.
Sổ nợ — ghi như kế toán ghi
Khoản vay không được ghi thì sẽ không được trả. Một sổ nợ tối thiểu chỉ cần các cột sau:
| Cột | Ý nghĩa |
|---|---|
| Khoản nợ | Mô tả một câu, nằm ở hệ thống nào |
| Gốc | Tuần-kỹ sư để trả dứt |
| Lãi mỗi quý | Tuần-kỹ sư thêm và sự cố gây ra |
| Kỳ hạn | Ngày hoặc ngưỡng buộc phải trả, ghi "không có" nếu chưa có |
| Chủ sở hữu | Một đội, không phải "mọi người" |
| Lần cập nhật | Ngày đo lại lãi gần nhất |
Câu hỏi nên hỏi khi kỹ sư nói "cần trả nợ"
- Mỗi quý chúng ta chạm vào phần này bao nhiêu lần?
- Mỗi lần tốn thêm bao nhiêu so với nếu nó được làm đúng?
- Nó gây ra bao nhiêu sự cố, mỗi sự cố tốn bao nhiêu?
- Có ngày nào chúng ta buộc phải trả không — thư viện hết hỗ trợ, tải vượt ngưỡng, quy định mới?
- Nếu không trả trong một năm, điều gì xảy ra?
Làm ngay
Lấy câu trả lời bạn ghi ở bài 1 ("nếu chỉ được sửa một thứ"). Ngồi với người đã trả lời, điền cho khoản nợ đó đủ năm cột: gốc, lãi mỗi quý, kỳ hạn, chủ sở hữu, kiểu vay. Nếu không ước được lãi, đếm số lần đội phải chạm vào phần đó trong hai quý qua — đó là điểm bắt đầu. Rồi tìm thêm hai khoản nợ nữa để có một sổ nợ ba dòng.