Software Design: It is the first step in moving from problem domain to solution domain. The purpose of the design phase is to plan a solution of the problem specified by the requirements document. Starting with what is needed, design takes towards how to satisfy the needs.

The design of a system is perhaps the most critical factor affecting the quality of the software. It has a major impact on the project during later phases, particularly during testing and maintenance. The output of this phase is the design document. This documents is similar to a blueprint or plan for the solution and is used later during implementation, testing and maintenance.

It is further of two types:

1. System Design or Top level Design: It identifies the various modules that should be in the system specifications of the modules and interconnections between the various modules. At the end of system design all the major data structures, file formats, output formats, and the major modules in the system and their specifications are decided.

2. Detailed Design: It identifies the internal logic of the various modules. During this phase further details data structures and algorithmic design of each of the modules is specified. Once the design is complete, most of the major decisions about the system have been made. However, many of the details about coding the designs, which often depend on the programming language chosen, are not specified during design.