Microservices vs. Monolith: When to Split (And When Splitting Kills You)
Custom Solutions

Microservices vs. Monolith: When to Split (And When Splitting Kills You)

Filip Kralj 13 min read
Table of Contents+

TL;DR

Most DACH mid-market companies split into microservices too early, adding 30-40% operational overhead without proportional benefit. A modular monolith gives you clean domain boundaries and independent deployability without distributed-system complexity. Only extract services when team size exceeds 50 developers or a specific domain requires independent scaling.

Key Takeaways

  • Microservices add 30-40% infrastructure overhead and require dedicated platform engineers costing EUR 120,000-160,000 per year each - most teams under 50 developers do not recoup this investment.
  • The modular monolith provides 90% of the structural benefits of microservices at a fraction of the operational cost, making it the right default for DACH mid-market companies.
  • 42% of organizations that adopted microservices are now consolidating services back into larger units, driven by debugging complexity and runaway infrastructure costs.
  • Team size is the strongest predictor: below 10 developers, monoliths win outright; between 10 and 50, a modular monolith is optimal; above 50, microservices begin to justify their cost.
  • Start with a well-structured monolith and extract services only when business metrics demand it - premature decomposition is harder to reverse than premature monolith.

Practical decision framework for microservices vs. monolith. Team size thresholds, cost data, and the modular monolith middle ground for DACH mid-market.

Every architecture meeting eventually arrives at the same question: should we build microservices or stick with a monolith? The answer, for the vast majority of DACH mid-market companies, is neither. The right choice is usually a modular monolith - and most teams that jump to microservices regret it within 18 months.

This is not theoretical. A 2025 CNCF survey found that 42% of organizations that adopted microservices are now consolidating services back into larger deployable units.[1] The primary drivers are debugging complexity, operational overhead, and network latency issues that did not exist before the split.

This article provides a decision framework based on team size, traffic patterns, and budget reality. It is written for CTOs and engineering leads at DACH companies with 10-200 employees who need to make this decision without the luxury of a Google-sized platform team.

Why Are Companies Reversing Their Microservices Decisions?

The microservices movement promised independent deployability, team autonomy, and horizontal scaling. These promises are real - for organizations with the scale to justify them. The problem is that most companies adopted microservices not because they needed distributed systems, but because the conference circuit told them monoliths were legacy technology.

Infographic for Microservices vs. Monolith: When to Split (And When Splitting Kills You)

The data tells a different story. Microservices architectures average 30-40% higher infrastructure costs than equivalent monolithic applications due to duplicated middleware, additional networking infrastructure, and container orchestration overhead.[2] Real-world teams report cloud bills tripling post-migration - EUR 450 per month jumping to EUR 2,700 per month for identical features and traffic.[2]

Amazon Prime Video's engineering team provided one of the most visible examples. Their Video Quality Analysis team migrated from distributed microservices to a single-process monolith, achieving a 90% infrastructure cost reduction while improving scaling capabilities.[3] If Amazon - a company that literally invented AWS - found microservices were the wrong fit for a specific workload, the lesson for a 30-person DACH software company should be clear.

In my experience as CTO, every team under 20 developers that adopted microservices spent more time debugging distributed system failures than building product features. The architecture became the product instead of enabling it.

The reversal trend is not about monoliths being inherently superior. It is about recognizing that architectural decisions carry ongoing operational costs, and those costs must be justified by measurable business outcomes.

See how we deliver 60% faster time-to-market with 40% lower TCO than off-the-shelf.

What Does the Microservices Tax Actually Look Like?

Microservices introduce a set of operational requirements that do not exist in monolithic applications. Each requirement carries a recurring cost. Before making the split decision, every engineering leader needs to understand this tax in concrete EUR terms.

Infographic for Microservices vs. Monolith: When to Split (And When Splitting Kills You)

