In this article
- Build vs buy: the decision framework
- When Odoo Studio is the right build decision
- Worked example: a controlled branch approval
- Where Studio stops
- PDF reports: use the editor for layout, QWeb for logic
- Worked example: the invoice that looked correct until month-end
- Buy an Odoo app only after technical due diligence
- When custom modules are justified
- APIs and external integration: confirm the plan before design
- A practical API checklist
- What Zimbabwean enterprise teams should decide before approval
- Frequently Asked Questions
- Should we use Odoo Studio or a custom module?
- Can the Odoo PDF editor handle any invoice requirement?
- Is buying an Odoo app lower risk than custom Odoo development?
- Do we need Odoo Custom for an external API integration?
A finance director in Harare approves a new Odoo requirement on Friday, then discovers on Monday that it affects invoice approval, customer credit control and the document layout used by three subsidiaries. The request sounded small: add a field, change a PDF and send data to another system. The implementation decision is not small.
Custom Odoo development should begin with a decision about ownership, upgrade exposure and control. For Zimbabwean enterprises running multi-entity operations, the right answer may be Odoo Studio, an existing app, a targeted custom module or an Odoo external API integration. Building everything creates unnecessary maintenance. Buying everything can force a business into someone else’s workflow.
At Serpa, we assess the business rule before we select the tool. The question is not whether a requirement can be coded. It is whether the requirement should become code that your organisation must test and carry through every future Odoo upgrade.
Build vs buy: the decision framework
The starting point is to separate configuration from proprietary logic. A changed label, approval route or form view is not automatically custom development. A calculation that reflects a company’s own commercial method, a specialised process or an integration with a critical external platform may justify a controlled module.
| Requirement | Best first option | Build only when | Main decision risk | | New fields, views, approvals and security rules | Odoo Studio | The rule needs code-level logic that Studio cannot safely express | Paying developers for standard configuration | | Common, mature business process | Existing Odoo app | No credible app supports the required Odoo version, hosting model or process | Buying an app that the publisher will not maintain | | Invoice, quotation or delivery-note changes | Studio PDF editor | The layout requires complex conditions, non-standard data or calculated rendering context | Treating a visual editor as a replacement for QWeb/XML | | Proprietary rules and specialised workflows | Custom Odoo module | The process is genuinely differentiating or compliance-critical | Treating code as a one-off implementation cost | | External system connection | Odoo external API | An existing connector cannot meet data, control or support requirements | Designing an integration before confirming plan eligibility | Our verdict is practical. If the workflow can remain within standard Odoo configuration, use Studio first. If the need is common and mature, assess an existing app. Build a module where the process is proprietary, the logic is complex or the integration must be governed through version-controlled code.
That order reduces avoidable ERP implementation cost while preserving auditability.
When Odoo Studio is the right build decision
Odoo Studio supports low-code changes including custom fields, views, models, automations, approval rules, security rules and straightforward PDF reports. As of 24 September 2026, it is the appropriate first option when the workflow can remain within Odoo’s standard configuration.
For an Operations Head, that means many requests should not enter a software development backlog at all. A new field for branch stock ownership, an approval step for a purchase above an internal limit, or a controlled view for a regional manager can often be configured inside the ERP.
The discipline is to define the rule first:
1. State the trigger in one sentence. For example, “A purchase order requires finance approval when it exceeds the delegated authority of the requesting manager.”
2. Identify the record, users and permitted actions. This determines whether a field, automation, approval rule or security rule is required.
3. Test the exception path. The step teams skip most often is testing what happens when the approver is absent, rejects the record or belongs to another company.
4. Record the owner of the configuration. Auditable ERP control needs a named business owner, not an unnamed technical change.
Worked example: a controlled branch approval
Take a Zimbabwean distributor with twelve staff in procurement and a monthly purchasing value of US$40,000. It wants branch managers to raise purchase requests, while head office approves selected orders before they become commitments. The first instinct may be to commission a custom procurement portal at a cost measured in several thousand US dollars.
If the requirement is limited to fields, views, approval routing and access control, Studio is the better first option. The business should spend its budget on process mapping, test cases and user acceptance testing, because those are the controls that determine whether the approval is followed. If the distributor later needs a proprietary allocation algorithm across several legal entities, that specific calculation may justify a custom module.
What we would do differently from many first implementations is avoid building the exception before it exists. Prove the standard approval path with real purchase orders first.
Where Studio stops
Studio is not a substitute for maintainable software engineering. Do not use low-code configuration to force through logic that needs complex calculations, specialised local processes, deep integrations or controlled code review. Those requirements can become difficult to test and harder to explain during an internal audit.
If your turnover is under the level where a process has dedicated owners and documented controls, do not commission a custom module simply to reproduce a spreadsheet habit. Standardise the process first. The cost is not just development. It includes regression testing when Odoo changes, documentation and accountability for every exception.
PDF reports: use the editor for layout, QWeb for logic
Invoices, quotations, delivery notes and statements are operational documents. They are also evidence. A misplaced tax field, a missing reference or an inconsistent company header creates avoidable queries from customers and finance teams.
Odoo Studio can edit or create common PDF reports. It is suitable for straightforward changes such as adding fields, moving blocks, changing labels and applying an approved document layout. This is often enough for a Zimbabwean group that needs different branding or company details across a multi-company environment.
The limit matters. Odoo documentation states that conditional blocks can only be edited in XML. If a report must show different content depending on a complex set of conditions, retrieve data from additional models or calculate a bespoke rendering context, the work belongs in QWeb/XML and may require a custom report model.
| PDF report requirement | Recommended approach | Why | | Add a customer reference or delivery address | Studio PDF editor | The change is a standard field and layout adjustment | | Create a standard quotation template | Studio PDF editor | The document can remain within standard report configuration | | Show a section only when several commercial conditions are met | QWeb/XML | Conditional blocks require XML editing | | Pull calculated data from another model | Custom QWeb report | The report needs a controlled rendering context | | Produce a non-standard layout with complex data preparation | QWeb/XML with development controls | Visual editing alone cannot safely govern the logic | When developers override the default report context, they must explicitly restore `doc_ids`, `doc_model` and `docs`. This is a technical detail with a business consequence: if the document context is wrong, the PDF can render incomplete or incorrect information.
Worked example: the invoice that looked correct until month-end
Take a manufacturer with three operating companies and a central finance team. Its invoices need different headers by company, a customer purchase-order reference and a note that appears only for a defined category of sale. The finance manager asks for an “Odoo PDF editor” change because the document appears visually simple.
The headers and purchase-order reference may be handled in Studio. The conditional note needs XML, and the team should test it against actual invoice combinations before release. A reasonable implementation budget should include a test pack containing normal invoices, credit notes, multi-company cases and the exception condition, because a report that works for one record can fail in a later batch.
The common mistake is approving a screenshot instead of approving output from a representative transaction set. We would require both.
Buy an Odoo app only after technical due diligence
An existing app can be the right commercial decision when the requirement is common and mature. It can shorten the amount of functionality your team has to own, but an app is not automatically enterprise-ready because it appears in an app listing.
Before purchase, assess five points:
5. Exact Odoo major version. App compatibility must match the version being implemented. A module built for another version can introduce rework before it creates value.
6. Deployment model. Confirm whether it supports the intended Odoo Online, Odoo.sh or on-premise environment. Hosting compatibility determines whether the app can be deployed at all.
7. Publisher accountability. Identify who maintains the module, how defects are handled and whether upgrades are planned. Vendor claims on app listings are supplier-provided, so they require validation.
8. Licence terms. Confirm the permitted use, source-code access where relevant and future cost. Licensing affects both budget and support options.
9. Upgrade commitment. Ask how the app will be tested during an Odoo version upgrade. An unmaintained module can become an expensive dependency.
A Board should treat app selection as supplier risk assessment, not as a minor procurement item. The app may sit inside purchasing, payroll, inventory or financial controls for years.
When custom modules are justified
A custom module is warranted when standard configuration and credible apps cannot meet a requirement without compromising the operating model. Odoo modules add or alter business logic and are packaged as Python modules. They are the correct tool for proprietary rules, specialised local processes, complex integrations and functionality that needs version-controlled engineering.
Build a module when all four conditions apply:
● The business rule is stable enough to document.
● The rule creates material operational or compliance value.
● The organisation accepts recurring ownership costs.
● The implementation partner can provide controlled source code, test evidence and upgrade planning.
As of 24 September 2026, Odoo documentation includes formal upgrade scripts and test procedures for custom modules. That is useful because it makes the ongoing obligation explicit. Custom code requires version control, regression testing and upgrade scripts. It is not a once-off invoice from an implementation partner.
For a multi-entity ERP programme, we recommend a module register. Each module should record its business owner, purpose, dependencies, test cases, security impact and upgrade status. This gives the CFO and IT Director visibility over the custom estate before it becomes difficult to govern.
APIs and external integration: confirm the plan before design
A warehouse platform, banking tool, field-sales application or customer portal may need data from Odoo. The integration conversation should start with the required business event and the system of record, not with an endpoint.
Odoo’s external API requires the Custom plan. As of 24 September 2026, the documented JSON-2 API uses POST requests to `/json/2/
That US$49 figure is a licensing input, not a complete integration budget. Integration work also includes process design, data mapping, authentication, error handling, monitoring, testing and support ownership.
Do not assume an older XML-RPC or JSON-RPC implementation is the current documented route. Odoo 19 describes JSON-2 as new in version 19, so an architecture based on older patterns should be reviewed before development starts.
A practical API checklist
10. Confirm that the Odoo subscription is on the Custom plan. Without it, external API design is premature.
11. Name the source system and the system of record for each data item. This prevents duplicate customer, stock or invoice records.
12. Define the event, timing and failure response. A nightly batch and a real-time stock update need different controls.
13. Use scoped API-key governance and maintain an access register. Authentication must be auditable.
14. Test duplicate messages, missing data and service interruption. These cases create most reconciliation work after go-live.
The terms “OBI API” and “OBI Odoo API” are unconfirmed search terms, not recognised official Odoo API names. Before approving any integration proposal using those labels, require the supplier to identify the exact third-party product, owner, documentation and support model.
What Zimbabwean enterprise teams should decide before approval
The technical choice should sit inside an ERP decision record. For organisations operating in Zimbabwe, the key practical issue is often not whether a field or report can be changed. It is whether the same change remains controlled across branches, companies and approval levels.
We recommend that the CFO, COO and IT Director approve the following before custom work begins:
| Approval question | Evidence required | Why it matters | | Is this a standard configuration need or a proprietary business rule? | Process map and exception list | It prevents custom code for routine workflow | | Can an existing app meet the exact requirement? | Version, hosting, licence and publisher review | It reduces unsupported dependencies | | Who owns the rule after go-live? | Named business owner | Technical teams should not decide commercial policy | | What happens at the next upgrade? | Test plan and module register | Upgrade cost must be visible before approval | | Does the requirement affect financial or operational controls? | Approval, access and audit evidence | ERP changes can alter who can create, approve or view records | Custom ERP software in South Africa or another regional market may be offered as a template for a Zimbabwean operation. Do not accept regional similarity as proof of fit. Confirm the process, hosting model, integrations and document requirements in the target business before reuse.
Frequently Asked Questions
Should we use Odoo Studio or a custom module?
Use Odoo Studio first for fields, views, automations, approval rules, security rules and straightforward reports that remain within standard Odoo configuration. Use a custom module when proprietary logic, specialised processing, complex integration or maintainable code-controlled functionality is required.
Can the Odoo PDF editor handle any invoice requirement?
No. Studio can edit and create common PDF reports, but conditional blocks can only be edited in XML. Use QWeb/XML where the report requires complex conditions, additional model data or a calculated rendering context.
Is buying an Odoo app lower risk than custom Odoo development?
Not automatically. An app can reduce build effort, but only if it supports the exact Odoo version and hosting model, has suitable licence terms and a credible publisher commitment for upgrades. An unsupported app can create the same operational risk as poorly governed custom code.
Do we need Odoo Custom for an external API integration?
Yes. Odoo’s external API requires the Custom plan. As of 24 September 2026, the published annual-billing price is US$49 per user per month, excluding Odoo.sh hosting. Confirm plan eligibility before approving architecture or development estimates.
A sound decision leaves your team with a controlled ERP, not a collection of features that only its original developer understands. If you are assessing Studio, apps, PDF reports or integration scope for a Zimbabwean Odoo implementation, Request a Consultation with Serpa Africa.