How to Evaluate a Good System Design
Learn the four-step framework to determine if your system design is well-architected and production-ready.
Master the art of evaluating system designs using clear criteria and structured thinking.
EXERCISE
1The Infinite Building Problem
Understand why every system can be built infinitely and why knowing when to stop is crucial.
Imagine you're building a house. You could keep adding rooms, floors, swimming pools, helicopter pads, underground bunkers... there's literally no end to what you could add.
has the same problem - it's infinitely buildable. You can keep adding:
- More
- More components
- More services
- More complexity
But here's the million-dollar question: When do you stop?
Without clear evaluation criteria, you might either:
- Under-design: Draw one box labeled 'Facebook' and call it done
- Over-design: Create 50 for a simple blog
Pro Tip: Good system design isn't about drawing the most boxes - it's about drawing the right boxes with clear purpose.
EXERCISE
2Step 1: Component Breakdown Mastery
Learn why breaking your system into meaningful components is the foundation of good design.
Think of your favorite recipe. A good recipe doesn't just say "make pasta" - it breaks down into clear steps: boil water, add salt, cook pasta, prepare sauce, combine.
System design works the same way. The first evaluation criteria is:
Have you broken your system into meaningful components?
Bad Example:
[Facebook System] ← One giant black box
Good Example:
[Web Server] → [Feed Generator] → [Database]
↓ ↓
[User Service] → [Aggregator]
Each component has a specific job, just like each ingredient in a recipe has a purpose.
Pro Tip: Component breakdown shows you're thinking systematically, not just drawing random boxes.
EXERCISE
3Step 2: Clear & Exclusive Responsibilities
Discover why each component needs crystal-clear, non-overlapping responsibilities.
Imagine a restaurant where the chef also takes orders, the waiter also cooks, and the cashier also serves food. Chaos, right?
Your system components need mutually exclusive responsibilities - like a well-organized restaurant:
Feed System Example:
Web Server: "I serve HTTP requests to users. That's MY job."
- Handles user requests
- Fetches feed from
- Sends response back
Generator: "I create candidate feeds. That's MY job."
- Pulls from post service
- Pulls from follow service
- Stores in temporary database
Aggregator: "I create final feeds. That's MY job."
- Processes temporary data
- Filters low-quality content
- Creates final feed for database
Pro Tip: When responsibilities overlap, bugs multiply and debugging becomes a nightmare.
EXERCISE
4Step 3: Technical Details Matter
Learn the four technical pillars every component must address.
You wouldn't build a house without knowing about plumbing, electricity, foundation, and roofing, right?
Similarly, every system component needs these four technical details figured out:
Database & Caching
- What data does this component store?
- How will it cache frequently accessed data?
Scaling & Fault Tolerance
- How does it handle increased load?
- What happens when something breaks?
Asynchronous Processing
- What tasks can run in the background?
- How do we handle long-running operations?
Communication
- How do components talk to each other?
- REST APIs? Message queues? Direct database calls?
Example: Web might use HTTP for communication, for , but no async processing needed.
Pro Tip: Technical details separate thoughtful design from random box-drawing.
EXERCISE
5Step 4: Individual Component Resilience
Ensure each component can scale, survive failures, and stay available independently.
Imagine a chain where every link is strong individually. Even if one link has issues, the chain doesn't completely break.
Your system components need the same individual resilience:
Scalability Questions:
- "What if 1 million users hit my web server?"
- "How does my database handle millions of feeds?"
- "Can my aggregator process feeds for millions of users in parallel?"
Fault Tolerance Questions:
- "What if my web server crashes?"
- "What if my database goes down?"
- "What if the aggregator service fails?"
✅ Availability Questions:
- "Is there any single point of failure?"
- "If one component dies, does the entire system go down?"
- "How quickly can we recover from failures?"
Golden Rule: No component should be a single point of failure.
Pro Tip: A system is only as strong as its weakest component - make sure none are weak.
EXERCISE
6The Complete Evaluation Framework
Lets put it all together with a practical checklist for evaluating any system design.
Now you have the complete 4-Step System Design Evaluation Framework :
✅ Step 1: Component Breakdown
- System is broken into meaningful components
- Each component has a clear purpose
- Not just one giant black box
✅ Step 2: Clear Responsibilities
- Each component has specific responsibilities
- Responsibilities don't overlap
- No confusion about "who does what"
✅ Step 3: Technical Details
- Database & caching strategy defined
- Scaling & planned
- Asynchronous processing identified
- Communication protocols chosen
✅ Step 4: Individual Resilience
- Each component can scale independently
- Fault tolerance mechanisms in place
- No single points of failure
- High maintained
Pro Tip: Use this framework for every system you design - it transforms random architecture into thoughtful engineering.
