Skip to content
Odoo Upgrade

Resolving Custom Code Dependencies in Odoo During Major Version Upgrades

A practical guide for CIOs and IT leaders on how to identify, refactor, and test custom Odoo modules during major version upgrades to minimize risk and ensure operational continuity.

11 min readSysGenPro Editorial
Resolving Custom Code Dependencies in Odoo During Major Version Upgrades

Direct Answer: Resolving Custom Code Dependencies in Odoo During Major Version Upgrades

Resolving custom code dependencies in Odoo during major version upgrades requires a systematic approach to dependency mapping, code refactoring, and rigorous testing in isolated staging environments. Unlike minor updates, major version upgrades in Odoo often involve significant changes to the Python framework, ORM (Object-Relational Mapping) structures, and XML view definitions. The primary risk is that custom modules, which rely on specific internal APIs or data structures, will break, leading to application errors, data corruption, or business process failures. To mitigate this, organizations must treat the upgrade as a software development project rather than a simple configuration change. This involves auditing all custom and third-party modules, identifying deprecated APIs, refactoring code to align with the target version's standards, and executing comprehensive regression tests. Success depends on early identification of technical debt, clear ownership of code changes, and a verified rollback strategy to protect operational continuity.

Phase 1: Dependency Analysis and Code Audit

The first step is to establish a complete inventory of all modules installed in the production environment. This includes core Odoo modules, Enterprise modules, third-party add-ons, and internal custom developments. For each module, you must analyze its manifest file (manifest.py) to identify direct dependencies. However, indirect dependencies are often the source of failure. A custom module might depend on a field in a core model that has been renamed or removed in the target version. You should use static code analysis tools to scan for deprecated Python functions, removed ORM methods, and changed XML tags. It is critical to distinguish between modules that are fully compatible and those that require manual intervention. Create a dependency matrix that maps each custom module to the specific core components it interacts with. This matrix serves as the foundation for your refactoring plan. Assign ownership for each module to a specific developer or vendor. If a third-party add-on is not supported by the vendor for the target version, you must decide whether to replace it, fork it, or remove it entirely. Do not assume that a module will work without verification. Check the official Odoo documentation for the specific source and target versions to understand the scope of breaking changes.

Identifying Deprecated APIs and Model Changes

Odoo major versions frequently introduce changes to the ORM, such as modifications to how fields are defined, how security rules are applied, or how inheritance works. For example, changes in how 'related' fields are computed or how 'compute' methods are triggered can break custom logic. You must review the release notes for the target version to identify these changes. Pay special attention to changes in the 'ir.model.fields' and 'ir.ui.view' tables, as these drive the user interface and data structure. If your custom code directly manipulates these system tables, it is highly likely to break. Refactor such code to use the standard ORM API instead of direct SQL queries or system table manipulation. This not only resolves the immediate upgrade issue but also improves the long-term maintainability of your codebase. Document all identified breaking changes and prioritize them based on business impact. High-impact changes, such as those affecting financial reporting or inventory management, should be addressed first.

Phase 2: Refactoring and Code Modernization

Once the dependency analysis is complete, the development team must begin refactoring the custom code. This process involves updating Python code to use the new APIs, adjusting XML views to match the new UI framework, and modifying security rules to align with the new permission model. It is essential to follow Odoo's coding standards to ensure that the refactored code is compatible with future upgrades. Avoid hardcoding values or relying on specific database IDs, as these are not portable across versions. Use symbolic names and standard ORM methods wherever possible. For complex modules, consider breaking them down into smaller, more manageable components. This modular approach makes it easier to test and debug individual parts of the system. If your custom code includes direct database queries, replace them with ORM calls. Direct queries are fragile and often break when the database schema changes. Additionally, review any scheduled actions or cron jobs that rely on custom code. Ensure that these jobs are updated to reflect any changes in the underlying data structures or API calls. This phase requires close collaboration between developers and business analysts to ensure that the refactored code still meets the original business requirements.

Handling Third-Party Add-Ons

