The specification is a technical document which details aspects of the software design in as much detail as possible. The finished specification IS the functional requirement, meaning to achieve to desired project goals all the elements specified must be present in the finished build.
With the design and specification one can request a build estimate from any number of software houses. It's a little like an architects plans, just as one can ask property developers for a cost based on the architects blue-prints. Using this as a basis for their costs they can then return a realistic valuation of the budget required plus, a time-scale to complete.
This process is an in depth examination of your requirements. It also means, your investment is scrutinized thoroughly before any software is written so the finished system is fit for purpose.