Organized by foundational layers, persistence models, high-scale resilience, object-oriented design, and advanced distributed consensus.
Before you can design systems, you need to understand the machine they run on. Why is RAM 100,000x faster than a hard disk? What does a CPU actually do? What happens when two threads touch the same variable? These aren't trivia questions — they're the physical laws your architecture has to live inside.
Every network request is a tiny miracle. Your data leaves as electrical signals, becomes light pulses, bounces between routers that don't know the whole picture, and reassembles perfectly on the other side — usually. Understanding what can go wrong, and why, is the foundation of building systems that work reliably over a network you don't control.
An API is a contract. But contracts can be ambiguous, violated, or misunderstood. Why does REST become awkward at scale? When does the "just use HTTP" approach break down? What does a protocol buffer actually buy you? This track is about understanding communication between services — not just the options, but why each one exists.
Most engineers use databases like black boxes. But the moment your data grows — or your queries slow down — you need to know what's inside. How does a B-Tree actually find your row? Why does a `LIKE '%foo'` query kill your performance? What does "ACID" mean in practice, not in marketing? Start here to stop guessing.
Caching isn't just a performance trick — it's a fundamental consequence of the physics of memory. Your CPU L1 cache is 4ns. RAM is 100ns. A network round-trip is 500,000ns. Caching is how systems cope with these gaps. Understanding *why* we cache — not just *how* — makes every caching decision obvious instead of mysterious.
The moment you have two machines, everything gets harder. Not because networks are unreliable (though they are) — but because there's no shared clock, no atomic state, and no global "now". This track builds deep intuition for the hardest problems in software: partial failures, consensus, and the impossibility results that tell you what you can't ever have.
When does a synchronous request-response break down? Why do distributed transactions cause more problems than they solve? What does it actually mean when a message queue "guarantees delivery"? This track unpacks the async world: queues, event logs, CDC, and the profound difference between "at least once" and "exactly once" delivery.
Every system eventually fails. The question isn't *whether* — it's *how gracefully*. What happens to your service when a downstream dependency starts taking 30 seconds instead of 30ms? How do you detect that you're failing without making the failure worse? This track treats failure as a first-class engineering concern, not an afterthought.
Scaling isn't magic and it isn't just "add more servers." It's a series of decisions with real mathematical consequences. How many servers do you actually need? Where will you hit the wall first? How do you estimate this before you're already on fire? This track builds the quantitative intuition that separates engineers who design for scale from engineers who react to it.
How do you look at a system you've never seen and quickly understand it? How do you design a system that will still make sense five years from now? This track is about the meta-skill: reading architectures, making trade-offs explicit, decomposing complexity, and reasoning about systems that are too big to hold in one head.
Code rots. Every codebase you've worked on has areas you're afraid to touch. It doesn't have to be this way. SOLID principles aren't academic rules — they're answers to specific questions like "why does this change break five other things?" and "why is this class untestable?" This track gives those principles real motivation.
Design patterns have a reputation for being over-engineered jargon. That's because they're usually taught as a catalog to memorize, not as solutions that emerged from real pain. This track tells the story of each pattern: what problem was making engineers cry before it existed, and why this particular shape of solution emerged.
Designing a system on a whiteboard is one skill. Implementing it with all the edge cases, concurrency bugs, and real-world constraints is another. This track builds both: starting from requirements, discovering the hard problems as they naturally emerge, and writing clean, correct, concurrent code.
Security isn't a feature you add at the end. It's a different way of thinking about systems: assuming someone intelligent is actively trying to break them. This track builds that adversarial mental model — not as a list of vulnerabilities to patch, but as a systematic way of reasoning about trust, boundaries, and what "verified" actually means.
A system you can't observe is a system you can't trust. But observability isn't just "add logging everywhere" — it's a discipline of asking the right questions before things break, so you have the answers when they do. This track covers what metrics, logs, and traces actually tell you — and more importantly, what they don't.
Cloud providers sell managed complexity — you get databases, queues, and compute without thinking about hardware. But every abstraction leaks eventually. Understanding what's underneath helps you know when to use the managed version, when to build your own, and why that $3,000 monthly AWS bill suddenly appeared.
LLMs are not just smart APIs. They're non-deterministic systems with unbounded latency, unpredictable outputs, and new failure modes that don't show up in traditional monitoring. Building reliable software that incorporates AI is a distributed systems problem — this track shows you how to treat it like one.
Theory becomes real when you trace it through an actual system. These deep dives follow the evolutionary arc of real architectures: from the simplest solution that works, through each scaling crisis and the engineering choice it forced, to the distributed system at the end. The goal isn't the final diagram — it's understanding every decision along the way.
At the staff and principal level, your job isn't to write code — it's to make good decisions last. This means understanding long-term consequences, writing down your reasoning so future engineers can evaluate it, managing technical debt as a real economic quantity, and knowing when "good enough" is actually better than "perfect".