Third-party add-ons present a unique challenge during major upgrades. Vendors may not have released a compatible version of their module for the target Odoo version, or they may have deprecated the module entirely. In such cases, you have three options: wait for the vendor to release an update, fork the module and maintain it internally, or replace it with a different solution. Forking a module requires significant technical expertise and ongoing maintenance effort. It is only recommended if the module is critical to your business operations and no alternative exists. If you choose to fork a module, you must ensure that you have the legal rights to do so and that you have the resources to maintain it. Alternatively, you can look for a different add-on that provides similar functionality and is compatible with the target version. This may require some reconfiguration or customization, but it can be a more sustainable long-term solution. Always verify the compatibility of third-party modules with the target version before proceeding with the upgrade. Do not rely on vendor claims without testing in a staging environment.

Phase 3: Staging Environment and Testing Strategy

A representative staging environment is critical for validating the upgrade. This environment should mirror the production environment in terms of hardware, software, and data volume. Load a copy of your production database into the staging environment and apply the upgrade. This allows you to test the upgrade process itself, including database migrations and module installations. After the upgrade, run a comprehensive test suite that covers all business processes. This includes unit tests for individual functions, integration tests for module interactions, and end-to-end tests for complete business workflows. Pay special attention to areas where custom code interacts with core modules. Verify that data is migrated correctly and that reports are generated accurately. Use automated testing tools where possible to speed up the process and ensure consistency. Manual testing is still necessary for complex scenarios that cannot be easily automated. Document all defects found during testing and prioritize them for resolution. Do not proceed to production until all critical and high-priority defects are resolved. This phase may require multiple iterations of testing and fixing. Be prepared for a longer timeline than initially estimated.

Data Integrity and Reconciliation

Data integrity is paramount during an ERP upgrade. After the upgrade in the staging environment, perform a detailed reconciliation of key data points. Compare financial totals, inventory counts, and customer records between the pre-upgrade and post-upgrade databases. Any discrepancies must be investigated and resolved before proceeding. Use SQL queries to verify that data has been migrated correctly and that no records have been lost or corrupted. Pay special attention to data that is used in critical business processes, such as financial reporting and inventory management. If you find discrepancies, trace them back to the source and determine whether they are caused by the upgrade process or by pre-existing data issues. Fix any data issues in the staging environment and re-run the reconciliation. This process ensures that your production data will be accurate and reliable after the upgrade. It also provides a baseline for comparing production data after the cutover.

Phase 4: Cutover Planning and Deployment

Cutover is the most critical phase of the upgrade. It involves switching from the old version to the new version in the production environment. Plan the cutover window carefully to minimize downtime. Choose a time when business activity is low, such as a weekend or a holiday. Create a detailed runbook that outlines every step of the cutover process, including backups, data synchronization, module installation, and verification. Assign specific roles and responsibilities to each team member. Ensure that everyone understands their tasks and knows how to escalate issues. Before starting the cutover, take a full backup of the production database and file system. Verify that the backup is complete and can be restored. This backup is your safety net in case the upgrade fails. During the cutover, follow the runbook strictly. Do not deviate from the plan unless absolutely necessary. Monitor the upgrade process closely and be prepared to roll back if critical issues arise. Define clear go/no-go criteria before starting the cutover. These criteria should include the resolution of all critical defects, successful completion of all tests, and sign-off from key stakeholders. If any of these criteria are not met, postpone the cutover.

Rollback Strategy

A robust rollback strategy is essential for mitigating the risks of a failed upgrade. Your rollback plan should allow you to restore the system to its pre-upgrade state quickly and reliably. This typically involves restoring the database backup and reverting any code changes. Test your rollback plan in the staging environment before the production cutover. Ensure that you can restore the backup and bring the system back online within the acceptable downtime window. Document the rollback procedure clearly and ensure that all team members are familiar with it. Define specific triggers for initiating a rollback, such as critical application errors, data corruption, or inability to perform key business processes. If a rollback is initiated, communicate the decision immediately to all stakeholders. After the rollback, conduct a post-mortem analysis to identify the root cause of the failure and implement corrective actions. Do not attempt to fix the issue in production. Instead, return to the staging environment, resolve the issue, and re-test before attempting the upgrade again.

