DEV Community

loading...

How Would You Approach Systems Design Interview Questions?

Annie Liao
Hybrid developer/designer currently exploring a variety of front-end magic.
・1 min read

As someone relatively new to software engineering and with a non-traditional background (i.e. no CS degree), I am often taken aback by the depth of knowledge required in some entry-level technical interviews.

My most recent/upcoming encounter is systems design.

Not to be confused with Design Systems (which, weirdly enough, fill up DEV's search results πŸ˜‚), Systems Design involves the process of defining the architecture and data model for a platform, such as Twitter.

After a few video tutorials and written guides, I have jotted down some general strategies, which look somewhat similar to how one approaches algorithm problems:

  1. Clarify the problem
  2. Identify 2~3 core features
  3. Start implementing/drawing the architecture for the features
  4. Acknowledge limitation of my design
  5. Optimize my solution

Currently, I am most curious about Step#1, as this appears to be a key indicator of our problem-solving skills:

What are some "good" clarifying questions we can ask the interviewer?

An engineer friend suggested starting with scope, e.g. how many users, the volume of the data, etc.

What's your approach?

And more generally: What advice or tips would you give to freshly-baked developers as we tackle the dreadful systems-design questions?

Thanks in advance, DEV community! ❀️

Discussion (2)

Collapse
animesh371 profile image
Animesh Gaitonde

What are some "good" clarifying questions we can ask the interviewer?

1) System design interviews are open-ended and the interviewee is expected to come up with basic feature and get clarification from the interviewer. Divide your requirements into functional and non-functional.
i) Try to cover all basic features in functional requirements. For eg: If you are asked to design Facebook, your basic requirement would be Users must be able to friend/unfriend each other, News Feed generation, Timeline, Profile. You can rule about features such as Messaging, posting videos & other media.
ii) In non-functional requirements, you can speak about system being Highly available, durable, fault-tolerant and resilient

2) In most of the system design interviews, candidate is supposed to come up with a solution to basic features and not the complex ones due to time constraints. Also, think about the bottlenecks your solution might run into. For eg: In case you are asked to design Instagram, think about how to generate the timeline for a user who has been inactive most of the time. What model would you use for celebrities that have millions of followers?

3) Questions such as the number of users, volume of data, number of requests, etc should be a part of the next step that is a Capacity estimation. Here, the candidate has to come up with realistic guestimates. This will further help during the optimization step & also influence the choice of database, type of scaling approach (Horizontal or Vertical), etc that the user can apply

Collapse
liaowow profile image
Annie Liao Author

Thanks so much, Animesh, for taking the time to share these tips!