A new column is never just a column. It changes queries, indexes, memory use, replication lag, and the shape of your data over time. Adding one in production is the kind of change that can save a project or break it beyond rollback.
First, define the new column with the right data type. Mismatched types force costly casts on every read and write. Decide if the column can be nullable, and know that making it NOT NULL on a large table will lock rows and delay writes if you apply it all at once.
Second, plan backfills. A new column starting empty is rarely useful. Batch updates using small transactions to avoid pressure on locks and transaction logs. Monitor CPU, I/O, and replication delay during the backfill process to detect bottlenecks early.
Third, index only after the backfill completes. Creating an index on a sparsely populated column wastes resources. On large datasets, consider a concurrent or online index creation mode to minimize locking. Avoid redundant indexes by checking EXPLAIN plans before and after.