Are there standard practices when writing a spec for a software development project? Is there a specific format to follow? Also, does the developer or the client write this up? If the dev, is this billable?
The great thing about standards is that there are so many to choose from.
The overall requirements
1. Defining Models
The best format is UML, which include representation of key elements of the system(as classes or objects), the chronology of events (through sequence diagrams) and data flow diagrams etc. Alternatively one can have ER representation of entities and data dictionaries.
2. Defining Use cases
Use cases are quite often included within the part of UML. However, that is not necessarily true. The best reference you can find about writing use cases is a book "Writing effective use-cases" or refer here for a brief document from author.
3. System requirements
Here, we define the systems (OS, hardware etc.) where systems are expected to run and define the requirements of scalability and performance in terms of system load (number of queries/transactions per second) or response time (maximum time for user response).
4. Other compliance requirements
Here, we can specify compliance to externally defined formats of data, protocols or existing (published or documented) API for other services or libraries. The system needs to be complied to this.
Quite often, the visual representations of various dialog boxes are pre-defined with clients as part of the specs are frozen. This is usually possible only for small and medium sized projects.
While it is not always true that UML and other such formats are used. Many a times companies can have their own specific type of templates may exists such as one shown in wikipedia.
One quick tip: add time numbers to the spec document. Start from 1 on each page.
Our main spec recently had line numbers added, and it's so much more easy to refer colleagues to an exact sentence.
Before: "... on page 25, section 2.8, that bit under the table, no, the next bit, it begins with 'The server must...'"
Now: "See page 25, line 34."