Inventory custom modules
Record every custom and third-party module, its owner, source, current version and whether it is still required. Unsupported code can become the main upgrade blocker.
Map integrations and scheduled jobs
APIs, imports, exports, payment links, devices and scheduled processes may depend on behavior that changed between versions.
Reconcile critical data before migration
Moving inconsistent data into a new version makes validation harder. Finance, inventory and master-data controls should be reconciled before cutover.
Test business processes, not only database conversion
A technically upgraded database is not production-ready until critical workflows, reports, permissions and integrations are validated with responsible users.
Plan rollback and cutover
Define the production freeze, final migration, validation checkpoints, rollback boundary and communications before the go-live window begins.
Build a migration inventory before estimating effort
A useful inventory should cover the Odoo version and environment, installed standard and third-party modules, customer-specific addons, database and filestore size, users and companies, scheduled jobs, integrations, reporting dependencies, localization, email/payment services and the business processes that cannot tolerate regression.
This inventory is also where the team decides what should not be migrated. Obsolete customizations, duplicate modules and historical workarounds should not automatically be carried into the next generation simply because they exist in the old database.
Define the dry-run acceptance pack
A migration rehearsal should finish with evidence: module installation status, conversion/migration logs where applicable, reconciled financial and stock positions, key document counts, user/access checks, integration test results and signed business scenarios. The exact pack depends on scope, but the principle is constant—conversion is not acceptance.
Use the dry run to estimate the real cutover sequence and identify the point at which rollback would become more dangerous than continuing. That decision should be agreed before the production window rather than improvised while users are waiting.
