We may earn an affiliate commission when you visit our partners.
Course image
Alexey Soshin

Prepare yourself for system design interviews and leverage your knowledge in real-world scenarios with my comprehensive course. Gain the confidence and skills to excel in system design discussions, whether for job interviews or day-to-day work.

Read more

Prepare yourself for system design interviews and leverage your knowledge in real-world scenarios with my comprehensive course. Gain the confidence and skills to excel in system design discussions, whether for job interviews or day-to-day work.

In today's industry, designing new systems is a rare opportunity for most engineers. Architecture discussions often involve only a select few individuals within companies. However, when it comes to interviews, the expectation is that everyone is a system design master. My course bridges this gap by covering essential topics and providing effective approaches to common system design interview questions.

Additionally, this course offers senior engineers an alternative perspective on system design. I encourage open discussions and aim to remove the stigma around imperfect real-world designs.

Choose your preferred method of course consumption based on your availability. If you have ample time, follow the logical order of my videos for a step-by-step learning experience, gradually building your confidence.

Alternatively, if time is limited or you're not currently actively preparing for interviews, you can start with the design videos. If any unfamiliar topics arise, I provide supplementary videos or links to relevant articles.

System design interviews typically evaluate breadth of knowledge first and depth of knowledge second. Thus, I've kept the theoretical portion of each topic concise, aligning with interviewers' expectations.

Remember, there's no such thing as a perfect design. Every system involves trade-offs and compromises. Moreover, each design is unique, reflecting your areas of expertise. Approach my videos as a collection of ideas rather than the definitive way to design a system.

I value your input. If you have additional system design interview questions or topics you'd like me to address, please let me know. Your feedback shapes my content and ensures its relevance to your needs.

Enroll now

What's inside

Learning objectives

  • How to solve most popular fang interview questions
  • Most important scalability concepts
  • Common communication protocols
  • Caching and redis
  • Concurrency
  • Database design and postgresql
  • Sharding strategies

Syllabus

Introduction
Introduction to Pragmatic System Design

This video discusses how to represent different building blocks of your system and connections between them in a diagram.

Read more

This video covers how to structure your diagrams in an easy to follow manner.

In this video we'll discuss what numbers can you use when estimating latency, throughput and capacity of your system components.

Networks
Load Balancing
CDN
Caching

This video will cover some of the most common caching strategies:

  • Cache Aside

  • Read Through

  • Write Through

  • Write Behind

This video covers LRU and LFU, two of the most important cache eviction policies.

Redis is the most popular solution on the market for distributed cache at the moment.

In this video we'll discuss basic usage of Redis, some of the supported data types, TTL on keys, how Redis persists the data, and in which cases Redis may not be the best option for you.

Queues

Discover the power of message queues in enhancing system scalability and reliability. Using a pizza restaurant system as an example, this video explains how queues facilitate asynchronous messaging and decoupling of components, resulting in faster order processing. Explore the benefits of buffering requests and storing messages for recovery, while acknowledging the complexities of asynchronous communication.

This video explains two main ways of using queues: message queues and publisher/subscriber (pub/sub). Using examples like a pizza service and payments service, learn how message queues ensure messages are delivered to a single recipient, while pub/sub queues allow notifications to be sent to multiple services. Understand the benefits and characteristics of each method, setting the stage for future discussions on specific technologies.

This video covers the most important topics about RabbitMQ that you may be asked during an interview:

  • Routing keys

  • Types of exchanges

  • Channels

  • Acknowledgements

This video covers the most important topics about Kafka, that you'll have to consider during an interview:

  • Topics

  • Events

  • Partitions

  • Consumer groups

  • Consumer offsets

Protocols

In this video we'll discuss the main protocols of the Internet, TCP.

This protocol has three main benefits. It's Reliable, Ordered and Error-checked.

We'll cover what each of those means in detail.

This video covers the UDP protocol and its benefits.

Summary: TCP vs UDP

This video introduces HTTP protocol and discusses the structure of HTTP Request and HTTP Response.

