I remember the time when system design was only asked to the candidates applying for senior roles but with changing times and competition, system design is introduced to even the entry-level developers interviews.
System design round may not be added separately in your interview rounds but it can be an extension of any coding round or the hiring manager round. It is always beneficial to understand and practice system design, not only to crack your tech interviews but also to be a good developer.
System design interview round has their own advantages and disadvantages. Following are a few things that I have noticed.
Advantages of System Design Interview round
- As system design questions are open ended, you can use your creativity and differentiate from other candidates.
- There are very limited questions in system design and once you start practicing, you will notice the pattern to solve similar questions. Thus it is relatively easy to prepare for the system design round.
- System designing is more of a discussion. Thus, feel less intense than in the coding round.
Disadvantages of System Design Interview round
- As it is very open ended, the expectations of interviewer is not clear. Few interviewers may expect just a component diagram with DB schemas. On the other hand, there may be interviewers who are expecting class diagram with SQL queries. One way to handle this scenario is to keep your thinking loud and ask interviewer where they need in-depth explanation.
- System design for totally unknown product. It may become boring for both interviewer and interviewee. If you already know a system, the discussion starts from the features to consider and tech involved. But when the question is completely unknown then the discussion starts with understanding the product itself. This happened with me when I was quite naive and an interviewer asked me to design tinyURL service but I wasn’t aware of it. One way to avoid this scenario is to practice many questions and a way to handle such scenario is to take a deep breath and start with very clear discussion with mutiple questions.
- System Designing need shallow knowledge of many technologies. To design any system, you at least need to know about component diagrams, class diagrams, SQL queries, servers, DBs, caches, queues, scaling, logging, load balancers and analytics. Also, the interviewer can choose to ask anything in-depth.
- System design without a whiteboard is slightly difficult. This is my personal view as I only like designing systems on a big whiteboard with multi-colored markers.
How to prepare?
Whether you like it or not, system design is your chance to get extra points on clear communication, loud thinking, collaboration, neat white-boarding, and handling continuous interviewer’s views and questions. You can get the basic idea about system designing from chapter 9th of the “Cracking the Coding interview” book.
Honestly, there is a small list of questions on system design that you can practice to understand the basic pattern of system designing. Following are a few good questions to start with:
- Design a multilevel parking controller system for a complex.
- Design a lift system for a skyscraper.
- Design a movie booking system like Bookmyshow.
- Design a URL shortening system like TinyURL.
- Design a message broadcasting system like Twitter.
- Design a cache.
- Design a geo-location based service like Uber.
- Design a collaboration tool like Google docs.
- Design an efficient memory system with processes and garbage collector.
- Design a video streaming platform like Netflix.
- Design a new DB with <xyz> extra feature.
- Design a real time messaging app like WhatsApp.
- Design a webcraler to rank pages like Google.
There are many good creators who have uploaded explanatory videos on youtube about system designing. Following are few of my favorites:
How to ace?
Once you understand the system designing of above mentioned questions then you can practice more by designing the regular used tech products like instagram, banking system, recommendation system,news feed, abusive content controller system and community management system.
Also, following are few concepts to strengthen to ace your system design interview round:
- Component diagrams
- Class diagrams
- SQL queries (Insert, Select, Join)
- Servers (EC2, Lambda)
- RDBMS and NoSQL DBs (MySQL, PostgreSQL, Mongo, Cassandra)
- Caches (Redis, Map-reduce)
- Messaging Queues (RabbitMQ, Service Bus Queue, Kafka)
- Scaling (horizontal, vertical, sharding, instances)
- Logging (New relic)
- Analytics (Google analytics, MixPanel)
- Real time events and eventual consistency
Lastly, I want to suggest you to make good use of whiteboard and try to keep it neat. Consider system design interview as a normal Monday discussion with your colleague. Ask all your doubts and clearly mention your assumptions. By the end of your interview, you will surely feel it as a very productive 1 hour discussion.
You can also use platforms that can connect you to the existing FAANG employees. I hope this article is helpful for you. Let me know through the LinkedIn.
You can find an article on How to crack Microsoft interview in just 2 months here