So it is not exactly like you've said:
> You can't design it first and then go and build it.
You can design, but you cannot build.
A process of building by a design can be paralleled with deploying software -- suddenly there is a hairy real world, not all the hair was considered at the design phase, and either we hack around existing software (i.e. design plans), or call a programmer to redesign.