Odoo is one of the few ERP systems that a small or medium company can afford and still grow into. Sales, CRM, inventory, accounting, HR and the website live in one database. That power is also the risk: install twenty apps on day one and you get twenty half-configured processes. These are the rules I follow on every Odoo 19 project.
Start from processes, not modules
Before installing anything, write down how a quotation becomes an invoice, how stock moves and who approves what. Then map each step to an Odoo feature. Most "we need a custom module" requests disappear once the team sees the standard flow configured properly.
Use Odoo.sh branches the right way
- Development branches for building and testing modules with demo data.
- Staging branches with a fresh copy of production data, where the client tests real scenarios.
- Production only receives code that was merged and tested in staging.
Customize with modules, never by editing core
Every change lives in a custom module in Git: Python models that inherit standard ones, XML views that extend instead of replace, and access rules declared in CSV. This keeps the next upgrade possible. A website theme is a module too: QWeb templates, SCSS variables and snippets, so the marketing team can still edit pages with the website builder.
class SaleOrder(models.Model):
_inherit = "sale.order"
delivery_window = fields.Selection(
[("am", "Morning"), ("pm", "Afternoon")],
tracking=True,
)
Treat data migration as a project of its own
Customers, products, opening balances and open orders must be cleaned before import, not after. Import in small batches, keep the external IDs, and run the full import at least twice on staging before go-live.
Localization and accounting first
Install the correct fiscal localization (for example Egypt or UAE) before creating any journal entry. VAT, chart of accounts and fiscal positions are much harder to fix later.
Train by role and go live in phases
Sales users need a different session than warehouse staff. Go live with the core flow first (CRM, sales, invoicing), stabilize, then add inventory, purchase and manufacturing. A phased rollout costs a few weeks more and saves months of firefighting.