This video covers the most common HTTP methods, and when you should use each one of them:

  • GET

  • POST

  • PUT

  • DELETE

  • PATCH

This video covers the the most common HTTP status codes and when should you use them.

This video discusses REST architecture and the problems it comes to solve.

In this video we'll see how to apply REST best practices when you design your APIs.

This video discussed WebSockets protocol, its benefits, and how it is different from HTTP.

  • Long Polling architectural pattern

  • Differences between Web Sockets and Long Polling

In this video we'll discuss the gRPC protocol, which is based on Protobufs and is a popular way to communicate between microservices.

GraphQL

This video attempts to provide you a simple framework how to pick the correct protocol for your use case.

Concurrency
Concurrency vs Parallelism
Processes
Threads
Thread Pools
Databases
Indexes
Sharding

In this video we'll learn about Consistent Hashing algorithm, that enables adding new shards without impacting the entire cluster.

In this video we'll learn how to scale reads on a single table using partitioning.

This technique may also help us cleaning up stale data efficiently.

CAP Theorem
ACID transactions
Architectural Patterns
Web Sessions

Request Serialization is an important technique to resolve data races in your system. Will discuss situations when it's useful to serialize requests, and the trade-offs of that solution.

CQRS
Design a Taxi Hailing App (aka Uber)
Problem Introduction - Design a Taxi Hailing App
Driver Locations
Storing Locations
Taxis Around You
Matching

Summarising the design of our taxi hailing app.

Design a Chat (aka WhatsApp)
Problem Introduction - Design a Chat
Basic Design - Chat
Scaling Reads
Sharding Chat Messages
Scaling chat using queues
Summary - Design a Chat
Design a Web Crawler (aka Google Crawler)
Problem Introduction - Design a Web Crawler
Basic Design - Web Crawler
Fetching Content
What's a "new" URL?
Uniqueness
Priorities
Summary - Design a Web Crawler
Design an Auction (aka eBay)
Problem Introduction - Design an Auction

Let's see what is the most basic design we can provide for an auction.

Optimistic Locking of Bids
Serialisation of Bids
Event-Driven Approach for Bids
Scaling an Auction
Summary - Design an Auction
Design a URL Shortener (aka TinyURL)
Problem Introduction - Design a URL Shortener
Basic Design for a URL Shortener
Short Identifiers

This video discusses whether using DynamoDB is a valid solution for this system.

Summary - Design a URL Shortener
Design a Coupon System (aka Groupon)
Problem Introduction - Coupon System
Basic Design
Scalability
Summary - Coupon System
Extra: Scaling Using Queues
Design a News Feed (aka Twitter)
Problem Introduction - News Feed

Good to know

Know what's good
, what to watch for
, and possible dealbreakers
Explores key system design concepts, tools, and trade-offs, preparing learners to solve common system design problems effectively
Taught by Alexey Soshin, a seasoned system architect with extensive experience in building scalable and fault-tolerant systems
Provides a strong foundation in system design principles, making it suitable for beginners and intermediate learners alike
Covers a wide range of topics, including scalability, concurrency, databases, and communication protocols, catering to diverse learning needs
Teaches learners how to approach system design interviews with confidence and apply their knowledge to real-world scenarios
Requires learners to come in with some basic understanding of software development concepts and data structures

Save this course

Save Pragmatic System Design to your list so you can find it easily later:
Save

Activities

Be better prepared before your course. Deepen your understanding during and after it. Supplement your coursework and achieve mastery of the topics covered in Pragmatic System Design with these activities:
Review Designing Data-Intensive Applications
Gain insights from a comprehensive guide to designing and building scalable data-intensive applications.
View Secret Colors on Amazon
Show steps
  • Familiarize yourself with the challenges and principles of designing data-intensive systems.
  • Explore different data storage and processing technologies.
Review Computer Networks
Review the basics of computer networks to strengthen your understanding of network design concepts.
Browse courses on Computer Networks
Show steps
  • Revisit the fundamentals of network protocols, including TCP and UDP.
  • Refresh your knowledge of network topologies and their characteristics.
  • Practice configuring basic network devices, such as routers and switches.
