Building large-scale distributed systems like Google, Facebook, Amazon, and Twitter requires an in-depth understanding of computer science principles. This allows systems to handle millions of users concurrently despite hardware failures.

We just published a course on the freeCodeCamp.org YouTube channel that will teach you how to design software systems. This course is designed to provide a comprehensive understanding of the various concepts and techniques involved in designing and building software systems.

Gaurav Sen developed this course. He is an experienced software engineer and he also has a popular YouTube channel with almost half-a-million subscribers.

You will learn about basic engineering design patterns that are used to build large-scale distributed systems. In the second part of the course you will learn how to use the principles from the fist part to design and code a live streaming video app.

We will begin by discussing the basics of system design, including what it is and why it is important. We will then delve into specific design patterns that are commonly used in software development, such as live streaming system design, fault tolerance, extensibility, and testing.

The course uses video streaming service as an example for demonstrating system design principles. You will learn about different diagramming approaches, API design, database design, and network protocols. We will also discuss the importance of choosing the right datastore for your system and the process of uploading raw video footage.

We will also cover advanced topics such as Map Reduce for video transformation and the pros and cons of different streaming protocols such as WebRTC, MPEG DASH, and HLS. Additionally, we will discuss the role of Content Delivery Networks in system design and provide a high-level summary of the key concepts covered in the course.

In addition to the high-level concepts, we will also delve into the low-level design of a video player, including engineering requirements, use case UML diagrams, class UML diagrams, and sequence UML diagrams. We will also cover the process of coding the server and provide resources for further learning and development in the field of system design.

Overall, this course will provide a comprehensive understanding of the various concepts and techniques involved in designing and building software systems. Whether you are a beginner or an experienced software developer, this course will provide valuable insights and knowledge that you can apply to your own projects.

Watch the full course on the freeCodeCamp.org YouTube channel (1.5 hour watch).