The system design interview is standard for Senior+ software engineer candidates. It often even holds more weight than the coding interview.
How does one do well in a system design round? A lot of sweat and failures went into me figuring out what really matters and what doesn't. My current preparation strategy, successfully applied in 2023 job search cycles included the following elements:
(A) Work through a great System Design course,
(B) Sharpen the story-telling skills,
(C) Do lots of practice,
(D) Omit what doesn't help.
Let's discuss them in detail.
(A) Several paid system design courses are currently available, but not all of them are equally good. Common pitfalls are going into too much detail + reproducing the actual system instead of making generic design choices. I loved the first iteration of "Grokking the System Design" course on educative.io, but the current 2023 iteration suffers from the above pitfalls. "System Design Interview" guide by Alex Xu, on the other hand, is concise and to the point.
(B) System design interview is all about telling a story. First, you single in on a story line by asking clarifying questions. Then, you methodically add the necessary components tying them to the story line. For example: "We send notifications to users based on their subscriptions. Therefore, we need a subscription service to capture user preferences." Don't forget character development: "Red riding hood didn't have much money, but she didn't need to maintain foreign key relationships and had a simple schema. Therefore, she went for MongoDB instead of MariaDB to store data about her trips through the forest." Do write your story down alongside drawing the diagram.
(C) A good storyteller is made and not born. It does help to some extent to listen to the others explaining their design (https://www.youtube.com/@SystemDesignInterview and https://www.youtube.com/@TechDummiesNarendraL are especially good). However, the main benefit comes from you doing it. Good news: there are only about ~30 distinct system design problems. Given sufficient time, one can implement them all and write a story for each. Do maintain your library of those designs, e.g. with draw.io diagrams stored in Google drive. Bad news: story-telling skills atrophy without practice. Redo at least some of those designs before each interview cycle.
(D) I found some pieces traditionally included in the study guides to be almost never needed. First, you don't need to draw many boxes on the path from the client to the target microservice. A single box encapsulating Load Balancer + API gateway + GraphQL API is sufficient. Going into too much detail early on will easily derail the interview.
Second, doing scale estimates is often counterproductive to telling a story. Just make sure to create a scalable design + mention the scalability.
I started omitting the API design. The list of actions supported by the target system is more general (e.g. poll against a 3rd party service is not an API) and covers the APIs very well too.