Back to dispatch log
From Monolith to Microservices: Our ERP Journey
LOG-002Engineering

From Monolith to Microservices: Our ERP Journey

A practical split strategy for ERP domains — strangler patterns, shared auth, and keeping finance consistent.

Sameer ShaikhNov 20256 min read
ERPMicroservicesMigration

Our ERP started as one deployable unit with thirteen modules glued by shared tables. It worked until release trains became weekly arguments about regression risk.

We did not rewrite overnight. We used strangler routes: new domain APIs behind the same gateway, modules migrated when parity was proven.

Domain boundaries

CRM, POS, finance, and inventory became separate services with explicit contracts. Shared kernels held users, tenants, and permissions only.

Cross-module workflows (order → invoice → stock) moved to orchestrated sagas with idempotent steps. Retries became normal, not emergencies.

Data ownership

Each service owned its schema. Read models for dashboards consumed events instead of cross-database joins that silently coupled teams.

Reporting lag of seconds was acceptable for operations; finance reconciliation stayed strongly consistent on its store.

Zero-downtime rollout

Feature flags routed traffic per tenant. Pilot clients moved module by module with rollback switches. Big-bang cutovers are for demos, not production.

The lesson: microservices reward discipline in observability. If you cannot trace a tenant_id through a request graph, you are not ready to split.

Key takeaways

  • 01Split by business domain, not by technical layer only.
  • 02Keep auth and tenant context centralized during migration.
  • 03Finance modules need the strictest consistency guarantees.

Continue reading

Building something similar? I help teams ship ERP, SaaS, and real-time products end to end.

Discuss your project