Pragmatic System Design
This course aims to prepare you for system design interviews, as well as discusses how you could apply this knowledge in your day to day job. In real world, most of the engineers don't get to design new systems often. Some don't get to design them at all. In many companies architecture is something only a few individuals do regularly. But when it comes to interviewing, we suddenly expect everyone to be master in system design.
More
This course tries to cover some of the basic topics, as well as provide you with my approach to some of the most common system design interview questions.
Second purpose of this course is to provide senior engineers with an alternative view to system design. What I see in the industry is that we don't discuss design among ourselves much. It becomes a sensitive topic, because no real world design is perfect. And that's something I hope to change.
There are two ways I suggest to consume the course. If you have plenty of time, just watch it start to finish. I tried to construct it in a logical order, so you will accumulate more and more confidence as you go.
Alternatively, if you are short on time, or if you aren't preparing actively for interviews at the moment, you can start with the design videos, and if you aren't familiar with one of the topics I discuss, there should be either a video for that or a link to a relevant article.
The goal of system design interview is usually to cover multiple topics. It evaluates the breath of knowledge first, depth of knowledge second. For that reason, I tried to keep the theoretical part on each topic rather brief. That is - it's as deep as I expect as an interviewer from my candidates.
Finally, I will repeat myself and say that no design is perfect. There are always tradeoffs, there are always compromises that you must make. And each design is personal. It depends on what are your areas of expertise. When you watch my videos, please don't treat them as the ultimate way I would design a system, but more as a collection of ideas of how to approach the topic.
Watch Online Pragmatic System Design
# | Title | Duration |
---|---|---|
1 | Introduction to Pragmatic System Design | 03:50 |
2 | Diagram building blocks | 02:31 |
3 | Diagram flow | 01:11 |
4 | Making Estimates | 03:28 |
5 | Load Balancing | 05:53 |
6 | CDN | 04:19 |
7 | Introduction | 01:46 |
8 | Caching Strategies | 03:12 |
9 | Eviction Policies | 03:23 |
10 | Redis | 03:58 |
11 | Introduction | 04:32 |
12 | Messaging | 02:29 |
13 | RabbitMQ | 05:09 |
14 | Kafka | 03:57 |
15 | TCP | 04:03 |
16 | UDP | 03:09 |
17 | Summary: TCP vs UDP | 00:56 |
18 | HTTP | 01:05 |
19 | HTTP - Methods | 01:56 |
20 | HTTP - Status Codes | 02:36 |
21 | REST | 01:14 |
22 | RESTfulness | 03:30 |
23 | WebSockets | 03:36 |
24 | Long Polling | 02:54 |
25 | gRPC | 04:13 |
26 | GraphQL | 04:54 |
27 | Summary | 01:58 |
28 | Concurrency vs Parallelism | 02:29 |
29 | Processes | 06:40 |
30 | Threads | 03:52 |
31 | Thread Pools | 01:17 |
32 | Indexes | 07:09 |
33 | Sharding | 10:25 |
34 | Consistent Hashing | 03:59 |
35 | Partitioning | 10:29 |
36 | CAP Theorem | 04:36 |
37 | ACID transactions | 04:53 |
38 | Web Sessions | 05:35 |
39 | Problem Introduction - Design a Taxi Hailing App | 05:34 |
40 | Driver Locations | 04:40 |
41 | Storing Locations | 03:54 |
42 | Taxis Around You | 05:06 |
43 | Matching | 03:29 |
44 | Summary - Design a Taxi Hailing App | 00:49 |
45 | Problem Introduction - Design a Chat | 01:37 |
46 | Basic Design | 03:25 |
47 | Scaling Reads | 02:11 |
48 | Sharding Chat Messages | 02:00 |
49 | Scaling chat using queues | 02:18 |
50 | Summary - Design a Chat | 01:25 |
51 | Problem Introduction - Design a Web Crawler | 02:30 |
52 | Basic Design | 02:13 |
53 | Fetching Content | 03:00 |
54 | What's a "new" URL? | 03:12 |
55 | Uniqueness | 04:14 |
56 | Priorities | 05:41 |
57 | Summary - Design a Web Crawler | 01:06 |
58 | Problem Introduction - Design an Auction | 01:47 |
59 | Basic Design for an Auction | 02:15 |
60 | Optimistic Locking of Bids | 01:45 |
61 | Serialisation of Bids | 02:08 |
62 | Event-Driven Approach for Bids | 02:55 |
63 | Scaling an Auction | 01:42 |
64 | Summary - Design an Auction | 00:53 |
65 | Problem Introduction - Design a URL Shortener | 01:23 |
66 | Basic Design for a URL Shortener | 01:59 |
67 | Short Identifiers | 02:48 |
68 | Scaling Reads | 02:27 |
69 | Extra: DynamoDB | 01:06 |
70 | Caching | 02:03 |
71 | Summary - Design a URL Shortener | 01:09 |
72 | Problem Introduction | 01:42 |
73 | Basic Design | 04:38 |
74 | Concurrency | 04:46 |
75 | Scalability | 04:54 |
76 | Summary | 01:01 |
77 | Extra: Scaling Using Queues | 02:13 |
78 | Problem Introduction - News Feed | 02:13 |
79 | Basic Design - News Feed | 02:05 |
80 | Storage Calculations - News Feed | 01:17 |
81 | Scaling reads | 03:48 |
82 | Long Term Storage and Short Term Storage | 02:23 |
83 | Feed Optimisation | 01:26 |
84 | VIPs | 03:15 |
85 | Summary - News Feed | 01:19 |