Explore System Design Patterns
Deepen your understanding of system design principles by following guided tutorials on common design patterns.
Browse courses on Architectural Patterns
Show steps
  • Familiarize yourself with the benefits and trade-offs of different design patterns.
  • Apply these patterns to practical system design scenarios.
  • Experiment with implementing these patterns in a programming language of your choice.
Three other activities
Expand to see all activities and additional details
Show all six activities
Participate in System Design Study Group
Engage with peers to discuss system design concepts, share knowledge, and provide feedback.
Show steps
  • Join or form a study group with fellow students.
  • Take turns presenting system design solutions to each other.
  • Provide constructive criticism and feedback.
Solve System Design Interview Problems
Sharpen your problem-solving skills by tackling common system design interview problems.
Browse courses on Interview Preparation
Show steps
  • Identify the problem statement and constraints.
  • Design the system architecture and identify the key components.
  • Analyze the scalability, reliability, and maintainability of your design.
Contribute to System Design Open-Source Projects
Enhance your system design skills by contributing to and learning from open-source system design projects.
Show steps
  • Identify open-source projects that align with your interests.
  • Review the project documentation and codebase.
  • Propose and implement improvements or new features.

Career center

Learners who complete Pragmatic System Design will develop knowledge and skills that may be useful to these careers:
Systems Analyst
A Systems Analyst designs, develops, and implements computer systems. They work with business stakeholders to understand their needs and then design and develop systems to meet those needs. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of system design principles and best practices. You will learn how to design systems for scalability, reliability, and performance.
Software Architect
A Software Architect designs the overall architecture of software systems. They work with senior management and technical teams to define the system's requirements, design the system's architecture, and oversee the system's development. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of system design principles and best practices. You will learn how to design systems for scalability, reliability, and performance.
Database Administrator
A Database Administrator manages and maintains databases. They work with database users to ensure that the database is running smoothly and that data is secure. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of database design, implementation, and management. You will learn how to design databases for performance, scalability, and reliability.
Data Scientist
A Data Scientist uses data to solve business problems. They work with data to identify trends, patterns, and insights that can help businesses make better decisions. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of data science principles and best practices. You will learn how to collect, clean, and analyze data, and how to use data to solve business problems.
Software Developer
A Software Developer designs, develops, and implements software applications. They work with users to understand their needs and then design and develop applications to meet those needs. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of software development principles and best practices. You will learn how to design, develop, and test software applications for a variety of platforms.
Quality Assurance Analyst
A Quality Assurance Analyst tests software applications to ensure that they meet the requirements of the business. They work with development teams to identify and fix bugs in software applications. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of quality assurance principles and best practices. You will learn how to test software applications for functionality, performance, and security.
Network Engineer
A Network Engineer designs, implements, and maintains computer networks. They work with network administrators to ensure that the network is running smoothly and that data is secure. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of network engineering principles and best practices. You will learn how to design, implement, and maintain computer networks for a variety of organizations.
Web Developer
A Web Developer designs, develops, and maintains websites. They work with web designers to create the look and feel of a website, and they work with web programmers to implement the website's functionality. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of web development principles and best practices. You will learn how to design, develop, and maintain websites for a variety of organizations.
Cloud Engineer
A Cloud Engineer designs, implements, and maintains cloud computing systems. They work with cloud providers to ensure that the cloud system is running smoothly and that data is secure. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of cloud computing principles and best practices. You will learn how to design, implement, and maintain cloud computing systems for a variety of organizations.
DevOps Engineer
A DevOps Engineer works with development and operations teams to ensure that software applications are deployed and maintained efficiently. They work with developers to ensure that applications are designed for deployability and maintainability, and they work with operations teams to ensure that applications are deployed and maintained in a reliable and efficient manner.
Information Security Analyst
An Information Security Analyst protects an organization's computer systems and data from unauthorized access, use, disclosure, disruption, modification, or destruction. They work with security teams to identify and mitigate security risks, and they work with law enforcement to investigate security incidents. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of information security principles and best practices. You will learn how to identify and mitigate security risks, and how to investigate and respond to security incidents.
Technical Writer
A Technical Writer creates and maintains technical documentation. They work with engineers and other technical professionals to gather information and create documentation that explains how to use and maintain technical products and services. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of technical writing principles and best practices. You will learn how to gather information and create documentation for a variety of technical products and services.
Project Manager
A Project Manager plans and manages projects. They work with stakeholders to define the project scope, develop the project plan, and manage the project budget. This course can help you to develop the skills and knowledge necessary to be successful in this role by providing you with a comprehensive overview of project management principles and best practices. You will learn how to plan, manage, and execute projects for a variety of organizations.
Business Analyst
A Business Analyst works with business stakeholders to gather and analyze business requirements. They work with development teams to translate business requirements into technical requirements, and they work with business stakeholders to validate that the system meets their needs.
Product Manager
A Product Manager defines and manages the product vision and roadmap. They work with engineering, marketing, and sales teams to bring the product to market. This course can be helpful for you if you are interested in learning more about the product development process.

