Softwiro
Commissioning a system

Odoo or a custom system: how to actually decide

Often the package is the right answer. Knowing when it stops being the right answer is the whole skill.

14 min read

Two companies quote on the same problem. The first will implement Odoo, configured, with your data loaded, in weeks. The second will build you a system that matches how you actually work, in months. Both are describing something real, both believe their own answer, and the manager in the middle has no way to tell which one is right, because the question is not really about software.

The question is which of your processes are worth defending, and which ones you should quietly change to match how everybody else does them. Once that is answered, the software decision usually answers itself. What follows is how to answer it — including the several cases where the honest conclusion is to buy the package and stop reading.

What the package actually is

A fair comparison starts with an accurate picture rather than a caricature.

Odoo is a framework plus a large library of applications — accounting, inventory, purchasing, sales, CRM, manufacturing, point of sale, projects, human resources — that share one database and one data model. It comes in two editions: a Community edition under an open-source licence, and an Enterprise edition under a paid subscription licence with additional applications and services. Other packages in the same category are shaped similarly: SAP Business One and Microsoft Dynamics 365 Business Central in the commercial mid-market, Zoho for smaller and simpler operations, NetSuite higher up, and ERPNext as another genuinely open-source option with a real presence in this region.

The thing that makes Odoo interesting technically is the extension mechanism. A module can add fields and behaviour to an existing model without editing the original code, so your changes sit alongside the standard product rather than inside it. That is a real engineering advantage over packages you have to fork, and it is the reason "customising Odoo" is a sentence anyone says at all.

Above that sits Studio, a visual layer that lets you add fields, rearrange views, build simple forms and reports, and wire up basic automations without code. Studio is genuinely useful and it has a ceiling. Multi-step approvals with exceptions, pricing logic that depends on your rules, reservation logic that is not the standard reservation logic, validations across several models, real integrations with an outside system, anything performance-sensitive — all of those are Python modules written by a developer, not clicks in Studio. Knowing where that line falls is most of what separates a realistic implementation plan from an optimistic one.

The decision everyone makes casually, first

Before any of that: where the system runs determines what you are allowed to do to it.

  • The hosted service (Odoo Online) is managed and upgraded for you, and it does not accept custom modules or third-party applications at all. You can configure, and you can use Studio, and that is the boundary.
  • Odoo.sh is managed hosting built around a git workflow, and it does accept custom modules and third-party apps.
  • On your own servers, you can do anything, and you own the infrastructure, the security and the upgrades.

Businesses pick one of these in a first meeting, on the basis of convenience, and then discover eighteen months later that a requirement they now consider essential is not reachable from where they are standing. If there is a single practical thing to take from this article, it is to make that choice deliberately and with the next three years in mind.

When the package is genuinely the right answer

This is the part a software company is supposed to skip, so here it is first.

Buy the package when the processes in question are ordinary. Standard double-entry accounting, a normal purchase-to-pay cycle, stock in and stock out of a warehouse, a sales pipeline with stages, payroll, a retail till. These are solved problems. Your version of them is not better than the standard one, it is just yours, and defending it costs money every year for no return. Configuring the package to a standard process is cheaper than building the process and far cheaper than maintaining it afterwards.

Buy the package when the fit is high and the gaps are cosmetic. The usual method here is a fit-gap analysis: list your requirements, and mark each one as met out of the box, met by configuration, or a gap requiring development. If the gaps are few and none of them touch the core of what you sell, you are buying.

Buy the package when speed matters more than shape, when you have no internal technical capacity, or when you are replacing spreadsheets and anything structured would be an improvement. And buy it when the alternative is a custom system nobody has the appetite to maintain — a well-supported package you dislike beats a bespoke system nobody owns.

A software company that cannot tell you this is selling. If your business is a trading company with a warehouse and an accounting department, and what makes it good is your buying relationships rather than anything a computer does, you do not need a custom system, and we would tell you so.

What "customising Odoo" turns into

Here is the part that is usually left out of the six-week plan, and none of it is a criticism of Odoo — it is the arithmetic of any package that you modify.

Major versions come out annually. Each version is supported for a limited period, after which staying on it is either an extra-cost arrangement or a risk you are carrying quietly. So an upgrade is not optional, it is a recurring event.

Now the important mechanism: the vendor's upgrade service covers the technical conversion of a database — standard modules and their data — to the new version. It does not migrate your custom modules. Those are yours, or your partner's, to port. And the database cannot move to the new version until a compatible version of each of your custom modules exists.

