The design phase of a software engineering project is arguably the most crucial. It ensures that the final product meets your users needs.
Software design is well worth the investment and should include people with expertise in this area such as Business Analysts, Software Architects, User Experience (UX) experts, and Solutions Architects. Using data and behavioural intelligence, they will get under the skin of your prospective users and anticipate the needs that your software should answer. Using Software Analysis techniques, they will begin to define how software can theoretically answer those needs.
The design process will define both Functional Requirements (FRs) and Non-Functional Requirements (NFRs) and sets the direction of development:
Functional requirements are expressed as product features, normally verbs: what the software needs to do. This might include the network and server capacity and functionality; actions that users can perform in the application; and how it works. Functional Requirements are mandatory and captured as Use Cases.
Non-functional requirements are usually expressed as qualities, normally adjectives: how the software needs to be. This might be portable, performable, maintainable or flexible. Non-functional requirements can be identified by the organisation or external entities, such as clients and suppliers.
At the end of this phase, you should have a Software Requirements Specification – a primary tool for design and a document that can be referred to throughout the project to ensure it remains true to the original business case. Software Engineers can use this to make an estimation of development time and budget required.