Microservices: When the Monolith Actually Wins
Microservices are the default assumption in modern software architecture. If you're not breaking your monolith into microservices, you're probably being told you're doing it wrong.
But here's the uncomfortable truth: Sometimes the monolith actually wins.
Not always. Not even often. But for specific organizations with specific constraints, a well-designed monolith outperforms a distributed microservices architecture.
The cost of this mistake? Millions of euros. Companies spend years building microservices infrastructure, hiring distributed systems engineers, and writing operational complexity, only to discover they would have shipped faster and more reliably with a monolith.
This article is about knowing which camp you're in.
Why Microservices Are Assumed
Microservices have several legitimate advantages:
- Independent scaling. Services can be scaled independently based on demand
- Team autonomy. Teams own their service end-to-end
- Technology heterogeneity. Different services can use different languages/frameworks
- Continuous deployment. Services can be deployed independently
- Resilience. Failure in one service doesn't cascade
These are real advantages. For the right organization.
But they come with costs that are often ignored:
- Distributed complexity. Network calls replace function calls. Networks are unreliable.
- Operational overhead. You need monitoring, logging, tracing across many services.
- Testing complexity. You can't unit test the whole system. Integration tests are expensive.
- Data consistency. Distributed transactions are hard. You need eventual consistency patterns.
- Organizational overhead. You need infrastructure teams, SREs, and organized team structure.
The microservices advocate says: "Yes, but the benefits outweigh the costs."
For Netflix, Uber, and Airbnb? Absolutely.
For a 50-person company with a monolithic CRM? Maybe not.
When the Monolith Wins
Here are the specific scenarios where monolithic architecture is genuinely better:
1. Small Team (5-15 Engineers)
The monolith's main advantage: Simplicity.
With a small team, you don't need service boundaries for team organization. One team owns the whole application.
Microservices overhead for small teams:
- Need DevOps infrastructure (they become your 16th engineer)
- Need distributed monitoring (Prometheus, Jaeger, ELK)
- Need service mesh (Istio or Linkerd)
- Need deployment automation (GitOps, Helm)
- Need incident runbooks for multi-service failures
Monolith advantages for small teams:
- One deployment unit (deploy once, everything updates)
- One database (ACID transactions, no eventual consistency)
- Simple testing (integration tests aren't expensive)
- Simple monitoring (one application, one performance profile)
- Simple debugging (stack traces span the whole system)
The math:
- Microservices setup: 3-4 months
- Microservices management: 1 full-time engineer ongoing
- Monolith setup: 1-2 weeks
- Monolith management: 0.1 FTE engineer
For a 5-15 person team, that full-time engineer on infrastructure is a significant tax.
Companies in this situation: Most startups, bootstrapped companies, legacy software companies with small engineering teams.
2. Monolithic Business Domain
Not all applications benefit from service boundaries.
Some businesses are inherently monolithic: a tight system where everything affects everything.
Examples:
- Financial trading system (decision engine requires real-time consistency)
- CRM system (customers, deals, accounts are inseparable)
- ERP system (inventory, purchasing, receivables are interdependent)
- Accounting software (accounts, journals, ledgers require transactional consistency)
Breaking these into microservices creates more problems than it solves:
- Distributed transactions become complex
- Performance suffers (chattiness across services)
- Consistency becomes eventual (acceptable in e-commerce, not in finance)
The alternative: Monolith with modular internal structure. Core business logic is separated by module, not service. Each module has clear interfaces. But it's all deployed together.
This gives you code modularity without operational distribution.
3. Regulatory Requirements
Some industries require tight control over how data flows.
Examples:
- Financial services (GDPR + sector-specific regulations)
- Healthcare (HIPAA + national health regulations)
- Government (security clearances for data access)
With microservices, data flows across services. Each service requires compliance review. Audit becomes a nightmare.
Monolith advantage: Data stays in one place. One compliance review. One audit. One set of security controls.
For a monolith processing regulated data, you get:
- Clear data lineage (auditors understand data flow)
- Single point of control (one database, one access control)
- Simpler compliance (no inter-service data transfers)
This is why many finance and healthcare companies run monoliths.
4. Pre-Standardized Organization
Microservices assume team autonomy.
If your organization is pre-distributed (centralized architecture team, centralized database team, centralized operations), microservices fights organizational structure.
Example:
- Architecture team makes all infrastructure decisions
- Database team manages all databases
- Operations team manages all infrastructure
- Application teams execute, don't own
In this structure, microservices boundaries conflict with organizational boundaries.
A monolith is actually more appropriate: it matches the centralized structure.
Note: This isn't sustainable long-term (centralized structures don't scale). But for transitional periods, it reduces friction.
5. Latency-Sensitive Systems
Microservices require network calls between services.
Network calls are slower than local function calls (10-100x slower).
For latency-sensitive systems:
- Financial trading systems (microsecond latency matters)
- Real-time multiplayer games (millisecond latency matters)
- Autonomous vehicles (low latency is safety)
Microservices can still work (with careful placement and networking), but they add unnecessary complexity.
A monolith is faster and simpler.
6. Limited DevOps Resources
Microservices require operational expertise.
If you're in an industry with limited access to DevOps talent (government, certain European markets, specialized domains), microservices infrastructure becomes hard.
Example: A Swiss pharmaceutical company has strong software engineers but limited Kubernetes/distributed systems expertise. Microservices infrastructure requires hiring expensive talent.
A monolith can be managed by fewer specialists.
The Test: Is Microservices Right for You?
Before you commit to microservices, ask these questions:
| Question | Monolith Better | Microservices Better |
|---|---|---|
| Is your team growing past 15 engineers? | No | Yes |
| Do different teams need independent deployment? | No | Yes |
| Do you have a DevOps team? | No | Yes |
| Is your business domain unified? | Yes | No |
| Do different parts scale differently? | No | Yes |
| Are you hiring distributed systems engineers? | No | Yes |
| Do you need regulatory isolation? | Yes | No |
| Is latency critical (sub-millisecond)? | Yes | No |
| Do teams need different technology stacks? | No | Yes |
| Do you have infrastructure as a cost center? | No | Yes |
Scoring:
- Mostly "monolith better": Stick with monolith
- Mostly "microservices better": Migrate to microservices
- Mixed: Hybrid approach (modular monolith as transition)
The Practical Approach: Modular Monolith
If you're uncertain, there's a middle ground: modular monolith.
Structure your codebase as if it were microservices (separate modules, clear interfaces, bounded contexts), but deploy as a single unit.
Advantages:
- Simplicity of monolith deployment
- Future flexibility of microservices structure
- Can evolve to microservices when (if) needed
- Code modularity without operational distribution
How to build one:
- Organize code into modules (accounting module, CRM module, etc.)
- Each module has well-defined API
- Modules communicate through interfaces, not direct database access
- Single deployment, but architectural flexibility
This buys you optionality: If your business needs microservices later, the modular structure makes migration easier.
When to Migrate From Monolith to Microservices
If you currently have a monolith, when should you migrate?
Migrate when:
- You have 30+ engineers (team coordination is becoming a problem)
- Different parts of the system scale differently (some services always overloaded)
- Different teams need independent deployment cycles
- You can afford a dedicated DevOps/SRE team
- Your business domain naturally separates into services
- You've hit specific performance bottlenecks that distributed systems can solve
Don't migrate if:
- You're doing it because "it's 2025 and everyone else is"
- Your team would become 50% infrastructure engineers
- Your business domain is tightly coupled
- Your latency requirements are strict
- You're uncertain about the benefits
The hard truth: Most companies that migrate to microservices do so too early. They add years of complexity without clear business benefit.
The Hidden Cost of Microservices
When evaluating microservices, account for all costs:
| Cost Type | Monolith | Microservices |
|---|---|---|
| Initial development | CHF 200K | CHF 200K |
| Infrastructure setup | CHF 10K | CHF 100K-200K |
| Operations (year 1) | CHF 50K | CHF 200K-300K |
| Monitoring/observability | CHF 20K | CHF 100K |
| Incident response | CHF 30K | CHF 100K |
| Training/hiring | CHF 50K | CHF 150K |
| Total year 1 | CHF 360K | CHF 750K-950K |
This isn't an argument against microservices. But if you're saving CHF 600K/year by staying monolithic, that's a real business advantage.
Microservices pay for themselves only if they enable something you couldn't do with a monolith.
The Bottom Line
Microservices are powerful. But they're not the universal solution.
Monolith is the right choice if:
- Small team (< 15 engineers)
- Tightly coupled business domain
- Limited DevOps resources
- Regulatory requirements demand tight control
- Latency is critical
Microservices is the right choice if:
- Large team (30+ engineers)
- Service boundaries match business domains
- You have DevOps expertise
- Different services have different scale requirements
- Independent deployment is essential
The practical advice: Start with a well-designed monolith. Migrate to microservices when you hit specific scaling or organizational problems.
Many companies skip the monolith phase and pay for it. Others stay monolithic too long and stagnate.
The trick is knowing which camp you're in.
Related reading:
Unsure about your architecture? Hidora helps enterprises design the right infrastructure: Consulting Services · Architecture Reviews · Managed Kubernetes



