Thay đổi schema breaking cần kỷ luật expand-contract: thêm cột nullable, backfill trong worker, chuyển read, rồi drop field cũ. Bỏ một bước là mời cuộc gọi lúc 2 giờ sáng mà ai cũng muốn tránh.
Shadow database bắt drift sớm — nhưng chỉ khi CI chạy `prisma migrate diff` trên mỗi PR. Check migration fail được coi là merge blocker.
Backfill dài chạy trong worker idempotent có metric tiến độ — không bao giờ trong transaction migration.
Mỗi repo có snippet SQL rollback cho ba migration gần nhất. Chúng tôi đã dùng hai lần năm nay. Cả hai lần đều cứu được cuối tuần.
Dạy chuỗi expand-contract trong onboarding để junior không chọn shortcut phá hủy khi deadline ép.
