• Engineering
  • Learning

Four system design resources to understand the trade-offs behind any tech stack

Level: TechnicalFor readers who want to understand the engineering behind a stack, not only to pick one

By

Published

Summary

System design is the part of engineering that decides how the pieces of an app fit together and what each choice costs you later. NeetCode’s beginner course, ByteByteGo’s System Design 101, the roadmap.sh system design roadmap and the System Design Primer on GitHub each teach it from a different angle, and all four are free to start.

When a coding agent suggests a database, a queue and a cache for your app, the question is not whether those are good tools. It is whether they fit, and what each one will cost you later. System design is the part of engineering that answers that: how the pieces of an app fit together, and the trade-offs behind every choice. These four resources teach it, and all four are free to start.

1. NeetCode: System Design for Beginners

NeetCode’s System Design for Beginners starts where a newcomer is: how a computer and an application are put together, then networks, HTTP and APIs, then the ideas that arrive the moment an app has more than a few users, which are caching, scaling, load balancing, SQL against NoSQL, replication and queues. It is twenty-one short lessons in a fixed order, and the first two are free. [1]

2. ByteByteGo: System Design 101

ByteByteGo’s System Design 101 explains each idea in one diagram, which makes it the one to dip into when a term comes up that you do not know. It compares REST, GraphQL and RPC side by side, and it shows how real products scaled: how Discord stores its messages and how Figma grew its Postgres database. It is a public repository on GitHub, free in full. [2]

3. roadmap.sh: the system design roadmap

The system design roadmap on roadmap.sh maps what to learn and in what order, from the basics to the specialised topics, and links a free resource on every node. It is the map to keep open while you work through the other three, and it tracks what you have covered once you make an account. [3]

4. The System Design Primer

The System Design Primer is a GitHub repository that lays out the classic trade-offs plainly: performance against scalability, latency against throughput, availability against consistency. It then works through eight real design problems step by step, and it comes with flashcard decks to revise from. [4]

Where to start

Start with NeetCode or ByteByteGo, whichever suits how you learn: a course with an order, or a library of diagrams to dip into. Use roadmap.sh to see what you have not covered yet, and the Primer when you want the trade-offs spelled out and worked through.

Sources

  1. NeetCode, System Design for Beginners. Twenty-one lessons, from computer and application architecture through networking, HTTP, WebSockets, API design, caching, CDNs, proxies and load balancing, SQL and NoSQL, replication and sharding, object storage, message queues and MapReduce. The first two lessons are free. The course.

  2. ByteByteGo, System Design 101. A public repository that includes “SOAP vs REST vs GraphQL vs RPC”, “How Discord Stores Trillions of Messages” and “100X Postgres Scaling at Figma”. The repository on GitHub.

  3. roadmap.sh, System Design Roadmap. Progress tracking needs an account. The roadmap.

  4. The System Design Primer. Sections “Performance vs scalability”, “Latency vs throughput” and “Availability vs consistency”; eight worked system design questions with solutions; three Anki decks. The repository on GitHub.

Ahmed Gadir

About the author

Ahmed Gadir

I’m a senior software engineer in London and the founder of GadirLabs. I’ve been building enterprise software since 2018, and now I build and launch web and mobile apps for founders, from an idea or from an app they’ve already started.

More about Ahmed