Odoo Migration
Odoo Migration Rollback Planning: Deciding Before You Need To
Everyone says they can roll back. Almost nobody has decided who authorises it, what would trigger it, or the hour after which it stops being possible. Those three answers are the plan, and they have to exist before go-live night, not during it.
Part of our guide to Odoo Migration
Rollback is a plan, not a capability
"We have backups" is not a rollback plan. It is a precondition for one.
A plan answers three questions, and if any is unanswered you do not have it:
- Who can authorise going back, and are they reachable during the cutover?
- What would trigger it, stated specifically enough that two people would agree it had happened?
- When does it stop being an option?
The third is the one people get wrong.
The window is shorter than you think
Restoring the old database means discarding everything entered since the cutover. So the rollback window is not bounded by technical capability, it is bounded by how much real work has accumulated.
Once the warehouse has shipped a day's orders and finance has posted a day's invoices in the new version, going back means losing that day and re-entering it from paper. In practice that means the decision window is hours, and it closes as soon as users are let in.
This has a design consequence: your go-live checks have to be fast and specific. Exploratory testing on go-live night burns the window it is supposed to protect. The checks should be the same reconciliation you rehearsed, run in the same order, producing a yes or a no in under an hour.
Freeze the data, and mean it
An upgrade running against a live database produces a result that corresponds to no consistent point in time. Records written mid-conversion may or may not be present, and you will not be able to tell which.
So the cutover needs a freeze: a stated window in which nobody writes to the old system. Announce it well in advance, name the exact times, and make sure the people who work outside office hours know, because the warehouse night shift and the overseas office are the two groups who reliably do not get the message.
Then verify the freeze rather than trusting it. A quick count of records created in the last hour tells you whether it held.
Decide the triggers in advance
At 3am, under pressure, with everyone tired, "is this bad enough to roll back" is an argument. Written down a week earlier it is a decision.
Useful triggers are specific and observable:
- A core process cannot be completed at all. Not slow, not ugly. Cannot complete.
- The reconciliation checks do not match and the cause is not understood.
- The cutover has passed its agreed end time with steps outstanding.
That last one matters more than people expect. Overrun is the most common real trigger, and it is the easiest to rationalise away in the moment, which is exactly why it belongs on a list somebody agreed to in daylight.
Rehearse the restore, not just the upgrade
Teams rehearse the upgrade and assume the restore. Then on the night they discover the restore takes four hours, or needs a credential nobody has, or that the filestore was not included in the backup and every attachment is gone.
Time a full restore during testing. It is part of the go-live duration whether or not you measure it, and knowing the number is what lets you set an honest deadline instead of an optimistic one.
What happens after the window closes
Once rollback is off the table, the plan changes shape: you are now fixing forward, and the useful preparation is different. Know who is on call, know how to reach whoever built your custom modules, and have a way to communicate to users that something is known and being worked on.
Most upgrades never use the rollback plan. That is not evidence it was unnecessary. It is what a plan that worked looks like, and the same is true of the testing that made the rollback unnecessary in the first place.
FAQ
Questions, answered.
How long do we actually have to roll back an Odoo upgrade?
Until users have entered work you cannot afford to lose, which is usually hours rather than days. Restoring the old database means discarding everything entered since the cutover, so the window closes the moment real transactions start. Most teams assume they have a week and actually have an afternoon.
Do we need to freeze data during the cutover?
Yes. An upgrade running against a database people are still writing to produces a result that matches neither the before state nor the after state, and you will not be able to tell which records made it. Announce the freeze window in advance and enforce it.
What should trigger a rollback?
Conditions agreed in advance, not judgement on the night. Typically: a core process cannot complete, figures do not reconcile, or the cutover has overrun its window. Written down beforehand these are decisions; invented at 3am under pressure they are arguments.
Keep reading
More on Odoo Migration.
The full guide, plus the other articles in this cluster.
With CODEerts
Planning an upgrade?
We are certified Odoo partners. We migrate and upgrade Odoo databases, including the custom modules and integrations that decide how long it really takes.
See how we can helpBook a callReady to make Odoo work the way your business does?
Book a free callCODEerts is a team of certified Odoo partners and full-stack engineers. We implement, customise and support Odoo ERP, then build the software around it.