Creating a new column seems simple, but in production it can be dangerous. Schema migrations touch live data. If done carelessly, they lock tables, kill performance, or introduce bugs hidden in downstream joins. The key is speed and precision.
First, define the purpose of the new column with exact constraints. Use the smallest data type possible. Avoid NULL defaults unless they are intentional. Apply indexing only if queries require it; indexes cost writes and memory.
Second, design the migration. For large datasets, use phased rollouts. Create the column, backfill in controlled batches, and update code to read and write to it only after the data is ready. This prevents locking and avoids downtime.