Software Design Document (SDD)

Software design is a process by which the software requirements are translated into a representation of software components, interfaces, and data necessary for the implementation phase. The SDD describes how the software system will be structured to satisfy the requirements.

The SDD is the primary reference for code development and, therefore, it must contain all the information required by a programmer to write the code. On the other hand, the SDD must be free of implementation detail.

An SDD is not a “stream of consciousness” (disorganized collection of the designer’s thoughts) nor is it a “stream of execution” (describing the order in which things will happen when it runs). The SDD should not suffer from:

Software documentation is disliked by almost everyone.

But what happens without documentation? When people leave, knowledge leaves with them (Dilbert):

How much paper is enough?

The title of this section comes from Better Embedded System Software, by Philip Koopman, Carnegie Mellon University (2010). He writes that every piece of paper should be forced to earn its keep as a useful document. We do not want to generate useless paper.

Writing a design document after the work is done is less likely to produce a useful document. The point of a design document is to help with the design process itself. So what should be in the design document?

Risks of not having a good design documentation

Occasionally, software can be created by jumping straight to coding. However, the larger the project, the bigger the risks.

The IEEE also has a template for a Software Design Document (SDD). It is provided here for your information, and is based on IEEE 1016-1998. However, you are encouraged to use the template above for 3311 Design Documentation.