When Microservices Are Wrong: A Solutions Architect's Decision Framework
A decision framework with real cost data, case studies, and a readiness checklist to help you choose the right architecture.

้ปๅฐ้ป
· 12 min read
I've been that architect. The one who spun up AWS Lambda functions and ECS clusters for every new service, convinced that microservices were the only "proper" way to build modern software. After years of managing distributed complexity โ and eventually migrating most of my projects to Next.js, NestJS, Vercel, Railway, and Supabase โ I learned something the hard way: the best architecture is the one that matches your actual needs, not your aspirations.
Across the industry, a growing number of organizations are consolidating their microservices back into simpler architectures. This isn't a step backward โ it's the industry maturing. The microservices hype cycle has peaked, and we're finally having honest conversations about when distributed systems create more problems than they solve.
This article gives you a practical decision framework โ backed by real cost data, case studies, and a ready-to-use checklist โ so you can make architecture decisions based on evidence, not hype.
The Microservices Hype Cycle: Where We Stand in 2026
Microservices exploded in popularity after Netflix and Amazon shared their architecture stories around 2014-2015. The message was compelling: break your monolith into small, independent services, and you'll get better scalability, faster deployments, and team autonomy.
What got lost in translation was context. Netflix had thousands of engineers. Amazon had hundreds of teams that needed to deploy independently. The architecture solved problems at a scale that most organizations will never reach.
Fast forward to 2026, and the pendulum is swinging back:
The modular monolith pattern has emerged as the pragmatic middle ground
Major cloud providers now offer guides on when not to use microservices (even AWS)
High-profile teams like Amazon Prime Video have publicly moved services back to monoliths
The operational cost gap between microservices and monoliths is often 3-5x when accounting for infrastructure, tooling, and platform team overhead
The industry consensus is shifting from "microservices by default" to "microservices by necessity."
7 Scenarios Where Microservices Are the Wrong Choice
Not every project needs a distributed architecture. Here are seven concrete scenarios where microservices will likely hurt more than help.
1. Your Team Can't Staff Autonomous Teams Per Service
Microservices solve an organizational problem as much as a technical one. They allow large teams to work independently without stepping on each other's code. Each microservice ideally needs a dedicated team of 5-8 people (Amazon's "two-pizza team" concept) who can own it end-to-end.
If your organization isn't large enough to staff autonomous teams per service โ and for most companies, that means having dozens of developers โ you're adding distributed systems complexity without the organizational benefit.
Rule of thumb: If your entire engineering team fits in one meeting room, you probably don't need microservices.
2. You're Building an MVP or Early-Stage Product
In the early stages, your domain model is still evolving. You don't know which boundaries will be stable enough to become service boundaries. Premature decomposition means you'll spend more time refactoring service boundaries than building features.
As Martin Fowler observed: "Almost all the successful microservice stories have started with a monolith that got too big and was broken up."
What to do instead: Build a well-structured monolith with clear module boundaries. You can extract services later when you have real data about which components need independent scaling.
3. Your Domain Boundaries Are Unclear
Microservices work best when you have well-defined bounded contexts (in Domain-Driven Design terms). If your team frequently debates where a feature "belongs," or if services constantly need to call each other for basic operations, your boundaries are wrong.
A distributed monolith โ microservices that can't function independently โ is the worst of both worlds: all the network overhead with none of the autonomy benefits.
4. Your Team Lacks DevOps Maturity
Microservices require a significant operational foundation:
| Capability | Required For Microservices | Monolith Alternative |
| Container orchestration (K8s) | Running dozens of services | Single deployment |
| Service mesh (Istio/Linkerd) | Service-to-service communication | Function calls |
| Distributed tracing (Jaeger) | Debugging across services | Stack traces |
| CI/CD per service | Independent deployments | One pipeline |
| Centralized logging | Correlating logs across services | grep |
If your team doesn't already have these capabilities, the infrastructure tax will consume more engineering time than feature development.
5. Your Application Has Low Traffic and No Independent Scaling Needs
If all parts of your system scale together and your peak traffic can be handled by a single well-provisioned server (or a simple auto-scaling group), microservices add network latency and operational complexity for zero benefit.
Network calls are orders of magnitude slower than in-process function calls โ a typical HTTP call between services takes 1-5 milliseconds, while an in-process function call completes in microseconds or nanoseconds. Every service boundary you introduce adds latency, potential failure points, and debugging complexity.
6. You Need Strong Data Consistency
Microservices favor eventual consistency โ each service owns its data, and changes propagate asynchronously. If your domain requires strong transactional consistency (financial systems, inventory management, booking systems), you'll need to implement distributed transactions (sagas, two-phase commit) that are notoriously difficult to get right.
A monolith with a single database gives you ACID transactions for free.
7. You're a Startup With Limited Budget
The total cost of ownership for microservices is significantly higher:
Infrastructure: More containers, load balancers, service meshes
Tooling: Observability platforms, API gateways, secrets management
People: Platform engineers command $140,000-$180,000/year salaries (US average)
Cognitive overhead: Every developer needs to understand distributed systems patterns
For a startup, that money and engineering time is better spent on product development.
The Real Cost: Why Microservices Are 3-5x More Expensive
The cost gap between microservices and monoliths is wider than most teams expect. Here's where the money goes:
| Cost Category | Monolith | Microservices | Why It's Higher |
| Compute | Single process, efficient | Dozens of containers, each with overhead | Each service needs its own resources, plus orchestration |
| Networking | In-process calls (free) | Cross-service HTTP/gRPC calls | Load balancers, service mesh, API gateways |
| Observability | Stack traces, single log stream | Distributed tracing, log correlation | Tools like Datadog/New Relic charge per host |
| CI/CD | One pipeline | Pipeline per service | Build times multiply, artifact storage grows |
| Database | One database, ACID for free | Database per service | More instances, plus eventual consistency tooling |
| Platform team | Not needed | 2-3 dedicated engineers | Someone must maintain K8s, service mesh, pipelines |
The multiplier effect is real. When the Amazon Prime Video monitoring team moved back to a monolith, they saw a 90% infrastructure cost reduction for that service. When Grape Up reported consolidating a client from 25 to 5 services, the result was an 82% cost reduction.
These aren't outliers โ they're what happens when the architecture's complexity exceeds the problem's complexity.

