Adding a new column can be simple or it can wreck production. The difference is in how you plan, migrate, and deploy. In most systems, a new column means altering a shared database table. That change can block writes, break application code, or throw errors if not handled precisely.
Start by defining the exact data type, constraints, and defaults for the new column. Avoid nullability issues by deciding if it should allow null values before adding it. For large tables, adding a new column with a default value can lock the table. Use an approach that adds the column without the default, then backfill in small batches.
Coordinate with application code changes. If the new column will be read by the application, feature flag the code path until the backfill completes. If it will be written to, ensure all writes handle the case where the column is not yet populated. Test in a staging system that mirrors production size and query patterns.