System design resources for SDEs

shreyash
4 min readApr 2, 2022
Designing Data-Intensive Applications : Martin Kleppmann

With 3 years of work experience and working on several heavy architectural systems, I have always been fascinated by the beauty of complex system designs. I had the opportunity of working with excellent team members who always made me appreciate the nuances of a software system. While I am just getting started understanding this complex system of software architectures, I felt I might as well keep on adding resources here for my perusal and if anyone else can benefit from it.

Getting started resources -

  • David Malan is a Harvard professor, and his CS75 lectures were tremendously helpful to me as I was first starting out. The following lecture covers the fundamentals of scalability, replication, load balancing, and sharding. However, I would recommend to watch his other lectures as well.
  • Next, I’ve always considered this book to be an excellent place to begin learning about system design. It will assist you in comprehending the fundamental concepts of distributed systems as well as evaluating various technologies for data processing and storage. It is structured into three sections: Data Systems Foundations, Distributed Data, and Derived Data (Batch and Stream Processing).
  • Start with the educative course to learn how to approach high-level system design questions. Grokking the system design series is a nice place to start, although it won’t go into great detail. I also watched Jackson Gabbard’s videos to learn how to talk about any system design issue.
  • Donne Martin, a Facebook employee, maintains this github page. It contains practically all subjects and resources related to system design. IT will give you an idea of all you’ll need to know.

Getting into the specifics —

  • It’s time to delve deeper into the topics once you have a fundamental understanding of system design. My strategy was to take a problem statement, such as develop an Amazon locker system, and try to solve it. If you get stuck at a certain point in the flow, then try reading up on the solutions.
  • To begin, I watched the Narendra L’s youtube videos to gain a better grasp of the various systems. He explores real-world architectures in great detail. I’d suggest first designing and then watching his videos.
  • The High Scalability website is another excellent resource. It contains a large number of real-world structures, many of which were authored by the architects themselves. For instance, have a look at the article below from Netflix.
  • Following that, you can watch the InfoQ sessions, which have speakers from Instagram, Uber, and Slack presenting the best architectures. There are numerous videos about software architectures on their YouTube channel.
  • You may also follow the Exponent channel on YouTube. It features mock system design interviews. Mock interviews were really beneficial to me because they helped me gain confidence and evaluate myself.

Overall, system design is more about practice and familiarity with different architectures. Below are some links that I found helpful during the design process.

Basics :

Databases :

Database papers :

Specific topics :

Specific architectures :

--

--