Some upfront planning is required but, there is an overall problem with comparing software to building construction.
If you make a blueprint and give it to 2 construction companies to build the building, you'll end up with 2 very similar buildings.
If you give a software spec to 2 separate software companies you'll get 2 completely different programs.
You can't create a blueprint/spec that is sufficiently detailed so that 2 different companies/teams will build essential the same software.
A blueprint/spec that detailed would be the code itself.
The closest analog to software would be designing processes, or maybe designing a factory or assembly line. And the analog to the code in that situation would be the factory or assembly line itself.