The hidden cost that most comparisons miss is the platform team. Microservices don't run themselves โ someone needs to maintain the Kubernetes clusters, service mesh, deployment pipelines, and monitoring infrastructure. That's typically 2-3 dedicated platform engineers (earning $140-180K/year in the US) who could otherwise be building product features.
Case Studies: When Teams Reversed Course
Amazon Prime Video Monitoring: 90% Cost Reduction
In 2023, the Amazon Prime Video team published a case study (originally on primevideotech.com, now covered by The Stack and DevClass) about moving their audio/video quality monitoring service from a microservices architecture (using AWS Lambda and Step Functions) back to a single-process application. The result? A 90% reduction in infrastructure costs for that specific service.
Important context: this was one monitoring tool within Prime Video, not the entire platform. But the lesson is universal โ their microservices were passing large volumes of video data between services through S3, creating enormous data transfer costs. Consolidating into a single process eliminated the inter-service communication entirely.
As The New Stack noted, what they built was arguably a modular monolith โ a single deployable unit with well-separated internal components. Amazon's core services remain microservices-based at a scale that justifies the complexity.
Grape Up Client: 25 Services Down to 5
Consulting firm Grape Up documented a client engagement where they consolidated 25 microservices into 5 well-defined services. The reported results:
82% reduction in cloud infrastructure costs
70% reduction in monitoring tool costs
10 databases migrated into 5
3 cache instances reduced to 1
The original decomposition had been driven by the "one service per entity" anti-pattern โ each database table essentially had its own service, leading to constant inter-service calls for basic operations. (Note: the client is anonymous, as is typical for consulting case studies.)
My Own Journey: From AWS Everything to Pragmatic Simplicity
I spent years building on AWS Lambda and ECS, decomposing everything into microservices because that's what "real architects" were supposed to do. Each function was independently deployable. Each service had its own database. The architecture diagrams looked impressive.
But the reality was different:
Cold starts on Lambda added latency that users noticed
Debugging a request that touched 6 services required correlating logs across multiple CloudWatch log groups
Local development was painful โ you can't easily run 15 services on your laptop
Deployment coordination still existed because services had implicit dependencies
I gradually migrated to Next.js + NestJS deployed on Vercel, Railway, and Fly.io. The result was a system that was simpler to develop, cheaper to run, and faster to iterate on. Not because these tools are inherently better than AWS services, but because the architecture matched my actual scale and team size.
The lesson: the right architecture is the one that lets you ship features, not the one that looks best on a whiteboard.
The Solutions Architect's Decision Framework
Instead of debating microservices vs. monolith in the abstract, use this scoring matrix to evaluate your specific situation. Rate each dimension from 1 (favors monolith) to 5 (favors microservices):

