Who Gives a Functional Spec?!
Picture this. You’ve been tasked with developing a new feature for a client. Depending on the size of the project, you have a niggling feeling that you should write a functional specification, but you decide to start and figure it out along the way.
“I can just start and wing it. Preparation is for nerds. I am so cool”
– You, probably.
Out with the Old?
With many companies adopting Agile Methodologies many people are moving away from writing Functional Specifications, so why bother? You may feel it’s time wasted that could be spent coding?
What is a Functional Specification?
To be clear, a Functional Specification explains what the product will do from the user’s point of view. It’s not concerned with how the features are implemented. The user simply cares about what it can do and what the user experience is like. A Technical Specification describes the internal workings of the program. It will describe the data structure, system architecture, choice of algorithms, language used etc.
Communication, Efficient Use of Time, No Assumptions
An agreed-upon functional specification is a great way to save time communicating. As a developer, you won’t make any assumptions about what the customer wants. You can be certain that this is what they want. Otherwise, you could make design choices that don’t align with the customer’s vision. The customer doesn’t want any nasty surprises on release day. And you know what happens next; you’ll have to go back and make more changes. More time spent, more time wasted.
Sometimes, it can be difficult to get a client to make a decision. Design by committee can lead to a lot of indecision and delays. A functional specification forces all parties to nail down decisions before development starts. If a customer is unhappy about a decision, you can always point to where it was agreed.
Once you have a well-written functional specification, it becomes much easier to make a schedule and stick to it. Without the specification, how can you be sure when you will reach certain milestones? A business will want to know how long development will take. The longer development takes, the more it will cost the business. This is far from ideal.
Should I write one for every project?
When it comes to smaller projects, it might work out fine to just get stuck in and code. But if the project is of a larger size, a functional specification can save headaches down the line.