Vấn đề lớn nhất không phải một test hỏng, mà là đội mất niềm tin vào CI: khi "đỏ" có thể là nhiễu, người ta bấm rerun theo phản xạ và bỏ qua cả lỗi thật.
Quy trình xử lý:
1. Ghi nhận, đừng rerun im lặng. Mỗi lần rerun cứu một job phải để lại dấu vết — gắn nhãn test, đếm tần suất. Không đo được thì không sửa được.
2. Cách ly (quarantine). Chuyển test flaky ra khỏi tập chặn merge, cho chạy ở một job riêng không gate. Suite chính lại xanh có nghĩa, còn test vẫn được theo dõi.
3. Đặt hạn sửa. Quarantine không có deadline sẽ biến thành nghĩa địa test chết. Không sửa trong sprint kế thì xóa — test không ai tin cũng không có giá trị.
4. Truy nguyên nhân, thường thuộc vài nhóm: chờ theo thời gian cố định (sleep) thay vì chờ theo điều kiện; phụ thuộc thứ tự / trạng thái còn sót; phụ thuộc thời gian thực và timezone; tranh chấp tài nguyên khi chạy song song; gọi network thật.
Không nên: bật retry: 3 toàn cục cho mọi test. Nó biến flaky thành vô hình, che luôn race condition có thật trong sản phẩm và làm pipeline chậm hơn.