Infrastructure costs. Microservices infrastructure runs 3.75x to 6x higher than monoliths for equivalent functionality.[2] Each service needs its own container, health checks, logging pipeline, and monitoring endpoints. A monolith serving the same traffic needs one instance of each. At DACH cloud pricing, the difference between running 3 services and running 15 services compounds quickly: expect EUR 15,000-40,000 per year in additional infrastructure costs for a typical mid-market application.

Platform engineering headcount. A monolith requires 1-2 operations-focused engineers. An equivalent microservices architecture requires 2-4 dedicated platform engineers to manage service mesh, container orchestration, distributed tracing, and deployment pipelines.[2] Platform engineers in the DACH market command EUR 120,000-160,000 per year. Adding 1-2 additional platform engineers represents EUR 120,000-320,000 in annual salary costs that produce zero product features.

Debugging overhead. Microservices debugging takes 35% longer in distributed systems compared to monoliths.[2] A bug that crosses service boundaries requires correlating logs from multiple systems, understanding network behavior, and reasoning about eventual consistency. In a monolith, the same bug is a stack trace in a single process.

Developers spend 25% more of their time on operational concerns in microservices architectures compared to monoliths.[2] For a 10-person engineering team billing internally at EUR 100 per hour, that 25% overhead represents roughly EUR 400,000 per year in lost productivity.

Cost CategoryMonolith (10-person team)Microservices (10-person team)Difference
Infrastructure (annual)EUR 12,000-18,000EUR 45,000-108,000+3.75x to 6x
Platform engineering headcount1-2 engineers2-4 engineers+EUR 120,000-320,000/yr
Debugging time overheadBaseline+35% per incidentCumulative velocity loss
Onboarding new developers2-4 weeks4-8 weeks2x ramp-up time
Observability toolingEUR 3,000-8,000/yrEUR 15,000-40,000/yr+4x to 5x
Total annual overheadBaseline+EUR 200,000-600,00030-40% higher TCO

When Do Microservices Actually Make Sense?

Microservices are the right architecture when - and only when - three conditions are true simultaneously. Missing any one of them means the operational overhead will exceed the architectural benefit.

Condition 1: Team size exceeds 50 developers. Research consistently shows that microservices benefits only materialize with teams exceeding 50 developers.[4] Below this threshold, the coordination cost of distributed systems exceeds the coordination cost of working in a shared codebase. At 50+ developers, Conway's Law becomes your friend: service boundaries align with team boundaries, and independent deployability removes the merge-conflict bottleneck that slows large teams.

Condition 2: Revenue exceeds EUR 10 million annually. The financial threshold for justifying microservices is clear: EUR 10 million or more in annual revenue.[4] Below this point, the additional EUR 200,000-600,000 in annual operational overhead represents a significant portion of the technology budget. Above it, the overhead becomes a rounding error compared to the scaling benefits.

Condition 3: Specific domains require independent scaling. The strongest case for microservices is when different parts of your system have fundamentally different scaling profiles. A payment processing service that needs to handle 10,000 transactions per second has different infrastructure requirements than a reporting service that runs batch jobs overnight. When these workloads share a monolith, the entire application must scale to the demands of the most intensive component.

Most DACH mid-market companies meet none of these conditions. A 40-person company with EUR 5 million in revenue and uniform traffic patterns gains nothing from microservices except complexity. Yet this is precisely the profile of companies that most frequently adopt them, driven by recruitment marketing ("we use microservices") rather than business need.

What Is the Modular Monolith Middle Ground?

The modular monolith is the architecture that most mid-market companies actually need. It provides domain isolation, enforced boundaries, and a clean extraction path to microservices - without the distributed system tax.

Infographic for Microservices vs. Monolith: When to Split (And When Splitting Kills You)

More than 90% of enterprise projects are adequately served by a well-designed modular monolith.[3] After Shopify adopted pack-based modularization for their monolith, new-developer onboarding time fell by 55%, and cross-module regressions dropped by 68% year-over-year.[5]

