High-level system design versus low-level system design in software development
Software Development Life Cycle (SDLC) goes through different phases such as planning, requirements assessment, analysis, design, execution, documentation, testing, etc. Each phase is then divided into tasks with properly defined objectives and results.
Analysis and design are phases where the actual architecture, working model, and execution process for building a software product are defined.
Two crucial steps in these phases are high-level system design and low-level system design.
What is High Level System Design?
The High Level Design (HLD) provides a comprehensive overview of the software development process as well as the system architecture, applications, database management, and complete system flowchart and navigation. It is a plan that consolidates the different stages and modules, their objectives, the variable components, the results, the architecture and the timetable for developing the software. HLD translates a business plan into a software product or service.
Examples of HLD in software development include system architecture documents, application development flowcharts, etc.
What is low-level system design?
Low-Level Design (LLD) deals with the planning, coding, and execution of the various components, modules, and stages of the HLD, at an individual level. Each module in an HLD has a unique LLD document that provides full details of how the module will be coded, run, tested for quality, and integrated into the larger program. LLD provides action plans by deconstructing HLD components into working solutions.
Examples of LLD in software development include cart integration, security testing, user interface design, etc.
Differences Between HLD and LLD
HLD and LLD also serve different functions and purposes as high level programming languages and low level programming languages.
Macro vs micro architecture and design
HLD is a macro-level design that provides an overview of the software development process. It includes diagrams, flowcharts, navigational details, and other technical requirements that will form the core of the development process.
In addition to flowcharts, diagrams, navigational information, and technical requirements, LLD also has comprehensive information on the step-by-step execution of each component of the HLD. It deals with software development at the micro level.
Each component of an HLD has a unique LLD document.
HLD precedes the LLD phase. Once the HLD is in place and approved for execution, work on the individual LLDs can begin.
HLD starts after the planning and requirements stages are processed and has no other dependencies.
On the other hand, LLD must be executed in a particular order. Some modules must wait to be executed until others are finished.
LLD falls under the design phase of the SDLC, while HLD falls under the analysis phase of the SDLC.
- The purpose of a DHN is to list the functional aspects of the different modules as well as the final result.
- The purpose of an LLD is to detail the logic and execution of each module in an HLD.
Solution architects are responsible for creating an HLD document. It can have internal and external stakeholders such as the review team that gets to know the software metrics, the design team, customers, and managers.
LLD is managed by software developers, web administrators, security engineers, etc., who are part of the company or supplier teams. LLDs are generally reserved for internal stakeholders.
HLD documents are intended for managers, customers, and software development teams.
Software engineers, coders, testers, and developers working on the project are the target audience for LLD documents.
- The output of an HLD is a software product or service ready for delivery to the end user.
- The outcome of an LLD is the completion of a single module of the HLD, such as the coding or testing phases.
Understand software design documents
Software design documents describe the structural, functional, and logical aspects of developing a software product or service in addition to technical requirements and other implementation details. Whether the design deals with macro-level or micro-level execution, programmers and other stakeholders need to know and understand the scope and different stages of the software development process.