System Design Interview Process:
1. Ask Questions to understand requirements:
- Functional Requirements
- Non-Functional Requirements
2. Handle Data
- What’s the size of the data right now?
- At what rate is the data expected to grow over time?
- How will the data be consumed by other subsystems or end users?
- Is the data read-heavy or write-heavy?
- Do we need strict consistency of data, or will eventual consistency work?
- What’s the durability target of the data?
- What privacy and regulatory requirements do we require for storing or transmitting user data?
3. Divide and Conquer – Discuss the components and trade-offs
- Different components have different pros and cons. We’ll need to carefully weigh what works for us.
- Different choices have different costs in terms of money and technical complexity. We need to efficiently utilize our resources.
- Every design has its weaknesses. As designers, we should be aware of all of them, and we should have a follow-up plan to tackle them.
What not to do in an interview
Here are a few things that we should avoid doing in a system design interview:
1. Don’t write code in a system design interview.
2. Don’t start building without a plan.
3. Don’t work in silence.
4. Don’t describe numbers without reason. We have to frame it.
5. If we don’t know something, we don’t paper over it, and we don’t pretend to know it.