A modular monolith enforces strict boundaries between domains at the code level - through module interfaces, dependency rules, and integration tests - while deploying as a single unit. Each module owns its database tables, exposes a defined API to other modules, and can be developed by an independent team. The critical difference from microservices: communication between modules happens through in-process function calls, not network requests.

This eliminates the entire category of problems that makes microservices expensive: network partitions, service discovery, distributed transactions, eventual consistency, circuit breakers, and retry logic. A method call either succeeds or throws an exception. A network call introduces timeouts, retries, partial failures, and data inconsistency.

The extraction path. When a module genuinely needs independent scaling - because its traffic profile diverges from the rest of the application - you extract it into a service. The module already has a defined API. The extraction involves replacing in-process calls with network calls and deploying the module separately. This is a targeted, low-risk operation compared to decomposing a tangled monolith into services.

The best architecture is the one your team can ship, operate, and evolve without fear. For 90% of mid-market companies, that is a modular monolith with 2-3 extracted services for genuinely hot paths.

How Should You Decide Based on Team Size?

Team size is the single strongest predictor of which architecture will succeed. This is not about individual developer skill. It is about communication overhead, coordination cost, and the point at which a shared codebase becomes a bottleneck rather than an enabler.

1-10 developers: Monolith, full stop. At this scale, every developer knows the entire codebase. Coordination happens in a single Slack channel or a 10-minute standup. Deploy cycles are simple. The overhead of microservices - service mesh, distributed tracing, independent CI/CD pipelines per service - would consume 40-60% of the team's capacity. A well-structured monolith with clean separation of concerns is the fastest path to market.

10-50 developers: Modular monolith. This is the range where coordination starts to matter. Teams of 15+ developers need clear boundaries to prevent stepping on each other's work.[4] A modular monolith provides those boundaries through enforced module interfaces and code ownership rules. Teams work independently within their modules while sharing a deployment pipeline. The consensus across industry research is that this range benefits most from the modular approach.[5]

50+ developers: Selective microservices. At 50 developers, the shared codebase becomes a genuine bottleneck. Merge conflicts, test suite duration, and deployment coordination slow every team down. This is where microservices earn their keep - but even here, the recommendation is not "microservices for everything." The proven approach is a modular monolith core with 2-5 extracted services for domains that genuinely need independent scaling or separate deployment cadences.[5]

Team SizeRecommended ArchitectureKey ReasonMigration Path
1-10 developersMonolithZero coordination overhead; fastest time-to-marketAdd module boundaries as team grows
10-25 developersModular monolithNeed domain boundaries without distributed complexityExtract hot-path services when scaling demands
25-50 developersModular monolith + 1-3 servicesSelective extraction for proven bottlenecksExpand service extraction based on team autonomy needs
50-100 developersHybrid (monolith core + services)Deployment coordination becomes the bottleneckGradual decomposition aligned with team boundaries
100+ developersMicroservices with platform teamIndependent deployment and scaling are essentialInvest in internal developer platform

What Traffic Thresholds Justify the Split?

Team size drives the organizational case for microservices. Traffic patterns drive the technical case. The two are independent - a small team with extreme traffic spikes needs a different solution than a large team with steady traffic.

Under 10,000 requests per minute. A single well-optimized monolith handles this traffic on modest hardware. There is no technical scaling argument for microservices at this level. If your application handles fewer than 10,000 RPM - which covers the vast majority of DACH B2B applications - the monolith is not your bottleneck. Your database queries, caching strategy, and CDN configuration matter far more than your deployment topology.

10,000-100,000 requests per minute. At this level, horizontal scaling of the monolith (running multiple instances behind a load balancer) handles the load efficiently. If specific endpoints receive disproportionate traffic - a product search API handling 80% of requests while the order API handles 5% - extracting the high-traffic endpoint into a dedicated service makes sense. This is targeted extraction, not wholesale decomposition.

