Adding a new column seems simple. In practice, it can break deployments, corrupt data, or stall product releases. The right approach depends on schema design, database engine, and production constraints.
First, decide if the new column should allow null values. Adding a non-null column with no default can lock the table in production. If the table is large, this can bring the system down. To avoid this, add the column as nullable, backfill in small batches, then set the constraint.
Second, understand how indexes will change query performance. An unindexed column may slow reads if it's used in filters or joins. But adding an index during the same migration can also cause write locks and balloon storage. Separate schema changes from heavy indexing to control risk.
Third, handle default values carefully. Setting a default in the schema may rewrite every row. For high-traffic tables, use an application-level default until data is fully backfilled. This keeps deployments fast and avoids downtime.