System design is a core engineering skill and everyone on your team should have some degree of understanding of their system’s architecture.
In addition to that, with the rise in the adoption of AI coding assistants, mastering this skill will safeguard your professional career ensuring that you remain relevant and productive in an evolving technological landscape.
Traditionally, junior developers have been taught to focus primarily on learning coding skills and mastering the fundamentals of their chosen technologies. However, AI assistants, like GitHub Copilot, are significantly accelerating coding tasks—55% of users report coding faster. This acceleration frees up time for developers to delve deeper into system intricacies, thereby gaining expertise in the environments they create and adopting a more holistic approach to software system development.
Inbal Shani, former CPO at GitHub, emphasized this shift in mindset:
Developers need to form a different thinking […] more systems, more architecture. You need to start figuring out how to use the AI tools to help you be successful. It's no longer just the actual code writing, it's really evolving your thinking to see the big picture, the connected experience, and the connected systems.
This mindset, once primarily associated with senior software engineers, is now becoming essential for all developers. The gap between senior and junior developers is narrowing, especially as 92% of developers are already leveraging AI tools.
👉 The time to start learning system design is now. 👈
Problems with the Current System Design Discourse
Unfortunately, the discourse around system design often centers on “how to ace a system design interview”. While it's true that system design is a critical skill for many organizations, particularly given the prevalence of distributed systems, this focus on interview preparation neglects the importance of applying these skills in day-to-day, real-world scenarios.
This hyper-focus on technical interviews is akin to the institution of standardized testing—it has its uses but is inherently limited. It fails to provide a complete picture of the real-world challenges and the creative, adaptive thinking required to effectively apply system design knowledge and skills in practical contexts.
Furthermore, the industry is currently experiencing a shift in the role and significance of Software Architects. We're recognizing that system and software design are not confined to specific roles; every engineer should possess some level of proficiency in these areas. Having system design experience and considering architectural requirements during coding makes you a better engineer and leads to superior products.
However, many engineers and organizations have yet to embrace this trend, maintaining a strict differentiation between engineers and various types of Software Architects.
Lastly, the most significant issue: system design is often misconceived as merely diagramming, producing specific documents, or adhering to codified frameworks. In reality, system design is an ongoing process that outlines the high-level conceptual structure of a complex system (the system architecture) and defines its major components and interactions. While it can result in outputs such as system diagrams, Architectural Design Records, or the use of specific tools and frameworks, it encompasses how a team builds software and not just the tools that they use to help throughout the process.
Resources you usually see
When researching system design, the internet often surfaces two primary resources:
I want to emphasize that both are extremely helpful and I highly recommend them. In fact, we are subcribers to - and avid fans of - the ByteByteGo Newsletter and its authors Alex Xu and Sahn Lam. Conveying complex concepts in a fun and visual way is an art and reading their newsletter is always a pleasure.
Likewise, it’s fascinating to learn how companies like Netflix, Google, Stripe, or Spotify design their systems and discover the clever solutions they’ve implemented. However, chances are you’re not working on a system as mammoth as theirs and their approaches are often tailored to these specific use cases.
Indeed, there is no single right way to architect a system. The design depends on your business requirements, development stage, and the trade-offs you’re willing to make.
Underestimated System Design Newsletters
In addition to ByteByteGo and various corporate blogs, I highly recommend checking these resources. They are not mentioned nearly as often, but they can teach you a lot about system design:
📌 NB. These are just general categories that helped me categorize them, so there is some overlap.
Fundamentals of System Design
- “System Design Codex” by Saurabh Dashora
- “Distributed Systems Architecture” by Thomas Johnson
- “Architecture Notes” by Mahdi Yusuf
- “Software Design: Tidy First?” by Kent Beck
- "Level Up Coding” by Nikki Siapno
- “AlgoMaster” by Ashish Pratap Singh
- “System Design Classroom” by Raul Junco
- “Dev Details” by Mike Thornton
- “Tech World With Milan” by Milan Milanović
Big Tech System Design Examples & Recaps
- “System Design Newsletter” by Neo Kim
- “Byte-Sized Design”
- “Quastor” by Arpan G.
Broader Scope Interesting Newsletters
- “.NET & Software Architecture” by Milan Jovanović
- “Curious Engineer” by Vivek Bansal
- “Technically” by Justin Gage
- “Data Gibberish” by Yordan Ivanov
- “EcZachly Data Engineering” by Zach Wilson
System Design Books
System design books are also great starting points for deepening your understanding of architectural principles and best practices. Here are some of the most popular ones:
- Designing Data-Intensive Applications: The Big Ideas Behind Reliable, Scalable, and Maintainable Systems by Martin Kleppmann
- Fundamentals of Software Architecture: An Engineering Approach by Mark Richards and Neal Ford
- Tidy First?: A Personal Exercise in Empirical Software Design by Kent Beck
- The Phoenix Project: A Novel About IT, DevOps, and Helping Your Business Win by Gene Kim, Kevin Behr, and George Spafford and its sequel “The Unicorn Project”
- Building Microservices: Designing Fine-Grained Systems by Sam Newman
- The Art of Scalability: Scalable Web Architecture, Processes, and Organizations for the Modern Enterprise by Martin L. Abbott and Michael T. Fisher
- Clean Architecture: A Craftsman's Guide to Software Structure and Design by Robert C. Martin
- Designing Distributed Systems by Brendan Burns
Helpful GitHub Repos
I also recommend these GitHub repositories for practical examples, tools, and resources to enhance your system design skills and knowledge.
- The System Design Primer by Dan Golant
- System Design by Karan Pratap Singh
- Professional Programming by Charles-Axel Dein
I hope you found this helpful and I look forward to more recommendations in the comments! 💜
Top comments (3)
Awesome compilation. Thank you for sharing.
Thank you!
Great post .. Thank you for your effort 💕