High level Design (HLD)
High-Level Design describes the system as a whole, without focusing on code details.
It defines the system modules, API and components and how it interfaces.
Define the system timing constraints and action behaviour that can be visualised using layered architecture and sequence diagrams.
It answers questions like:
- What are the major components?
- How do they communicate?
- What technologies are used?
- Where are the system boundaries?
HLD operates at the architectural level:
- System components / services
- Data flow between components
- External integrations
- Deployment topology
- Non-functional requirements
It has 2 types:
- Static Design/Architecture (Layered Architecture)
- Dynamic Design (Sequence Diagrams): show the interactions
Typical HLD Artifacts
- Architecture diagrams
- Component diagrams
- Data flow diagrams
- Technology stack decisions
- API boundaries
Design Principles at HLD
At HLD, we apply architectural principles, not code rules.
Separation of Concerns
- UI does not handle business logic
- Backend does not know UI details
- Devices do not know user accounts
Loose Coupling
- Services communicate via APIs
- Replace one service without breaking others
High Cohesion
- Each component has one clear responsibility
Scalability & Fault Isolation
- One service crashing doesn’t bring the whole system down
- Not a single point of failure