Skip to content

Latest commit

 

History

History
210 lines (97 loc) · 5.46 KB

File metadata and controls

210 lines (97 loc) · 5.46 KB

System Design Summary

[TOC]

system_design_blueprint

Terminology

system_design_terminology


Design Principle

SOLID

solid_principle

The SOLID principles are five essential guidelines that enhance software design, making code more maintainable and scalable.

DRY

dry_principle

DRY(Don't Repeat Yourself) is a software development principle that says the same logic or knowledge should not be written multiple times in a system.

KISS

The KISS principle, which stands for "Keep It Simple, Stupid", is a design principle that suggests simplicity should be a key goal in design, development, and other fields, such as engineering, software development, and user interface design.

YAGNI

yagni_principle

"YAGNI" stands for "You Aren't Gonna Need It". YAGNI is a software development principle that advises developers to implement only what is required for current needs.


Workflow

system_design_step


Requirements

system_design_requirements

Functional Requirements

Functional requirements are the requirements that the end user specifically demands as basic functionalities that the system should offer. All these functionalities need to be necessarily included into the system as part of the contract.

Non-Functional Requirements

Non-functional Requirements are the quality constraints that the system must satisfy according to the project contract. The priority or extent to which these factors are implemented varies from one project to another. They are also called non-behavioral requirements. For example: portability, maintainability, reliability, scalability, security, etc.

Extended requirements

These are basically "nice to have" requirements that might be out of the scope of the system.


Cost Estimation

what_is_performance

Software Cost Estimation is a systematic process used to forecast the amount of effort (person-hours or person-months), duration(calendar time), and financial cost required to develop, deploy, and maintain a software product.


High Level Design(HLD)

software_arch_style

High Level Design(HLD) is an initial step in the development of applications where the overall structure of a system is planned.

A diagram representing each design aspect is include in the HLD (which is based on business requirements and anticipated results):

  • It contains description of hardware, software interfaces, and also user interfaces;
  • It is also known as macro level/system, design;
  • It is created by solution architect;
  • The workflow of the user's typical process is detailed in the HLD, along with performance specifications.

APIs

api_arch_type


Dive In

system_design_concepts

Load Balancer

load_balancer

API Gateway

api_gateway

MQ

mq_vs_no_mq

DB

types_of_db

Caching

caching_arch_example

Storage

object_store_use_case

CDN

cdn_work

Circuit Breaker

TODO

Service Discovery

TODO

Scaling

TODO


Other

General Template

system_design_general_template

Data Pipeline

data_pipeline_overview

AI

TODO

Reduce Latency

latency_reduce

Latency vs Throughput

latency_vs_throughput

Version Strategies

common_versioning_strategies

Reference

[1] Ian Sommerville. SOFTWARE ENGINEERING . 9th Edition

[2] Cracking the System Design Interview Round

[3] Difference between High Level Design(HLD) and Low Level Design(LLD)

[4] Data Modeling in System Design

[5] What is Low Level Design or LLD?

[6] System Design Introduction - LLD & HLD

[7] 100+ Best System Design Resources for Interview and Learning

[8] EP56: System Design Blueprint: The Ultimate Guide

[9] Top Strategies to Reduce Latency

[10] EP160: Top 20 System Design Concepts You Should Know

[11] EP186: Latency vs. Throughput

[12] EP175: What is the SOLID Principle?

[13] What are some of the most popular versioning strategies?