Friday, November 13, 2015

How to write an effective Design by using HLD and LLD in SDLC

In this post i am sharing details about HLD and LLD and what is the effective Design Documentation in SDLC.

What is Design ?

Before we get into the details about writing effective design, it is important that we have the same understanding about what the design is that we are referring to here.
Here we are essentially talking about  HLDs and LLDs for software development which is an essential part of software development and should ideally be available before the start of development face of the project.

 What is an HLD?

The HLD documentation presents the structure of the system, such as the database architecture, application architecture (layers), application flow (Navigation), and technology architecture.The purpose of this High Level Design (HLD) Document is to add the necessary detail to the current project description to represent a suitable model for coding. This document isalso intended to help detect contradictions prior to coding, and can be used as a referencemanual for how the modules interact at a high level.

What HLD will do:

  • present all of the design aspects and define them in detail
  • describe the user interface being implemented
  • describe the hardware and software interfaces
  • describe the performance requirements
  • include design features and the architecture of the project 


 

 

                      
What is LLD?

  •  Is at the lowest level of abstraction before the code itself and clearly define the methods, their parameters return types and interaction with dependencies
  • Is used as program specification by the developers to develop the code for the subsystem that the LLD is written for
  • May contain separate low level ER diagram representing the tables participating in the LLD
  • In most cases uses HLD as the input criteria
  • Documents LLDs decisions stating the reason for the design decision. For example using inner class rather than separate class

Why we need HLD?

  • HLD is responsible for establishing vocabulary for the project that helps in project related communication across designers and developers
  • It defines overall architecture and subsystems of the application and fulfills all functional and well non-functional requirements which is most important aspect from customer’s point of view
  • It bridges the gap between functional and technical views of the system and brings the two view points together to discuss and close issues that are important for the success of the project.
  • Creates lower level abstractions of the requirements for the low level designers to work on by breaking up the requirements into deliverable UCs and features. 
  •  However, the abstraction level is not low enough to hand it over to developer for coding based on it and that’s why we need LLD.

why we need LLD?

  • LLD provides further lower level abstractions of the requirements and can be handed over to developers for coding programs based on that. So LLD is the input for the development phase of the project
  • Providing program specifications to the developers and sparing them for doing what they are best at (coding) rather than confusing them with very high level requirements from requirement documents

What is an effective design?


It is equally important to for the delivery management to know if the design is effective as it is to know if it is not. It is management’s responsibility to not only improve the inefficiencies but also to encourage and carry forward and continue with the best practices and good design methodologies that are being followed.


Characteristics of an effective HLD

  1. It is at just right level of abstraction so that it makes sense for all stake holders of the project including developers, designers and business analysts. 
  2. It should speak for and to all stake holders of the projectIt should clearly state all the functional and nonfunctional requirements of the project along with providing high level solutions for achieving them
  3. It should be able justify all aspects of design decisions taken in the HLD
  4. LLDs built on the effective HLD are effective as well and so is the code built on those LLDs.

Characteristics of an effective LLD

  1. It meets the system requirements in a meaningful way and explains the thought process that has gone into for arriving to the design decisions taken in the design
  2. It is at the lowest level of abstraction and provides sufficient clarity for the developer to start coding right away without having to wait for detailed one to one sessions for starting coding for a LLD

Root causes of design problems with HLD:

                

  1. Lack of technical and business understanding for HLD
  2. Technology dominates business
  3. Jazzy UML

Problems with LLD

  1. Lack of willingness to do LLD before coding
  2. Experimenting with new concepts and patterns
  3. Less documented information and more Diagrams
  4. One template doesn’t fit all projects

1 comment:

High Paying Jobs after Learning Python

Everyone knows Python is one of the most demand Programming Language. It is a computer programming language to build web applications and sc...