Please read part 0 to get an overview of what to expect in this article series.
This part focuses on the preparation materials required to nail the system design interview. Knowledge alone isn’t sufficient to excel at the system design interview, but a solid theoretical foundation is necessary.
You’ll need to go for depth as much as for breadth. Go slow & really understand the concepts. Don’t spend more than a couple of hours on a single article or video in one sitting. This is a firehose of information & your ability to absorb & retain knowledge diminishes beyond a certain threshold.
Be curious — if the article mentions exponential moving average, spend a few minutes on wikipedia to understand what exponential moving average is about, and what the common applications are in software (trending topics, auto-complete etc). Re-read & revise. For e.g. Raffi Krikorian’s Twitter timelines at scale is a 38 minute video, but I’d expect you to spend 1.5–2 hour on watching it. Pause the video when you don’t understand a concept. Rewind, rewatch. Take notes. Truly internalize it. At the end of the video you should know every little nuance — what does it mean to scatter-gather? What happens when a user’s home timeline falls out of the redis cluster? What trade-offs did twitter make when designing for time-lines at scale (you can’t scroll more than 800 tweets etc). Go the extra mile — grab a pen & paper a couple of days later & reconstruct the design by yourself. That’s how you’ll internalize it.
Here are the resources I recommend covering. I recommend starting with the system design primer but don’t prescribe a specific order for the other resources. Learning isn’t linear. Jump from a video to an article and back to a chapter from Designing Data Intensive Applications. Maybe you’ll read the chapter on Stream Processing and then jump to the video on streaming a million likes a second. Go back and revise what you’ve already covered. Make your own notes that summarize key concepts that you can go over quickly when revising.
The System Design Primer: This one is about breadth rather than depth. Read ALL of it & get familiar with the various technologies (CDNs, caching strategies, RPCs, DNS etc). This source covers the basic building block which will allow you to go really deep.
Designing Data Intensive Applications: This is an excellent book and as you read through it, you’ll understand why the System Design Primer is…