
“System Design Interview” book review
I have to start my review with a confession. I never actually had a system design interview. Never interviewed for FAANGs, and I don’t intend to. That’s why reading “System Design Interview” by Alex Xu books, was such a nice experience. Why? Keep on reading.
Table of Contents
ToggleBro, do you even interview?
Besides the fact, that I never had a system design interview, I don’t have that much experience in having the regular ones too. In the last ten years, I had in total four of them, and every one finished with a job offer. I don’t mention it to brag, but to put my view in the context. Obviously, my experience with interviewing is small, and I cannot possibly say what (if anything) I am lacking in that area. Therefore, I have never searched for books or other materials that could help me with interviewing. That is the reason why I don’t want to explore the actual “interview” part of those books. The first book’s entry chapters are covering that area, and also every chapter (dedicated to specific design problem), opens with setting up the interview scene. However, it seems that it is just to literally set a scene, and that’s it.
Bottom-up or the other way around?
It is hard to say how those books are usually being read. Or in the other words – what is the knowledge level of the usual readers. I think that my experience here was different, than the other readers have. If you remember, I have started my #SeniorDevRevamp project, with a re-read of “Designing Data-Intensive Applications“, and later, with reading “Mastering API Architecture”. Both of these books (especially Kleppmann’s book), dive deep into the inner workings of things. It is hard after the lecture, not to think in rather low-level concepts. Reading “System Design Interview” series after those two books, was like getting some serious practice, after taking a university-grade course in CS.
I found it refreshing, to see how all those lower level concepts of DB serialization isolation level, partitioning or eventual consistency, are put together to create a model of the working system. Every time I saw one of those concepts mentioned in the book, with the usual comment like this – “we don’t have the time to go deeper here, but here’s the link where you can read more” – I got a huge dose of satisfaction. The satisfaction based on the fact that I already had read something about the matter discussed, and can follow-up without problem.
So what are we designing?
Both parts of the book consist of separate chapters, discussing a specific type of system design. We find everything in there – streaming, geolocation, storage and more – usually with Google/Facebook/AWS level of usage and traffic. Obviously, all kinds of modern IT landscape solutions are used. And I don’t mean the aforementioned sharding or caching. I mean specific libraries/platforms/services, often enumerated by name. Therefore, we get not only the conceptual overview of the architecture, but also the actual tools that we can use. In my opinion, with almost thirty chapters covering a vast area of projects, every reader will find something of interest for sure.
What is even more important (and I have mentioned it above) – the links! Every concept that deserves more in-depth description, usually has some additional reference attached. Links to the actual scientific papers, whitepapers, corporate blog posts and all kinds of other valuable docs. Summary of every chapter points to a new world, just waiting to be discovered. That is what I recommend after the lecture. Dedicate some time to follow-up, and read at least one of the proposed materials. The sole fact that there is such a list present, at the end of every chapter, makes those books even more valuable. Reference material to be used when necessary.
Should I design?
Yes! Yes, you definitely should. As every chapter has a specific topic, and chapters aren’t linked in any way with each other, feel free to read whatever you are interested in. Believe me, it won’t be a time wasted.
Leave a Reply
You must be logged in to post a comment.