When to use - Creating a new Django migration - Running or - Reviewing a PR that adds or modifies migrations - Adding indexes, constraints, or models to the database Why this matters A bad migration can lock a production table for minutes, block all reads/writes, or silently skip index creation on partitioned tables. Auto-generated migrations need splitting and bundle everything into one file: , , , sometimes across multiple tables. This is the default Django behavior and it violates every rule below. After generating a migration, ALWAYS review it and split it: 1. Read the generated file and…