Reading list

We've selected nine books that we think will supplement your learning. Use these to develop background knowledge, enrich your coursework, and gain a deeper understanding of the topics covered in Pragmatic System Design.
Provides a comprehensive overview of the challenges and techniques involved in designing and building data-intensive applications. It covers topics such as data modeling, storage, processing, and analysis, and valuable resource for anyone who wants to learn more about this important topic.
Provides a practical guide to designing and building scalable microservices applications. It covers topics such as microservice design patterns, API design, and deployment strategies, and valuable resource for anyone who wants to learn more about this important topic.
Provides a deep dive into the challenges and techniques involved in scaling web applications. It covers topics such as load balancing, caching, and database scaling, and valuable resource for anyone who wants to learn more about this important topic.
Provides a comprehensive guide to using Kafka. It covers topics such as Kafka architecture, data ingestion, and stream processing, and valuable resource for anyone who wants to learn more about this important tool.
Provides a comprehensive guide to HTTP. It covers topics such as HTTP protocol, web servers, and caching, and valuable resource for anyone who wants to learn more about this important topic.
Provides a practical guide to designing and building RESTful web services. It covers topics such as REST principles, API design, and security, and valuable resource for anyone who wants to learn more about this important topic.
Provides a comprehensive guide to concurrent programming in Java. It covers topics such as threading, synchronization, and concurrency libraries, and valuable resource for anyone who wants to learn more about this important topic.
Provides a comprehensive guide to database systems. It covers topics such as data modeling, query processing, and transaction management, and valuable resource for anyone who wants to learn more about this important topic.
Provides a comprehensive guide to computer systems performance analysis. It covers topics such as performance metrics, performance modeling, and performance tuning, and valuable resource for anyone who wants to learn more about this important topic.

Share

Help others find this course page by sharing it with your friends and followers:

Similar courses

Here are nine courses similar to Pragmatic System Design.
Mastering the System Design Interview
Blended Learning Toolkit
Canva for Beginners - Graphic Design Theory Volume 1
Public Speaking and Presenting at Work
Interviewing skills & Job search: Resume writing, LinkedIn
Solar Energy and Electrical System Design
System Design Interview Guide for Software Architecture
Renewable Energy: Fundamentals and Job Opportunities
Microsoft Access VBA, Design and Advanced Methods...
Our mission

OpenCourser helps millions of learners each year. People visit us to learn workspace skills, ace their exams, and nurture their curiosity.

Our extensive catalog contains over 50,000 courses and twice as many books. Browse by search, by topic, or even by career interests. We'll match you to the right resources quickly.

Find this site helpful? Tell a friend about us.

Affiliate disclosure

We're supported by our community of learners. When you purchase or subscribe to courses and programs or purchase books, we may earn a commission from our partners.

Your purchases help us maintain our catalog and keep our servers humming without ads.

Thank you for supporting OpenCourser.

© 2016 - 2024 OpenCourser