Part 5: High-Level Solution Design (HLD) Documents: What Is It and When Do You Need One

All large IT projects will require a High-Level Solution Design, also known as High-Level Design or HLD, an artifact instrumental to the Software Development Lifecycle analysis phase. The HLD gives the stakeholders a bird’s eye view of the system once the implementation is completed. At its core, the proposed solution architecture is designed to solve a business problem and generate customer value. Architecting a solution generates different concepts and selects an optimal candidate that satisfies budgetary and planning constraints while mitigating project risk. This article examines all aspects of a High-Level Design for a project. It will give software practitioners an idea of when, why, and how to create a valuable HLD. A few notes are due before we proceed:

Part 3: Agile Design Techniques for Creating Strong and Scalable Solutions

2. Pre-requisites

Secondo —

Terzo

The remainder of the articles can be accessed from the below:

Solution Design: First Principles

What is design, and why is it vital for software solutions?

Design of Modern IT Systems

Design process of modern IT systems and large software integration projects.

Agile Design: Solution design under conditions of uncertainty.

Solution Design Documents

Generating detailed solution design documents (SDD).

High-Level Solution Design Documents (HLD)

How to create a high-level system design document or HLD.

Component-Based Software Engineering (CBSE)

A discussion of CBSE and its development process.

3. FAQ

1. What is solution design?

Solution design is creating a comprehensive plan for developing software systems that satisfy specific requirements. This involves designing the software’s architecture, components, modules, interfaces, and data structures.

2. What are solution design principles in software?

Solution design principles in software include modularity, abstraction, separation of concerns, simplicity, scalability, and maintainability. These principles provide guidance for creating software systems that are easy to understand, extend, and modify, while also being adaptable to changing requirements over time.

3. What are the solution architecture principles?

Solution architecture principles are a set of rules and best practices that govern the design and development of software systems. These principles include flexibility, agility, security, reliability, and interoperability, ensuring that software systems are developed with the necessary quality attributes to meet the needs of the business and its users.

4. What should a solution design include?

A solution design should include a detailed description of the problem to be solved, the requirements of the solution, the proposed architecture and design, the software components and modules, the interfaces and data flows, the testing and deployment plan, and any other relevant information.

5. What should be in a solution design?

A solution design should include a clear understanding of the business problem, the goals and objectives of the solution, the user requirements, the technical requirements, the system architecture, the software modules and components, the data and interfaces, and the testing and deployment plan.

6. What is a solution design diagram?

A solution design diagram is a visual representation of the software system that shows the modules and components, their interactions and dependencies, the data flows, and the interfaces between the system and its environment. These diagrams help communicate the design to stakeholders and ensure a common understanding of the system.

7. What are the steps of solution design?

The steps of solution design include understanding the problem and requirements, defining the system architecture and design, identifying the modules and components of the system, specifying the interfaces and data flows, testing and validating the design, and deploying the solution.

8. How do you start a solution design?

To start a solution design, you should first understand the problem and its context, then identify the business goals and user requirements. After that, you should define the system architecture and design, identify the software modules and components, specify the interfaces and data flows, and test and validate the design before deployment.

9. What is the role of the solution designer?

The role of a solution designer is to work with stakeholders to understand the problem and requirements and to design and develop software solutions that meet those needs. This involves defining the system architecture and design, identifying the software modules and components, specifying the interfaces and data flows, testing and validating the design, and deploying the solution. The solution designer must ensure that the solution meets the business and technical requirements, is scalable and maintainable, and is delivered on time and within budget.

4. High-Level Design (HLD)

4.1 What Is a High-Level Design (HLD) Document

A High-Level Design (HLD) is a technical document for a (generally) non-technical audience. A High-level Design aims to provide all relevant stakeholders with a bird’s eye view of the solution architecture and design after implementation (or integration).

A breakdown of the content of a High-Level Design (HLD)

It’s mainly comprised of the following items:

4.2 Why We Need an HLD

The infographic below shows the main advantages of having a High-Level Design.

The value of a High-Level Design (HLD) includes providing stakeholders with a basis for acceptance, support for the Scope of Work, facilitating high-level estimations, and documenting the design.

A high-level design offers the following advantages:

Professionals espousing Agile values consider extensive documentation an effort-intensive, low-value activity and overhead that can be abandoned without risk. That may be true for small projects or standard, off-the-shelf offerings.

