You might get asked to solve system design questions that are more open-ended. These challenges test how you might develop complex and large-scale systems.
Going through the tips below will help you deliver a solid system design answer.
Are you new to system design? Don't worry! Check out this amazing resource for a complete overview of system design, including study tips, anki flashcards, and more.
Clarify the requirements
There’s not going to be one solution to the problem you’re presented with. Get clear on anything that’s ambiguous before you dive in.
Just know that sometimes the answer you’re given is, “you already have all the information you need!” That’s the interviewer's way of saying that they’re not going to give you more details and you should proceed as best as you can with the information you already have. Good luck. 😁
Set some high-level criteria
What scale is expected from the system? What do users need to be able to do? Show that you’re thinking ahead by sharing some of your assumptions.
Define the technical needs
What APIs are needed? Is there a frontend, backend, and a datastore?
Define the data model
Define a high-level structure for the important objects in your solution. Also, note the relationships between these objects. This is a prototype of your database schema.
Do the high-level design
Draw a block diagram with 5-6 boxes representing the core components of our system. Identify enough components that are needed to solve the actual problem from end to end.
Do the detailed design
Keep going! Consider trade-offs between different options while keeping system constraints in mind.
Identify and resolve bottlenecks
If time allows, see if you can catch any potential bottlenecks and start solving those. Also, take a moment to appreciate yourself. You’re clearly a total badass. 👏