| Dimension | 1 (Monolith) | 3 (Either) | 5 (Microservices) |
| Team size | < 15 developers | 15-50 | 50+ |
| Domain maturity | Exploring / pivoting | Stable core, evolving edges | Well-defined bounded contexts |
| Scaling needs | Uniform traffic | Some hotspots | Components scale independently |
| DevOps maturity | Manual deployments | CI/CD in place | K8s, service mesh, observability |
| Deployment frequency | Weekly / monthly | Daily | Multiple times per day per team |
| Data consistency | Strong ACID required | Mix of consistent and eventual | Eventual consistency acceptable |
| Budget | Constrained | Moderate | Significant infrastructure budget |
| Organizational structure | Single team | Few teams | Multiple autonomous teams |
How to Interpret Your Score
8-16 points: Monolith โ A well-structured monolith is your best bet. Focus on clean module boundaries and solid testing.
17-28 points: Modular Monolith โ You need better separation than a traditional monolith but don't need the overhead of full microservices. This is the sweet spot for most organizations.
29-40 points: Microservices โ You have the scale, team structure, and operational maturity to benefit from microservices. Proceed with clear domain boundaries.
Decision Flowchart
Start
โ
โโ Team < 15 people? โโโโ YES โโโ Monolith
โ โ
โ NO
โ โ
โโ Domain boundaries clear? โโ NO โโโ Monolith (define boundaries first)
โ โ
โ YES
โ โ
โโ DevOps maturity high? โโโโ NO โโโ Modular Monolith
โ โ
โ YES
โ โ
โโ Independent scaling needed? โโ NO โโโ Modular Monolith
โ โ
โ YES
โ โ
โโ Team > 50 & multiple teams? โโ YES โโโ Microservices
โ
NO โโโ Modular Monolith
The Modular Monolith: The Third Option Most Teams Ignore
If your score lands in the 17-28 range (and statistically, most teams fall here), the modular monolith deserves serious consideration.
A modular monolith is a single deployable unit with strictly enforced module boundaries:
Each module owns its domain logic and data access
Modules communicate through well-defined internal APIs (not direct database queries)
Shared kernel is kept minimal โ only truly cross-cutting concerns
Each module can be independently tested
The beauty of this approach is that it gives you a clear migration path. When (and if) a module genuinely needs to become an independent service โ because it needs to scale independently, or a separate team needs to own it โ you can extract it with minimal refactoring because the boundaries are already defined.
Frameworks like NestJS modules, Spring Boot's module system, and .NET's project structure make this pattern straightforward to implement.
The modular monolith is not a compromise โ it's the optimal architecture for teams of 10-100 engineers who need clean separation without distributed systems complexity.
Pre-Migration Readiness Checklist
Before committing to microservices, ensure your organization can answer "yes" to these questions:
[ ] We have automated CI/CD pipelines for every service
[ ] We have container orchestration (Kubernetes or equivalent) in production
[ ] We have centralized logging and distributed tracing across services
[ ] We have defined clear bounded contexts with minimal cross-service dependencies
[ ] We have a dedicated platform / DevOps team (or budget for one)
[ ] Each service can be deployed independently without coordinating with other teams
[ ] We have a strategy for data consistency across service boundaries
[ ] We have service-level SLAs and monitoring for each service
[ ] Our developers are comfortable with distributed systems patterns (circuit breakers, retries, sagas)
[ ] We have a plan for local development that doesn't require running all services
[ ] Our monthly infrastructure budget can absorb a 2-3x increase
[ ] We have enough developers to staff autonomous teams (5-8 people) per service
If you answered "no" to more than 3 of these, you're not ready for microservices. Consider a modular monolith as your next step, and revisit this checklist in 6-12 months.
Conclusion: Making the Right Call
The microservices vs. monolith debate has always been a false binary. The real question is: what architecture gives your specific team the best chance of shipping quality software quickly?
For most teams in 2026, the answer is somewhere between a monolith and full microservices โ and that's perfectly fine. The modular monolith pattern gives you clean boundaries, testability, and a future migration path without the operational tax of distributed systems.
Here's what I wish someone had told me when I was spinning up my fifth Lambda function for a project with three contributors:
Start with the simplest architecture that could work. Add complexity only when you have evidence โ not speculation โ that you need it.
Architecture decisions should be driven by your team's size, your domain's maturity, your operational capabilities, and your budget. Not by conference talks, not by what FAANG companies do, and definitely not by your architecture diagram's aesthetic appeal.
Use the decision framework in this article. Score your project honestly. And if the score says monolith or modular monolith โ embrace it. You'll ship faster, spend less, and sleep better.
Next time someone says "we need microservices," ask them to score it first.
้ปๅฐ้ป
Full-stack product engineer and open source contributor based in Taiwan. I specialize in building practical solutions that solve real-world problems with focus on stability and user experience. Passionate about Product Engineering, Solutions Architecture, and Open Source collaboration.
More Posts
Beyond Chatbots: Building Real-World Stateful AI Agents on Cloudflare
Most "AI agents" you see today are just LLM wrappers with a fancy prompt. They process a request, return a response, and forget everything. No memory. No scheduling. No persistence. Real agents are different. They remember what happened yesterday. Th...
Your API Wasn't Built for AI Agents โ Here's How to Fix It
By 2026, over 30% of API traffic will come from AI agents rather than human-driven applications. That number will keep climbing. Here's the uncomfortable truth: most APIs were designed for human developers who read documentation, interpret ambiguous ...