Course curriculum

    1. System requirements

    2. Functional requirements

    3. High availability

    4. Fault tolerance, resilience, reliability

    5. Scalability

    6. Performance

    7. Durability

    8. Consistency

    9. Maintainability, security, cost

    10. Summary of system requirements

    1. Regions, availability zones, data centers, racks, servers

    2. Physical servers, virtual machines, containers, serverless

    1. Synchronous vs asynchronous communication

    2. Asynchronous messaging patterns

    3. Network protocols

    4. Blocking vs non-blocking I/O

    5. Data encoding formats

    6. Message acknowledgment

    1. Deduplication cache

    2. Metadata cache

    1. Queue

    2. Full and empty queue problems

    3. Start with something simple

    4. Blocking queue and producer-consumer pattern

    5. Thread pool

    6. Big compute architecture

About this course

  • 75 lessons
  • 8 hours of video content

Course syllabus

System requirements (functional and non-functional requirements)
Functional requirements (how to define, working backwards approach)
High availability (time-based and count-based availability, design principles behind high availability, processes behind high availability, SLO, SLA)
Fault tolerance, resilience, reliability (error, fault, failure, fault tolerance, resilience, game day vs chaos engineering, expected and unexpected failures, reliability)
Scalability (vertical and horizontal scaling, elasticity vs scalability)
Performance (latency, throughput, percentiles, how to increase write and throughput, bandwidth)
Durability (backup (full, differential, incremental), RAID, replication, checksum, availability vs durability)
Consistency (consistency models, eventual consistency, linearizability, monotonic reads, read-your-writes (read-after-write), consistent prefix reads)
Maintainability, security, cost (maintainability aspects (failure modes and mitigations, monitoring, testing, deployment), security aspects(CIA triad, identity and permissions management, infrastructure protection, data protection), cost aspects (engineering, maintenance, hardware, software))
Summary of system requirements (a single list of the most popular non-functional requirements)
Regions, availability zones, data centers, racks, servers (how hardware helps to achieve certain qualities)
Physical servers, virtual machines, containers, serverless (pros and cons of different computing environments, what are they good for)
Synchronous vs asynchronous communication (synchronous and asynchronous request-response models, asynchronous messaging)
Asynchronous messaging patterns (message queuing, publish/subscribe, competing consumers, request/response messaging, priority queue, claim check)
Network protocols (TCP, UDP, HTTP, HTTP request and response)
Blocking vs non-blocking I/O (socket (blocking and non-blocking), connection, thread per connection model, thread per request with non-blocking I/O model, event loop model, concurrency vs parallelism)
Data encoding formats (textual vs binary formats, schema sharing options, backward compatibility, forward compatibility)
Message acknowledgment (safe and unsafe acknowledgment modes)
Deduplication cache (local vs external cache, adding data to cache (explicitly, implicitly), cache data eviction (size-based, time-based, explicit), expiration vs refresh)
Metadata cache (cache-aside pattern, read-through and write-through patterns, write-behind (write-back) pattern)
Queue (bounded and unbounded queues, circular buffer (ring buffer) and its applications)
Full and empty queue problems (load shedding, rate limiting, what to do with failed requests, backpressure, elastic scaling)
Start with something simple (similarities between single machine and distributed system concepts, interview tip)
Blocking queue and producer-consumer pattern (producer-consumer pattern, wait and notify, semaphores, blocking queue applications)
Thread pool (pros and cons, CPU-bound and I/O-bound tasks, graceful shutdown)
Big compute architecture (batch computing model, embarrassingly parallel problems)
Log (memory vs disk, log segmentation, message position (offset))
Index (how to implement an efficient index for a messaging system)
Time series data (how to store and retrieve time series data at scale and with low latency)
Simple key-value database (how to build a simple key-value database, log compaction)
B-tree index (how databases and messaging systems use B-tree indexes)
Embedded database (embedded vs remote database)
RocksDB (memtable, write-ahead log, sorted strings table (SSTable))
LSM-tree vs B-tree (log-structured merge-tree data structure, write amplification, read amplification)
Page cache (how to increase disk throughput (batching, zero-copy read))
Push vs pull (pros and cons of both models)
Host discovery (DNS, anycast)
Service discovery (server‑side and client-side discovery patterns, service registry and its applications)
Peer discovery (peer discovery options, membership and failure detection problems, seed node, how gossip protocol works and its applications)
How to choose a network protocol (when and how to choose between TCP, UDP and HTTP)
Network protocols in real-life systems (quiz: what network protocol would you choose for various system design problems)
Video over HTTP (adaptive streaming)
CDN (how to use it, how it works, point of presence (POP), benefits)
Push and pull technologies (short polling, long polling, websocket, server-sent events)
Push and pull technologies in real-life systems (quiz: what technology would you choose for various system design problems)
Large-scale push architectures (C10K and C10M problems, examples of large-scale push architectures, the most noticeable problems of handling long-lived connections at large scale)
What else to know to build reliable, scalable, and fast systems (a list of common problems in distributed systems, a list of system design concepts that help solve these problems, three-tier architecture)
Timeouts (fast failures, slow failures, connection and request timeouts)
What to do with failed requests (strategies for handling failed requests (cancel, retry, failover, fallback))
When to retry (idempotency, quiz: which AWS API failures are safe to retry)
How to retry (exponential backoff, jitter)
Message delivery guarantees (at-most-once, at-least-once, exactly-once)
Consumer offsets (log-based messaging systems, checkpointing)
Batching (pros and cons, how to handle batch requests)
Compression (pros and cons, compression algorithms and the trade-offs they make)
How to scale message consumption (single consumer vs multiple consumers, problems with multiple consumers (order of message processing, double processing))
Partitioning in real-life systems (pros and cons, applications of partitioning)
Partitioning strategies (lookup strategy, range strategy, hash strategy)
Request routing (physical and virtual shards, request routing options)
Rebalancing partitions (how to rebalance partitions)
Consistent hashing (how to implement, advantages and disadvantages, virtual nodes, applications of consistent hashing)
System overload (why it is important to protect the system from overload)
Autoscaling (scaling policies (metric-based, schedule-based, predictive))
Autoscaling system design (how to design an autoscaling system)
Load shedding (how to implement it in distributed systems, important considerations)
Rate limiting (how to use the knowledge gained in the course for solving the problem of rate limiting (step by step guide))
Synchronous and asynchronous clients (admission control systems, blocking I/O and non-blocking I/O clients)
Circuit breaker (circuit breaker finite-state machine, important considerations)
Fail-fast design principle (problems with slow services (chain reactions, cascading failures) and ways to solve them)
Bulkhead (how to implement this pattern in distributed systems)
Shuffle sharding (how to implement this pattern in distributed systems)
The end (a list of topics that we will cover in the next module of the course)

