Gustavo Duarte makes a good observation about engineering and software. He compares some information in Richard Fenyman's report on the Challenger Disaster and software design. The most interesting parts are how the avioncs where designed.
The software is checked very carefully in a bottom-up fashion. First, each new line of code is checked, then sections of code or
modules with special functions are verified. The scope is increased step by step
until the new changes are incorporated into a complete system and
checked. This complete output is considered the final product, newly
released. But completely independently there is an independent
verification group, that takes an adversary attitude to the software development group, and tests and verifies
the software as if it were a customer of the delivered product.
The testing step is the most important here.Each small part is tested as it is built to ensure it is correct before moving on to the next part. Software projects can learn from this. It is an interesting data point considering the quality level that is required for the Space Shuttle. All projects should work towards a goal of this level of quality. Testing at each phase can help improve quality and inform the design as the tests reveal shortcomings and expose new ways of thinking about a problem.