A new column changes the shape of your data. It changes queries. It changes indexes. It can slow down writes or cause locks. In production, those seconds stretch into outages. In migrations, subtle mistakes corrupt records.
When adding a new column, start by defining scope. Decide if the column is nullable, has defaults, or needs constraints. Avoid altering large tables in one transaction on live systems; use phased migrations. Create the column without expensive defaults, then backfill in batches. This keeps locks small and avoids blocking traffic.
Update application logic in sync. Deploy code that can handle the presence or absence of the column gracefully. Feature flags help test before cutover. Smoking tests confirm that read and write paths hit the new schema without failures.