The functional specification should be written by a person who is isolatedfrom the actual development of the software, so as to add a degree ofimpartiality and independent thinking to the process. Obviously, this personneeds to have a wide range of skills: an understanding of how users think; athorough knowledge of the capabilities of various programming languages andtools; the experience and creativity to break down a large and complexproject into smaller, discrete modules and data structures; and, mostimportantly, the ability to communicate all of the above in a clear andconcise fashion via a formal document.
This, you will agree, encompasses a fairly wide (and hard-to-find) range oftalents, which may require years of experience to develop. But talent isjust one of the things a functional spec writer needs...time is the other.
Contrary to what you might think, creating a functional specification is afairly time-consuming job. As a functional spec writer, you need to spend afair amount of time understanding the requirements and business vision foran application, discussing design and implementation with the developmentteam, and mapping the two together to ensure that the final deliverablesatisfies the customer's needs...all before you can even begin to thinkabout structuring this information into a formal document. This process is,obviously, not something that can be accomplished in a matter of hours;depending on the complexity of the application, creating a detailedfunctional specification can consume days or even weeks.
In case you're wondering whether the process is really worth the time, theanswer is a resounding yes. The consequent benefits of the process - astreamlined development process, better risk and change management, greaterclarity in the development team and fewer course corrections - all add up toa substantial cost and time benefit in the final analysis.