Adding a new column to a database seems simple. It is not. The complexity comes from scale, concurrency, and the need to keep uptime. The wrong migration can lock tables, slow queries, or break production. The right migration is faster than the user can notice.
To add a new column safely, start with the schema. Review the data type and default values. Avoid heavy defaults that trigger full table rewrites. If the column must be indexed, create the index after the column exists, not in the same statement. This reduces lock time.
In MySQL, ALTER TABLE is blocking unless you use ALGORITHM=INPLACE or ONLINE. In PostgreSQL, adding a column without a default is instant. Setting a default will rewrite, so use ALTER TABLE ... SET DEFAULT separately if possible. For distributed systems, run migrations in stages and synchronize your application code to handle both old and new schemas until all nodes are updated.