Free lesson · System Design Interviews
Expectations by Level and Years of Experience
Here's a mistake I've watched dozens of candidates make, including myself: they prepare for the interview without preparing for the level. A new grad who designs a system with perfect sharding strategy and multi-region failover is just as likely to get a "no hire" as a senior engineer who can't explain basic caching - because the bar is calibrated differently for each level.
When I failed my second Google attempt on system design, the feedback wasn't "your design was wrong." It was "your design was correct but we expected more depth at this level." I had designed like a solid mid-level engineer. I was interviewing for senior. The bar had moved, and nobody told me where it went.
This lesson is the map of where the bar sits at every level. I've seen it from both sides - as the candidate who misjudged it, and as the Amazon Bar Raiser who calibrates it for hundreds of interviews.
How Levels Work Across Companies
Before we talk about what each level expects, you need to understand that level definitions vary across companies. A Google L5 is roughly equivalent to an Amazon L6, a Meta E5, a Microsoft 63, and an Apple ICT4. The titles change. The expectations are surprisingly similar.
graph LR
subgraph "Approximate Level Equivalences"
direction TB
A["Junior / New Grad"] --- G1["Google L3"] --- A1["Amazon L4"] --- M1["Meta E3"] --- MS1["Microsoft 59-60"] --- AP1["Apple ICT2"]
B["Mid-Level"] --- G2["Google L4"] --- A2["Amazon L5"] --- M2["Meta E4"] --- MS2["Microsoft 61-62"] --- AP2["Apple ICT3"]
C["Senior"] --- G3["Google L5"] --- A3["Amazon L6"] --- M3["Meta E5"] --- MS3["Microsoft 63-64"] --- AP3["Apple ICT4"]
D["Staff"] --- G4["Google L6"] --- A4["Amazon L7"] --- M4["Meta E6"] --- MS4["Microsoft 65-67"] --- AP4["Apple ICT5"]
end
This diagram shows approximate level equivalences across FAANG companies. Junior or new grad maps to Google L3, Amazon L4, Meta E3, Microsoft 59-60, and Apple ICT2. Mid-level maps to Google L4, Amazon L5, Meta E4, Microsoft 61-62, and Apple ICT3. Senior maps to Google L5, Amazon L6, Meta E5, Microsoft 63-64, and Apple ICT4. Staff maps to Google L6, Amazon L7, Meta E6, Microsoft 65-67, and Apple ICT5.
For the rest of this lesson, I'll use generic labels - Junior, Mid-Level, Senior, Staff - so the guidance applies regardless of which company you're interviewing at. Match these to your target company's ladder using the table above.
The Evaluation Gradient
System design interviews are not pass/fail on a single dimension. Interviewers evaluate candidates across multiple dimensions and calibrate expectations on each dimension based on the candidate's level. Here are the six dimensions I evaluate when I conduct interviews:
| Dimension | What It Means |
|---|---|
| Problem Exploration | How well you scope, clarify, and define the problem before designing |
| High-Level Design | The quality and completeness of your architecture's big picture |
| Technical Depth | How deep you can go on specific components when pushed |
| Tradeoff Analysis | Whether you identify, name, and reason about design tradeoffs |
| Communication | How clearly you narrate your thinking and how well you collaborate with the interviewer |
| Production Awareness | Whether you consider operational concerns - monitoring, deployment, failure modes, cost |
The weight of each dimension shifts with level:
graph TD
subgraph "Junior"
J1[Problem Exploration: Medium]
J2[High-Level Design: HIGH]
J3[Technical Depth: Low]
J4[Tradeoff Analysis: Low]
J5[Communication: Medium]
J6[Production Awareness: Low]
end
subgraph "Senior"
S1[Problem Exploration: HIGH]
S2[High-Level Design: HIGH]
S3[Technical Depth: HIGH]
S4[Tradeoff Analysis: HIGH]
S5[Communication: HIGH]
S6[Production Awareness: Medium]
end
subgraph "Staff"
ST1[Problem Exploration: HIGH]
ST2[High-Level Design: Medium]
ST3[Technical Depth: HIGH]
ST4[Tradeoff Analysis: HIGH]
ST5[Communication: HIGH]
ST6[Production Awareness: HIGH]
end
This diagram shows how evaluation dimensions are weighted across three levels. For Junior candidates, high-level design is most important, with medium weight on problem exploration and communication, and low weight on depth, tradeoffs, and production awareness. For Senior candidates, all dimensions except production awareness are weighted high. For Staff candidates, all dimensions are weighted high, including production awareness, while high-level design is weighted medium because it's assumed to be strong.
Notice something counterintuitive about Staff: high-level design drops to "medium" importance. That's because at Staff, the interviewer assumes you can draw a correct architecture. They take that for granted. What they're really testing is whether you can see around corners - anticipate failure modes, reason about organizational implications, and make decisions that account for production reality.
Junior / New Grad (0–2 Years)
Interactive animation: The junior bar against what is not expected: clarifying questions and core components yes, multi-region and consensus no.
What the interviewer expects:
If you're a new grad or early-career engineer, the interviewer is not expecting you to design systems at Netflix scale. They know you haven't built distributed systems in production. What they are expecting is that you can demonstrate structured thinking about a problem you haven't seen before.
What "good" looks like:
- You ask clarifying questions instead of jumping into design
- You draw a reasonable high-level architecture with the major components in the right places - clients, load balancer, application servers, database
- You can explain why each component exists, even if the explanation is basic
- You know the difference between SQL and NoSQL and can articulate when you'd use each
- You can do basic back-of-the-envelope math - how many requests per second, how much storage
- You communicate your thinking clearly, even if the thinking is simple
What "great" looks like:
- Everything above, plus you identify a specific bottleneck in your design and propose a solution
- You mention caching and can explain where it would help
- You suggest a sensible data model and can defend it
- You ask about non-functional requirements (latency, availability) without being prompted
What you do NOT need to do:
- Design for multi-region deployment
- Discuss consensus protocols
- Know the details of specific technologies (Kafka, Redis, Cassandra)
- Handle every edge case and failure mode
- Discuss monitoring, alerting, or deployment strategies
Interview: For Junior candidates - the single most important piece of advice: Structure beats depth. An organized, clearly communicated simple design will outperform a disorganized, mumbled complex design every time. Draw the boxes. Label the arrows. Explain each component in one sentence. That's the bar. Meet it cleanly.
Common failure modes at Junior level:
- Jumping straight into design without any clarification
- Drawing a single box labeled "server" connected to a single box labeled "database" and stopping there
- Using buzzwords without understanding them - "I'd add Kafka for the message queue" but can't explain what Kafka does
- Going silent for long stretches
Mid-Level (2–5 Years)
Interactive animation: Mid-level good versus great: driving the scoping and one deep dive, then anticipating follow-ups and raising failure modes.
What the interviewer expects:
At mid-level, you have production experience. You've built systems. You've dealt with bugs at 2 AM. The interviewer expects that experience to show in your design - not just correct components, but awareness of what goes wrong.
What "good" looks like:
- Clean scoping and requirements gathering - you should drive this step, not wait for the interviewer
- A complete high-level design with appropriate components for the problem's scale
- Reasonable data model choices with clear justification
- Understanding of basic scaling patterns - horizontal scaling, database replication, caching layers
- You can handle one deep-dive question with technical substance
- You name at least two or three tradeoffs explicitly during the interview
What "great" looks like:
- Everything above, plus you anticipate the interviewer's follow-up questions before they ask them
- You discuss cache invalidation strategies, not just "add a cache"
- You consider database indexing and query patterns
- You bring up failure modes proactively - "What happens if this service goes down?"
- You suggest an API design that makes sense for the client's needs
What you do NOT need to do:
- Design multi-region failover strategies
- Discuss CAP theorem nuances beyond the basics
- Know specialized data structures (Bloom filters, HyperLogLog)
- Present multiple architecture alternatives and compare them (that's a senior expectation)
Interview: For Mid-Level candidates - the single most important piece of advice: Show production awareness. The difference between a mid-level and a junior candidate is that you've seen things break. Mention a failure mode. Mention how you'd monitor the system. Even one sentence - "I'd add a health check endpoint and alert if latency exceeds 500ms" - signals that you've operated systems, not just designed them.
Common failure modes at Mid-Level:
- Designing a system that works at "hello world" scale but not at the scale the problem requires
- Knowing to add a cache but not being able to discuss invalidation, TTL, or cache-aside vs write-through
- Naming technologies without explaining why - "I'd use MongoDB" without explaining why a document store fits this use case
- Not managing time - spending 20 minutes on requirements and running out of time for deep dives
Senior (5–10 Years)
What the interviewer expects:
This is where the bar jumps significantly. At senior, the interviewer expects you to drive the entire conversation. You shouldn't need prompting to move from requirements to design to deep dives. You should anticipate where the hard parts are and proactively address them. You should present tradeoffs - not as an afterthought, but as the organizing principle of your design.
What "good" looks like:
- You own the conversation structure from start to finish
- Your high-level design is complete and considers the system's dominant scaling challenge
- You can go two levels deep on any component the interviewer asks about
- You discuss multiple approaches for key design decisions and explain why you chose one over the others
- You name specific technologies with reasons - "I'd use DynamoDB here because we need single-digit millisecond reads at this scale, and our access pattern is simple key-value lookups"
- You discuss consistency models with precision - not just "it's eventually consistent" but "writes propagate asynchronously with a p99 replication lag of about 200ms, which is acceptable for timeline freshness"
What "great" looks like:
- Everything above, plus you design for failure modes proactively
- You discuss monitoring and alerting - what metrics you'd track, what thresholds you'd set
- You consider cost at scale - "This design uses about 50 TB of Redis, which at AWS on-demand pricing is roughly $X per month - if that's a concern, we could move cold data to S3"
- You identify the one thing that makes this system hard and spend disproportionate time on it
- You handle the interviewer's curveballs ("What if traffic 10x's overnight?") without losing composure
What you absolutely MUST do:
- Discuss tradeoffs explicitly for every major decision
- Address data consistency requirements - not just "I'd use a database" but which consistency model and why
- Consider horizontal scaling for every stateful component
- Handle at least two deep-dive follow-up questions with substantive answers
Interview: For Senior candidates - the single most important piece of advice: The bar is not "correct design." The bar is "correct design + articulated tradeoffs + depth on demand + production awareness." I have rejected senior candidates with correct designs because they couldn't explain why they made each choice. At Senior, the "why" matters as much as the "what."
Common failure modes at Senior level:
- Designing a correct system but not articulating why each choice was made
- Being unable to go deep when the interviewer pushes - "Tell me more about how you'd handle cache invalidation" → "Um, I'd use TTLs" (insufficient depth)
- Not managing the whiteboard - running out of space, losing track of components, creating an unreadable diagram
- Treating all components equally instead of spending time on the hard parts
Staff / Principal (10+ Years)
What the interviewer expects:
At Staff and above, the interview is fundamentally different. The interviewer is evaluating whether you can make organizational-level technical decisions. Not just "how does this system work?" but "how does this system fit into the broader technical ecosystem, and what are the multi-year implications of building it this way?"
What "good" looks like:
- You frame the problem in business terms before technical terms - "The key business requirement is sub-second checkout latency because every 100ms of latency reduces conversion by 1%"
- Your architecture considers organizational boundaries - which teams own which services, how the interfaces between services enable independent deployment and evolution
- You discuss data governance, privacy, and compliance where relevant
- You propose an evolutionary architecture - not just the final state, but how to get there incrementally from the current system
- You consider cross-cutting concerns: observability, security, cost efficiency, developer productivity
What "great" looks like:
- Everything above, plus you challenge the problem statement itself - "Before we design a new notification system, I'd want to understand why the current one is failing. Is it a latency problem, a reliability problem, or a scaling problem? Because the answer changes the design."
- You discuss how this system would be tested at scale
- You consider the implications of your design on hiring and team structure
- You propose a migration strategy, not just a greenfield design
- You identify technical debt the design introduces and explain why it's acceptable
graph TD
subgraph "What Staff Interviews Really Test"
A[Technical Judgment] --> A1[Choosing the right<br/>approach for the<br/>business context]
B[System Thinking] --> B1[Seeing cross-cutting<br/>concerns and<br/>second-order effects]
C[Organizational Awareness] --> C1[Understanding how<br/>teams, services, and<br/>processes interact]
D[Communication Leadership] --> D1[Driving a technical<br/>discussion and<br/>building consensus]
end
This diagram shows four things staff-level system design interviews really test. Technical judgment means choosing the right approach for the business context. System thinking means seeing cross-cutting concerns and second-order effects. Organizational awareness means understanding how teams, services, and processes interact. Communication leadership means driving a technical discussion and building consensus.
Interview: For Staff candidates - the single most important piece of advice: Stop thinking about the system. Start thinking about the organization that will build, operate, and evolve the system. At Staff, the interviewer isn't asking "can you design a good system?" - they're asking "would I trust you to make the right technical decisions for this organization over the next three years?"
Common failure modes at Staff level:
- Designing at a senior level - technically correct but missing the organizational and strategic dimensions
- Not questioning the problem statement or requirements
- Ignoring operational concerns (monitoring, deployment, incident response)
- Presenting a perfect final-state design without addressing how to get there from the current state
- Missing the business context entirely - designing for technical elegance without connecting to revenue, user experience, or business constraints
The Level Ladder - A Summary Table
| Dimension | Junior | Mid-Level | Senior | Staff |
|---|---|---|---|---|
| Scoping | Ask basic questions | Drive scoping independently | Scope precisely, identify hard parts | Challenge the premise, scope for business impact |
| Estimation | Simple math (QPS, storage) | Accurate estimates with assumptions | Detailed capacity planning | Cost-aware estimation with business framing |
| High-Level Design | Core components in right places | Complete architecture for the problem's scale | Architecture with explicit scaling strategy | Evolutionary architecture with migration path |
| Depth | Not expected | One component deep | Two-three components deep | Deep on the hardest parts, plus cross-cutting concerns |
| Tradeoffs | Mention one or two | Name three or more | Tradeoffs organize your design | Tradeoffs include org and business dimensions |
| Technologies | Know basics (SQL, cache) | Name specific tools with reasons | Evaluate alternatives with specific criteria | Consider build-vs-buy, ecosystem fit, hiring implications |
| Failure Modes | Not expected | Mention one or two | Design for failure proactively | Full failure analysis including blast radius |
| Communication | Clear narration | Structured walkthrough | Drive the conversation | Build consensus, handle pushback |
Important: The most common calibration mistake: Candidates preparing at the wrong level. A senior engineer who prepares like a mid-level will give a technically correct but underwhelming interview. A mid-level engineer who tries to perform at staff level will sound pretentious without the depth to back it up. Know your level. Prepare for your bar.
How to Calibrate Your Own Performance
Here's a practical exercise. Take any "Design X" question - let's say "Design a URL Shortener" - and design it four times, once at each level.
Junior version: Clients talk to a web server. The web server stores URL mappings in a database. When someone requests a short URL, the server looks up the mapping and redirects them. You might mention adding a cache to speed up lookups.
Mid-Level version: Everything above, plus you discuss the key generation strategy (hash vs counter), the database choice (SQL for relationships or NoSQL for simple key-value lookups), read-heavy vs write-heavy patterns, and basic caching with TTL. You estimate that the system handles 100 million URLs and 1 billion redirects per day.
Senior version: Everything above, plus you discuss custom base-62 encoding for short URLs, consistent hashing for database sharding, cache-aside pattern with Redis, analytics tracking via async writes to a data warehouse, rate limiting to prevent abuse, and a detailed analysis of read/write ratios driving your caching strategy.
Staff version: Everything above, plus you frame the problem in business terms ("short URLs are a key piece of our marketing attribution pipeline"), discuss the migration path from the current system, consider privacy implications (tracking users via short URLs), propose an observability strategy, and discuss how the URL shortener service fits into the broader platform architecture.
Tip: Try this right now: Pick any system design question. Design it at your target level. Then design it at one level above. The gap between those two designs is exactly what you need to work on before your interview.
Interactive animation: One URL shortener designed four times, from a junior's server and database to a staff engineer's business framing.
A Note on "Years of Experience" vs Actual Experience
I want to be direct about something. The level brackets I listed - Junior (0–2 years), Mid-Level (2–5 years), Senior (5–10 years), Staff (10+ years) - are rough guidelines, not rules. I've seen engineers with three years of experience who perform at a senior level because they've worked on high-scale systems from day one. I've seen engineers with twelve years of experience who perform at a mid-level because they've spent a decade maintaining CRUD apps.
What matters is not how long you've been working. What matters is the complexity and scale of the systems you've worked with. An engineer who spent two years at a startup handling 100 million requests per day has more relevant system design experience than an engineer who spent ten years at an enterprise company building internal tools for 500 users.
When you're preparing for a system design interview, be honest with yourself about where your actual experience sits, not where your years-of-experience suggests it should be. If you've been a "senior" engineer for five years but you've never dealt with sharding, replication, or distributed systems in production, prepare for the mid-level bar. There's no shame in that - and you'll perform much better than someone who overestimates their level and gets exposed during deep-dive questions.
Warning: Dangerous assumption: "I have 8 years of experience, so I should prepare for senior-level system design." Years of experience is a proxy, not a measure. The actual measure is the complexity of the systems you've built and operated. Prepare for the level that matches your experience, not your tenure.
Six Key Takeaways
- The system design interview bar is calibrated to your level. What impresses at Junior is expected at Senior. What impresses at Senior is expected at Staff.
- Junior candidates are evaluated primarily on structured thinking and clear communication. Depth is not expected.
- Mid-Level candidates must show production awareness - failure modes, monitoring, real-world considerations that textbooks skip.
- Senior candidates must articulate tradeoffs for every major decision and go deep on demand. "It works" is not enough - "it works because of these specific choices, at these specific costs" is the bar.
- Staff candidates are evaluated on organizational and business thinking, not just technical correctness. The question is "would I trust this person to make architectural decisions for the whole org?"
- Years of experience is a rough proxy. What actually matters is the complexity and scale of the systems you've personally built, operated, and debugged.
Exercises
Exercise: Exercise 1: Take "Design a Chat Application" and write bullet points for what you'd cover at your target interview level. Then write the same for one level above. Identify the three biggest gaps.
Exercise 2: Review your own resume. For each job, identify the most complex system you worked on and its scale (users, requests per second, data volume). This is your actual experience level - does it match where you're interviewing?
Exercise 3: In your next mock interview, ask the interviewer (or a friend acting as one) to evaluate you on the six dimensions listed in this lesson: Problem Exploration, High-Level Design, Technical Depth, Tradeoff Analysis, Communication, and Production Awareness. Where are you strong? Where are you weak?
Resources
- Levels.fyi - Company Level Comparisons - Compare engineering levels and compensation across companies
- Staff Engineer: Leadership Beyond the Management Track (Will Larson) - Deep dive into what Staff-level engineering looks like in practice
- The Staff Engineer's Path (Tanya Reilly) - Another excellent resource on Staff-level technical leadership
- interviewing.io Blog - System Design Interview Grading - Data-driven insights on how system design interviews are actually scored