# System design

Embarking on a system design course is a transformative journey for individuals aspiring to deepen their understanding of creating scalable, efficient, and robust software architectures. This course is meticulously crafted to impart knowledge on the principles, methodologies, and best practices essential for designing complex systems that meet real-world requirements. Participants delve into a comprehensive curriculum that covers topics such as distributed systems, database design, network architecture, and system scalability.

A system design course often places a strong emphasis on practical application, encouraging learners to engage in hands-on projects that simulate real-world scenarios. Instructors guide students through the intricacies of designing systems capable of handling large-scale data, ensuring fault tolerance, and maintaining high performance.

The curriculum typically incorporates case studies, industry trends, and emerging technologies, providing a holistic view of system architecture in various domains. One of the significant benefits of undertaking a system design course lies in its relevance to professionals working in software engineering, system architecture, and related fields. It equips participants with the skills needed to tackle the complexities of modern technology landscapes, fostering the ability to make informed decisions about system architecture, deployment, and optimization. In conclusion, a system design course is an invaluable resource for those aiming to elevate their expertise in building scalable and resilient software systems. Whether for career advancement or personal enrichment, this course empowers individuals to tackle intricate design challenges and contribute to the creation of innovative and efficient technological solutions.

# Requirements
  • Basic programming background and knowledge about databases, apis etc
  • Dedicated towards putting in the effort and time needed to make it successful
# Who this course is for?
  • If you want to learn all about systems that scale up to infinity.
  • If you want to prepare for an upcoming system design interview round.
  • If you want to up-skill and get into designing large scale systems.
  • If you are just interested and have knowledge of computer science and want to see how things are done in the real world.
# Course Content
System design concepts
  • Distributed Systems
  • Horizontal vs Vertical Scaling
  • Caching
  • Load Balancing
  • Optimistic/Passive Locking
  • System Components
  • Requirements
  • RDBMS/NOSQL
  • Performance Tuning Aspects
  • Challenges of Designing System
High level system design
  • Approach for Design Interview
  • Functional and Non-Functional Requirements
  • Architectural Diagram
  • Scaling the System
  • Decoupling the Components
  • PUB-SUB Model
  • High Availability
  • Case Studies of High Level Designs for More than 5 In-Production Distributed Systems
Low level design
  • OOPs
  • Object Modelling Techniques
  • SOLID Principles
  • UML/Class Diagrams
  • Frequently Used Design Patterns
  • Componentization
  • Composition and Aggregation
  • Designing REST API
  • In-Depth Understanding of REST APIs and Endpoints
  • Layered Component Design
Multithreading and distributed system design
  • Multi-threading
  • Synchronization
  • Scaling
  • Extensibility
  • Reusability
  • Basic Distributed Design Principles
  • CAP Theorem
  • Sharding
  • Data Sharing
  • Caching
  • Case Studies of Real World Distributed Systems like Map-Reduce, HDFS, HBASE, etc.
Microservices architecture
  • What is a Microservice
  • Microservice vs Monolithic Architecture
  • Microservice Principles
  • Designing Micro-services and Their Communication
  • Case Studies of Real World Microservice Architectures
Case studies and assignments
  • YouTube
  • Uber
  • Notification System
  • Movie Ticket Booking System
  • Dropbox/Google Drive
  • Metrics Monitoring & Alerting System
  • News Feed
  • Parking Lot
  • Tic-Tac-Toe Game
# Instructor
Mitesh jain (Software Engineer & Instructor)

Open source enthusiast