The schema is only half the change
Real migrations touch code, data, jobs, queries, dashboards, and rollback assumptions. The risky part is often the period where old and new shapes both exist.
The useful signal is usually already there.
A tiny patch rarely touches only one thing. Push it and watch the review surface appear.
Expand, migrate, contract
Add the new shape first, write both paths, backfill carefully, switch reads, then remove the old shape after you have evidence.
The safest migration is usually more than one deploy.
Watch the batch job
Backfills need progress logs, retry behavior, rate limits, and a way to stop. A migration that cannot be paused is a deploy with a fuse.
Flip the switches and watch the story turn into a tiny operating model.
Data changes are product changes
Users do not care that the migration was elegant. They care that the system kept working while the floor moved.