Database changes often begin safely and end incompletely.

A new column is added. Code supports both old and new shapes. Data is backfilled. Then the cleanup never happens. Years later, nobody knows which field is authoritative or whether the compatibility branch can be removed.

Safe evolution needs an explicit ending.

Expand Before You Contract

Start with additive changes that old application versions can tolerate.

Add the new field, table, or index without immediately removing the old structure. Deploy code that can operate during the transition. Keep schema changes small enough that lock behavior, replication, storage growth, and rollback are understood.

Expansion creates room to migrate without forcing every component to change at once.

Make Authority Explicit

Dual reads and dual writes are dangerous when their rules are unclear.

Define which field is authoritative at every phase. If data is written to both locations, specify how disagreement is detected and resolved. Instrument the compatibility path so usage can be measured instead of assumed.

Temporary code should announce when it is still needed.

Validate The Migration

A completed backfill job does not prove that the data is correct.

Compare counts, null rates, ranges, relationships, checksums, and representative records. Monitor query plans, latency, locks, and replica lag. Test rollback before removing the old structure.

Migration evidence should be stored with the change record.

Schedule The Contraction

Cleanup needs its own planned change.

Remove old reads and writes, observe the system, then remove obsolete columns, indexes, flags, and compatibility code. Set a deadline or measurable trigger when the transition begins. Alert when the deadline passes.

Compatibility without an exit plan is architecture growth.

Run The Age-Well Test

Name the schema owner. Measure migration and compatibility usage. Define forward and rollback paths. Document authority at each stage. State exactly how the old model will be retired.

The best schema migration leaves the system simpler than it found it.