← Back to Engagement Models

Sample Artefact · Architecture Decision Record

ADR-001 — Strangler-Fig Cutover for Legacy ERP → Odoo

This is a redacted decision record published as a sample artefact. The client name, exact engagement dates, transaction volumes, and supplier counts have been removed. Architectural reasoning is unchanged. Republished as part of Brainstack's CXO sweep follow-up to give buyers a transparent view of how we document architectural decisions on production engagements.

Context

The client operates as a mid-market commodity importer sourcing from cooperative networks across multiple origin countries. The EU Deforestation Regulation (Regulation 2023/1115, "EUDR") imposed obligations on covered commodity operators that come into effect for large operators on 30 December 2026. Compliance requires, among other things, that every consignment placed on the EU market is accompanied by a Due Diligence Statement linking the commodity to one or more geolocation-identified production plots, with a documented chain of evidence demonstrating that the commodity is deforestation-free against a baseline of 31 December 2020.

The client's existing ERP — a legacy installation with bolt-on supplier and procurement modules — could not produce this evidence chain. Specific deficits:

The client also had operational dependencies on the legacy ERP that ruled out "retire and replace" as a single-shot operation: open purchase orders, partial shipments mid-flight, and accounting reconciliations that span the fiscal-year boundary the cutover would otherwise cross.

Decision

We adopted the strangler-fig pattern to migrate the supplier, procurement, and consignment domains from the legacy ERP to Odoo over a phased rollout, with Odoo standing up as the new system of record one domain at a time. The legacy ERP continued to operate during the strangling period; both systems co-existed for a defined window.

Specifically:

  1. Phase 1 — Supplier domain extraction. Odoo became the system of record for supplier master data. The legacy ERP was put behind a read-through proxy (a thin service that fetched supplier data from Odoo for any legacy code path that required it). New supplier records and updates were captured only in Odoo.
  2. Phase 2 — Procurement & purchase orders. New POs originated in Odoo. The legacy ERP retained existing open POs through their lifecycle. A reconciliation service mirrored PO-status changes from Odoo back to the legacy ERP so the accounting bolt-on continued to function until its own cutover.
  3. Phase 3 — Consignment & EUDR due diligence. Odoo became the source of truth for consignment records, linked to supplier-plot geometry collected via the offline-first PWA on the same engagement. EUDR Due Diligence Statements were generated from Odoo records.
  4. Phase 4 — Accounting cutover. The legacy ERP was decommissioned at the next fiscal-year boundary, when both AR/AP states were quiescent.

Alternatives Considered

Alternative A — Big-bang cutover

Replace the legacy ERP entirely on a single date, freeze operations for the cutover window, run reconciliation against the new system.

Rejected. The acceptable freeze window was effectively zero given live shipment activity. The risk of a missed EUDR deadline driven by a failed cutover (and the resulting penalty exposure under Article 25 of the Regulation) was too high. A big-bang cutover also concentrates all risk on a single date with no rollback path.

Alternative B — Bolt-on EUDR module to legacy ERP

Add an EUDR-specific module to the existing ERP, retain supplier master data in the legacy system, add geolocation capture as a new field set.

Rejected. The supplier-data quality issue would not have been fixed by bolting a new module onto the same dirty data. The duplicate-vendor problem specifically would have produced inconsistent due-diligence submissions where the same supplier appeared multiple times with conflicting geolocation data. Additionally, the legacy ERP's reporting layer could not have produced an Article 8 submission without substantial custom development that would have approached the cost of replacement without delivering the long-term benefits of moving to Odoo.

Alternative C — Parallel run without strangling

Stand up Odoo alongside the legacy ERP, dual-write everything, switch over once Odoo is "ready."

Rejected. Dual-write across two systems with different data models is a known failure mode — drift accumulates faster than the team can reconcile it. This pattern works when the two systems are equivalents (e.g., two database instances of the same schema). Odoo and the legacy ERP did not have equivalent data models. The strangling approach instead designates a single source of truth at each phase, eliminating the dual-write reconciliation burden.

Consequences

Positive

Negative / Acceptable trade-offs

Operational Notes

Compliance & Governance

References