100,000+ requests per minute. Above this threshold, the monolith's shared resources (database connections, memory, CPU) become genuine constraints. Different domains need independent scaling: the product catalog needs read replicas and aggressive caching; the order system needs transactional consistency and write throughput. Microservices become technically necessary, not just organizationally convenient.

For context: a EUR 20 million DACH e-commerce company typically processes 5,000-15,000 RPM during peak hours. A EUR 100 million company typically reaches 50,000 RPM. The 100,000+ RPM threshold applies to a small fraction of companies in the region.

50+ custom projects. 99.9% uptime. 60% faster.

Senior-only engineering teams deliver production-grade platforms in under 4 months. No juniors on your project.

Start with a Strategy Call

How Do You Execute a Safe Migration?

If your analysis confirms that microservices are justified for specific domains, the migration must be incremental. The big-bang rewrite - "let us rebuild the monolith as microservices" - fails in over 70% of cases because the team underestimates the distributed system complexity while simultaneously losing institutional knowledge encoded in the existing codebase.

Step 1: Enforce module boundaries in the monolith. Before extracting anything, ensure your monolith has clean internal boundaries. Each domain module communicates through defined interfaces, not direct database access or shared state. Tools like ArchUnit (Java), Deptrac (PHP), or custom CI rules enforce these boundaries automatically. This step alone takes 2-4 months for a mid-sized application - and delivers immediate value through reduced cross-domain bugs.

Step 2: Identify the extraction candidate. Choose the single module with the strongest case for independence: it has a different scaling profile, a different deployment cadence, or a different team that needs autonomy. Do not extract based on architectural elegance. Extract based on measurable business pressure.

Step 3: Strangle, do not rewrite. The Strangler Fig pattern routes new requests to the extracted service while the monolith continues handling existing traffic. Over weeks or months, traffic shifts entirely to the new service. The monolith module is decommissioned only after the new service has proven stable in production. This approach carries near-zero risk because the monolith is always available as a fallback.

Step 4: Measure and decide. After the first extraction, measure the impact on infrastructure costs, deployment frequency, and incident rates. These numbers determine whether to extract another module or stop. I have seen teams plan to extract 8 services and stop at 2 because the data showed diminishing returns. That is not failure - that is data-driven architecture.

What Does This Mean for DACH Mid-Market Companies?

The DACH software market has specific characteristics that influence the architecture decision. Engineering salaries are among the highest in Europe, with senior developers earning EUR 80,000-120,000 and platform engineers commanding EUR 120,000-160,000.[6] This means the "platform team tax" of microservices hits DACH budgets harder than it hits companies hiring in lower-cost markets.

The DACH mid-market - companies with EUR 5-50 million in revenue and 10-50 developers - sits squarely in the modular monolith sweet spot. These companies need clean architecture, domain separation, and the ability to scale specific components. They do not need the operational overhead of a fully distributed system.

Germany's 149,000 IT specialist shortage[7] makes the team size argument even more decisive. When you cannot hire the 2-3 additional platform engineers that microservices require, the architecture becomes operationally unsustainable. A modular monolith lets your existing team work effectively within enforced boundaries without requiring specialized infrastructure expertise.

GDPR compliance adds another dimension. In a monolith, data residency and access controls are enforced in a single application layer. In microservices, every service that handles personal data needs its own compliance implementation, audit logging, and data deletion workflow. The compliance surface area multiplies with every service boundary.

For companies working with development partners, this architecture decision also affects vendor relationships. A modular monolith with clear module boundaries makes it straightforward to hand off specific modules to an external team while retaining core development in-house. For guidance on selecting the right development partner for your architecture, see our guide on how to evaluate a software development partner.

What Is the Decision Framework?

Use this checklist to make the architecture decision. Answer each question honestly based on current state, not aspirational future state. Architecture decisions should serve today's reality with a path to tomorrow's needs, not tomorrow's fantasy at today's cost.

