Adding a new column sounds simple, but real systems rarely make it clean. There are schema migrations, index updates, default values, null constraints, and the blast radius of deployed code depending on that change. Executing it without downtime takes planning.
First, decide if the new column is required or optional. For required columns in large tables, avoid adding NOT NULL with a default during peak hours. Most relational databases will lock the table for that operation. Instead, add the column as nullable, backfill in batches, then switch to NOT NULL once data covers all rows.
Second, think about indexes. A new column often needs querying support, but indexing on creation slows the migration. Delay heavy indexes until after the column exists and traffic stabilizes.
Third, coordinate with the application layer. Ship code that can handle both the old and new schema. Feature flags help here. Only after backfill and verification should you flip the code to depend on the column fully.