The System Design Interview: A Step-by-Step Framework
A step-by-step framework for system design interviews: clarifying requirements, estimates, APIs, data models, high-level design, deep dives and trade-offs.
Microservices or a monolith? The real costs and benefits of each, the modular monolith middle ground, and a practical framework for deciding and migrating.

Few architecture debates generate more heat than microservices vs monoliths. The right choice depends less on technology than on your team, your product’s maturity and the problems you actually have.
| Monolith | Microservices | |
|---|---|---|
| Simplicity | One codebase, one deploy, easy debugging | Many services, networks, distributed tracing |
| Development speed early on | Fast | Slower: more setup and coordination |
| Independent deployment | No: everything ships together | Yes, per service |
| Scaling | Scale the whole app | Scale hot services independently |
| Team autonomy | Harder as teams grow | Teams own services end to end |
| Failure isolation | One bug can take everything down | Failures can be contained, with care |
| Data consistency | Simple transactions | Distributed data; eventual consistency |
Microservices are worth considering when several of these are true:
If most aren’t true, a modular monolith is usually the better choice.
Use the strangler fig approach: route one capability at a time to a new service while the monolith keeps running, and communicate asynchronously where possible (see Kafka vs RabbitMQ vs SQS). Start with a boundary that has clear ownership and few dependencies.
Don’t default to microservices. Start with a simple design, then explain which components you’d split out as scale and team size grow, and why. That fits our system design interview framework.
They allow independent scaling of components, but a well-designed monolith can scale a long way horizontally.
Rarely at the start. Most benefit from a modular monolith until team size or scaling needs demand more.
A single application with enforced boundaries between modules, making a later split far easier.
Every article is edited by a human and checked against our editorial policy. Spotted a mistake? Tell us.
A step-by-step framework for system design interviews: clarifying requirements, estimates, APIs, data models, high-level design, deep dives and trade-offs.
A URL shortener system design: requirements, capacity estimates, API, short-code generation, database choice, caching, analytics and scaling trade-offs.
How to design a notification system for push, email and SMS at scale: requirements, architecture, queues, templates, preferences, retries and deduplication.