Insights·Consulting·5 min read

Odoo version upgrades: what to check before you move

The database migration is the easy part. What really decides how hard your Odoo upgrade will be is everything built on top of it: custom modules, third-party apps, Studio changes, and integrations.

Odoo releases a new major version every year, and only the most recent releases stay supported. That cadence means every company running Odoo eventually faces the same question: upgrade now, or wait another cycle and take a bigger jump later. Neither answer is automatically right. What goes wrong is almost always the same thing: the upgrade gets treated as a database operation when it is actually a project with testing, cutover, and training attached.

Here is what really determines how hard your upgrade will be, and what to check before you commit to a date.

The database is the easy part

Odoo runs an official upgrade service that migrates your database from one version to the next. If you are running standard apps with configuration only, that service does most of the work and the remaining effort is verification. That upgrade is a short project.

The difficulty scales with everything sitting on top of the standard apps: custom modules, third-party apps from the Odoo Apps store, Studio customizations, custom reports, and systems that talk to Odoo from the outside. None of that is migrated for you. Custom code has to be reviewed against the new version's API, and third-party modules have to already exist for your target version before you can move at all.

Start with an inventory, not a date

Before anyone picks a weekend, list every non-standard thing in the system:

  • Custom modules, and who maintains each one today
  • Third-party apps, and whether a build exists for the target version
  • Studio customizations, which are easy to forget because they were made in the interface rather than in code
  • Custom reports, email templates, and any layout your finance or sales team depends on
  • Integrations: payment gateways, e-invoicing, bank feeds, e-commerce, POS hardware, and anything reading Odoo over XML-RPC or webhooks
  • Automated actions and server actions written as Python snippets

Two of these cause most delays. Third-party apps are the usual reason an upgrade stalls, because you are waiting on someone else's release schedule and you have no way to accelerate it. Find out early, and have a decision ready for each one: wait, replace it, rebuild the piece you actually use, or drop it. Studio customizations are the usual reason an upgrade surprises people, because nobody wrote them down and they only surface when a field quietly stops appearing on a form.

Test on a copy of your real data

A demo database proves nothing about your upgrade. Take an upgraded copy of your production database and put real work through it: create a sales order, confirm a delivery, post an invoice, run a payment, close a period, print the reports your accountants actually use.

The strongest test is a reconciliation. Ask finance to close a period they have already closed on the live system and compare the numbers line by line. If a figure moves, you want to know why now, not during your first month-end on the new version. Budget more testing time than feels necessary, because the failures worth catching are the boring ones: a report that lost a column, a sequence that restarted, a tax that stopped applying to one product category.

Localization moves on its own schedule

Regional compliance in Odoo comes from the official localization modules, which are maintained by Odoo rather than by your partner. E-invoicing for ZATCA in Saudi Arabia, ETA in Egypt, FTA VAT reporting in the UAE, and WPS payroll files all live there. Before you upgrade, confirm the localization for your country is available for the target version, and treat compliance output as a first-class test: generate a real invoice, submit it in a test environment, and read the response rather than assuming it worked.

Expect the small breakages

Between major versions, modules get renamed or absorbed into core, view attributes change, and fields your custom code reads may no longer exist. Individually these are small fixes. Collectively they are the bulk of the work, and they are the reason a system with heavy customization should be upgraded by someone who can read the code rather than only the screens.

Plan the cutover before you need it

Rehearse the whole sequence at least once end to end, so the real cutover is a repeat rather than a first attempt. Set a freeze window where nobody posts transactions, keep the pre-upgrade backup and know exactly how you would switch back to it, and tell users in advance what will look different on Monday morning. Interface changes between versions are real, and a team that has seen the new screens once is a very different support load than a team meeting them cold.

So when should you move?

The honest trade-off: upgrading close to every release keeps each hop small and your custom code close to current, at the cost of doing a project more often. Skipping versions defers that effort but compounds it, and eventually pushes you onto an unsupported release where security fixes and partner support both get thin.

If your Odoo is mostly standard, waiting a cycle is usually fine. If you carry significant custom code, more frequent and smaller upgrades are normally cheaper in total, because your developers are adapting to one year of changes instead of three at once. Either way, decide it deliberately. The worst version to be on is the one you ended up with by not choosing.

Plementus has been an Odoo Gold Partner since 2017, with teams in Dubai, Riyadh, and Cairo, and version upgrades are one of the things we do most. If you want a second opinion on what your upgrade would actually involve, our version upgrade service starts with an assessment of exactly the inventory described above.

Let's talk

Let's turn this into a plan.

Book a discovery call and we will map your fastest path to a system that lasts.

Book a discovery call