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.