I recommend to students that they develop both hardware and software incrementally. A.s.a. H. software, for example, was developed incrementally and in modules*: inputing and saving cases, normalizing, comparing to past cases,** finding match(s)**, making any predictions, updating matching old cases and adding new cases, making extrapolations** and interpolations, etc., etc. Slowly adding functionality. For hardware like mobile robots I would develop chassis, arms, grippers, sensors, navigation, etc. as individual prototypes, get them functioning, and then seek to combine and coordinate them.
* each tested individually (I favor modularity whenever possible but I do not favor object oriented programming.)
** individually trying out and comparing various algorithms