Describe a time you had to deploy a change to a live Django application. How did you manage the risk?
The interesting part of this question is migrations, so lead with them.
- Separate schema changes from code changes. The safe pattern is additive first: add the new nullable column, deploy code that writes to both old and new, backfill, then deploy code that reads from the new one, and only then drop the old column. Each step is independently reversible.
- Know what locks. Adding a nullable column is cheap on modern PostgreSQL; adding one with a default, or adding an index without
CONCURRENTLY, can lock a large table for minutes. - Have a rollback plan for both code and schema. A migration that cannot be reversed needs to be flagged before it runs, not after.
The rest of the risk management: deploying behind a feature flag, running python manage.py check --deploy, taking a database backup immediately before, and watching error rates for the first fifteen minutes rather than walking away.
Note: If you have ever had to roll back a migration in production, tell that story. It is far more convincing than describing an ideal process.





