Case

An Odoo migration that had already been attempted by hand without success

Nukleo Solutions ran an Odoo platform two versions behind the supported branch. An earlier manual migration had stalled under the volume of conflicts and the strain on the team.

The engagement was to complete the migration and, in parallel, redesign the infrastructure underneath it.

Client
Nukleo Solutions
Industry
Technology
Where
Quito, Ecuador
Size
Around 10 employees
Duration
3.5 months, in 7 phases
Since
November 2025, in production

The starting point

  • The platform ran on Odoo Community 15, two versions behind the supported branch, with no access to later features or fixes.
  • An earlier attempt to migrate by hand had stalled: the number of conflicts in XML views and the time invested made it unworkable, and it wore down the team assigned to it.
  • The infrastructure was sized well above actual load and routed all traffic through a single load balancer, which acted as a single point of failure.
  • Every migration test required a full copy and restore of the database and the file store.

What we built

Code migration in version steps

The code was taken from version 15 to 16, and then from 16 to 17.

Jumping straight across non-adjacent versions is not viable in Odoo: each step carries its own structural changes, and chaining them is what makes it possible to isolate which version introduces each conflict.

Database migration with OpenUpgrade

Data migration ran on OpenUpgrade, which covers both core modules and custom development.

It avoids writing bespoke migrations for changes the project has already solved and had verified by its community.

Conflict resolution

Fixing the conflicts introduced by the version changes: obsolete fields and tables in the database, and structural changes in XML views.

This was the longest phase of the project and where the real effort was concentrated.

Validation of custom modules

Every in-house development was verified running on 16 and then on 17, not merely compiling. A migration that boots but breaks a business process is not finished.

High-availability infrastructure

The cluster was redesigned with control and worker nodes separated, and two load balancers sharing a virtual address instead of one.

That removes the single point of failure in the previous design and lets the platform grow by adding nodes.

Load testing and handover

Stress and performance testing on the assembled platform, and handover of the infrastructure documentation and configuration files to the client’s team.

Decisions that shaped the outcome

  • OpenUpgrade rather than bespoke migration scripts. The project maintains the version-to-version transformations for the Odoo core and for third-party modules, verified by its community. Rewriting them would have multiplied the risk for no gain.
  • The orchestration platform was chosen with the client, weighing robustness, available documentation and support rather than the technical preference of whoever implements it.
  • Two load balancers sharing a virtual address instead of one. The previous design routed all traffic through a single machine, which is what turned any incident into a full outage.

What changed

  • The ERP is on a supported version, with access to the features and fixes from the two releases it had fallen behind.
  • The infrastructure no longer has a single point of failure and can grow by adding nodes rather than replacing existing ones.
  • The migration was completed after an earlier attempt had stalled, with every custom module validated one by one.
  • The client has operated the platform independently since handover, with documentation and configurations delivered.

What they say

Having GezaForge’s knowledge, dedication and support ensured a transparent and successful migration, particularly on the server infrastructure side, where a thorough analysis was carried out and robust, scalable solutions were implemented.
CEO and founder · Nukleo Solutions

Built with

  • Odoo
  • OpenUpgrade
  • Kubernetes
  • RKE2
  • HAProxy
  • Keepalived
  • PostgreSQL
  • Docker
  • Linux

Have a project in mind?

Tell us what you need and we will tell you honestly whether we can help, how long it would take and what it would cost. No strings attached.