Getting it right is what we are all supposed to do. It's not quite as easy as that however. Often the problem is that we really don't know what ''right'' is in a given situation. So we either ''guess'' (which is generally a bad strategy) or we ''try it out'' which is called prototyping. Fred Brookes says that we should plan to make two because we will have to throw one away. In my hardware development arena (I manage both hardware and software) we have a ''three board turn'' philosophy. The first board turn is a prototype board which lets us test the sub-circuits in an architecture similar to the final architecture. The second board is a clean-up of the first that corrects the problems, often inadvertant in the sub-circuit designs and on the second board we include some contingency circuit layout -- that is things we don't expect to populate but are there to ''fix'' problems if they occur. Finally, the third turn is expected to be the first production turn (that is with small systems) with larger systems it would be the system integration turn and we'd expect to go to production on the fourth turn (scale effect). Software might consider a similar notion of builds (I know that when I worked for the Navy we characterized our software development in ''builds'' and the releases in ''blocks'' .) NASA has defined six levels in their system engineering standards documents. --RaySchneider