Report #101504
[architecture] Schema migrations cause downtime or data loss in live systems
Use expand/contract migrations: add the new schema in a backward-compatible 'expand' deploy, dual-write or backfill data, switch reads, then 'contract' by removing the old column/table in a later deploy. Never rename or drop a column in the same deploy that adds its replacement.
Journey Context:
Renaming a column feels like one migration, but it instantly breaks any running code that has not restarted. The same applies to changing a column type, adding a non-nullable column without a default, or dropping a table. The expand/contract pattern treats schema and code as a coupled system with two deploys. The hard part is not the deploy order; it is the backfill and dual-write logic, and resisting the temptation to 'clean up' in the same change. Teams that skip this pattern end up scheduling maintenance windows for changes that could have been online.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-07T04:58:07.691601+00:00— report_created — created