The software engineering industry has spent the last decade heavily promoting microservices as the ultimate architectural pattern. However, at SOLVEO, when evaluating digital transformation strategies for established enterprises—particularly those in Sri Lanka scaling their operations—we often find that Modular Monoliths are the superior choice.
The Microservices Tax
Microservices solve organizational scaling problems, not necessarily technical ones. When a system is split into dozens of independently deployable services, you immediately inherit the “Microservices Tax”:
- Network Latency: In-memory function calls are replaced by HTTP/gRPC network hops.
- Data Consistency: Distributed transactions require complex sagas and eventual consistency models.
- Operational Overhead: You now need Kubernetes, service meshes (Istio/Linkerd), distributed tracing (Jaeger), and complex CI/CD pipelines.
For an engineering team building a core Enterprise Resource Planning (ERP) or custom business management system, this overhead can severely delay time-to-market.
The Modular Monolith Pattern
A Modular Monolith keeps the deployment unit single (one application, one database) but enforces strict boundaries at the codebase level.
Instead of physical separation, we use logical separation:
- Domain-Driven Design (DDD): Code is grouped by business capability (e.g.,
Billing,Inventory,HR). - Strict Encapsulation: Modules communicate through well-defined public interfaces or in-memory event buses, never by directly querying another module’s database tables.
- Independent Testability: Each module can be tested in isolation.
The SOLVEO Approach
When engineering custom software, we typically start with a Modular Monolith. This gives us the velocity to iterate quickly while the business domain is still being mapped out. If—and only if—a specific module (like a PDF report generator or a real-time IoT ingestion engine) requires independent scaling or a different technology stack, we extract that specific module into a microservice.
This hybrid approach ensures high performance, maintains low cloud infrastructure costs, and allows for massive scale when the business actually demands it.
