Adding a new column is one of the most common schema changes. It sounds simple. It can break production if done wrong. The goal is zero downtime, predictable migration, and clean code.
Define the column in your migration script. Set the data type. Decide on default values. If you must load it with existing data, write an idempotent update step. Avoid locking the entire table by splitting data loads into smaller batches. Test it against real-world data sizes before you ship.
On large datasets, adding a column can trigger a table rewrite. This can spike CPU and I/O. Use tools that create the column metadata first, then populate in steps. Many modern databases allow adding nullable columns instantly. Take advantage of that.