Why System Design?
Before learning System Design we need to answer the question of why we should learn and practice System Design. In today's digital world we are surrounded by various social media apps, Streaming platforms, eCommerce websites, and other services that serve billions of customers per day. At the peak of demand, they may be serving millions of requests per second. These applications and platforms are built by some bright engineers at top tech companies like Amazon, Facebook, Google, Microsoft, etc. Hence when you want to interview at these companies you are expected to have some knowledge about how these applications are built to this scale where they can serve huge customer base reliably.
Apart from the basic problem solving like Data Structure and Algorithms, more and more tech companies are including System design questions as a part of the interview process to assess your ability to understand and build complex large scale systems.
Most people are scared of System Design Interviews due to the uncertain and open-ended nature of the discussions that happen during System Design Interviews. However, believe me, System Design Interviews are one of the easiest to crack if keep you clearly understand the requirements provided by an interviewer and derive a logical system that caters to the ask.
Expectations in System Design Interview
Most people are confused about the expectations in a System Design Interview.
Are you supposed to code and deploy a system that exactly fits the requirement of the specifications provided by the interviewer?
The answer is NO, Nobody expects you to come up with a foolproof system that can be deployed immediately and will work according to given specifications. That will take the effort and time of an entire team over many weeks at least.
In about 40 minutes, you are required to prove that you have an understanding of how large scale system works and apply that knowledge to come up with a High-Level design to solve the problem at hand.
Remember that there is no correct answer to questions like:
- How to design Facebook timeline feature ?
- How to design Google Docs ?
- How to design Uber App?
When these products were designed and released, the engineers would have faced various issues and challenges. When asked such questions you are expected to think about those challenges which might come up in designing those applications at the current scale.
System Design Interviews are like a dialogue between two designers on different design decisions, assumptions, and tradeoffs that you will make while designing complex systems. Interviewers will judge your ability to drive the conversation, type of questions you have asked, assumptions you have made and what is your overall thought process.