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