
Planning the System Design Interviews
Introduction
System design interviews can feel overwhelming, but with a structured approach, they become manageable. Over the years I have taken more than 100 interviews and given more than 50 myself, and I've found that breaking the process down into clear steps not only helps in the interview but also improves real-world system design skills.
Before we begin, I will suggest the readers to get comfortable with whiteboarding tools like Draw.io, Excalidraw, Google Drawings, etc. Most companies will either bring their own tool or allow you to share your screen while using either of these tools. Getting comfortable with these will help you save a lot of time, believe me every second counts.
Since system design interviews are open-ended and have to be led by the candidate, it becomes imperative to lead the conversation in a structured manner, so you don't go back and forth with design,apis, database, technologies, etc.
Let's discuss how to approach these interviews effectively.
1. Understanding the Problem
The first and most crucial step is to thoroughly analyze the problem statement and write it down. Many candidates rush into designing without fully understanding what needs to be built—this can lead to poor solutions.
Before you dive in, ask yourself:
- What are the core requirements? Clarify any ambiguous details with the interviewer.
- What are the constraints? These guide your design choices.
- What are the goals? Optimize for scalability? Low latency? High availability?
Functional Requirements
Clearly define what the system must do:
- Identify the essential functionalities.
- Discuss with the interviewer what is in-scope and what is out of scope.
- Write it down to understand the clear scope of the problem.
- For user facing products like Instagram, Whatsapp, etc. , requirements can begin like.
As a user, I should be able to...
- For backend design like Notification Service, Scheduler service, requirements can begin like.
System should be able to...
Non-Functional Requirements
Beyond functionality, systems have to be:
- Follow CAP theorem
Talk about what will you choose between Availability or Consistency w.r.t. the system you are designing. - Scalable (Can it handle millions of users?)
- Reliable (What happens if a server crashes? Fault tolerance?)
- Secure (How do we prevent unauthorized access?)
IMPORTANT
Tailor the non-functional requirements (NFRs) to the problem at hand. Avoid generic statements!
Example: For Instagram’s feed system, the initial page load time should be under 300 ms to ensure a smooth user experience.
2. Capacity Estimation
System design is not just about drawing boxes and arrows—it requires back-of-the-envelope calculations. You should estimate:
- Requests per second (RPS)
- Storage requirements
- Network bandwidth usage
- Peak vs. normal load
This helps in making informed choices about database selection, caching, and horizontal scaling.
Below is an image of the latency numbers every programmer should know
3. Core Entity Design
Identify the core components of your system and determine:
- Core entities generally refer to the tables that you will create, think of them as data models or Java classes
- For example, in an Uber-like system core entities can be User, Rider, Cab, etc.
- Discuss all parameters of the entities w.r.t the system you are building.
IMPORTANT
This is where you can also discuss what database you will choose SQL vs NOSQL and the reasoning behind it.
4. API Design Discussions
APIs define how components interact. When designing APIs, consider:
- Endpoints (REST, GraphQL, gRPC?)
- Request & Response formats (JSON, Protobuf?)
- Ensure how each API will satisfy the functional requirements.
TIP
The functional requirements should drive this conversation, if you got those right. You only have to define the APIs according to those.
5. High-Level System Design
This is where you sketch the overall architecture:
- What are the major components? (Database, Cache, Load Balancer, etc.)
- How do they interact?
- What trade-offs are you making?
- Rate limiting (To prevent abuse)
- Error handling (Graceful degradation matters!)
- Authentication & Authorization (OAuth, JWT, API keys?)
TIP
Usually you can skip Rate limiting, authentication by adding API gateway and ask interviewer if that's something he/she is interested in discussing. Most of the time interviewers will skip that since it's not part of the main design they are looking for, however it does not mean that you don't have to read about it.
TIP
Focus on conceptual understanding rather than low-level implementation details.
Example: When designing a ride-sharing service like Uber, discuss how drivers and riders are matched rather than dive into exact database schemas.
6. Deep Dive into Key Components
This is not a separate section as such, the design discussion itself will be covering breadth and depth of specific sections. So the interviewer may ask you to zoom in on specific parts:
- How will the database be sharded?
- How does the caching strategy work?
- How will you handle concurrent requests?
And more follow-up questions, this is where you need to show the experience you have with a particular technology/design patterns, etc.
IMPORTANT
Sometimes these discussions are result defining since the interviewer gets to know if, what you have been discussing is all theoretical or you understand the tech as well.
TIP
Below discussions can be one or two liners where you explain critical parts of the system and how you would use monitoring, etc. Depending on the time and interest of the interviewer you can discuss them.
Fault Tolerance & Disaster Recovery
If you have discussed your overall design, the next thing you should discuss is about failures, since Failures will happen and your system should handle them gracefully:
- Load balancing for redundancy
- Database replication for failover
- Auto-scaling to handle traffic spikes
- Circuit-breaker to handle microservices failure.
- A well-designed system should not have a single point of failure.
Monitoring & Logging
A system without monitoring is a black box. Implement:
- Real-time alerts (Prometheus, Datadog)
- Centralized logging (ELK Stack, CloudWatch)
- Tracing to debug slow requests (OpenTelemetry)
Security & Authentication
A secure system is a trustworthy system. Consider:
- Data encryption (at rest & in transit)
- Role-based access control (RBAC)
- Protection against common attacks (DDoS, SQL Injection, CSRF)
7. Wrap-Up Discussion
Finally, summarize your approach :
- Reiterate key design choices (and justify them)
- Address trade-offs (e.g., latency vs. consistency)
- Be open to feedback (Interviewers often test your flexibility)
Final Thoughts
System design interviews are not about memorizing architectures but about problem-solving and trade-offs. The more you practice, the better you'll get at:
- Asking the right questions
- Structuring your thoughts clearly
- Balancing scalability, performance, and simplicity
- Managing time is the key in a system design interview, if you spend more time than it is required it will have an impact on the design. In my experience, it's always good to do a quick time check with the interviewer and get feedback to either continue what you are explaining or focus on something the interviewer is interested to know
🚀 Good luck with your system design interviews! 🚀