Adding a new column should be simple. In practice, it can bring down production, block deploys, or cause silent data loss if done carelessly. The key is to understand the impact on reads, writes, indexes, and application logic before you touch the database.
First, confirm the table size. On large datasets, adding a new column with a default value can lock the table for minutes or hours, depending on the database engine. For PostgreSQL, adding a nullable column without a default is fast. For MySQL, performance depends on storage engine and version. On distributed systems, watch for schema change replication lag.
Second, define the column type with intention. Choosing between INT, BIGINT, VARCHAR, or TEXT has direct consequences for query performance, storage, and indexing. If the new column will be part of filters or joins, plan the index strategy now, not later. Avoid creating indexes in the same migration as the new column on high-traffic tables.