System Design Rubric & Evaluation Approach
System design interviews evaluate your ability to architect scalable systems. Each dimension is evaluated based on the seniority of the role, resulting in a final score that determines your level.
π‘ Analogy
Like grading a university course: quizzes, midterms, and the final project are all scored 0-100, but they carry different weights. We calculate the weighted sum to get your final percentage grade.
π― Strategy
Spend 5-10 minutes on requirements and estimation. Allocate 20-25 minutes to high-level architecture, APIs, and data models. Save 15-20 minutes for deep dives and resolving bottlenecks.
Evaluation Bar by Level
Select your target level to see the score translation. Score yourself out of 100 on each dimension below. Note: Your total score is based on a weighted sum, not a raw average or sum out of 800. Often, it is normalized to 5-point rating scale. Some dimensions are heavily prioritized depending on your seniority level.
Step 1: Requirement Clarification
Understand the problem and establish the design scope.
Cheat Sheet Focus Areas
- Establish the scope: understand why we need to build the system and who the users are
- List the unique, important functional features the system must support
- Explicitly define what is out of scope to constrain the problem
Step 2: Design Considerations (NFRs)
Define the specific system qualities and characteristics.
Cheat Sheet Focus Areas
- Discuss Availability vs Consistency trade-offs (CAP theorem)
- Define specific needs: Latency, Scalability, Accuracy, and Concurrency
- Address data durability and security requirements (e.g., rate limiting, access control)
- Identify read-heavy vs write-heavy workloads
Step 3: Back-of-the-envelope Estimation
Calculate capacity requirements to find constraints.
Cheat Sheet Focus Areas
- Calculate expected QPS, Storage, and Network Bandwidth
- Use math to back your design and uncover potential scale challenges
- Explicitly identify if the system will hit a QPS bottleneck or a Storage bottleneck
Step 4: High Level Design
Propose the core architecture and get buy-in.
Cheat Sheet Focus Areas
- Propose multiple design options and walk through the end-to-end flow
- Reach an agreement/get buy-in with the interviewer on the design direction
- Include core components without overcomplicating initially
Step 5: Data Model Design
Define how data is stored, accessed, and indexed.
Cheat Sheet Focus Areas
- Discuss data access patterns and the read-to-write ratio
- Create a simplified schema listing only the most important fields
- Justify your database choice (SQL vs NoSQL) and indexing options for query efficiency
Step 6: API Definition
Design the contract between the client and server.
Cheat Sheet Focus Areas
- Standardize the agreement between client and server using REST or GraphQL
- Define input params, response params, and proper HTTP status codes
- Address concepts like idempotency, pagination, and client vs server timestamps
Step 7: Detailed Design of Key Component
Provide technical depth on critical parts of the system.
Cheat Sheet Focus Areas
- Deep dive into scaling: DB sharding, replication, and caching (S3/CDN vs SQL vs NoSQL)
- Discuss component interactions (sync vs async) and concurrency (Locks vs Optimistic)
- Address failure scenarios, data consistency across distributed systems, and metrics
Step 8: Identifying and Resolving Bottlenecks
Structure your approach to system optimization.
Cheat Sheet Focus Areas
- Follow a structure: Identify bottlenecks β Propose options β Discuss trade-offs β Recommend
- Justify design decisions (e.g., why a cache or shard is needed) with math and logical reasons
- Briefly discuss how to handle the next scale curve and potential future improvements
Keys to High Score
- β Establish clear scope and get interviewer buy-in
- β Identify QPS vs Storage bottlenecks early with math
- β Address data access patterns before picking a DB
- β Deep dive into concurrency, caching, and sharding
- β Follow the "Identify β Propose β Trade-offs β Recommend" structure
Common Mistakes to Avoid
- β Adding APIs that don't support the core functional requirements
- β Ignoring sync vs async interaction complexities
- β Not discussing eventual vs strong consistency (CAP)
- β Proposing technologies without justifying them with reasons/math
- β Forgetting to define error handling, pagination, and idempotency