Adding a new column sounds simple, but it’s often the line between stability and chaos in production. The way you define, migrate, and backfill determines if your release is clean or if you trigger downtime.
Start with clarity: know exactly why this column exists. Avoid vague names. Use consistent types. If it will be queried often, index it from the start. If it needs defaults, set them now—never rely on application logic to fill in gaps later.
Migrations must be atomic. Write them so they can run without locking the entire table. For large datasets, run additive migrations first, then backfill in small batches. Always test on real data scale before pushing to production.