After gathering requirements, we move on to creating a basic design for the system. This allows for flexibility and gives the interviewer insight into our strengths and areas for growth. Here's how we approach this stage:
- Request-driven design: We let the flow of requests through the system guide our design choices, identifying necessary components and databases along the way.
- Leverage existing technologies: We utilize familiar technologies and design patterns, treating them as black boxes that can be explored further if the interviewer wishes.
- Maintain a balanced level of detail: We provide a high-level design without being too vague, mentioning specific technologies and protocols where appropriate.
- Expose relevant APIs: We identify the necessary APIs for the system and consider whether multiple services and databases are needed.
- Offer multiple options: We demonstrate our understanding of trade-offs by suggesting multiple technologies or protocols and discussing their potential benefits and drawbacks.
Gaurav Sen has conducted 1000s of system design interviews while working at Uber and building his YouTube channel to 500K+ subscribers. His platform InterviewReady combines video explainers, live Zoom classes, and an automated System Design Judge.