We examined Agile extensively in other articles and believe Agile is sometimes promoted as a context-free answer to a context-specific question. In other words, there are instances where it applies and others where it doesn’t.

The effort to produce an HLD can be easily justified by understanding when and why it’s used. Part 2 of this series provided a detailed exploration.

Part 2: Solution Design — How to Identify the Design Characteristics of Modern IT Systems

4.3 When Is a High-Level Design Required

An HLD is usually prepared at the early stages of a software project, typically during the Analysis phase of the SDLC.

The High-Level Design HLD is prepared during the Analysis phase of the SDLC.

The HLD is one of the documents accompanying the SoW in the Analysis phase. It clarifies the solution’s high-level concepts so stakeholders can decide whether the design satisfies their requirements.

4.4 Why Not Go Straight to an LLD

Preparing a Low-Level Design is a multi-iteration, customized, bespoke, and expensive process involving a broad audience of technical staff (business analysts, developers, testers, and DevOps engineers). This investment cannot be justified at the early stages of a project as the stakeholders have yet to sign off on the requirements, Statement of Work, and scope. Stakeholders could even ask for significant design changes or have alternative options considered before deciding on a specific path. A document highlighting the fundamental concepts of a proposed solution, allowing them to make an informed decision on the budget, schedule, and project risk, is required during this stage. The HLD, Functional Specifications and SOW should provide precisely this information.

From Abstract Concepts to Tangible Value: Solution Architecture in Modern IT Systems

4.5 High-Level Design (HLD) Document Ownership

The Solution Architect usually owns the high-level design (HLD) document. People might cringe when they hear the word “architect”. They imagine someone somehow detached from real-world implementation realities, but that does not have to be the case. So, what is a solution designer/architect?

Skilful solution architects thoroughly understand the industry, its requirements and regulations, existing platforms on the market, and most importantly, an intimate knowledge of the business model and the platforms deployed/supported within the business unit.

A solution architect is a highly skilled technical resource who is proficient in the following areas:

5. Architecture Documents and High-Level Design

Let’s briefly examine architecture and how its documents are relevant to High-Level Design.

5.1 What Is Solution Architecture

Solution architecture assembles technological assets (applications, products, servers) in an IT solution that satisfies specific business needs (functional requirements).

The subject has been explored from all angles in the series of instalments (of which this article is the fifth and final one), and, therefore, we invite the reader to look at Parts 1 and 2 for first principles and details.

Solution architecture is relevant to this discussion, and the high-level design captures its broad features.

From Abstract Concepts to Tangible Value: Solution Architecture in Modern IT Systems

5.2 What Is Software Architecture

Software architecture is an entirely different topic, which is not relevant here. First, here is a brief definition.

Martin Fowler

People have spent much time attempting to articulate a rigorous definition of architecture in software applications. In property development, architecture determines a resident’s user experience. This analogy, however, is of less value in software. For now, we use Martin Fowler’s definition, which is quite lucid (see the related link below for an in-depth analysis of the topic):

“Software architecture is those technical decisions that are both important and hard to change. This means it includes things like the choice of programming language, something architects sometimes gloss over or dismiss. Both aspects land squarely on the economics of software development.” — Martin Fowler

So, where does that leave us as regards the HLD? At this stage of the SDLC, the low-level, highly technical issues are not yet relevant. The SOW has not been signed, the scope is not yet locked, and developers are yet to be engaged.

Software Architecture and Design — Order, Complexity, and Chaos

6. Design Documents and Agile

Detailed documentation, top-down overarching design, and extensive planning are hallmarks of Waterfall, practices entirely left behind by purist Agile practitioners.

Careful planning and design vs. Agile and DevOps: Which is more efficient and suitable for our modern, fast-paced software industry? We are seeking a context-free solution to a context-sensitive question, and the answer is that it depends.

So, how does a high-level design (HLD) document fit into Agile frameworks? It doesn’t! Agile responds to the context-specific question of dealing with unarticulated needs and requirement volatility on a small scale. Agile performs poorly under the following circumstances:

In addition to all the advantages described in this article, planning and top-down design approaches for large projects involving many stakeholders require serious investment in design efforts, hence the need for high-level design and low-level design documents.

Waterfall, Agile, and DevOps: A Critique of Current Challenges

7. High vs Low-Level Design

An example of a network <a href=diagram is a fundamental component of a high-level design (HLD) document. This diagram shows all the network components involved and what interfaces facilitate their communications." width="1024" height="939" />

