Why "Monolith" Became a Bad Word
Everyone fell in love with microservices, but complexity came free. Modular monoliths might just be the smarter path for most teams today. Even Amazon and Shopify circled back. Here's why that matters if you're building something new.

The word monolith has become weirdly loaded in modern engineering teams. Say it out loud and you'll get polite nods, maybe even a condescending smile - like you've admitted you still write PHP in Notepad++.
Somehow, modular monolith has come to mean you don't get modern architecture.
But here's what I've seen again and again: modular monoliths win in early and mid-stage products.
The Microservices Trap
Microservices have become the default architecture. It feels mature. Scalable. Clean. You spin up independent services, assign clear ownership, promise faster deployments and safer rollbacks.
But most teams overdo it. They start slicing things too early, long before the codebase or product warrants it.
You get:
- Distributed transactions that fail silently
- Painful debugging across 8 repos
- A different Postgres instance per service
- Engineers fighting YAML instead of shipping features
The irony? The system was supposed to move faster. Instead, it becomes a maze of services, orchestration, and infra overhead.
Why Modular Monoliths Work
Because clarity beats complexity.
A modular monolith gives you structure without the weight. It's fast to build. Fast to test. Fast to change. You still get separation of concerns, but without the tax of network calls and deployment pipelines.
You can:
- Move fast with a single deploy
- Enforce ownership at the module level
- Keep your team focused on the product, not the plumbing
I recently advised a team to ditch microservices for a new product. Not because I hate microservices. In fact, most of our mature systems use them.
But this team didn't need 10 services managed by five engineers. They needed speed. Focus. Clarity. They needed to learn, iterate, and get users, not design a CI pipeline.
Real-World Sanity Checks
Shopify runs on a modular monolith, at enormous scale. Their dev velocity is no joke.
Amazon Prime Video migrated away from microservices for their core video pipeline. The reason? Too much orchestration. Too much infra overhead. Moving back to a monolith made it faster and more reliable.
If companies with millions of users and thousands of engineers are rethinking the dogma, maybe you should too.
How to Design One That Doesn't Rot
A good modular monolith still requires discipline.
If you follow SOLID principles and clear domain boundaries, it becomes easy to break pieces out later, when you actually need to. Each module should be:
- Highly cohesive
- Loosely coupled
- Replaceable with minimal impact
Example: if your user service starts getting bloated, and you've kept it clean from the start, extracting it is a matter of pointing traffic elsewhere and swapping adapters.
You don't need to decide everything on day one.
But you do need to keep the doors open for later.
The Real Advantage: Adaptability
A modular monolith lets you defer complexity until it's justified. It adapts with you. It doesn't slow you down with false precision or premature optimization.
Startups don't fail because they chose the wrong framework. They fail because they took too long to ship.
So start simple.
Start fast.
Build a monolith that's modular, maintainable, and migration-friendly.
And when the time comes to scale, you'll be ready.
Note: I don't hate microservices. They're essential at scale. But like most tools, they only shine when used at the right stage. Don't let architecture become religion. Let it serve your velocity.