How to deal with the "System Design" Interview?
Deepanshu Jain ??
Senior Backend Engineer at Nutanix - Prev. Atlassian, ServiceNow, Kore.ai, TEKSystems | Data Structures | System Design & Architecture | Cloud
“Think of a system design interview as a brainstorming session, driven by open-ended questions, in which you'll be expected to competently discuss a complex system. Consider it an opportunity to work with your interviewer, just as two team members would, to solve a real problem related to the company's goals.â€
The real purpose of a system design interview:
- Your knowledge — gained either through studying or practical experience.
- Your ability to articulate your thoughts.
Why do companies care for System Design?
- If you’re preparing for interviews with great product companies or companies known for good quality software.
- A good performance in system design always results in a better offer (higher position and salary), since it shows the candidate’s ability to handle a complex system or to lead a team.
- If you want to create good designs for the scalable cloud software.
- “Great software design leads a great softwareâ€
It was initially started by FAANG but now followed by almost all the product companies.
The Problem
I have seen people struggling in system design because they don’t know where to start.
Why? Because:
- They are not structured, it’s open-ended questions.
- Their lack of experience in developing large scale systems.
- They did not prepare for SDIs.
- They hardly participate in system design.
- They don’t get a chance to design systems from scratch.
The Solution
Let's structure the solution by following these steps!
Step 1: Requirement gathering/clarifications
Step 2: API / Interface design
Step 3: Estimate the capacity or scale
Step 4: Defining the data model
Step 5: High-level architecture design
Step 6: Detailed component design
Step 7: Identifying and resolving bottlenecks
Why asking a good clarification question is important?
A good clarification question helps you achieve one, or more, of several things:
- Helps you narrow the scope of what you’re supposed to do.
- Helps clarify what the user expectation of the system is.
- Gives you direction about where to proceed.
- Informs you of possible bottlenecks/problem areas.
If we follow this formula, a set of criteria or steps you will be able to cover most of it.
Some of the things in my mind when I work on a new system are:
- What is the goal of the system?
- Who are the users of the system?
- What is the scale we’re working with?
- Is this a new/old system? How do we handle versioning?
Recommended Book for System Design
I will continue this series. Let me know your feedback.