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ỏi | Vì 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ấc | Ai được bật | Thờ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ường | 5 ngày | Khô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 test | 4 ngày, gồm một sáng thứ Hai | Mọi chỉ số rollback trong ngưỡng |
| 2. 25% | 25% tiệm TP.HCM, mọi dòng máy | 5 ngày | Như trên; nhà phân phối xác nhận xử lý ổn |
| 3. 100% TP.HCM | Toàn bộ tiệm TP.HCM | 7 ngày | Như trên; readout nhanh nội bộ |
| 4. Các tỉnh | Bình Dương, Cần Thơ | 7 ngày | Nhà phân phối tỉnh có người trực |
- 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ường | Ngưỡng dừng nấc | Ngưỡng tắt flag ngay |
|---|---|---|---|
| Tỉ lệ lỗi khi tạo đơn từ giỏ nhanh | dướ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út | dưới 2% | 4% | 8% |
| Thời gian tải giỏ p90 | dưới 2,5 giây | 4 giây | 6 giây |
| Cuộc gọi support về đặt hàng mỗi giờ | dưới 15 | 30 | 60 |
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.