Why: More than 50% of the software bugs (failures) occur from specifications with lesser amounts of failures from system design and the coding process and this is due to the lack of visibility in the software process along with problems from those specifying the requirements with problem roots in ambiguities, inconsistencies, incomplete statements, and lack of logical requirements. This requires that both inputs and outputs for software must be specified in greater detail than for mechanical, electrical, or system data to avoid the errors and conflicts.
When: "Clean room" software procedures are a technique for extracting details from the customers to insure the programmers and they are used up-front to reduce errors and wasted code. The acquiring of the data is tedious and roughly 80% of the software budget is spent get the details "right" before programming commences.
Where: Disciplined software specialist carefully work the plan up-front to reduce errors and testing time. Undisciplined, so called "neo-experts" want to see busyness in code writing up-front and thus their software reliability is worse from not having a firm foundation from which to work.
These definitions are written by H. Paul Barringer and are also posted on his web site at www.barringer1.com