What is a functional design?
A functional design is the high-level road map of what you want to develop, not how you will develop it. There are two primary elements to a functional design:
|Functions||Description of the interaction between the its actors (human and system).|
|Data||Description of the state of the system.|
Who benefits from a functional design?
A functional design is intended for the following team members.
|Developers||They know what to build.|
|Testers||They know what tests to run.|
|Stakeholders||Understand scope of development and give approval.|
Components of a functional design
We recommend that visual diagrams play a major role in your functional design. There are two primary diagram types, UML and informal. UML diagrams have the benefit of standardized notation, but, not everyone understands that notation. Informal diagrams have the benefit of being easily understood, but lack the formality. The most important aspect of diagrams is that they should clarify a plan, not confuse people.
Level of Detail
The level of detail for each functional design might vary. Remember, the goal of the functional design is to create an easily understood visual representation of what you want to develop. Keep in mind important factors such as collaboration, organizational culture, team location, and so on.
Include full details for all externally-visible system behavior, including behavior through system interfaces.
Do not include internal system details.
Keep these in mind when determining the level of detail to include:
- Not enough detail, developers might make incorrect assumptions.
- Not enough detail, testers might not have enough information for sufficient testing.
- Too much detail, your design takes too long to create.
- Too much detail, developers and testers work according to the specification, instead of challenging its deficiencies.