| Users / Scale | System Characteristics | Challenges | Why Microservices Help |
|---|---|---|---|
| 100 users | Simple app, few features, single codebase | Low complexity, easy to manage | Monolith works fine, microservices overhead not justified |
| 10,000 users | Growing features, more developers, some performance needs | Codebase grows, deployments slow, teams overlap | Microservices start to help by splitting features, enabling parallel work |
| 1,000,000 users | High traffic, many features, multiple teams, complex deployments | Monolith too big, slow to deploy, hard to scale parts independently | Microservices enable independent scaling, faster deployments, fault isolation |
| 100,000,000 users | Massive scale, global users, continuous delivery, many teams | Monolith impossible to manage, scaling bottlenecks, deployment risks | Microservices essential for scalability, team autonomy, resilience |
Why microservices exist - Scalability Evidence
Start learning this pattern below
Jump into concepts and practice - no test required
As user count and features grow, a single large codebase becomes hard to manage.
Deployments take longer because all code must be tested and released together.
Scaling the whole app wastes resources; some parts need more power than others.
Teams block each other due to shared code and dependencies.
This slows innovation and increases risk of failures affecting entire system.
- Horizontal scaling: Scale individual services independently based on load.
- Team autonomy: Small teams own specific services, speeding development.
- Fault isolation: Failures in one service don't crash the whole app.
- Technology diversity: Use best tools per service without affecting others.
- Continuous deployment: Deploy services independently for faster releases.
- Data isolation: Each service manages its own data, reducing conflicts.
At 1 million users, assume 10 requests per user per day = 10 million requests/day (~115 QPS).
Monolith must handle all requests; scaling entire app is costly and inefficient.
Microservices let you scale only busy parts, saving CPU and memory.
Storage is split per service, reducing contention and improving performance.
Network overhead increases due to inter-service calls but is manageable with good design.
- Start by describing the current system and its scale.
- Identify bottlenecks as user count grows (codebase size, deployment speed, scaling limits).
- Explain why a monolith struggles at larger scale.
- Introduce microservices as a solution to these problems.
- Discuss benefits: independent scaling, team autonomy, fault isolation.
- Mention trade-offs like increased complexity and network overhead.
- Conclude with how microservices enable sustainable growth.
Your monolithic app's database handles 1000 queries per second (QPS). Traffic grows 10x to 10,000 QPS. What do you do first and why?
Answer: The database is the first bottleneck. To handle 10x traffic, first add read replicas and caching to reduce load. Then consider splitting the monolith into microservices to scale parts independently and reduce database contention.
Practice
Solution
Step 1: Understand the problem with large applications
Large applications are hard to manage, update, and scale because everything is tightly connected.Step 2: Identify microservices benefit
Microservices split the big system into smaller parts that can be managed and updated independently.Final Answer:
To break a big system into smaller, manageable parts -> Option DQuick Check:
Microservices = smaller parts [OK]
- Thinking microservices run only on one server
- Believing microservices avoid databases
- Assuming microservices require one language
Solution
Step 1: Review microservices independence
Microservices allow teams to develop and deploy each service without affecting others.Step 2: Check other options
Sharing the same database or language is not required; monolithic deployment contradicts microservices.Final Answer:
Each service can be developed and deployed independently -> Option BQuick Check:
Independent deployment = microservices [OK]
- Assuming all services share one database
- Believing all code must be in one language
- Thinking microservices deploy as one unit
Solution
Step 1: Understand microservices isolation
Each microservice runs independently, so failure in one does not crash others.Step 2: Analyze impact on User Service
User Service can keep working even if Order Service crashes, though some features may be limited.Final Answer:
User Service continues working independently -> Option AQuick Check:
Microservices isolation = independent operation [OK]
- Assuming one service crash crashes all
- Thinking user data is lost when order fails
- Believing services auto-restart always
Solution
Step 1: Identify deployment problem
If deploying one service stops the whole system, services are not independent as microservices require.Step 2: Rule out other options
Programming languages, database size, or tests do not cause deployment to stop all services.Final Answer:
Services are tightly coupled and not independent -> Option AQuick Check:
Independent services = independent deploys [OK]
- Blaming programming languages for deployment issues
- Thinking database size causes deployment stop
- Assuming tests affect deployment independence
Solution
Step 1: Understand scaling in microservices
Microservices let each part of the system scale separately depending on its load.Step 2: Apply to online store scenario
During sales, services like Order or Payment can scale more without scaling unrelated services.Final Answer:
By enabling each service to scale based on its own demand -> Option CQuick Check:
Microservices scale independently = efficient scaling [OK]
- Thinking only one service scales
- Believing all services must scale together
- Assuming microservices remove scaling needs
