Adding a new column should be deliberate, fast, and predictable. In modern systems, schema changes must ship without blocking the app or risking downtime. The safest approach combines clear migration steps, atomic operations, and instant rollbacks.
Start by defining the column in a migration script that runs independently of production traffic. Keep it nullable or with a default value to avoid full table rewrites. In PostgreSQL, ALTER TABLE ADD COLUMN is efficient if you skip constraints and indexes in the first pass. In MySQL, check if the table uses ALGORITHM=INPLACE to prevent table copies.
After the column exists, deploy application changes to read and write it, but guard for the case where older versions do not. Only add constraints and indexes in a later migration when load is low. Always run these changes behind feature flags so you can disable them instantly if metrics degrade.