SE: High Level Design

Good software systems succeed not because of clever code, but because of clear design boundaries, strong principles, and appropriate patterns applied at the right level.

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