Contents

System Design Resources

“Give me six hours to chop down a tree, and I will spend the first four sharpening the axe.” -Abraham Lincoln

For the last several years I’ve worked mostly on frontend (during my time at Weedmaps) and mobile development (at my present job at Intuit) and just a small bit of backend services here and there. To keep my distributed system skill sets sharp and up to date, I’ve been studying the following resources.

Books

I like reading good ol' analog books. I’m too easily distracted when I’m reading a Kindle/iPad or watching a video online on my laptop. Analog books force me to concentrate on the material at hand. I’m probably 80% visual learner and the act of reading helps me absorb the material best.

System Design Interview by Alex Xu.

What I really like about Alex Xu’s System Design Interview: An Insider’s Guide is it includes lots of example mock interview questions and solutions. The structure of the book starts off with a chapter on an example system design question and introduces distributed system components, like diistributed databases, consistent hashing, etc. Then spends the next several chapters going over those components in more detail. I really liked that it includes lots of references in case you want to explore more about each technology. The remaining chapters are examples of system design interviews incorporating technologies discussed earlier.

My favorite takeaway from the book is how it goes into doing back of the envelope estimates. Here’s a handy reference from the book:

Numbers Everyone Should Know from Jeff Dean.
L1 cache reference 0.5 ns
Branch mispredict 5 ns
L2 cache reference 7 ns
Mutex lock/unlock 100 ns
Main memory reference 100 ns
Compress 1K bytes with Zippy 10,000 ns
Send 2K bytes over 1 Gbps network 20,000 ns
Read 1 MB sequentially from memory 250,000 ns
Round trip within same datacenter 500,000 ns
Disk seek 10,000,000 ns
Read 1 MB sequentially from network 10,000,000 ns
Read 1 MB sequentially from disk 30,000,000 ns
Send packet CA->Netherlands->CA 150,000,000 ns

Alex has a follow up book coming out soon with lots more examples.

Be sure to check out the Discord server as well.

Mastering the System Design Interview by Frank Kane

This is the book adaptation from Frank Kane’s Mastering the System Design Interview. I really enjoy the conversational transcripts presented in the mock interviews, and gives a realistic interpretation of what you’d encounter in actual interview. I wish they were a bit longer as it doesn’t seem they would cover the length of a 30-40 minute interview.

Here are some takeaways I got from the book:

1) Ask clarifying questions

You’ll typically encounter a very broad and open ended question for a system design interview. For example, build a webcrawler. In your own words, repeat back to the interviewer what it is you think the ask is. Then follow up with questions that clarify the scope of what is to be built. Try to think out loud.

2) Work backwards from the customer’s perspective

Try to picture what the end result is from the customer’s perspective and how to design your system with the end user in mind. For example, if you are tasked with designing YouTube, you want to cover how the user can quickly access content, like through a CDN edge server or co-locating content on ISPs. [1]

Online Courses

TBD

Grokking the System Desgin Interview

This Educative.io course is the OG resource on system design interviews. It is a bit pricey nowadays given that there are a lot more resources out there than a few years back.

YouTube

TBD

System Design Interview Channel

Mobile System Design

TBD

Building Mobile Apps at Scale

Mobile System Design

References

[1]Open Connect Architecture Overview.