Choose monolith if: Your team has fewer than 10 developers, your application handles fewer than 10,000 RPM, and your domains have similar scaling profiles. A monolith with clean code structure will serve you well and costs the least to operate.

Choose modular monolith if: Your team has 10-50 developers, you need domain boundaries for team autonomy, and you want the option to extract services later without a rewrite. This is the default recommendation for DACH mid-market companies.

Choose selective microservices if: Your team exceeds 50 developers, specific domains have proven different scaling requirements, you have budget for 2-4 dedicated platform engineers, and your revenue exceeds EUR 10 million. Even then, keep the monolith core and extract selectively.

The architecture decision is not permanent. A well-structured modular monolith is the safest starting point because it preserves optionality. You can always extract services later. You cannot easily merge them back together.

What Are the Warning Signs You Split Too Early?

Teams that have prematurely adopted microservices display consistent symptoms. Recognizing these patterns early allows course correction before the operational overhead consumes the entire engineering budget.

Symptom 1: More time debugging infrastructure than building features. When your sprint retrospectives consistently list "deployment issues," "service timeout investigation," or "distributed tracing setup" as major time sinks, the architecture is working against you. Track the ratio of feature development time to infrastructure maintenance time. If infrastructure exceeds 30% of sprint capacity, the architecture is too complex for your team size.

Symptom 2: Deployment coordination meetings. Microservices promise independent deployability. In practice, most teams under 30 developers end up with service dependencies that require coordinated releases. If you need a meeting to coordinate which services deploy in what order, you have a distributed monolith - all of the complexity of microservices with none of the benefits.

Symptom 3: Cloud bills growing faster than traffic. Infrastructure costs should scale roughly linearly with traffic. If costs are growing 2-3x faster than your user base, the per-service overhead is compounding. This is the clearest financial signal that the architecture is more complex than the business requires.

Symptom 4: New developers take months to become productive. In a well-structured monolith, new developers ship their first feature in 1-2 weeks. In a microservices environment without a mature platform team, new developers spend 4-8 weeks understanding the service map, deployment process, and inter-service communication patterns before contributing meaningfully. If onboarding time has doubled since adopting microservices, the architecture is costing you developer velocity.

The path back is not shameful. It is data-driven. Consolidating services that do not need independence is an architectural improvement, not a regression. The 42% of organizations reversing their microservices decisions are not admitting failure - they are optimizing for reality over ideology.[1]

For teams that need help implementing this architecture, our custom solutions team has delivered modular monolith designs for mid-market companies across the DACH region, and our technical deep-dive on API-first architecture covers the integration patterns that make module extraction seamless.

References

  1. [1] CNCF, "Cloud Native Survey 2025 - Microservices Consolidation Trends," , 2025. cncf.io
  2. [2] Pawel Piwosz, "Monolith vs microservices 2025: real cloud migration costs and hi medium.com
  3. [3] ByteIota, "Microservices Too Expensive: Modular Monoliths Win 2026," , 2026. byteiota.com
  4. [4] WebDev Today, "Stop Using Microservices if You Have Less Than 50 Developers," , webdev.today
  5. [5] Dev.to, "The Modular Monolith 2026 Complete Guide - Spring Modulith, ArchUnit Fi dev.to
  6. [6] Index.dev, "European Developer Hourly Rates in 2026: Full Cost Guide by Region," index.dev
  7. [7] Bitkom, "Fachkraeftemangel IT 2024," , 2024. bitkom.org
  8. [8] Java Code Geeks, "Microservices vs Monoliths in 2026: When Each Architecture Win javacodegeeks.com
Ready to talk?

Ready to build your custom platform?

30-minute call with an engineering lead. No sales pitch - just honest answers about your project.

98% engineer retention · 14-day delivery sprints · No lock-in contracts