Product Management
Đăng nhập
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Kế hoạch di trú hệ thống cũ — chia nhỏ, chạy song song, tắt dần

Đã đọc 0/9 mục · còn khoảng 5 phút
Cách chúng tôi ghi nhận

Một mục được tính là đã đọc khi nó nằm giữa màn hình đủ lâu so với độ dài của nó (bảng và sơ đồ tính một nửa), bạn vẫn đang cuộn hoặc bấm phím, và bạn đã thấy tới cuối mục. Lướt nhanh hoặc để tab mở không được tính. Chúng tôi chỉ lưu thời gian đọc từng mục — không lưu gì khác.

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.
Cách thay thế an toàn hơn có ba nguyên tắc: chia nhỏ, chạy song song, tắt dần. Hệ thống mới mọc lên quanh hệ thống cũ, lấy dần từng phần việc, đến khi phần cũ không còn gì để làm.

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.
Tổng công sức ước tính: 200 tuần-kỹ sư trong ba quý.

Bốn giai đoạn

Giai đoạnLàm gìTuần-kỹ sưThời gian
1. Dựng song songDị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ật40Quý 1
2. Đối chiếuMỗi sáng so kết quả hai bên từng đơn, sửa đến khi khớp32Quý 1
3. Chuyển dầnDịch vụ mới trả tiền thật cho 1%, rồi 10%, rồi 50% shop64Quý 2
4. Chuyển hết và tắt100% shop, tắt phần đối soát trong lõi cũ, dọn dữ liệu64Quý 3
TổngBốn giai đoạn2003 quý
Quý 1 dùng 40 + 32 = 72 tuần-kỹ sư — đúng khoản 72 trong ngăn nợ ở bài 3.

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ống0 đồng trên toàn bộ đơn COD
Lệch trạng thái đối soátKhông quá 5 đơn mỗi ngày, và có giải thích
Đối soát xong trước giờ trả tiềnTrước 6 giờ sáng
Tiêu chí lùi lại cũng phải viết trước: một đồng lệch tiền chưa giải thích được ở nấc đang chạy thì quay toàn bộ nấc đó về lõi cũ trong ngày. Vì lõi cũ vẫn chạy song song, việc quay lại chỉ là đổi một công tắc — đây là lý do chính để giữ cả hai hệ thống trong giai đoạn 3.

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ử đủ.
Trang cũng chuẩn bị kịch bản cho đội chăm sóc khách hàng: shop hỏi gì, trả lời thế nào, khi nào chuyển lên kỹ sư.

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õ.

Học xong bài này rồi? Tạo tài khoản miễn phí để lưu lại — lần sau vào là biết ngay đang dở ở đâu, và học hết khóa thì có chứng chỉ. Lưu tiến độ của tôi