Phase 5: Post-Upgrade Stabilization and Monitoring

After the successful cutover, the upgrade is not complete. The system enters a stabilization phase where you monitor its performance and address any remaining issues. Increase monitoring of application logs, database performance, and user activity. Look for signs of errors, slow performance, or unexpected behavior. Establish a dedicated support team to handle user queries and report issues. Prioritize issues based on their impact on business operations. Resolve critical issues immediately and schedule fixes for lower-priority issues. Continue to reconcile data between the old and new systems for a period of time to ensure accuracy. Gather feedback from users and use it to identify areas for improvement. Document any lessons learned during the upgrade process and update your standard operating procedures accordingly. This phase is crucial for ensuring that the upgrade delivers the expected benefits and that the system remains stable and reliable. It also provides an opportunity to optimize the system and address any technical debt that was not resolved during the upgrade.

Risk Management and Decision Criteria

Risk CategoryPotential ImpactMitigation StrategyResponsible Role
Broken Custom ModulesApplication errors, process failuresDependency analysis, refactoring, regression testingLead Developer
Data CorruptionFinancial inaccuracies, compliance issuesData reconciliation, backup verification, rollback planDatabase Administrator
Integration FailuresDisrupted data flows, operational delaysIntegration testing, API verification, middleware updatesIntegration Architect
Performance DegradationSlow response times, user dissatisfactionPerformance testing, index optimization, load balancingSystem Administrator
User Adoption IssuesReduced productivity, resistance to changeUser training, change management, support deskProject Manager

Conclusion

Resolving custom code dependencies in Odoo during major version upgrades is a complex but manageable process. It requires a structured approach that includes thorough dependency analysis, careful refactoring, rigorous testing, and a well-planned cutover. By treating the upgrade as a software development project and investing in proper planning and execution, you can minimize risks and ensure a successful transition. The key to success is early identification of issues, clear ownership of tasks, and a commitment to quality. Do not underestimate the effort required to resolve custom code dependencies. Allocate sufficient time and resources to the project and involve all relevant stakeholders. With the right approach, you can leverage the benefits of the new Odoo version while maintaining the integrity and reliability of your ERP system.

Written by
SysGenPro Editorial

SysGenPro Editorial

Platform & solutions team

Practical guidance on ERP, AI automation, cloud deployment and enterprise transformation from the SysGenPro team.

Share this article

Frequently asked questions

Common questions on this topic. Talk to our team for anything specific to your business.

01Can Odoo automatically upgrade custom modules?

No, Odoo does not automatically upgrade custom modules. Custom code must be manually reviewed, refactored, and tested to ensure compatibility with the target version. Automated tools can help identify issues, but human intervention is required for resolution.

02What are the most common errors in Odoo upgrades?

Common errors include broken XML views, deprecated API calls, security rule conflicts, and data migration issues. These errors often stem from changes in the core framework or ORM between versions.

03How long does an Odoo major version upgrade take?

The duration varies based on the complexity of customizations and the size of the database. A simple upgrade may take a few days, while a complex one with extensive custom code can take several weeks or months.

04Do I need to rewrite all custom code in Odoo?

No, you do not need to rewrite all custom code. However, you must review and refactor any code that relies on deprecated APIs or changed data structures. The extent of refactoring depends on the specific changes between versions.

05What is the safest way to test an Odoo upgrade?

The safest way is to use a representative staging environment that mirrors production. Load a copy of the production database, apply the upgrade, and run comprehensive tests. Verify data integrity and business processes before proceeding to production.

06How do I handle third-party add-ons during an upgrade?

Check if the vendor has released a compatible version. If not, you may need to fork the module, replace it with an alternative, or remove it. Always test third-party modules in a staging environment before upgrading production.

Continue learning
View all articles
Explore the platform

Where to go next

Browse the knowledge hub

See how SysGenPro fits your business

Discuss your workflows, modules and deployment options with our team.

Back to resources