The below table provides a comparison between the two design documents.

8.2.4 Architectural Diagrams

If you’re familiar with the C4 model for architectural visualization (or M2LP), this corresponds to Level 1: System Context Diagrams (or Views in M2LP). Its job is to lay out the whole ecosystem of the IT solution. At this stage, the nitty-gritty details of the implementation are not required. What is needed is a mapping between the high-level design decisions and the solution’s essential requirements. Once you have completed the description of the major components, it’s time to focus on the application level. The next topic you must include is application-level details in the high-level design. An architectural diagram looks like this:

Logical decomposition in an architectural diagram of a computer system. Logical decompositions allow architects to define a solution or system architecture and validate its integrity at an arbitrary level.

Architectural diagrams and sections cover the following topics: Interface Design and Definition Document Template — A Short Guide for the Best Results

8.2.5 Data Flow and Use Cases

The data flow and use cases section documents all necessary interactions between the user and the system. Software solutions can be very complex and typically involve many stakeholders. List and define the user profiles interacting with the system, such as online users, system admins, or application admins. This section captures the user’s expectations of how they intend to operate the system. These expectations will drive the development of the necessary UI components, reports, and internal software functionality to make that happen. A typical business process flow diagram can look like this, with swimlanes delineating the boundaries between different business units:

User process flow in a high-level design describing a business use-case of an ATM transaction withdrawal. Use cases are perfect examples of what HLD should contain. They show the stakeholders or end users of the system and how they interact with it.

The processes must be organized for the system to work, primarily if they depend heavily on one another. Designing performing processes is a topic in itself, and there are rules and best practices that can help you achieve that; see production processes for a complete discussion. Ensure this section of your high-level design satisfies the following:

8.2.6 Example: Opening a Bank Account

Let’s say you have implemented a banking system that allows customers to enter any branch and open a bank account for personal or business use. The process usually involves multiple people within that branch. Everyone is responsible for a particular step in the application’s approval process.

8.3 Download Template

Download a basic High-Level Design (HLD) template using the link below.

9. Systems Modeling Language

9.1 The Need for a Specialized Language

Describing and documenting IT system design has historically used natural language and visualizations. While both are powerful and rich, allowing the author much room for creativity and expression, they have considerable drawbacks.

These limitations are more pronounced when systems increase in complexity, with many layers of abstraction requiring multiple decomposition levels.

Below is a list of these problems:

9.2 Object-Process Methodology (OPM)

Thus, the need for a design modelling language arose. The anticipated language would address all the above issues at the price of confinement to a specific set of rules.

Any universal and practical language must adhere to specific rules governing the following areas:

Because objects can mean different things in different contexts, a special branch of philosophy called ontology engineering has emerged. Its job is to overcome the inter-domain problem of associating different meanings with different terms.

Object-Process Methodology (OPM) devices its constituents into Entities, Links of various types, events, Objects, States, and Processes.

The Unified Modeling Language (UML) is one implementation of the above rules. However, it was not good enough and had to be replaced.

A universal, powerful, and domain-agnostic system modelling language was important enough to merit its ISO standard, the ISO/PAS 19450:2015.

This ISO standard is called Object-Process Methodology (OPM) and defines the following concepts:

While the OPM model may seem cumbersome and nonintuitive at first, it is very powerful once you get used to it.

In general, whether using OPM or something else, it’s helpful to remember the following when writing technical documentation:

10. Final Words

The value of documentation and design has been downplayed significantly with Agile practices, although the advent of powerful content creation tools like Confluence has started to reverse the tide.

Technical documentation, architecture, and design, especially for large system integration projects, remain integral parts of the delivery of large software projects.

Doing it right can make an enormous difference in the quality of your deliveries, reflecting on the organisation’s image and value proposition.

Finding the right balance between quantity and productivity can take time, but it will be worth it. It also requires ingenuity to focus on critical and subtle information only and present it in a way that facilitates quick reading and assimilation.

A simple trick for managing documentation activities is maintaining templates that vary with project size; small projects use small templates, and large projects use large templates.

Collaboration, clarity, and stakeholder management keep everybody happy. The team’s morale remains high, and the customer remains satisfied and willing to do more business with you.

Those objectives and the best practices we described allow Operational Excellence in Software Development to become tangible: a safe and healthy environment for your people and a prosperous business at the service of the community.