I agree with that.
I don't necessarily agree with that (the "must" part). It depends on where the complexity / newness / risk is. If the newness is in the "glue" binding the smallest peices together, then it's sometimes possible to emulate/simulate the smallest posces pissible (as typed) and concentrate on getting the glue right.
I think this is just one valid approach (bottom-up implementation). It's not the only valid one.
Where an existing product-line is being replaced with the newly designed product, it's possible to use the existing, working product as "the complete system" and replace components of it as those components get re-designed and re-implemented.
In software, you can start off implementation at a high-level of abstraction and just "stub-out" the detail until you're ready to deal with it. When I start implementing software, I don't (necessarily) start implementing a function... I first figure out what modules / classes / components need to be there and instantiate them. Then I figure out what external interfaces those classes need to present to each other. Etc. etc.
Ciao,
Peter K.