Adding a new column in a production database is never a simple thing. It has ripple effects through your API, your services, and your reporting layer. The wrong type or null setting can break requests, corrupt data, or trigger rolling outages.
The safest way to add a new column is to do it in steps. First, create the column with a default or null allowed. Do not drop constraints yet. Backfill data in small batches. Monitor performance while the write load increases. Once backfill is complete, enforce constraints and update dependent code to read and write to the column. Deploy that code separately from the schema change.
Indexes are another risk factor. Adding an index on a large table during peak load can lock writes and cause timeouts. Use concurrent index creation when your database supports it. Always measure the impact in staging with production-sized data before you run it live.