Follow that through. Every custom module you accept during implementation is not a one-time cost. It is a subscription you pay, in developer time, at every upgrade, for as long as the system lives. Twelve small customisations agreed casually during a rollout are twelve things that must be re-tested and often rewritten each time the platform moves underneath them. That is what "technical debt" means in concrete terms here, and it is why a rollout that says yes to everything produces a system that is stuck on an old version three years later.

Community modules — the large reviewed library maintained by the Odoo Community Association — reduce this, because someone else does the porting. They do not remove it: those modules are maintained per version, and somebody on your side still has to track which ones have moved and which have not.

The package is cheap to buy and expensive to disagree with.

There is a second, quieter cost: the implementer. Configuration choices, custom modules and the reasoning behind them accumulate as knowledge held by the partner who did the work. Changing partners is possible and people do it, but it is only survivable if you insisted from the first week on owning the source code of your custom modules, owning the hosting account, and being given written documentation. That is the same ownership conversation as any software project — choosing a software company covers how to have it.

Where the package stops fitting

Four patterns, and they are recognisable before you sign.

The workflow is the business, not the paperwork around it. If what you sell is a way of doing something — a specific inspection sequence, a pricing method, an allocation rule that is the reason customers choose you — then bending a standard module to imitate it produces something that half works and can never be improved quickly. Commodity processes belong in the package; the process that is your actual advantage usually does not.

Several parties with conflicting interests share one system. A marketplace with independent sellers, a logistics platform where merchants, couriers and a control room each need their own view and their own truth, a health platform joining patient, pharmacy and supplier. Packages are built around one company's internal operation. Multi-party systems are about what each party may see, may do, and may dispute, and that is a different design from the ground up.

Volume and shape strain the standard model. Large operational tables and heavy transaction volumes are where slowness appears, and in practice it is usually caused by how custom code queries the database or by neglected database maintenance rather than by the platform itself. But "it is your customisation's fault" is cold comfort when the till is slow at the end of the month. Similarly, some standard behaviours are deliberately simple — scheduling in the manufacturing module, for instance, is not constraint-based by default, so a floor that needs finite-capacity planning is looking at an add-on or custom development either way.

The regulator's workflow is specific and yours is different. Sector rules that dictate a document flow, an approval chain or a retention rule can be configured in some cases and cannot in others. This is a fit-gap question, and it should be answered against your actual regulator, not in general.

Compliance and Arabic in this region

This deserves a straight answer, and the answer is partly favourable to the package.

For Egypt, Odoo ships an e-invoicing integration for the Tax Authority as part of its standard localisation rather than as a paid add-on. Setting it up is real work — registering on the authority's portal for credentials, configuring branches, adding the authority's codes to products and customers, arranging a signing key, and testing on the pre-production environment before going live — but the module exists and is maintained by the vendor. Point-of-sale electronic receipts are a separate question: that piece is commonly covered by a third-party application from the app store rather than by the standard localisation, which means asking who maintains it and what happens at the next version. What a compliant accounting system has to do covers what to check either way.

For Saudi Arabia there are localisation modules covering the tax authority's e-invoicing, including the phase that requires integration rather than a QR code alone, and a separate module for point of sale. For the Emirates there is a localisation with the local chart of accounts, tax groups and the tax return format.

Arabic and right-to-left are where you should trust your own eyes rather than anyone's claim, ours included. Support has historically been stronger in the administrative screens than in the public-facing website layer, and quality has varied across versions. Before committing, put your own Arabic data into a trial instance and print the documents your customers will actually receive. Ten minutes of that tells you more than any statement in a proposal.

The comparison, honestly

Ready-made packageBuilt for you
Time to something usableWeeks, if you accept the standard processMonths, and the first useful version comes before the last feature
FitHigh on commodity processes, declining as you get closer to what makes you distinctiveExact, and exactly as good as the thinking that went into it
Cost shapeOngoing licence or subscription, plus implementation, plus a customisation bill at every upgradeLarger to build, then hosting and maintenance you control
UpgradesRegular and largely handled — until your custom modules have to be ported with themNothing forces a change on you, which is also how a system quietly ages
Who you depend onThe vendor's roadmap and your implementation partnerWhoever maintains the system, which is a single point of failure until you make it two
ExitYour data is portable; your customisations are notYou own everything, and you own the responsibility for it
Fails whenYour process is genuinely different and you keep paying to pretend otherwiseNobody maintains it, or it was built before anyone understood the operation

Neither column is the safe one. They fail differently.

A method for deciding

