Adding a new column is direct, but it touches every record, every query, every dependency. Done well, it strengthens your schema. Done poorly, it breaks production before you can roll it back.
Start with intent. Define the column name, type, constraints, and defaults. Know why it exists now, and why it did not exist before. Loose definitions lead to weak designs. Strong definitions drive clarity and maintainability.
Migrations are the critical path. Plan them to run in controlled batches, or in a way that’s invisible to the application until the moment you flip the switch. For large tables, avoid locking operations that block reads and writes. Use tools or frameworks that support non-blocking adds. Test migrations against real datasets, not mocks.