Vì sao viết lại toàn bộ hầu như luôn thất bại
Đứng trước một hệ thống cũ chậm và khó sửa, đề xuất hấp dẫn nhất luôn là: dừng lại, viết lại từ đầu, chuyển một lần. Đề xuất này thất bại theo một kịch bản quen thuộc:
- Hệ thống cũ chứa hàng trăm quy tắc nghiệp vụ không ai ghi lại. Bản mới bỏ sót một nửa.
- Trong lúc viết lại, công ty vẫn cần tính năng mới, nên hệ thống cũ vẫn phải sửa — và bản mới phải đuổi theo một mục tiêu di động.
- Ngày chuyển là một cú nhảy: nếu sai, sai cho toàn bộ khách hàng cùng lúc.
- Sau 12 tháng chưa có gì lên production, ngân sách bị cắt, công ty còn lại hai hệ thống dở dang.
Bài toán của ChởNhanh
Ở ChởNhanh (giả định), đối soát COD — tính tiền thu hộ của 27.000 đơn mỗi ngày, trừ phí, trả tiền cho shop — đang chạy trong lõi cũ, theo mẻ ban đêm. Có ba lý do để tách nó trước:
- Lõi cũ chịu được khoảng 100.000 đơn/ngày, cao điểm cuối năm là 135.000. Tách đối soát — phần nặng nhất — ra là cách giảm tải nhanh nhất.
- Đã có đội Đối soát COD 7 kỹ sư sở hữu trọn nghiệp vụ (bài 6).
- Sai sót ở đây là sai tiền của shop, nên cần cách chuyển cẩn thận nhất — làm được ở đây thì các phần sau dễ hơn.
Bốn giai đoạn
| Giai đoạn | Làm gì | Tuần-kỹ sư | Thời gian |
|---|---|---|---|
| 1. Dựng song song | Dịch vụ đối soát mới nhận cùng dữ liệu với lõi cũ, tính kết quả nhưng không trả tiền thật | 40 | Quý 1 |
| 2. Đối chiếu | Mỗi sáng so kết quả hai bên từng đơn, sửa đến khi khớp | 32 | Quý 1 |
| 3. Chuyển dần | Dịch vụ mới trả tiền thật cho 1%, rồi 10%, rồi 50% shop | 64 | Quý 2 |
| 4. Chuyển hết và tắt | 100% shop, tắt phần đối soát trong lõi cũ, dọn dữ liệu | 64 | Quý 3 |
| Tổng | Bốn giai đoạn | 200 | 3 quý |
flowchart TD
A[Đơn COD trong ngày] --> B[Lõi cũ tính đối soát]
A --> C[Dịch vụ mới tính đối soát]
B --> D[So kết quả từng đơn mỗi sáng]
C --> D
D --> E{Khớp đủ 14 ngày?}
E -- Có --> F[Chuyển thêm một nấc shop]
E -- Chưa --> G[Sửa chỗ lệch, đếm lại từ đầu]Chạy song song là nơi tìm ra quy tắc bị quên
Giai đoạn 1 và 2 trông như tốn công mà không cho ra gì — chưa shop nào thấy khác biệt. Nhưng đây là giai đoạn đáng tiền nhất. Mỗi đơn lệch giữa hai hệ thống là một quy tắc nghiệp vụ trong lõi cũ chưa ai ghi lại: shop có hợp đồng phí riêng, đơn giao một phần, đơn hoàn hàng sau khi đã đối soát. Tìm ra chúng khi chưa trả tiền thật rẻ hơn rất nhiều so với tìm ra khi shop gọi điện hỏi tiền.
Tiêu chí để chuyển nấc
Mỗi lần chuyển thêm một nấc shop phải qua đủ ba điều kiện, đo trong 14 ngày liên tiếp:
| Tiêu chí | Ngưỡng |
|---|---|
| Lệch tiền giữa hai hệ thống | 0 đồng trên toàn bộ đơn COD |
| Lệch trạng thái đối soát | Không quá 5 đơn mỗi ngày, và có giải thích |
| Đối soát xong trước giờ trả tiền | Trước 6 giờ sáng |
Thứ tự nhóm shop
Thứ tự chuyển là quyết định sản phẩm, không chỉ kỹ thuật. Trang, PM đối soát COD, đề xuất:
- 1% đầu tiên: shop nội bộ và shop nhỏ có quan hệ tốt, đã đồng ý tham gia, được báo trước.
- 10%: shop nhỏ và vừa, đơn đều, ít hợp đồng phí riêng.
- 50%: thêm shop lớn, tránh tuần có đợt khuyến mãi lớn của họ.
- 100%: phần còn lại, gồm các shop có hợp đồng phí đặc biệt — nhóm khó nhất để sau cùng, khi hệ thống đã được thử đủ.
Phần khó nhất là tắt
Nhiều cuộc di trú dừng ở 95%: phần mới chạy, phần cũ vẫn còn "cho chắc", và công ty trả tiền vận hành hai hệ thống mãi mãi. Mỗi tính năng mới phải sửa ở cả hai nơi — chính là khoản nợ "tính ở nhiều nơi" của bài 2, nhưng lớn hơn nhiều.
Để tắt thật sự, kế hoạch của ChởNhanh có:
- Một ngày tắt ghi trên roadmap, không phải "khi nào xong".
- Đo lưu lượng còn đi vào phần cũ mỗi tuần. Khi còn dưới 1%, tìm từng nguồn còn lại và chuyển nốt.
- Ai được duyệt ngoại lệ: chỉ anh Đạt, và mỗi ngoại lệ có ngày hết hạn.
Vai trò của người làm sản phẩm trong di trú
- Đặt di trú lên roadmap như một hạng mục có tên, có mốc, không giấu trong "việc kỹ thuật".
- Chọn thứ tự nhóm khách và thời điểm ít rủi ro.
- Giữ cam kết không thêm tính năng mới vào phần đang bị thay — mỗi tính năng thêm vào lõi cũ là một thứ phải di trú thêm.
- Chuẩn bị truyền thông và hỗ trợ khách hàng cho mỗi nấc.
Làm ngay
Chọn một hệ thống cũ trong sản phẩm của bạn mà đội hay than phiền. Cùng tech lead chia việc thay thế thành bốn giai đoạn như bảng trên, ước tuần-kỹ sư cho từng giai đoạn. Viết ba tiêu chí chuyển nấc đo được, một tiêu chí lùi lại, và thứ tự nhóm khách hàng. Cuối cùng ghi một ngày tắt phần cũ — nếu không ai dám ghi ngày, đó là dấu hiệu kế hoạch còn chưa đủ rõ.