From Monolith to Microservices: Our ERP Journey
A practical split strategy for ERP domains — strangler patterns, shared auth, and keeping finance consistent.
A practical split strategy for ERP domains — strangler patterns, shared auth, and keeping finance consistent.
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.
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.
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.
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.
Continue reading
Building Scalable Multi-tenant SaaS Architecture
Lessons learned from building enterprise SaaS with data isolation, tenant management, and modular deployments.
LOG-006CI/CD Pipelines for Enterprise Applications
Setting up automated deployment pipelines with GitHub Actions for multi-environment enterprise systems.
Building something similar? I help teams ship ERP, SaaS, and real-time products end to end.
Discuss your project