Software design is the process of transforming user requirements in an appropriate way, which helps the programmer to code and implement the software.

To assess user needs, a Software Requirements Specification (SRS) document is create, while for coding and implementation, more specific and detailed software requirements are need. The output of this process can be use directly in the implementation of programming languages.

Software design is the first step in the Software Design Lifecycle (SDLC), which shifts focus from the problem domain to the solution domain. Try to specify how to meet the requirements mentioned in SRS.

Software Design Levels

The design of the software produces three levels of results:

Architectural Design: Architectural Design is the highest abstract version of the system. Identifies software as a system with many components that interact with each other. At this level, the designers have the idea of ​​the proposed solution area.

High-level design: High-level design divides the concept of “single-component, multi-entity” architectural design into a less abstract view of subsystems and modules and describes their interaction with each other. The high-level design focuses on how the system and all of its components can be implement as modules. Recognize the modular structure of each subsystem and its relationships and interactions with each other.

Detailed Design – Detailed Design deals with the implementation of what looks like a system and its subsystems in the previous two designs. It is more detailed on the modules and their implementations. Defines the logical structure of each module and its interfaces to communicate with other modules.


Modularization is a technique for dividing a software system into several discrete and independent modules, which are suppose to be able to perform tasks independently. These modules can function as base versions for all software. Designers tend to design modules so that they can be run and/or compile separately and independently.

Modular design unintentionally follows the rules of “divide and conquer” troubleshooting strategy, as there are many other benefits associate with modular software design.

Advantage of modularization:

  • Smaller components are easier to maintain
  • The program can be divid according to functional aspects
  • The desire level of abstraction can be built into the programs.
  • Highly cohesive components can be reuse
  • Simultaneous execution may be possible
  • Desired from a safety point of view


Previously, all software had to run sequentially. And also, by sequential execution, we mean that code instruction will be execute one after the other, which means that only one part of the program is activate at any given time. Let’s say software has multiple modules, then only one of all modules can be foun active at any time of execution.

In software design, competition is enforce by dividing the software into several independent execution units, else such as modules, and running them in parallel. In other words, the competition gives the software the ability to run multiple pieces of code in parallel.

Therefore, these modules must be recognize by programs and designers, which can be done in parallel execution.

Coupling And Cohesion

When software is modularizing, its tasks are divide into several modules according to certain characteristics. As we all know, modules are a set of instructions that are combine to accomplish certain tasks. However, they have also seen it as a single entity but can refer to each other to work together. There are measures by which the quality of a module design and its interaction between them can be measure.


Cohesion is a measure that defines the degree of interdependence within the elements of a module. The higher the cohesion, the better the design of the program.

Also Read: What Is Cybersecurity? And Everything you need to know.