It’s tempting to say a functional specification is a document that … blah blah blah requirements, scenarios, glossary. design details, etc. It’s tempting to say that because it is true – true but it misses the bigger picture.
A spec, yes, physically is an artifact – a document. You’ve seen quite a few of them, perhaps. But, what a spec really is something different. It is a representation of the binding agreement between program management, developers, testers, designers, product management, etc. It is the statement made by the team as a whole: “This is what we agree on; what we believe the feature is.” The spec is an outcome of a long series of collaborative events between many parties. It represents a deliberate, intentional decision by the participants that clearly defines what they are building and why.
Do you need to write a spec? Here’s a great way to fail at it. Go lock yourself in room. Come up with a great idea and write it down to whatever level of detail you want. Then tell your team: “this is what we are building.” That will go over really well.