Crack the System Design interview: tips from a Twitter software engineer
I recently wrote about how I landed offers from multiple top-tier tech companies. During my interview preparation process, I read up on a lot of material and prepared a set of notes on how to tackle system design problems. In this article, I’d like to share those tips with you all.
If you’re a fresh graduate with no experience in large-scale distributed systems, or even a seasoned engineer with years of experience under your belt, this article will be useful for you.
Update (3/24/2019): If you’d like to join a group of students to learn more about system design, I’m organizing a small class together! You can go to this link to learn more, or visit my website: zhiachong.com for more info.
This article is broken down into the following four sections:
- Ask clarification questions
- Use your background
- Tackle a problem systematically
- Keep your own notes
Ask clarification questions
A core aim of a systems design interview is to give the candidate an opportunity to demonstrate their knowledge.
There are no strictly right or wrong answers. A good system design question usually sounds very ambiguous, and the reason for that is it’s supposed to give you a chance to demonstrate the following:
- How you would think about the problem space
- How you think about bottlenecks
- What you can do to remove these bottlenecks.
Imagine that you’re being asked to design a black box. How would you tackle the problem? There are no clear directions on what you need to build here, aside from the box being able to hold some items within it.
One of the most useful strategies I personally employ is to ask clarification questions. What are “good” clarification questions, you ask?
A good clarification question helps you achieve one, or more, of several things: