Skip to content

This repository contains everything you need to become proficient in System Design

License

Notifications You must be signed in to change notification settings

sfebriheri/Complete-System-Design

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

89 Commits
 
 
 
 

Repository files navigation

Complete System Design with Implemented Case Studies and Code

This repository contains everything you need to become proficient in System Design .

Instagram Design

Youtube for all the projects and tech interview resources - Ignito Youtube Channel

Complete Cheat Sheet for Tech Interviews - How to prepare efficiently

Mega Launch - 200+ System Design Case Studies

System Design Most Important Terms

System Design Template

Complete System Design Case Studies

How to solve any System Design Question ( approach that you should take)

ML System Design Case Studies Series

For Data Structures and Algorithms, start here : Day 1 of 30 days of Data Structures and Algorithms and System Design Simplified : DSA and System Design made Easy

Topics you should know in System Design ---

  1. System design basics

  2. Horizontal and vertical scaling

  3. Load balancing and Message queues

  4. High level design and low level design, Consistent Hashing, Monolithic and Microservices architecture

  5. Caching, Indexing, Proxies

  6. Networking, How Browsers work, Content Network Delivery ( CDN)

  7. Database Sharding, CAP Theorem, Database schema Design

  8. Concurrency, API, Components + OOP + Abstraction

  9. Estimation and Planning, Performance

  10. Map Reduce, Patterns and Microservices

System Design Case Studies

Case Study Name Link to the Case Study
Design Instagram Link
Design Messenger App Link
Design Twitter Link
Design URL Shortner Link
Design Dropbox Link
Design Youtube Link
Design Tinder Link
Design Google Drive Link
Design Messenger App Link
Design Instagram Link
Design Twitter Link
Design Ticketmaster Link
Design Quora Link
Design Flipkart Link
Design Flickr Link
Design TikTok Link
Design Netflix Link
Design Foursquare Link
Design Uber Link
Design Youtube Link
Design Reddit Link
Design Facebook’s Newsfeed Link
Design Amazon Prime Video Link
Design Web Crawler Link
Design Web Crawler Link
Design API Rate Limiter Link
Design Dropbox Link
Design Yelp Link
Design Whatsapp Link
Design URL Shortener Link
Design Bookmyshow Link
Design Linkedin Link
Design Telegram Link
Design Snapchat Link
Design One Drive Link
Design BookmyShow Link
Design Google Maps Link
Design Quora Link
Design Foursquare Link
Design Tiny URL Link
Design Flipkart Link

Design Instagram

Design Messenger App

Design Twitter

Design URL Shortner

Design Dropbox

Design Youtube

Design Tinder

Design Google Drive

Design Messenger App

Design Instagram

Design Twitter

Design Ticketmaster

Design Quora

Design Flipkart

Design Flickr

Design TikTok

Design Netflix

Design Foursquare

Design Uber

Design Youtube

Design Reddit

Design Facebook’s Newsfeed

Design Amazon Prime Video

Design Web Crawler

Design API Rate Limiter

Design Dropbox

Design Yelp

Design Whatspp

Design URL shortener

Design Bookmyshow

Design Linkedin

Design Telegram

Design Snapchat

Design One Drive

Design BookmyShow

Design Google Maps

Design Quora

Design Foursquare

Design Tiny URL

Design Flipkart


Part 1 of System Design Made Easy Series

In the part 1, we covered what and why of System Design and the important topics that you should know. System Design is mostly an open ended concept and most of the questions can be answered in different degrees and aptitudes. In layman’s language, system design is about —

Architecture + Data + Applications

Learn what is system design and why it’s important, how they work and how to use them in your system design interviews in part 1


Part 2 of System Design Made Easy Series

In the part 2, we covered—

  1. System design basics

  2. Horizontal and Vertical Scaling with an example

In technical words, scalability is a the technique/process of adding/removing infrastructure/resources required by applications to better serve/accommodate increased/decreased demand/growth. We also covered the tradeoffs of horizontal and vertical scaling.

Learn why good understanding of system design basics and horizontal and vertical scaling are important, how they work and how to use them in your system design interviews in part 2


Part 3 of System Design Made Easy Series

In the part 3, we covered system design’s most important concepts —

  1. Load Balancing

  2. Message Queues

Load balancing is a technique of distributing tasks over a set of servers/machines to improve the performance,throughput, high availability, redundancy and reliability of the system. Not just it enables horizontal scaling but also dynamic resizing/scaling.

Message queues are nothing bit temporary buffers placed between users/applications and servers to store the message requests and process them in FIFO order asynchronously until the requests/messages are delivered to the desired server.

We also covered the tradeoffs of the different techniques.

Learn why load balancing and message queues are important, how they work and how to use them in your system design interviews in part 3


Part 4 of System Design Made Easy Series

In the part 4, we covered-

  1. High level design and Low level design

  2. Monolithic and microservices architecture and which one to choose and when ?

  3. Consistent Hashing

High level Design(HLD) describes the overall architecture of the application and covers functionality of each module of the system very briefly. LLD details the functional logic of the each module in the system.

Monolithic architecture — consists of single code base with multiple modules and it’s easier and faster to deploy. Microservices architecture — consists of individual service units with each service being responsible for exactly one functionality. It’s relatively complex and time taking to deploy.

Consistent hashing is a technique to divide keys/data between multiple servers/machines using a hash function ( key — value).

Learn why high level design and low level design, Monolith and microservices architecture and consistent hashing are important, how they work and how to use them in your system design interviews in part 4


Part 5 of System Design Made Easy Series

