I have a friend who is an aerospace engineer and who is now working in a research lab building robots for use in space. He and I were recently comparing engineering projects and software projects.
He said on engineering projects that are trying to advance the state of the art, they pick some concrete specification (spec) that is hard to meet. He said for space robots it is usually the single variable size - given the same robot tasks, time, money, and power requirements, build a robot x amount smaller than the last one. Sometimes it is power requirements, or a combination of the two.
They then spend a fair amount of time doing paper and pencil calculations and computer simulations to come up with a design. They convince themselves that the design meets the spec (using physics and mechanical engineering formulas). They then build the robot, making minor adjustments to the design as they go.
Hardware designers are more risk-averse because of the high cost of an incorrect chip design - lost money + long turn-around times for corrections. I was shocked to hear a DSP designer describe their process as: a) design the functionality, (b) write a simulator that completely emulates the chip, (c) test all the states, timing interactions, and data sets, and then (d) submit the design to a fab. If only software apps could do the same: run your app in a simulator that could emulate the OS: raise faults, vary thread switching, and so on.