1. Never modify existing migrations - create new ones instead
  2. Test migrations - run on a copy of production data before deploying
  3. Keep migrations small - one logical change per migration
  4. Use transactions - wrap DDL in transactions where possible
  5. Idempotent operations - use IF NOT EXISTS where applicable
  6. Review generated SQL - if using ORM to generate, always review the output