This not only gives you points in working-together and collaboration, but more importantly makes it trivial for the interviewer to steer you in the right direction in case your partial solution is completely the wrong one, or to give you the hint missing to fully solve the problem.

Some companies might have interviews that are more conversational, or oriented around specific technologies (e.g. Java and JVM internals, machine learning algorithms and frameworks).Those need dedicated preparation and it really depends on the company you are interviewing with, so I am not going to get into those.

The topic is somewhat a chicken-and-egg one. You'll know how to design a large system after you designed one before. But if you've not done so: how would you build an URL shortener like bit.ly, with hundreds of millions of links? A chat app like Whatsapp? A file storage system like Dropbox or Google Drive?

This book is a solid recommend from me: and not just for preparing for the systems design interview, but to strengthen your systems design muscle for the day-to-day. The book/course comes with typical design problems and brings a pretty good, step-by-step approach to them. But if you just read through them, you'll miss out on the real value of such a resource.

As an example, after 5 years of working at Amazon/AWS, even though I worked at a technical product (lots of tree traversals, data transformations), I had to spend about 1 month practicing problem solving (almost) daily.This is because for 5 years, I had zero practice in coding interviews.

If you want to get all your points, you should also do a run-through with an example input.Show how the input will be processed at each line, similar to how a debugger in an IDE would work in a step-by-step execution.

This can be done trivially by just calling your function with sample inputs and printing out the returned values.No need for fancy test frameworks to remember. For example, in Javascript this is how I do it: