A new column in a database should be planned, documented, and deployed with zero downtime. Start with the correct data type. Choose NULL or NOT NULL deliberately, knowing how each will affect storage and performance. If the column requires a default value, think about how that value will be applied to existing rows and whether that will trigger a table rewrite.
In PostgreSQL, adding a nullable column without defaults is fast. Adding a column with a default to a large table is not. For MySQL, the cost can be even higher, locking writes until the operation completes. Large production tables demand an online migration path: add the new column in a lightweight step, then backfill data in batches to avoid blocking.
When adding a new column to a live system, test on a clone of production first. Measure the impact on query plans. Update all application code to handle the column gracefully before flipping any feature flags. Keep migration scripts idempotent so they can be re-run safely. Always run migrations in a transaction if the database supports it.