- Designing software in minute detail beforehand is generally neither necessary nor possible.
- It is impossible for someone to be a capable software "architect" unless they are an experienced software "builder".
- It is impossible for someone to be a capable software "builder" unless they are also capable of designing it.
- Software can be reused once built, and this matters while building it.
- Software is rarely "finished", but continues to grow over time.
- Software can be used by an unbounded number of users at the same time.
- Software can be reproduced infinitely.
- Software can be forked and incrementally changed.
- Anyone can design and build their own software, given some talent and a computer.
- The business motivations for software development are fluid, and often change rapidly over the course of a single project.
I could go on and on. As with many (most?) metaphors, it offers some superficial familiarity, but is ultimately harmful to your understanding.
Software is software. Understand it by reading about software and writing software.