A new column in a database is simple in concept but dangerous in execution. The moment you change structure, you change contracts. Code paths fail if they assume the old shape. Queries crash if defaults are wrong. Indexes break if they are not rebuilt. This is why adding a new column demands precision.
Start with the migration. Decide if the new column is nullable or if it needs a default value. In production systems, nullable with a backfill often saves downtime. Run the migration in two steps: first add the column with safe defaults, then populate it in small batches. This avoids locking large tables for long periods.
Update your application code to handle the column in both its absent and present states. Deploy code that writes to and reads from it only after the schema change is live everywhere. If you use multiple services, coordinate their rollouts.