You can waste time overspecifying the design, but an underspecified design can be expensive and error-phone. 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 transitions, and specifying inputs and outputs. The complete and unambiguous definition of all of this material generally requires significantly more documentation than 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 designers.