You can waste time over specifying the design, but an under specified design can be
expensive and error-prone. The complete specification of a software design requires
a great deal of information: defining classes and their relationships, identifying
class interactions, defining required data, specifying system states and
transition, and specifying inputs and outputs. The complete and unambiguous
definition of all of this material generally requires significantly more documentation
than the source listing of the finished program. The source code must include
all of the design decisions but in very terse form. A program’s uncommented
source code is very dense, has little redundancy, and precisely defines the product’s
behavior. With the possible exception of the object code, the source code is
the most compact way to completely define a program’s design. Unfortunately,
unless the source code is extensively commented, it is almost unintelligible to anyone
but the designers and implementers, and even they can have trouble deciphering it.
The key question is, how much detail must the designers provide to the implementers
And other design users?
A fully defined design is expensive, and much of its content is not needed by
Experienced implementers. In addition, particularly if you are doth the designer
And the implementer, overspecification will waste time. To be most efficient,
make an explicit design-content trade-off. This requires a specification of
design completeness. Such a specification will help you to produce a quality
design and will guide your design reviews. As long as you meet the design exit criteria,
you can use whatever design methods and notations you prefer.