In the part 5, we covered —

  1. Caching

  2. Indexing

  3. Proxies

Caching is a technique which is based on the principal of locality — stores the copies of most frequently used/accessed data in a small and faster memory to improve Data retrieval times, Compute costs, User Experience and Throughput.

Indexing helps in Improving the speed of data access/retrieval, Reducing the number of expensive I/O operations, Providing better organization and management of multilevel data records.

Proxies play an important role of coordinating user requests, handling concurrent requests, filtering user request, transforming user requests by adding an additional layer of encryption or header information or compression information and then forwarding the user request to the server.

Learn why Caching, Indexing and Proxies are important, how they work and how to use them in your system design interviews in part 5


Part 6 of System Design Made Easy Series

In the part 6, we covered —

  1. Networking

  2. How Browsers work

  3. Content Network Delivery ( CDN)

Networking is nothing but interconnected devices that can exchange data-messages and share resources amongst themselves/with outside world based in the system protocols/rules, technologies and algorithms that govern these devices inner workings.

Browsers are used to present the website/resource you would like to visit say, for example google.com by sending the request to the server and displaying it on their browser window.

Content Network Delivery caters to the users by serving their requests by quickly transferring the data back and forth.

Learn why networking, browsers working and CDN are important, how they work and how to use them in your system design interviews in part 6


Part 7 of System Design Made Easy Series

In the part 7, we covered —

  1. Database Sharding

  2. CAP Theorem

  3. Database schema Design

Sharding is the technique to database partitioning that separates large and complex databases into smaller, faster and distributed databases for higher throughput operations.

CAP theorem lets you determine how you want to handle your distributed databases with there is possibility of inconsistencies, unavailability and connection errors/failures/outrage.

Database schema Design lets you organize data into separate entities and establish and organize the relationships between different entities.

Learn why database sharding, CAP theorem and Database Schema Design are important, how they work and how to use them in your system design interviews in part 7


**Part 8 of System Design Made Easy Series **

In the part 8 , we covered —

  1. Concurrency

  2. API

  3. Components + OOP + Abstraction

Concurrency is the process in which multiple computations/operations/process happen/execute in parallel/concurrently.

API is an acronym for application programming interface which provides a way to two or more programs to communicate, work together despite different configurations, architectures, resources etc

Components in the system design are building blocks designed to coordinate, cooperate, reuse and work well with other components of the same/different systems. They can be as simple as visual components or internal components/backend components.

Learn why concurrency, API and Components + OOP + Abstraction are important, how they work and how to use them in your system design interviews in part 8


Part 9 of System Design Made Easy Series

In the part 9 , we covered —

  1. Planning and Estimation

  2. Performance

Planning and estimation( numbers) and performance are very important concepts ( concept that you should be able to demonstrate well when asked).

Learn why Planning, estimation( numbers) and performance are important, how they work and how to use them in your system design interviews in part 9


Part 10 of System Design Made Easy Series

In the part 10, we covered —

  1. Map Reduce

  2. Patterns and Microservices

In system design, map reduce ( Hadoop systems) is a batch processing technique in which the engine takes huge amounts of data, processes ( map and reduce) and gives the output.

In system design, microservices architecture is used to build enterprise level applications which helps in structuring the whole application as a collection of tiny autonomous, self contained services for each task ( service) that you want/are allowed to perform.

Learn why map reduce, patterns and microservices are important, how they work and how to use them in your system design interviews in part 10


Most Popular System Design Questions — Mega Compilation

In this post. we covered the most popular/important system design questions that you should practice to build a thorough understanding of how large systems are designed.

Popular Questions : Link


Some of the other best Series -

Complete 60 Days of Data Science and Machine Learning Series

30 days of Machine Learning Ops

30 Days of Natural Language Processing ( NLP) Series

Data Science and Machine Learning Research ( papers) Simplified **

30 days of Data Engineering with projects Series

60 days of Data Science and ML Series with projects

100 days : Your Data Science and Machine Learning Degree Series with projects

23 Data Science Techniques You Should Know

Tech Interview Series — Curated List of coding questions

Complete System Design with most popular Questions Series

Complete Data Visualization and Pre-processing Series with projects

Complete Python Series with Projects

Complete Advanced Python Series with Projects

Kaggle Best Notebooks that will teach you the most

Complete Developers Guide to Git

Exceptional Github Repos — Part 1

Exceptional Github Repos — Part 2

All the Data Science and Machine Learning Resources

210 Machine Learning Projects


6 Highly Recommended Data Science and Machine Learning Courses that you MUST take ( with certificate) - 

  1. Complete Data Scientist : https://bit.ly/3wiIo8u

Learn to run data pipelines, design experiments , build recommendation systems, and deploy solutions to the cloud.


  1. Complete Data Engineering : https://bit.ly/3A9oVs5

Learn to design data models, build data warehouses and data lakes, automate data pipelines, and work with massive datasets


  1. Complete Machine Learning Engineer : https://bit.ly/3Tir8ub

Learn advanced machine learning techniques and algorithms - including how to package and deploy your models to a production environment.


  1. Complete Data Product Manager : https://bit.ly/3QGUtwi

Leverage data to build products that deliver the right experiences, to the right users, at the right time. Lead the development of data-driven products that position businesses to win in their market.


  1. Complete Natural Language Processing : https://bit.ly/3T7J8qY

Build models on real data, and get hands-on experience with sentiment analysis, machine translation, and more.


  1. Complete Deep Learning: https://bit.ly/3T5ppIo

Learn to implement Neural Networks using the deep learning framework PyTorch


About

This repository contains everything you need to become proficient in System Design

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published