Programmers don't build, they design. It's more akind to what building architects do in a cad program. They go through many iterations and changing specs.
When programmers are designing it is more likely to be in the early stages when the program is still small. Often once the program gets bigger, the effort devolves to simply building. They might feel like the design is wrong, but the inertia by then is against the design evolving.
What we need is a practical way to keep the design and implementation synchronized and yet decoupled