Product Management
Đăng nhập
ESC

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

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

Release plan, feature flag và rollout theo nấc, tiêu chí rollback

Đã đọc 0/7 mục · còn khoảng 4 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 không bật cho tất cả người dùng một lần

Bật một tính năng cho 100% người dùng cùng lúc là một ván cược: nếu có lỗi, lỗi đến với tất cả. Với một tính năng chạm vào đơn hàng như "Nhập hàng nhanh", một lỗi tính sai số lượng có thể tạo ra hàng nghìn đơn sai trong một buổi sáng, và mỗi đơn sai là tiền thật của chủ tiệm và của nhà phân phối.

Rollout theo nấc đổi ván cược lớn thành nhiều ván cược nhỏ. Ở mỗi nấc, đội học được điều gì đó với chi phí nhỏ, và chỉ đi tiếp khi số liệu cho phép. Nhưng nó chỉ hiệu quả khi có ba thứ: một feature flag để bật tắt mà không cần deploy, các nấc được định nghĩa trước, và tiêu chí rollback bằng số được chốt trước khi bắt đầu.

Feature flag: cái công tắc tách release khỏi deploy

Feature flag là một điều kiện trong code quyết định ai thấy tính năng. Nhờ nó, code có thể nằm trên production nhiều tuần mà không ai thấy, và có thể tắt trong vài giây mà không cần deploy lại.

Điều PM cần biết về flag, không cần biết cách code:

Câu hỏiVì sao PM cần biết
Flag bật theo tiêu chí gì? (phần trăm, khu vực, loại máy, danh sách tiệm)Quyết định bạn chọn được nhóm thử nào
Tắt mất bao lâu để người dùng thấy giao diện cũ?Quyết định thiệt hại tối đa khi có lỗi
Tắt flag có làm mất dữ liệu người dùng đã tạo không?Ở Sạp Số: đơn đã đặt bằng giỏ nhanh vẫn phải đi tiếp
Ai có quyền bật tắt?Phải có người trực có quyền vào mọi giờ rollout
Khi nào xoá flag?Flag để lâu thành nợ kỹ thuật; hẹn ngày xoá sau 100% ổn định

Release plan của Sạp Số

Linh và Quân viết release plan dựa trên mẫu release plan. Phần cốt lõi là bảng nấc:

NấcAi được bậtThời gian tối thiểuĐiều kiện đi tiếp
0. Nội bộ40 tiệm thân quen của nhân viên thị trường5 ngàyKhông lỗi nghiêm trọng; 40 tiệm phản hồi qua nhân viên
1. 5%5% tiệm TP.HCM, loại 2 dòng máy chưa test4 ngày, gồm một sáng thứ HaiMọi chỉ số rollback trong ngưỡng
2. 25%25% tiệm TP.HCM, mọi dòng máy5 ngàyNhư trên; nhà phân phối xác nhận xử lý ổn
3. 100% TP.HCMToàn bộ tiệm TP.HCM7 ngàyNhư trên; readout nhanh nội bộ
4. Các tỉnhBình Dương, Cần Thơ7 ngàyNhà phân phối tỉnh có người trực
Ba chi tiết đáng chú ý:

  • Thời gian tối thiểu, không phải ngày cố định. Đi tiếp khi đủ điều kiện, không phải khi đến lịch.
  • Nấc 1 phải đi qua một sáng thứ Hai, vì rủi ro lớn nhất từ pre-mortem xảy ra vào sáng thứ Hai. Nấc không chạm vào thời điểm rủi ro thì không chứng minh được gì.
  • Nấc 0 là tiệm thân quen, vì những chủ tiệm này sẽ gọi cho nhân viên thị trường khi có gì lạ, thay vì lặng lẽ bỏ dùng.

Tiêu chí rollback bằng số

Đây là phần quan trọng nhất của release plan, và phần thường bị bỏ trống nhất. "Rollback nếu có vấn đề nghiêm trọng" không phải tiêu chí — lúc 7 giờ sáng, với số liệu đang đổ về, mỗi người sẽ có một định nghĩa "nghiêm trọng" khác nhau, và người lạc quan nhất thường thắng.

Tiêu chí rollback phải được chốt trước khi bật nấc đầu tiên:

Chỉ sốNgưỡng bình thườngNgưỡng dừng nấcNgưỡng tắt flag ngay
Tỉ lệ lỗi khi tạo đơn từ giỏ nhanhdưới 0,5%1%3%
Đơn chờ nhà phân phối xác nhận quá 2 giờdưới 2%5%10%
Tỉ lệ huỷ trong 15 phútdưới 2%4%8%
Thời gian tải giỏ p90dưới 2,5 giây4 giây6 giây
Cuộc gọi support về đặt hàng mỗi giờdưới 153060
Ba cột tạo ra ba hành động: bình thường thì tiếp tục, dừng nấc thì giữ nguyên phần trăm và điều tra, tắt flag thì tắt ngay rồi mới điều tra. Ai trong ca trực thấy chỉ số vượt cột thứ ba đều được tắt, không cần hỏi ai.

Nhìn lại bài 5: các ngưỡng ở đây chính là tripwire từ pre-mortem, được đưa vào release plan. Pre-mortem tìm ra rủi ro; release plan biến nó thành con số mà người trực nhìn thấy.

Luồng quyết định ở mỗi nấc

flowchart TD
    A[Bật nấc mới] --> B{Chỉ số trong ngưỡng?}
    B -- Bình thường --> C{Đủ thời gian tối thiểu?}
    C -- Chưa --> B
    C -- Đủ --> D[Bật nấc tiếp theo]
    B -- Vượt ngưỡng dừng --> E[Giữ nguyên phần trăm, điều tra]
    E --> B
    B -- Vượt ngưỡng tắt --> F[Tắt flag ngay]
    F --> G[Điều tra, sửa, bắt đầu lại từ nấc trước]

Rollback không phải là thất bại

Đội cần nghe điều này từ PM trước ngày rollout: tắt flag là hệ thống đang hoạt động đúng như thiết kế. Nếu tắt flag bị coi là xấu hổ, người trực sẽ ngần ngại, chờ thêm "mười phút nữa xem sao", và mười phút đó là lúc thiệt hại lớn nhất xảy ra.

Ở Sạp Số, nấc 1 bị tắt một lần vào ngày thứ hai: thời gian tải giỏ p90 lên 6,4 giây trên một dòng máy Samsung đời cũ. Quân tắt flag trong 2 phút, đội sửa cách tải ảnh sản phẩm, và bật lại sau 3 ngày. Không đơn sai nào, không khách hàng nào phàn nàn. Đó là một lần rollback thành công.

Kỹ năng liên quan: Launch Planning & Release Management.

Làm ngay

Viết bảng nấc và bảng tiêu chí rollback cho tính năng bạn sắp phát hành. Bảng nấc cần ít nhất ba nấc, mỗi nấc có thời gian tối thiểu và điều kiện đi tiếp. Bảng rollback cần ít nhất bốn chỉ số, mỗi chỉ số ba ngưỡng. Rồi hỏi tech lead hai câu: tắt flag mất bao lâu, và đã từng thử tắt chưa? Nếu chưa, đặt lịch thử trên staging trước nấc đầu tiên.

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