Adding a new column sounds simple until you weigh the risks. Schema changes can lock tables, stall writes, and break downstream jobs. Without a plan, a single migration can cascade into outages. This is why experienced teams treat ALTER TABLE as a loaded command.
When adding a new column, start by defining the change in your migration script. Use explicit types. Avoid nullable defaults unless the business logic requires it. For large datasets, consider adding the column without a default, then updating rows in batches to limit lock time.
Test the migration in a staging environment with production-scale data. Check query plans before and after. If the new column will be indexed, add the index in a separate migration to reduce contention. Measure replication lag and watch for slow queries in read replicas.