Bug loại này gần như luôn đến từ chênh lệch môi trường chứ không phải code. Các nguồn hay gặp, xếp theo tần suất:
- Dữ liệu: staging vài trăm bản ghi, production vài triệu. Query thiếu index chạy 20ms ở staging và 8 giây ở production. Dữ liệu thật còn có ký tự lạ, email trùng, đơn hàng cũ ở trạng thái mà code mới không xử lý.
- Cấu hình và biến môi trường: thiếu một biến, timeout khác nhau, connection pool nhỏ hơn, feature flag bật ở nơi này tắt ở nơi kia.
- Hạ tầng: production có nhiều instance sau load balancer, staging chỉ một. Mọi thứ dựa vào state trong bộ nhớ (cache cục bộ, session in-memory, cron chạy trên mọi instance) đều lộ ra ở đây.
- Phiên bản dịch vụ phụ trợ: Postgres 14 ở staging, 16 ở production; Redis khác cấu hình eviction.
- Bên thứ ba: staging trỏ vào sandbox (luôn trả thành công, không rate limit), production gọi API thật có giới hạn và có lỗi tạm thời.
- Múi giờ và locale: container staging chạy UTC, server cũ chạy giờ Việt Nam.
Giảm rủi ro: giữ dev/prod parity — cùng phiên bản dịch vụ (dùng container), cấu hình đưa hết ra biến môi trường thay vì hardcode theo môi trường, staging có bộ dữ liệu đủ lớn và đã che thông tin cá nhân, và bổ sung lớp kiểm tra sau khi deploy (smoke test trên production, canary release) vì không môi trường nào giống production tuyệt đối.