In software engineering, building a complex system is like constructing a city.
You wouldn't start by laying bricks for a single house without a city plan. You first need to decide where the residential areas, commercial zones, power grids, and roads will go.
This city plan is your High-Level Design (HLD).
Once the city plan is approved, an architect takes a single plot of land in a residential zone and designs the detailed blueprint for a house specifying the number of rooms, the plumbing, the electrical wiring, and the materials to be used.
This detailed house blueprint is your Low-Level Design (LLD).
Both are essential, but they operate at different levels of abstraction and serve different purposes.
In this chapter, we will take a deeper look at their differences.
High-Level Design (HLD) defines the architecture of the system.
It answers the question:
“How should the system be structured, and how will its major components interact?”
The focus here is on the what, not the how.
It answers questions like:
The output of HLD is a set of architectural diagrams, data flow diagrams, and technology choices that define the system's skeleton.
Passenger Service, Driver Service, Matching Service, Billing Service.Matching Service uses a message queue to broadcast ride requests. Passenger and Driver services communicate via WebSockets for real-time location updates.LLD zooms in on a single component or module and translates the abstract architectural concepts into concrete, implementable details that developers can code directly.
It’s where you decide the internal structure of a service — the classes, methods, data models, design patterns, and relationships.
While HLD answers “what exists and how components connect,”LLD answers “how each component actually works.”
For a single module, it answers questions like:
Billing Service from the Ride-Hailing AppRide, Invoice, PaymentStrategy, CreditCardPayment, WalletPayment.IPaymentStrategy with a method processPayment(amount). CreditCardPayment and WalletPayment would implement this interface.Invoice class "has-a" Ride object (Composition).| Aspect | High-Level Design (HLD) | Low-Level Design (LLD) | 
|---|---|---|
| Focus | What components exist | How each component is built | 
| Audience | Architects, stakeholders | Engineers, developers | 
| Abstraction | System-level | Module/class-level | 
| Artifacts | System architecture diagrams, tech stack choices | Class diagrams, interaction diagrams, method definitions | 
| Example | "We’ll use a microservices architecture with services for users, orders, and payments" | "The  
 | 
Now that you understand what Low-Level Design (LLD) is and how it connects to High-Level Design (HLD), it’s time to learn the actual building blocks that form the foundation of LLD.
In the next section, we’ll dive deep into the core OOP fundamentals that every engineer must master before designing real-world systems.