Odoo Coach

Odoo upgrade: path, risks, testing and cutover

An Odoo upgrade has two parts: Odoo's upgrade service migrates the database, and someone has to port your custom modules. Most of the risk sits in the second part and in testing, so that is where I spend the time.

Updated: 7 min read

An Odoo upgrade moves your database and custom code from an older major version, such as 16 or 17, to a supported one. Odoo's upgrade service converts the standard data; your custom and third-party modules must be ported separately. A safe upgrade follows a fixed order: inventory the code, request a test upgrade, port and test on a copy, rehearse, then cut over production at a planned time with a rollback option.

Which Odoo versions are still supported?

Odoo supports every major version for three years of standard support; security updates are provided only in that period. The table below is taken from Odoo's standard and extended support page, checked on 20 October 2026.

Version Released End of standard support
Odoo 20.0 September 2026 September 2029 (planned)
Odoo 19.0 September 2025 September 2028 (planned)
Odoo 18.0 October 2024 September 2027 (planned)
Odoo 17.0 November 2023 September 2026
Odoo 16.0 October 2022 September 2025

According to the same page, you can upgrade to any major version still under standard support. Extended support for older versions exists, but it costs extra, does not include security updates and on Odoo.sh is limited to some versions.

What does the upgrade path look like?

Inventory

List every custom and third-party module, what it does and whether it is still needed. Modules that standard Odoo now covers are removed, not ported.

Test upgrade of the database

Request an upgraded test database from Odoo, as described in the official upgrade documentation. This runs in parallel with the code work.

Port the custom code

Each module is adapted to the target version and its automated tests are made to pass there. Third-party modules are replaced with maintained versions where they exist.

Test on the copy

Key users run their real flows on the upgraded copy: sales, purchase, stock, manufacturing, invoicing and month-end, plus reports and integrations.

Rehearsal

A second full run with fresh data to confirm the steps, the duration and the fixes. The result is a written cutover checklist.

Cutover

Freeze, backup, final upgrade, smoke tests, go or no-go decision, and a rollback path to the old version if the checks fail.

What are the main migration risks?

Most upgrade problems are predictable once you know where to look:

  • Removed or renamed fields and methods. Between Odoo 17 and 19, for example, the user groups field changed from groups_id to group_ids, group categories moved to a new res.groups.privilege model, and the product type field detailed_type was replaced by type plus an is_storable flag. Custom code and import templates that still use the old names fail.
  • View changes. List views are declared with <list> instead of <tree> from Odoo 18, and Odoo 19 rejects some older search view structures. These errors stop a module from installing at all.
  • Changed method signatures. Core methods such as the login check have different arguments in 17, 18 and 19. Overrides written for one version break silently or loudly on the next.
  • Third-party add-ons. A module bought years ago may have no maintained version for the target release, or a version from a different author.
  • Data surprises. Old records that violate new constraints, products without units, unreconciled entries that block the migration of accounting data.
  • Integrations. External systems calling the API with old field names or old authentication.

Why test on a copy, and how?

All porting and testing happens on a copy of production that is neutralised before anyone logs in: outgoing mail servers and mail fetching are removed, scheduled jobs are reviewed, and the database gets its own identity, so the copy can never send an e-mail to a real customer or post to a real bank. Key users then test with their own data, not demo data. Automated tests of each custom module run on the target version, and I compare key reports, such as stock valuation and balances, between the old and the upgraded copy.

What experience do I bring?

I maintain my own Odoo modules on four versions, 16, 17, 18 and 19, with the same automated test suite passing on each version, which is exactly the discipline an upgrade needs. I also work with clients on Odoo 20. In client work I have ported custom modules from Odoo 16 to 17 and built new modules directly on Odoo 19 Enterprise. I start every upgrade with a health check of the custom code, because the module inventory decides the cost far more than the database size.

What does the cutover day look like?

Users stop working at an agreed time. A backup is taken and checked. The final upgrade runs, then the custom modules are updated and a short checklist of flows is tested by key users. If everything passes, the new version opens; if not, the old version is restored from the backup and nothing is lost. A written log of the day goes into your documentation.

Tell me about your Odoo

Describe your situation in a few lines. We reply by e-mail.

Frequently asked questions

Is Odoo 16 or 17 still supported?

According to Odoo's support policy page, checked on 20 October 2026, standard support for Odoo 16 ended in September 2025 and for Odoo 17 in September 2026. Security updates are provided only during standard support, so both versions should be on an upgrade plan.

Can we skip versions, for example go from 16 straight to 19?

Yes. Odoo's upgrade service moves a database to a supported major version, not only to the next one. Your custom modules, however, have to work on the target version, and the larger the gap, the more code changes are needed. The health check gives an estimate per module.

Who upgrades our custom modules?

Not Odoo. Its documentation states that a database with custom modules cannot be upgraded until versions of those modules exist for the target version. Porting them is the work of your partner, your developers or someone like me, ideally in parallel with requesting the upgraded test database.

How long is production unavailable during the upgrade?

Only for the final run on the production database, which depends mainly on database size. The test runs show the duration in advance, so the cutover can be planned for an evening or weekend with a clear go or no-go point.

Should we upgrade to Odoo 19 or to Odoo 20?

It depends on your custom code and third-party modules. Odoo 20 was released in September 2026, so some add-ons may not be available for it yet. Odoo 19 is supported until September 2028. We choose after checking which of your modules exist for each version.