The two most frequently asked questions in I.T.:
1) How long will it take?
2) How much will it cost?
Jim McCarthy has it right by saying in essence, "anyone who says they knows in advance how long a software project will take is lying."
A good specification makes these easier to answer, but most outsourced I.T. projects, and even a few developed internally, do not allocate separate budgets for specification and implementation. Too often the process is to put out a Request-for-Proposals (RFP) with a vague description of the project goals, expecting complete specs in response. No wonder small I.T. shops have such a hard time making ends meet, most spend the bulk of their time architecting free specs.
This causes a massive amount of friction in the industry. A reason that large I.T. shops charge (what seem to be) disproportionately high amounts is that they have CFOs who look out for the bottom line. And the bottom line is that the cost of writing "free" specs must be recovered by the services that are billable.
Planning and Implementation are Separate Projects
Specification and coding are two separate projects that should be contracted separately. The specification should be as loosely coupled from the implementers as possible; meaning that a good spec should be possible to execute effectively by any reasonably skilled programmer or team.
The construction industry has it right, the architect is not the builder. The architect works with the builder, but they may be entirely different companies. When this happens in I.T. we'll have a mature industry.