The Odoo Partner Vetting Kit
33 Questions That Separate Operators From Hourly Billers
The First-Meeting Ten
These ten questions filter the field. Any Odoo partner who can answer all of them with specifics has earned a follow-up meeting. Any partner who deflects on three or more has told you everything you need to know.
Walk me through your last upgrade. What broke, and how did you fix it?
Odoo ships a major release every year. A partner who has never moved a real client from version 16 to 17 or 17 to 18 is going to be learning on your money. The specifics they give you predict how they will handle your future upgrades.
How long did the upgrade take from staging clone to production cutover? Which custom modules broke and which APIs deprecated? Did anything fail after go-live that the staging test did not catch?
A specific client story with timeline, what broke, and how it was remediated. Bonus points if they describe upgrade-safe coding practices they have adopted as a result.
"We follow best practices" with no example. Or worse: "Our clients tend to stay on their current version." That is not stability. That is an upgrade graveyard.
Show me a customization you talked a previous client out of.
Over-customization is the single biggest predictor of long-term Odoo failure. A partner who cannot point to a single moment where they pushed back on a customization request has never pushed back. They are an hourly biller, not an advisor.
What was the request? What was the standard Odoo alternative? How did you frame the conversation? What did the client decide?
A concrete story with the original request, the reasoning behind the pushback, and the eventual configuration-based solution. The partner remembers it because it was a hard conversation.
Cannot think of an example. Or "we never refuse customizations." Or the example is trivially easy ("they wanted a different button color and we said no").
Which modules are you recommending, and which are you talking us out of?
Module sprawl is one of the most expensive Odoo mistakes. Every installed module adds complexity, training surface, performance load, and upgrade risk. A good partner recommends fewer modules than the client expects, not more.
What is the minimum viable scope for Phase 1? Which modules are explicitly deferred to Phase 2 and why? What is your reasoning for each recommendation?
A focused Phase 1 of four to six modules with a documented Phase 2 deferral list. Reasoning grounded in actual business workflows, not module feature lists.
A "kitchen sink" recommendation of twelve or more modules with everything labeled "essential." No phasing. No deferral logic.
What is your data migration plan, and who is responsible for cleaning the source data?
Data migration is the most underestimated phase in any ERP implementation. Importing a CSV is five percent of the work. The other ninety-five percent is cleaning duplicates, mapping fields, reconciling years of legacy errors, and validating with department heads. Most cost overruns trace back to this stage.
Who cleans the legacy data, the partner or our team? How many test migrations before go-live, two minimum? Will you produce a field mapping document and have us sign off on it before cutover? For mid-year cutovers specifically: how do you reconcile opening balances and aging reports so the trial balance matches the legacy ledger to the cent on day one?
The customer owns data cleanup with partner guidance. Two test migrations minimum. Field mapping document signed off by both sides. Named data owner inside the customer organization. For finance: a documented opening-balance reconciliation procedure with sign-off from the controller before go-live.
"We will migrate everything for you." No test migrations planned. No data owner identified on the customer side. Vague answer on opening balances. "We will reconcile after go-live" is a six-month accounting cleanup waiting to happen.
How does our local tax compliance work in your build, and who maintains it long-term?
Local tax compliance is where regional Odoo deployments live or die. UAE Corporate Tax, Saudi ZATCA Phase 2, VAT, withholding tax, and local audit reporting are partner-built or partner-maintained territory. Whichever module handles your tax compliance becomes the most important piece of code in your entire deployment.
Which specific localization pack are you installing, and who maintains it? When tax rates or regulations change, how quickly do updates propagate? Show me an audit-ready report your last client generated for the local tax authority.
Named localization pack (official Odoo SA module, OCA module, or specific third-party). Named maintainer. Documented update cadence. Live example of an audit-ready report.
Generic answer with no specific module name. Or "we will customize it for you." Custom-built tax compliance is a future liability you do not want to own.
What is your governance process for new module and customization requests?
Most Odoo implementations succeed at go-live and then drift over the next twelve months. A "small request" goes in, then another, then another. After a year, the deployment has accumulated a hundred undocumented changes that no one can untangle. Governance is the only defense.
Who approves new customizations on both sides? What is the documentation requirement before code is written? How are conflicting requests prioritized? Is there a review board or a pipeline?
A defined intake form. A review board with named members on both sides. Prioritization criteria documented. Customizations require business case and signed approval before code begins.
"Email us when you need something." No documentation requirement. No review process. Every request is "yes, we can do that."
What is your post-go-live support model, and what is the SLA?
Without a defined support model, you are on time and materials forever. Every ticket becomes a billable hour, and the partner has zero incentive to deliver stability. A defined SLA aligns their interests with yours.
What are your response time tiers for P1, P2, and P3 issues? How many support hours are included in the package? Who is our named on-call contact? What is the escalation path when an issue is not resolved?
Tiered SLA with clear P1/P2/P3 definitions and response times. Bundled support hours per month. Named primary and backup contacts. Documented escalation chain.
"We support our clients." No specifics. Pure time-and-materials with no commitment to response times.
Who owns my data on day one, and on the day we part ways?
Data ownership is where lock-in happens. If the only way to access your Odoo database is through your current partner, you do not own your data. You are renting it.
Do we have direct admin access to the production database from day one? In what formats can we export our data, and how quickly? Will you set up weekly automated full database dumps delivered to customer-controlled storage (S3, Azure Blob, our own server) and Git repository access from day one, both written into the contract? If we leave, what is the procedure for handing over the full database, attachments, and configuration?
Customer has admin credentials on day one. Weekly automated database dumps to customer-controlled storage are contractually required and tested. Standard exports (SQL dump, CSV, attachments backup) are documented. Git repository access from project start, not at handover. Exit data extraction is contractually included.
"All data access goes through our portal." Database access requires a support ticket. Backups are stored only on the partner's infrastructure. Git access is granted "at the end of the engagement." Extraction at exit triggers additional consulting hours.
If we part ways, what does handover look like? Documentation, code, knowledge transfer?
Partner-replaceability is the inverse of vendor lock-in. The more painful it is to leave, the more leverage the incumbent has over pricing and quality. A well-defined exit clause keeps the relationship honest while it lasts.
What documentation deliverables are produced over the project lifetime? Will the next partner inherit your Git repository, technical documentation, and configuration notes? What is the handover period and what does it include?
A defined handover package: technical architecture document, custom module repository, configuration notes, integration credentials, knowledge transfer sessions. Contractually included in the original engagement.
No defined handover. Documentation "available on request" but never actually produced. Exit triggers a separate consulting engagement at premium rates.
What does "done" look like, in writing, with measurable acceptance criteria?
Ambiguous acceptance criteria are how implementations become perpetual. Without a written definition of done, the partner can always find more to bill for, and the customer can always find more to ask. Both parties drift, scope creeps, and go-live is "next month" for eighteen months.
What are the specific acceptance criteria per module? What is the sign-off process at each phase gate? What is the go/no-go criteria for go-live? What constitutes the end of the implementation engagement?
Acceptance criteria document signed at kickoff. Phase gates with explicit pass/fail criteria. Go-live readiness checklist. End-of-implementation milestone defined as a date with deliverables, not a feeling.
"We will know when we are done." No phase gates. Acceptance criteria emerge during the project rather than before it.
The Technical Deep-Dive
Use these twenty-three questions with shortlisted partners. They surface the operational, technical, and commercial realities that the first ten do not reach. The categories matter because they map to the disciplines a competent partner organizes around: project management, architecture, security, change management, commercial terms, and measurement.
Project Management and Delivery
If a partner cannot answer these five, they do not run Odoo projects. They improvise them.
Team continuity and bait-and-switch protection
Who is the specific lead consultant assigned to our account, what are their Odoo certifications, and what is their churn rate on projects? Will the consultant we meet in the sales process also lead discovery, build, and go-live? Will any work be subcontracted, and if so, to whom?
The number one bait-and-switch pattern in Odoo sales is the senior consultant who runs the pitch, then disappears once the contract is signed. A junior delivery team takes over, makes rookie configuration mistakes, and the senior reappears six months later to "rescue" the project at premium rates.
Named individuals with certifications, allocation percentages per phase, and a contractual clause that prohibits substitution without customer approval. The partner can produce a CV-style document for each named team member.
"We have a great team." No names. Or "the team will be assigned after we sign." The senior consultant in the pitch is not on the project plan.
Methodology and tracking discipline
Walk me through your end-to-end methodology: discovery, design, build, UAT, hypercare. Is it phased or big-bang, and why is that the right call for our scope? What tracking tool do you use (Jira, Odoo Project, other) and how will we get read-only access?
Methodology is the difference between a structured implementation and an expensive improvisation. The discovery-to-hypercare sequence is canonical. A partner who cannot describe their stages in two minutes is making it up as they go.
Documented methodology with named phases, gate criteria, and durations. Phasing decision is justified with reference to your specific scope (size, complexity, risk). Tracking tool is shared with customer read-access from day one.
"We are agile" without explaining what that means in practice. No defined phase gates. Tracking happens in the partner's private system that you never see.
The gap-fit philosophy
When a business requirement does not fit standard Odoo, do you prioritize changing our process to match the software, or changing the software to match our habit? Walk me through your last three decisions of this type.
This is the sharpest single question in this entire kit. The partner's answer reveals their philosophy in one sentence. Standard-first partners build maintainable systems. Habit-first partners build the customer's current dysfunction into expensive code.
Standard-first as the default position. Customization only when the business process is a genuine competitive differentiator or regulatory requirement. Concrete examples of process changes the partner has recommended and clients have accepted.
"We customize to match your needs." That sentence sounds customer-friendly. It is actually the most expensive sentence in ERP sales.
UAT, rollback, and go-live risk
What is your User Acceptance Testing process? Who writes the test scripts? Will UAT run against a sandbox containing a full copy of our anonymized production data, not just sample data? What is the sign-off threshold for go-live? And critically: what is the documented rollback plan if go-live fails on hour three?
UAT determines whether the system actually works for users. Sandbox UAT with sample data hides every configuration gap that real-world data exposes. Demos with clean test records make every workflow look smooth; the same workflows break when run against ten years of legacy partner records, half-completed sales orders, and duplicated SKUs. Rollback determines whether a failed go-live becomes a four-hour incident or a four-week catastrophe. The rollback question is the one nobody asks and the answer that separates competent partners from optimistic ones.
UAT script library with test scenarios per department. UAT runs against anonymized production data, not vendor demo data. Department sign-off required before go-live. Documented rollback plan with specific revert procedures, decision authority, and a "no-fault" pre-defined cutoff time. Cutover is rehearsed at least once before the real cutover.
UAT is "the client clicks around for a week" against the partner's demo data. No anonymized production sandbox. No rollback plan, because "we don't expect anything to go wrong." If they cannot tell you what happens at hour three of a failed go-live, do not let them run the cutover.
Project steering committee and governance
What governance structure do you require from us during the project? Steering committee composition, decision rights, escalation path, and meeting cadence. Who on your side attends, and who do they report to?
Most SME Odoo implementations skip this entirely, then blame the partner when scope drifts and timelines slip. A defined steering committee with named members and decision authority is the joint mechanism for keeping the project on track. The partner asking for it is a signal of maturity.
A defined steering committee structure with named roles on both sides. Decision authority documented (who can approve scope changes up to X dollars, who must escalate). Cadence of monthly or bi-weekly reviews. Partner's executive sponsor attends.
"We work informally with our clients." No steering committee. Decisions get made by whoever is in the room that day.
Technical Architecture
The hosting, environments, and code-control decisions you make early shape every upgrade for the next five years. Get these wrong and you inherit technical debt that compounds.
Hosting platform and scalability bottlenecks
Given our scale (specify user count, transaction volume, data growth rate), are you recommending Odoo Online, Odoo.sh, or self-hosted? What are the specific performance bottlenecks we should expect on that platform, and at what scale do they appear?
Each hosting option has hard limits. Odoo Online is simplest but limits customization and gives you 24-hour RPO/RTO. Odoo.sh adds Git-based deployment and staging branches. Self-hosted gives full control but transfers all DevOps responsibility to you. A partner who recommends a platform without naming its bottlenecks does not know the platform well.
Specific recommendation tied to your scale, with named bottlenecks (database connection limits, mail queue throughput, attachment storage, cron job timing, etc.) and the thresholds at which they appear. Acknowledges trade-offs explicitly.
"Odoo.sh is great for everyone." No discussion of trade-offs. No mention of where the platform breaks down.
Environments and Git access from day one
Will we have separated dev, staging, and production environments? Will we have direct access to our Git repository and Odoo.sh project (or equivalent) from the first commit, not just at the end?
Customers who get Git access only at handover discover the partner has made undocumented decisions for months. By that point the cost of rework is prohibitive. Day-one access keeps the partner honest and gives you a complete audit trail.
Three separated environments from project start. Customer has read access (at minimum) to the Git repository, the deployment pipeline, and the Odoo.sh project dashboard from day one. Admin access transfers at go-live.
"We will give you access at the end of the project." No staging environment, just dev and prod. Code lives in the partner's private repository with no customer visibility.
CI/CD and version control strategy
How do you manage our custom code outside the Odoo UI? Show me your Git branching strategy for upgrade-safe deployments. What is your automated test coverage? How do hot-fixes get reviewed before they hit production?
This question is the technical proxy for "are you a real engineering team or a shop full of consultants writing code in the browser?" Partners with no CI/CD typically ship breaking changes directly to production, then bill you for the incident response.
Concrete Git branching model (Gitflow, trunk-based, environment branches). Pre-commit hooks or CI pipeline running unit tests. Code review required before merge. Hot-fix procedure documented and enforced.
"We code directly in Odoo Studio." No version control discipline. No automated tests. Hot-fixes happen by editing production.
Third-party app and OCA module vetting
When we need functionality Odoo does not ship, how do you vet third-party apps from the Odoo Apps Store before installing them? Do you prefer OCA modules over single-developer paid apps, and why? What is your criteria for code quality, maintenance, and upgrade-safety? And if a third-party module we depend on becomes abandoned by its developer, what is your remediation process and cost estimate to either fork it, replace it, or remove it?
The Odoo Apps Store is heavily uneven. A poorly maintained module can break with the next upgrade and lock you out of moving forward. OCA (Odoo Community Association) modules are typically higher quality because they have peer review and explicit maintainership, but even OCA modules can become unmaintained when their original sponsors lose interest. A partner who installs random apps without vetting is creating future upgrade debt. A partner who has never had to deal with an abandoned dependency has not run an Odoo deployment long enough.
Stated preference for OCA modules when functionality exists there. For non-OCA modules, named criteria: maintenance frequency, GitHub repository activity, supported Odoo versions, developer reputation. Maintains an internal "approved modules" list. Documented remediation process for abandoned dependencies, with at least one real example: forked the module, replaced it with a different solution, or absorbed maintenance.
"We just install what works." No vetting process. No knowledge of OCA. Cannot name the difference between OCA and Apps Store. No plan for what happens when a dependency goes stale.
Integration architecture
How do you build integrations with our other systems? Direct API calls, middleware (Zapier, Make, n8n, Mulesoft), or event-driven (queues, webhooks)? How do you ensure integrations survive Odoo upgrades? Show me one integration you built that survived two major upgrades without a rewrite.
Integration debt is the silent killer of Odoo deployments. Point-to-point integrations are fragile and explode with every change. Event-driven and middleware-based integrations are more maintainable. A partner who has never had an integration survive two upgrades has never built one properly.
Preference for middleware or event-driven patterns over point-to-point. Concrete example of an integration that survived multiple upgrades, with the upgrade-safety techniques explained. Familiarity with Odoo's queue_job (OCA) and the newer JSON-RPC v2 API.
Point-to-point as the default pattern. No upgrade-safety practices. Cannot produce an example of a long-lived integration.
Security, Compliance, and Financial Controls
The Odoo security model is configurable. That means it is also misconfigurable. Get this wrong and you create audit findings, fraud exposure, and regulatory liability.
Role-based access, MFA, and least privilege
Show me your template security matrix. How do you implement role-based access control (RBAC) in Odoo, including record rules at the database level? Is multi-factor authentication enabled and required? Do you support Single Sign-On via SAML or OAuth2 for centralized identity management? What about IP whitelisting for admin access and encryption at rest for the database? What is your default least-privilege posture for new users?
The most common Odoo security failure is configuring access via Groups alone and ignoring Record Rules. Result: a warehouse user can see supplier costs, or a junior accountant can change customer credit limits. RBAC done right requires both groups and record rules, designed before the first user is created. SSO and MFA are the table-stakes identity controls for any organization above ten users. IP whitelisting and encryption at rest matter the moment you start handling regulated data.
A reusable RBAC template with named roles, group memberships, and record rule definitions. MFA enabled and enforced. SSO via SAML or OAuth supported with documented integration to common providers (Azure AD, Okta, Google Workspace). IP whitelisting available for admin endpoints. Encryption at rest enabled at the database or filesystem level. Default new-user posture is "no access, escalate to manager."
"We give everyone the Sales user group and adjust later." No record rules. No MFA. SSO is not on the roadmap. Admin accounts shared across consultants. Database lives unencrypted on a shared server.
Audit trails for finance postings
How do you configure audit trails for finance postings? Who can post journal entries manually? How are vendor master data changes (specifically bank detail changes) logged and approved? Will the audit log survive a database export and import?
Finance audit trails are the single most important security control in any ERP system. They are also the most commonly broken by careless customization. A clean audit trail makes statutory audits straightforward. A broken one makes them existential.
Manual journal posting restricted to specific roles. Vendor bank-detail changes require two-person approval (a Segregation of Duties control). All postings logged with user, timestamp, and before/after values. Audit log is preserved through standard backup and migration procedures.
Everyone can post journals. Vendor bank details can be changed by a single user without approval. No two-person controls. Audit log is treated as a "nice to have."
Regional compliance: PDPL, ZATCA Phase 2, and beyond
How do you handle UAE PDPL (Personal Data Protection Law) compliance? If we operate in Saudi Arabia, what is your live experience with ZATCA Phase 2 integration? How is UAE Corporate Tax (9% federal) configured in our build? Where does our data live, and what is the cross-border transfer mechanism?
Three real regulatory regimes converged on the GCC market in the last three years: UAE Federal Decree-Law No. 45 of 2021 (PDPL) with full enforcement coming January 2027 and fines up to AED 5 million; Saudi ZATCA Phase 2 e-invoicing, mandatory and integrated into Odoo natively via the l10n_sa_edi module; and UAE Corporate Tax effective for financial years starting June 1, 2023. A partner serving this market who cannot speak fluently to all three is undertested.
Working knowledge of PDPL data subject rights and their implementation in Odoo. Live ZATCA Phase 2 deployment in production for at least one client. UAE Corporate Tax journal configuration with examples. Documented data residency choices.
"We will figure out the local requirements as we go." Generic GDPR-style answer with no PDPL specifics. No ZATCA production reference. UAE Corporate Tax treated as an afterthought.
Backup, disaster recovery, and realistic RPO/RTO
What is your backup schedule, retention policy, and off-site storage location? What is the RPO and RTO you commit to? When was your last successful restore test, and what was its outcome? If we want RTO under 4 hours, what infrastructure changes does that require?
Odoo Cloud commits to 24-hour RPO and 24-hour RTO for paid subscriptions, per Odoo's own security documentation. Anything stricter requires either Odoo.sh paid HA, or a self-hosted high-availability architecture. Untested backups are the most common failure mode in ERP disaster recovery. A partner who has never restored from backup in a drill cannot promise you they will be able to in a real incident.
Documented backup schedule (daily minimum, hourly for high-transaction environments). Off-site storage in a separate geography. Quarterly restore drills with documented outcomes. RPO/RTO commitments tied to specific infrastructure (and priced accordingly).
"Odoo handles backups." Sub-4-hour RTO promised without explanation of the supporting infrastructure. No record of a successful restore test in the last twelve months.
Segregation of Duties and vendor master data controls
Show me your default Segregation of Duties matrix for finance postings, vendor master data changes, and payment approvals. How do we customize it for our specific org chart? What controls prevent a single user from creating a fraudulent vendor and approving payments to it?
Vendor master data fraud is one of the most common ERP exploits. A user with both vendor-creation and payment-approval rights can create a fake vendor, send invoices, and approve their own payments. Segregation of Duties (SoD) is the standard control that prevents this. It needs to be designed into the security model, not bolted on later.
Default SoD matrix that separates vendor master creation, vendor bank-detail changes, invoice approval, and payment execution into distinct roles. Configurable to the customer's org chart. Periodic SoD violation reports built in.
"We do not handle SoD; that is your auditor's job." No matrix. No standard separation between vendor master and payment functions.
People and Change Management
Software does not transform organizations. People do. These three questions surface the partner's awareness of the social side of the project.
Cultural friction strategy
How do you help us navigate the user resistance that surfaces when the system exposes parallel Excel sheets, off-system discounts, and unofficial manual workarounds? What specific tactics does your team use to support our internal champions when the cultural pushback hits?
ERP exposes habits. Once everything is visible, the casual approvals, the spreadsheet-of-record only Mariam maintains, and the off-system discounts become impossible to hide. People resist because they are losing autonomy, not because they cannot click the buttons. Two days of click-training does not solve this. It is a change management problem dressed as a training problem.
A defined change management playbook with named tactics (champion identification, executive sponsorship coaching, transition stories from previous clients, resistance pattern recognition). Treats this as a separate workstream from functional training.
"Our system is intuitive, so adoption is easy." Or "we leave change management to the client." Both signal a partner who will be surprised by adoption problems and bill you for the rescue.
Train-the-trainer and internal Level-1 support handoff
What is your specific methodology for training our internal product owner so they can handle Level-1 support without us paying you for every minor ticket? At what point in the project does that handoff happen, and what does the train-the-trainer curriculum look like?
Without a defined train-the-trainer process, the customer becomes permanently dependent on the partner for every small question. Every "how do I create a custom report" becomes a billable ticket. A competent partner builds your internal capacity deliberately, because long-term clients buy more advisory work than short-term ticket-fillers.
A documented train-the-trainer curriculum with hours allocated. Specific handoff milestone (typically end of hypercare). The customer's internal product owner is named, shadowed during build, and certified at handoff. Knowledge base produced for the customer's L1 team.
"Our support is great, you can just call us." No train-the-trainer plan. The product owner is identified after go-live, not before.
Hypercare definition and exit criteria
What does your hypercare period look like? How long is it, what is included, and what are the exit criteria? Show me your P0/P1/P2 SLA tiers with specific response and resolution times: P0 (system down or finance unable to invoice) one-hour response and four-hour resolution; P1 (major function broken with workaround) two-hour response and next-business-day resolution; P2 (minor bug or cosmetic issue) next-business-day response and within one week resolution. When does hypercare end and standard support begin? What is the pricing difference between the two?
Hypercare (the intensive post-go-live support period) is where most undocumented dependencies surface. Without specific SLA tiers, "support" becomes the partner's interpretation of urgency, which is rarely the customer's. P0/P1/P2 definitions force the partner to commit to response times that match real business impact. Partners with poorly defined hypercare extend it indefinitely, billing premium rates. Partners with no hypercare leave you on standard support from day one and bill you for incidents that should have been included.
Defined hypercare period (typically four to eight weeks). Specific deliverables (named primary and backup contacts, daily check-ins for the first two weeks). Explicit P0/P1/P2 SLA matrix with response and resolution targets per severity. Exit criteria documented (ticket volume threshold, severity distribution, customer sign-off). Clear handover to standard support with documented pricing delta.
Hypercare is vague. "Until you are comfortable." No P0/P1/P2 definitions, just "we'll respond quickly." No exit criteria. No clear shift to standard support pricing.
Commercial Terms and Exit
The commercial model determines whether the partner's incentives align with yours. Most disputes trace back to commercial ambiguity in the original contract.
Pricing model, warranty period, and change-request rate card
Is the engagement fixed-fee with defined scope, or time-and-materials? What is included in the post-go-live warranty period (typically 30 to 90 days), and what defects are warranty versus billable? Show me your change-request rate card.
Fixed-fee aligns partner incentives toward closing scope efficiently. Time-and-materials aligns them toward extending it. Neither model is universally right, but the choice determines how scope discussions go for the next twelve months. The warranty period defines what counts as "fix the bug we created" versus "new work we bill for." Without a rate card, every change-request becomes a fresh negotiation.
Fixed-fee with a clearly bounded scope statement, or hybrid (fixed for core scope, T&M for explicitly out-of-scope work). Warranty period of 60 to 90 days with named defect classes covered. Published rate card by role (PM, consultant, developer) with day-rate or hourly-rate transparency.
Pure time-and-materials with no scope cap. Warranty undefined or limited to 7 to 14 days. Change-request rates "negotiated at the time." All three combined is a partner banking on overruns.
Custom code ownership, Git repository access, and escrow
For custom modules we pay for, do we own the intellectual property? Will we have admin access to the Git repository where our custom code lives, on day one? For high-value mission-critical custom modules, are you willing to participate in a source code escrow agreement?
Intellectual property of custom Odoo modules is contractual territory. The default in many partner agreements is that the partner retains IP, which means leaving them later becomes much more expensive. Git repository access from day one is the practical control. Source code escrow is the heavy-weight version for mission-critical custom code, where a third-party escrow agent releases the code to you if the partner fails commercial obligations.
IP transfer to the customer for paid custom development, in writing. Git admin access on day one. Open to escrow for high-value modules, with a partner who has done this before.
Partner retains IP by default. No Git access during the project. Refuses to discuss escrow even for critical modules.
Clean break protocol and partner-transition effort
If we decide to move to a different partner in two years, what is the specific technical effort required to transition our custom modules, configuration, and version-controlled code to a new environment? Has any previous client done this with your blessing, and how did it go?
Most lock-in is built quietly. By the time you want to leave, the cost of leaving is prohibitive. Asking this question upfront forces the partner to design exit-ability into the engagement. A partner who has cleanly transitioned even one previous client has the discipline to do it again.
Specific transition procedure documented. At least one previous client transitioned to a new partner. The original partner participated constructively in the handover.
"No one has ever left us." That is not a flex. Either nobody can leave because of lock-in, or the partner refuses to admit they have lost clients. Both are bad signals.
Measurement and Long-Term Value
The two questions in this category are the ones almost no buyer asks. They determine whether you can prove the project's value to your board in eighteen months.
Baseline KPI capture before go-live
Will you help us instrument and capture our current-state KPIs before we start configuring Odoo? What does that look like as a deliverable, and how do we use it to measure success post go-live? Who specifically instruments the baseline: your team, our team, or a separate analytics specialist? Odoo does not capture pre-go-live metrics natively, so this requires deliberate measurement work.
Almost nobody does this. Without baseline metrics captured before implementation, you can never defensibly prove ROI later. Order processing time, days to close books, inventory accuracy, customer service response time, error rates: these need to be measured in the pre-Odoo world to be compared to the post-Odoo world. The partner who suggests this is the partner planning to be evaluated on results, not on hours billed. The "who instruments it" question is critical because the work is genuine effort: data extraction from legacy systems, spreadsheet baselines, time studies. If nobody is assigned, it does not happen.
Baseline KPI deliverable as part of discovery. Named metrics tied to your business outcomes (not generic ERP KPIs). Methodology for re-measuring at intervals (90 days, 6 months, 12 months post go-live). Clear ownership of the instrumentation work, with named individuals and hours allocated.
"We focus on delivery, not measurement." No baseline. "You'll know it's working." No defined post-implementation KPI review. Or "we'll capture metrics inside Odoo" which misses the entire point: the comparison point lives outside Odoo, in the legacy world.
Reporting strategy
What reporting architecture do you recommend for our analytics needs? Native Odoo dashboards, Odoo Studio reports, or external BI tools (Metabase, PowerBI, Tableau) via PostgreSQL replica? What is your reasoning given our scale, report complexity, and analyst capacity?
Reporting strategy is a fork in the road that creates technical debt if you choose wrong. Native Odoo dashboards are fast but limited. Studio reports cover most SME needs but become unwieldy at scale. External BI tools require a read replica and analyst skills but give you full flexibility. Odoo 19 newly supports a read-only replica which changes the calculus. A partner who recommends without explaining trade-offs is choosing what they know how to build, not what is right for you.
Recommendation tied to your specific scale and analytics needs. Acknowledges trade-offs explicitly. Mentions Odoo 19 read replica if you are on a recent version. Has experience with at least one external BI integration if your scale warrants it.
"Odoo dashboards are all you need." Or the opposite: "you need PowerBI" without justifying why. No discussion of read-replica options or analyst capacity.
The Reference Call Script
Every partner you shortlist should give you three reference clients to call. Most buyers never call. Of those who do, most ask softball questions and walk away with a glowing endorsement that means nothing. These five questions extract real signal in a thirty-minute call.
R1. Did the project come in on time and on budget? If not, by how much, and where did the overrun come from?
The most direct question and the one that surfaces the most theater. Pay close attention to how the reference frames an overrun. "We changed scope" is one thing. "The partner kept finding more work" is another.
R2. Walk me through one moment when something went wrong. What did the partner do?
How partners handle adversity is the most revealing thing about them. References will share concrete stories of friction more readily than they will volunteer them unprompted. The shape of the partner's response (took responsibility, blamed the customer, charged for the fix, absorbed the cost) tells you everything about the relationship.
R3. What does your support look like a year in? Are you still billing through them, or have you become self-sufficient?
Tests whether the partner's train-the-trainer claim was real or sales talk. A partner who built genuine internal capability has clients who have weaned themselves off premium support. A partner who hoards knowledge has clients who still call for every report change.
R4. If you were starting over, what would you do differently with this partner?
The most useful single question to ask any reference. It captures regret, friction, and improvement opportunities the reference would not volunteer in a "how was the project?" frame. The answer reveals what to negotiate harder for in your own contract.
R5. Would you hire them again for a Phase 2, or would you put it out to bid?
The truest signal of satisfaction. If they would put it out to bid, ask why specifically. The reason is the warning your partner will not tell you themselves.
How to Use This Kit
The first ten questions are for any partner you take a meeting with. Send them in advance. A partner who comes prepared with concrete answers has already differentiated themselves from the field. A partner who arrives at the meeting having ignored your pre-read is telling you how they will handle your scope document.
The twenty-three deep-dive questions are for shortlisted partners. Plan a two-hour technical session with each finalist. Bring your IT lead and your finance lead. Score the answers against the green-flag and red-flag patterns above. The exercise sounds heavy. It takes a fraction of the time you will spend cleaning up after a wrong choice.
Scoring the Responses
A simple three-tier scoring system: Green (concrete answer aligned with the green flag pattern), Yellow (general answer that gestures at the right ideas without specifics), Red (deflection, no answer, or red-flag pattern).
A partner with 25 or more Green answers across the 33 questions is a strong candidate. A partner with 5 or more Red answers is disqualified, no matter how attractive their pricing. A partner mostly in Yellow needs follow-up: specific answers requested in writing before the contract is signed.
When to Walk Away
Three signals to walk away regardless of how good the rest of the meeting felt:
If they cannot give a single example of a customization they talked a client out of (Q2), they are an hourly biller. Walk away.
If they have never moved a real client through a major Odoo version upgrade (Q1), they are going to be learning on your money. Walk away.
If they retain IP on custom code by default and refuse to negotiate it (E2), they are designing in lock-in. Walk away.
The other thirty questions will tell you who to choose from the remaining field. These three tell you who to eliminate before you start choosing.
This checklist is a working document. Real Odoo implementations surface patterns no general checklist anticipates. Capture what you learn in your own diligence and add it to this kit. The next buyer benefits.
This checklist is a working document. Real Odoo implementations surface patterns no general checklist anticipates. Capture what you learn in your own diligence and add it to this kit. The next buyer benefits.