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:
- Clarify the problem
- Identify 2~3 core features
- Start implementing/drawing the architecture for the features
- Acknowledge limitation of my design
- 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! ❤️