Do this process by process rather than system by system.

  1. List your processes. Not modules — processes. Quotation to order, order to delivery, purchase to payment, the month-end close, the thing your operations manager spends Tuesdays on.
  2. Mark each one commodity or differentiating. Commodity means a competent outsider would recognise it and no customer chooses you because of it. Differentiating means it is a reason you win work or run cheaper than rivals. Be strict: most processes are commodity, and calling everything differentiating is the most expensive mistake available here.
  3. Fit-gap the commodity processes against the package. Ask the implementer to demonstrate each one, with your data, not with the demo company. Note every gap and how it would be closed: configuration, Studio, or a Python module.
  4. Count the modules. Each custom module in that list is a recurring upgrade cost. If the count is small, the package wins. If it is long, you are about to build a custom system inside somebody else's framework, with all the constraints and none of the freedom.
  5. Look at the differentiating processes separately. If they are few and shallow, the package plus some development is fine. If one of them is the operational heart of the business, consider building that part properly.

That last point describes the arrangement that works most often in practice and gets proposed least: the package for the ledger and the ordinary back office, a custom system for the operation that is genuinely yours, and a deliberate integration between them. It is honest about where each approach is strong. It is not free — the integration is its own piece of work, it has to be owned by someone, and two systems mean two sets of master data that can disagree — so it earns its place only when both halves are substantial.

What to distrust while you decide

Distrust quoted ERP failure rates. The widely repeated percentages come from surveys with undisclosed samples or contested definitions of failure, and they are used to sell in both directions. That implementations go over time and budget often is true and well documented; a specific number is not something you should let into a decision.

Distrust a demonstration. Demos run on prepared data in a clean company, and every package looks capable in one. Ask to see your own awkward case: the return with a partial refund against an invoice from a closed period, the order that is split across two branches, the customer with three tax registrations.

Distrust "we can customise anything." It is technically true of every platform and it is the sentence that produces the twelve-module upgrade problem. The right answer to a gap is sometimes to change your process instead, and an implementer who never says that is not protecting you.

And distrust a custom quote that never concedes anything to the package. If a company proposing to build for you cannot name the parts of your operation that a ready-made system would handle better, it has not understood your operation — it has understood its own invoice. What a custom system costs covers how to read the number that follows.

If you want the decision made on evidence

Run the fit-gap before committing to either path — it is cheap, it is yours to keep, and it is the only thing that turns this into a decision rather than a preference. Softwiro builds custom systems, and will tell you when a ready-made package is the better answer for your business — contact us if you want that comparison done properly.

Questions this raises

When is Odoo the right choice instead of a custom system?

When the processes in question are ordinary — standard accounting, a normal purchase-to-pay cycle, warehouse movements, a sales pipeline, payroll, a retail till — and nothing about your version of them wins you customers. It is also the right choice when speed matters more than exact fit, when you have no internal technical capacity, when you are replacing spreadsheets, or when the realistic alternative is a bespoke system nobody will maintain. Run a fit-gap analysis: if the gaps are few and none of them touch what makes the business distinctive, buy the package.

What does customising Odoo actually cost over time?

The visible cost is the development. The recurring cost is the upgrade. Major versions come out annually and are supported for a limited period, and the vendor’s upgrade service converts standard modules and data only — custom modules are migrated by you or your partner, and the database cannot move to a new version until each of them has a compatible release. So every custom module accepted during implementation becomes a bill payable at every upgrade for the life of the system. Community-maintained modules reduce that work but do not remove the need to track it.

Does Odoo support Egyptian e-invoicing and Arabic?

Odoo ships an Egyptian Tax Authority e-invoicing integration as part of its standard localisation, and setting it up involves registering for portal credentials, configuring branches, adding the authority’s codes to products and customers, arranging a signing key and testing on the pre-production environment. Point-of-sale electronic receipts are usually covered by a third-party application rather than the standard localisation, so ask who maintains it. There are equivalent localisation modules for Saudi and Emirati tax requirements. For Arabic and right-to-left, test it yourself: support has historically been stronger in the administrative screens than in the public website layer, so load your own Arabic data into a trial and print the documents your customers will receive.

Can we use a ready-made ERP and a custom system together?

Yes, and it is often the arrangement that works best: the package for the ledger and the ordinary back office, a custom system for the operation that is genuinely yours, and a deliberate integration between them. It is honest about where each approach is strong. It is not free either — the integration is its own piece of work with its own owner, and two systems mean two sets of master data that can disagree — so it earns its place when both halves are substantial rather than as a way of avoiding the decision.

Have a system to build?

Softwiro designs, builds, and operates production systems. Describe what you need and we will come back with a scope rather than a slogan.

Start a project