“Just roll it back.”
A beautiful sentence. Four words. Very relaxing.
Then someone asks whether the previous application still understands the new database schema, and suddenly everyone's tea is going cold.
Rolling back an application release is not necessarily the same as restoring the whole system to an earlier state. Writes, migrations, jobs and external effects may have continued after deployment.
Let's work through an illustrative Django application. No customer incident or measured outcome is being claimed here.
The innocent-looking change
Suppose a customer table has a full_name column. A new release introduces separate given_name and family_name fields.
A direct replacement sounds neat:
Remove full_name .
Add the new fields.
Deploy the new application.
But an older application instance may still read full_name .…