Adding a new column to a production database is simple in concept, but it can be a minefield in practice. Schema migrations alter the shape of your data. Done poorly, they block queries, lock writes, and disrupt real-time systems. Done well, they slide into place without the users even noticing.
Before adding a new column, decide if it is nullable or has a default value. Non-nullable columns on large tables can lock the table during the update. Use NULL with caution, but know it can prevent downtime by allowing the addition without rewriting every row at once.
When possible, add columns in small, independent migrations. Avoid combining schema changes with application logic changes in a single deploy. Roll forward with confidence, and keep rollback plans ready.
If you need to backfill data into your new column, do it in batches. Spread load to avoid spiking CPU and I/O. Indexes should come last, after the column is live and populated. Large index builds can be more hazardous than the column addition itself.