Smarter Way to Prep for System Design(Backend)

Tony Wu
5 min readJan 4, 2024

--

The Challenge

If you’re an interview candidate prepping for a System Design as a Backend Engineer, there’s a lot of potential material to cover. When it comes to preparation for technical interviews, I divide skills into two categories:

  1. Substance: Your actual technical proficiency and understanding.
  2. Interview Technique: Your “interview skills” or how well you manifest your technical abilities in an interview setting.

Note: This post will talk about how to prepare (1) substance. To learn more about how to improve your interview technique for a system design interview read this post.

One universally recommended resource is Designing Data-Intensive Applications by Martin Kleppmann (also known as DDIA). I recommend all backend or full-stack engineers to read it at some point in their careers. In fact, I’m certain that if you: (1) read that entire book cover-to-cover, and (2) retain and conceptually understand all the material, (3) can actually apply the concepts to a real-world problem, you’ll be well-prepared for any system design interview.

However this is challenging for several reasons:

  1. The book is a fairly long, and it’s the type of non-fiction that is very technical, which makes it difficult to stay focused reading for long periods of times.
  2. To thoroughly read it cover-to-cover and internalize all the concepts, might take you 15–60 hours (depending on your velocity and pre-existing familiarity).
  3. Since it’s so long, as you read new material you’ll inevitably forget some of the previously read material, especially if you’re not applying it or “interacting with the material” in an interview or real-world setting.

A Targeted Approach

Therefore, I recommend taking a targeted and pragmatic approach to preparing for the system design interview, that involves a combination of not just reading the Design Data-Intensive Applications book (aka DDIA), but also quizzing and interacting with materials/problems as you progress through it. This study technique involves the following:

(A) Prioritize content (or chapters) based on likelihood it’ll be useful in a standard System Design interview.

(B) Take a Diagnostic Quiz to evaluate which areas you’re weakest on, in order to dive deeper to study.

(C) Read interactively. As you read through the relevant chapters of DDIA, periodically do two things:

  1. Use ChatGPT to help you understand and grasp concepts in further depth.
  2. Apply learning in a practical setting by speaking through parts of a system design question (with an Excalidraw/Lucid/Google Draw) related to the area you just covered.

Side Note: One thing to keep in mind is that systematically preparing for a system design interview is also a great way to improve your technical skills as an engineer. So even if you put in the effort to study and improve, and it doesn’t yield an offer from a company, it will still be extremely valuable for your growth and technical development.

Prioritize Content + Diagnostic Quiz

I’ve identified 8 baseline topic areas to cover. Note this list might not be 100% complete, it’s a very good starting point that captures most useful areas for a system design interview:

  1. Data models, Storage, Retrieval
  2. Interface and API Design
  3. Replication
  4. Partitioning/Sharding
  5. Load Balancing
  6. Consistency
  7. Batch Processing Data
  8. Streaming and Messaging

To identify which of these 8 areas you need to prioritize, I’ve designed a quiz to help you test yourself. The quiz doesn’t require login, and will give you answers afterwards about how well you performed.

Depending on which of the 8 areas you need to devote more effor to, I recommend specific reading for you to cover. Note: DDIA refers to the book Designing Data-Intensive Applications (as previously mentioned).

If you need to focus on…

… then I recommend you check out….

By taking the quiz, it’ll short-circuit your reading time/effort and have you only focus on the materials that are most relevant to your weaknesses.

Studying Interactively

As you go through and review the various topics (either YouTube videos or reading DDIA or other materials), you should try to study interactively and test yourself as you’re reading/consuming the content. Don’t just read the material cover-to-cover, but also test your knowledge and engage with the content interactively, as it will both help you conceptualize and retain it for your interview. You can do so by:

(1) Use ChatGPT to ask follow-up questions. Whenver you read a concept/topic that is a bit foreign, ask ChatGPT follow-up questions about it. For example, if you’re reading about quorum reads or quorum writes in DDIA and want to internalize the concept a bit more, you can ask ChatGPT:

  • Ex: “Can you explain in more details how quorum reading works?”
  • Ex: “What are some examples of databases that use quorum reading to handle replication/consistency?”
  • Ex: “What are the disadvantages of using quorum reads?”
  • Ex: “Do Cassandra, HBase, RocksDB use quorum reads?”
  • Ex: “What are some alternative mechanisms to achieve the same outcome as quorum reads?”

You can substitute “quorum reads” with any topic X that you read or learn about.

(2) Practice what you’ve learned in an interview context. Take any random practice interview question (e.g. from either of Alex Xu’s books volume 1 or volume 2) and do a quick mini practice (you can video record your screen with an Excalidraw/Lucid/Google Draw/Whiteboard) talking through how the given concept you learned applies to the given interview problem.

For example, if you are reading about replication, you can practice discussing how you’ll handle that topic for any of the sample interview questions (e.g. how would you set up replication for the URL Shortener or the Notification System or the GeoSpatial Location Server or the Chat System).

In summary, you can take a more targeted and thoughtful approach in preparing for the system design interview, by (1) quizzing yourself to see where you’re weaknesses are, (2) focusing only on those relevant chapters/materials, and (3) studying “interactively” as opposed to passively.

--

--

Tony Wu

Director of Engineering. ex-FB, ex-Uber, ex-Twitter