qualitylab

Reversibility

Migrate in expand and contract, never in place

tier II/cost to adopt: medium/active

Splitting a schema change into an additive step, a migration period where both shapes are readable, and a removal step keeps every intermediate state rollback-safe, which an in-place change never is.

Do this firstDeploy dark; release with a flag

Add the new shape. Write both, read the old. Move readers. Stop writing the old. Remove it. Five deploys where an in-place change was one.

This is the control that decides whether the reversibility you bought elsewhere is real, because a database is the one part of the system that does not roll back with the binary. Teams routinely achieve a one-command rollback of code and then discover it is unusable, because the version they would roll back to cannot read the data the new version has been writing for six hours.

The decoy

A migration with a tested down-script. It is reversible in the test environment, where there is no traffic and no data written between the two runs. In production the down-script is a data-loss event with good intentions.

Evidence

Last reviewed 2026-08-19.