I have been reading Joel’s painless functional specifications a while back and thought it makes perfect sense to write a functional spec, and wanted to write one one day when the opportunity comes along.
And that opportunity came along last week when I decided it is time for a new project for Xenotar Software. I’ve never written a functional spec before so I am learning as I am going along.
This week I started and mostly followed Joel’s recommendations. At first I though it is going to be boring because I would rather write code than documentation, what developer does not? But after a few paragraphs I realized that with the functional spec I am also designing the software, and as I go along the whole project becomes clearer. I am already seeing problems that I’m going face, and I’m already also thinking about alternatives that might work better. I would usually find these problems only after a hefty amount of code has been written, and the testing starts and the flow does not feel right.
At the beginning I thought to much of technical aspects of the implementation of features, it took a while before realizing that I should focus more on how the product needs to work and write that down, and not the implementation details.
I am doing about a feature a day on the spec, but the developer in me wants to start writing that code, so I need a bit of willing power to continue with the spec, and everyday when I start, after that first sentence things just starts to flow. It is also like the written words are arguing with me to say what I want to do does not seem right.
What I also like is when I am writing the next feature spec I can see clearly how it clashes with some previous “design” flaws of previous features I’ve specked (is this even a word?), so I can go back to the previous sections and make adjustments, when it is going to be time to write the code for this I am not going to write code that normally would be changed because of a later feature’s implementation. I know it won’t be as simple as this, and I am sure if I am writing the code I am still going to need to make changes because of previous written code, but I think those will be technical things and not to do with the functional specifications of the project.
I am hooked on this, I will never start a new project / feature again without a functional specification. Now just to find someone to write it for me. ;)