# Topic covered
* When should you start learning System Design?
* High-Level Design (HLD)
* Low-Level Design (LLD)
* Differences Between HLD and LLD
* Macro vs. Micro Architecture and Design
* LLD and HLD Roadmap
The Software Development Life Cycle (SDLC
) goes through various phases like requirements analysis, feasibility study,
design, coding, testing, etc.
Each phase is further divided into tasks
with properly defined objectives and results.
Design Analysis
is the phase where the actual architecture, working model, and execution process of building a
software product is laid down.
Two crucial steps in these phases are High-Level System Design
and Low-Level System Design
.
3.1 When should you start learning System Design?
3.2 High-Level Design (HLD)
High-Level Design (HLD) provides a comprehensive overview
of the software development process along with
the system architecture, applications, database management, and complete flowchart of the system and navigation.
It’s a blueprint
that consolidates the various steps and modules, their objectives, variable components,
results, architecture, and timeline to develop the software. HLD translates a business plan into a software product or service.
3.3 Low-Level Design (LLD)
Low-Level Design (LLD) deals with the planning, coding, and execution
of the various components, modules,
and steps in the HLD, at an individual level.
Each module in an HLD has a unique LLD document that provides comprehensive details about how the module will be coded,
executed, tested
for quality, and integrated
into the larger program.
LLD provides actionable plans by deconstructing HLD components into working solutions.
3.4 Differences Between HLD and LLD
HLD
- Functional and Non-functional requirement
- Costing Limitation
- Trade OFF
- Scalability
- Performance
- Availability
- Consistency
LLD
- Machine coding interviews
- Object Oriented Interviews
- UML Diagram, Class Diagram, Data Models
- SOLID Principles
Macro vs. Micro Architecture and Design
HLD is a macro-level design
that provides a bird’s eye view
of the software development process.
It includes diagrams, flowcharts, navigational details, and other technical requirements that will form the crux of the development process.
In addition to flowcharts, diagrams, navigational information, and technical requirements, LLD
also has comprehensive
information about the step-by-step execution
of each component of the HLD. It deals with software development at the micro-level
.
Every component of an HLD has a unique LLD document.
Development Chronology
HLD precedes the LLD phase
. Once the HLD is in place and approved for execution, work on the individual LLDs can begin.
HLD begins once the planning and requirements stages are dealt with and has no other dependencies.
On the other hand, LLD needs to be executed in a particular order. Some modules must await execution until others have been completed.
LLD falls under the Design phase
of the SDLC, whereas the HLD falls under the Analysis
phase of the SDLC.
Target Audience
HLD documents have the target audience of managers, clients, and software development teams.
Software engineers, coders, testers, and developers working on the project are the target audience for LLD documents.
3.5 LLD and HLD Roadmap
-
Software Design and Architecture Roadmap: /tags/software-design-roadmap/
-
UML Diagram: /tags/uml-diagram/
-
Software Design and Architecture: /tags/software-design/
-
System Design: /tags/system-design/
# 4. System Design
### WEEK 1
* System Design Introduction
* Client - Server Architecture
* Monolith & Microservices
* gRPC
* Network Protocols
* Proxies
### WEEK 2
* Scalability
* Horizontal, Vertical Scaling
* Load Balancers
* Caching
* Asynchronism
* Message/Task Queues
* Publisher subscribe model
* Message Broker
* PubSub (Kafka, RabbitMQ)
### WEEK 3
* Performance
* Latency, Throughput, Bandwidth, Response Time
* Consistency, Availability, and Partition Tolerance (CAP)
* CAP Theorem
* Failure & Fault Tolerance
### WEEK 4
* Memory & Storage Systems
* RAM, ROM, HDD, SSD
* Databases Types
* Database Replication
* Synchronous replication
* Asynchronous replication
* Single-Master Replication
* Multi-Master Replication
* RAID - Redundant Array of Independent Disks
### WEEK 5
* Database partitioning
* Vertical partitioning (aka Normalisation)
* Horizontal partitioning (aka Database Sharding)
* Hashing
* Consistent hashing
* Specialised Storage Paradigms
* DB Migration
* Indexing
* Service Routing
* Peer to Peer
### WEEK 4
* Capacity Estimation
* Configuration
* Rate Limiting
* Paging & Filtering
* Resiliency
* Logging & Monitoring
* API Design
* Security
### WEEK 5
* End to End example
* Interview Prep Tips
https://github.com/karanpratapsingh/system-design
https://github.com/donnemartin/system-design-primer
Form LLD from HLD
Books
.
# Books
1. DESIGNING DATA INTENSIVE APPLICATIONS
2. System Design Interview – An insider's guide
3. Solutions Architect's Handbook Kick-start your solutions architect career
4. FUNDAMENTALS OF SOFTWARE ARCHITECTURE AN ENGINEERING APPROACH
5. Operating Systems: Three Easy Pieces