Instructor

Mikhail Smarshchok

Hi! This is Mikhail Smarshchok from the System Design Interview YouTube channel (https://www.youtube.com/c/SystemDesignInterview). I am a software engineer with a passion for learning, teaching and mentoring. Having over 15 years of industry experience, last 9 years I worked on building scalable, highly available and low latency distributed systems. For a long time, I have wondered what is the best way to learn system design. While there are many excellent resources for learning individual concepts, few provide a holistic view of how to design systems. And even after you've invested a lot of time and gained a lot of knowledge, it's still hard to develop true system design thinking. Thinking that helps answer questions like: where to start my design; where to go next; how to break this big obscure problem into sub-problems that I know how to solve; and even if I don't know the answer, can I make an educated guess? So I challenged myself to create a course that can help build and improve system design thinking. And two years later, you can see the result of this work. Feel free to connect/follow me on LinkedIn where I try to post more of my thoughts and learning material regularly: www.linkedin.com/in/mikhail-smarshchok

Reviews

5 star rating

The best System Design course which I found ever

Valentyn kvasov

Thanks to the author for the well-structured and comprehensive course. I look forward to the second and third courses in this series. keep it up.

Thanks to the author for the well-structured and comprehensive course. I look forward to the second and third courses in this series. keep it up.

Read Less
5 star rating

Solid foundation blocks for approaching system design interviews

Sergey Makagonov

Great resource, not only for system design preparation, but also for tackling design problems at work. Topics are well organized with solid level of depths. Every second of the videos is informative, and you can see that the author really put a lo...

Read More

Great resource, not only for system design preparation, but also for tackling design problems at work. Topics are well organized with solid level of depths. Every second of the videos is informative, and you can see that the author really put a lot of time and effort into making this course.

Read Less
5 star rating

Worth the Money!

Asif Bin Hossain

Such a knowledgeable person who explain concepts easily & iteratively. Its not often that you come across a person with an information packed course liked this. Lucky are those who have him directly as a mentor. A highly recommended course!

Such a knowledgeable person who explain concepts easily & iteratively. Its not often that you come across a person with an information packed course liked this. Lucky are those who have him directly as a mentor. A highly recommended course!

Read Less
5 star rating

One of the best courses ever.

Andrii Kostiuchenko

Thanks to the author for the great work.

Thanks to the author for the great work.

Read Less
5 star rating

Very good course - super clear and comprehensive

9z 0b

Looking forward to the next two modules from Smarshchok!

Looking forward to the next two modules from Smarshchok!

Read Less
5 star rating

Extremely good.

Salman Ab

5 star rating

Outstanding Course

Andy Smith

The course is comprehensive, well-paced, and beautifully structured. Truly the gold standard for system design preparation; I can't watch the videos quick enough.

The course is comprehensive, well-paced, and beautifully structured. Truly the gold standard for system design preparation; I can't watch the videos quick enough.

Read Less
5 star rating

Halfway through the course and it's just too good

Pranit Kothari

If anyone is serious about learning System Design concepts, I cannot recommend this course enough. Just go for it. Don't settle for shallow YouTubue videos, they will not give you confidence.

If anyone is serious about learning System Design concepts, I cannot recommend this course enough. Just go for it. Don't settle for shallow YouTubue videos, they will not give you confidence.

Read Less
5 star rating

Brilliant course

arun k.rajan

I love Mikhail's youtube videos. The moment I found there was a full course I subscribed to it. I just completed my first iteration of watching this over the past 4 days. The format is quite different from his youtube videos. While his youtube vid...

Read More

I love Mikhail's youtube videos. The moment I found there was a full course I subscribed to it. I just completed my first iteration of watching this over the past 4 days. The format is quite different from his youtube videos. While his youtube videos cover a bunch of design videos, this course is much more detailed. I don't know if this level of depth would be required for a system design interview round, but it'll be extremely useful to analyze architecture during our day to day job. Kudos to Mikhail for coming up with amazing content. Looking forward to the follow up course!

Read Less
5 star rating

Great Course!

Jianxing Ke

5 star rating

System Design as it should be

Dmitry Gritskevich

I recommend this course to anyone looking into deeper understanding of the System Design.

I recommend this course to anyone looking into deeper understanding of the System Design.

Read Less
5 star rating

Very informative

Nikolay Marchenko

So much material, I could not even process everything from the first attempt! I would spend months trying to consolidate the same amount of info I received from this course

So much material, I could not even process everything from the first attempt! I would spend months trying to consolidate the same amount of info I received from this course

Read Less

FAQ

  • How many modules will be in the course?

    There will be 3 modules in the "System design for interviews and beyond" course. The current module is the first of three.

  • Tell us more about these modules.

    Module 1 focuses on the fundamental concepts of system design. Module 2 will cover more of these concepts as well as some more advanced topics. Module 3 will cover topics such as maintainability, security, and cost in distributed systems.

  • What specific topics does each module cover?

    See the course syllabus above for the list of topics covered in the current (first) module. Topics that will be covered in the second module include replication, consistency, CAP theorem, leader election, coordination services, reverse proxy, API gateway, API design (REST and RPC), load balancing, caching (distributed), SQL and NoSQL databases, other data stores, batch processing, stream processing, cell-based architecture, popular data structures in system design. As already mentioned, the third module will cover topics such as maintainability, security, and cost in distributed systems.

  • Tell us more about the price of the modules.

    Each module will be priced separately. The price you see on this page is the price of the first module only. Modules can be purchased individually or in bundles (groups of multiple modules). There will be discounts for bundles. Also, buyers of previous modules will receive a discount on each next module. It is also planned to enable the subscription model after at least two modules are published.

  • If I don't like the course, can I get a refund?

    Sure. You can get a full refund within 30 days of purchase and if you have viewed less than 20% of the course. Both conditions must be met.