Software Development Lifecycle (SDLC) - Design Phase
Tags: webdev, programming, career, learning
Published: 2023-08-14 16:02:31

The Design phase is the next phase in the [Software Development Life Cycle (SDLC)](/sdlc/sdlc-overview 'Software Development Life Cycle (SDLC)'). Now that you know the requirements we analyzed in our [requirement analysis](/sdlc/requirement-analysis 'SDLC - Requirement Analysis Phase') phase, you will start thinking about the design. You will ask the question of how to achieve it. So, let's see what activities you perform in the design phase.


## Table of Contents

- [Turn the Requirements into System Design](#turn-the-requirements-into-system-design)
- [High-Level Design](#high-level-design)
- [Functional Design](#functional-design)
  - [Scope](#scope)
  - [Impacted Modules](#impacted-modules)
  - [Integration](#integration)
- [Technical Details](#techincal-details)
  - [Risk](#risk)
  - [Technologies](#technologies)
  - [Capability](#capability)
  - [Constraints](#constraints)
  - [Time & Budget](#time-budget)
- [Conclusion](#conclusion)
- [Next phase in SDLC](#next-phase-in-sdlc)

## Turn the Requirements into System Design

<a name="system-design"></a>

If you have an idea of creating a calculator, there are many ways of making this calculator. Even Google provides you with a calculator in the search itself. So, how will you create the system design for your calculator? Will it be based on Android or iOS, or both? The Design phase is all about how you will achieve the goal set for yourself.

## High-Level Design

<a name="high-level-design"></a>

Once you start designing anything, you don't immediately jump into the detailing. You start with a high-level design.

## Functional Design

<a name="functional-design"></a>

Once you have a high-level design, you then move on to see how functional it is. How functionally feasible is it? For example, if you were designing your calculator application, you would want to ensure that all basic computations, like addition, subtraction, multiplication, and division, are easy to perform. You need to make sure of your system's functional capabilities to design a good system. We can drill down the functional design into three categories.

### Scope

<a name="scope"></a>

You identified the scope in the requirement phase too. Now, you get deeper into the scope of your application. Analyzing the high-level and functional design gives you a much better knowledge of the scope of your system.

### Impacted Modules

<a name="impacted-modules"></a>

Some people think that this phase is only for existing systems. But, I like to differ with them because every software is built out of chunks of functionalities, or we call them modules. The biggest problems arise when these modules work perfectly fine independently but fall apart when put together. Hence, for any software, it is crucial to know the impacted modules and the level of impact on each module.

### Integration

<a name="integration"></a>

We touched upon this point while talking about the impacted modules. If there are modules, they need to interact with each other. If they work perfectly fine independently but fall apart when put together, that is a problem. You need to think, discuss, and consider the integration of various modules or components in your software.

## Technical Details

<a name="technical-details"></a>

Once you cover all the functional components of the software, you move on to the technical details. Every piece of software needs to go through a technical analysis. Here is where you will decide which software, tools, and products you will use and how they will work together. Some items to consider in this phase are:

## Risk

<a name="risk"></a>

What is the risk of using a product or tool vs. not using the tool? You need to evaluate the risk during every software development life cycle phase. You will always have more than one approach to doing a certain thing or solving a particular problem. For every decision you make, from tool selection to organization, you need to evaluate the risks of each option.

### Technologies

<a name="technologies"></a>

What technical language will you use, Java, JavaScript, Ruby, Python, etc.? The reason is there are plenty of options, and which works best for your requirements needs to be evaluated and picked.

### Capability

<a name="capability"></a>

Is the tool/product you picked able to perform the necessary functionality? Will there be a performance issue? A case study is usually done around the capability or proof of concept before you pick technologies.

### Constraints

<a name="constraints"></a>

You need to understand a system's or product's constraints or whether there are any known constraints.

### Time & Budget

<a name="time-budget"></a>

Ultimately, it always boils down to the time, resources, and money you will spend on implementing the solution. In every phase of the software development life cycle, you must closely monitor the time and budget aspects. How soon do you want the solution? How many individuals (resources) will you need based on your system design? What is the cost/budget for the resources you picked?

## Conclusion

<a name="conclusion"></a>

The design phase in the [Software Development Life Cycle (SDLC)](/sdlc/sdlc-overview 'Software Development Life Cycle (SDLC)') is essential to ensure that the final product meets the requirements and is both functionally and technically sound. It involves a detailed analysis of the high-level design, functional aspects, scope, impacted modules, integration, and technical details, including risk, technologies, capability, and constraints. Finally, time and budget parameters must be considered, as they play a significant role in the project's overall success.

By carefully planning and analyzing each aspect of the design phase, you can set your project up for success and create a software solution that meets the needs of the users and the business objectives. Remember to continually assess your choices and decisions throughout the process to ensure your design remains on track and aligns with your goals.

## The Next phase in the SDLC

<a name="next-phase-in-sdlc"></a>

Once your design is completed, you will move to the next phase in your Software development lifecycle and that is the [development Phase](/sdlc/development 'Development Phase')