Home > UX and Prototyping > Functional specification documentation: Quick guide to making your own
Functional specification documentation provides a single source of truth for your projects resulting in better efficiency and less back and forth

Functional specification documentation provides a single source of truth for your projects resulting in better efficiency and less back and forth

Mitigating risk is one of the most valuable things you can do on a project. Reducing any potential costly problems or wasteful actions makes for a very smooth design and development process. It also puts a smile on stakeholders’ faces and boosts efficiency.

One way to ease the UX design headaches and create a better line of communication between your team is by creating and using a functional specification document.

Some developers are gung-ho and would scoff at the very idea of a functional specification document. Others won’t type a line of fresh code without one.

Whatever approach you take is your own preference but knowing what purpose this document serves is important. Functional specification documents act as a single source of truth for the project ahead.

In this article, Justinmind will explain what it is, who they’re for and why you need one.

Create your own functional specifications document in Justinmind. Download free.

Download free

What is functional specification documentation?

A functional specification document is akin to what a blueprint might be for an architect, except it’s given to a developer to understand how an application or website will function. It describes the expected behavior of a software system.

People like to chime in with their expertise when it comes to creating a user experience. The developers will have their own biases and arguments, UX designers will have theirs and product owners…well, you get the idea.

With so many voices in the ring, disagreements inevitably arise. The functional specification documentation acts as a bridge between these diverging opinions. A consensus, if you will.

The team outlines what the project is going to achieve in this document so that no time is wasted creating source code that won’t be used.

Who are they for?

Functional specification documents are for everybody involved in a project. Even though the document is mainly used to tell developers what they have to create, it’s best that the document has full visibility across the team involved in the project. This will reduce internal arguments which is always a good thing.

What is in a functional specifications document?

A functional specifications document can take different forms. Mostly though it will be presented in a Word or Google Doc.

The document identifies stakeholders, the document history and previous approvals. Aside from that, the document will also reveal:

  • Project scope – what are the project goals, deliverables, features, tasks, deadlines and cost?
  • Risks/Assumptions – what might affect the functional design of the product/system?
  • Solution overview – what are you proposing to create to solve a problem (sitemaps, screen flows etc.)
  • Use cases – put functional requirements into the context of a user action.
  • Requirement specifications – what should the product do?
  • System configurations – the steps requires to configure a product.
  • Non-functional requirements – these are the nice to haves.
  • Error reporting/Exception handling – explain any error conditions that happen in the interface.

Depending on your team and how it operates, your functional specification document might have only a few of these elements or all of them. Some information may be essential while other information might not. It depends on the individual project.


Why use functional specification documentation?

Software developer and New Yorker Joel Spolsky wrote in a post all the way back in 2000 that he believes any non-trivial project that requires over a week of coding will suffer without a spec. No spec results in spending more time and creating lower quality code. Not good.

His argument is that when you design a product in a human language, it only takes a couple of minutes to try thinking about several possibilities, revise them and improve your design. You can cut text from a Word doc with ease.

When you write in a programming language, it takes weeks to do iterative designs. And a programmer who has spent two weeks of their life writing this code is going to be attached to it, no matter how wrong it may be. Not so easy to edit and change. This approach just makes work more complicated when it doesn’t have to be.

But what other benefits are there to using functional specification documentation?

  • Reduces unnecessary back and forth
  • Acts as a synchronization tool for teams
  • Provides a baseline for change control
  • Gives engineers instruction to build

How to get started creating your own functional specification documentation

It’s possible to fill out a pre-made template when creating your own functional specification documentation.

For example, Stanford have a Word template which is available to download for free here. Ideally, you won’t create the document in isolation. It’s best to grab key members of the project so you can include their input, as it will be pertinent. You can simple work your way through the order of the bullet list above to create your documentation. 

Getting started with your functional specification document can be as simple as writing out a few use cases and building on that. A use case is just a way to describe the behavior of a system. There are a raft of helpful use case examples available to you right here.

When it comes to writing a use case you need to know the following:

  • Name of the use case
  • Description of the use case
  • Actors (who are the users involved?)
  • Preconditions
  • Basic flow
  • Alternate flows
  • Exception flows
  • Post conditions

According to one Stack Exchange contributor, a use case example might look like this:

When the reserved vehicle is not available due to late returns, the customer is informed of the situation and told about the other vehicle types that are available. The customer is offered an incentive to accept another vehicle type. If the customer is not satisfied, the reservation is cancelled without penalty charges. The customer either accepts another vehicle type or cancels the reservation.

From this use case you will be able to derive functional specifications such as:

  1. The system will indicate when a vehicle is not available, and the reason
  2. The system will provide a list of other possible vehicles

And so on.

Functional specification documentation generation made easy

Many prototyping tools, like Justinmind, have requirements generation capabilities built directly into them. Requirements documentation should be included within your functional specification document.


Requirements interface in Justinmind

A functional specification document is full of many requirements as well as other supporting information for the project. Now you can see why your functional specification document gets so lengthy.

Because prototyping tools are used before source code is written, the ability to generate documentation automatically is both useful and quick. Quick because you don’t need to spend time creating lengthy document and useful because your developer will be able to understand exactly what you want.

You can either supplement your paper documentation or replace it entirely (bye bye!) because Justinmind creates a shared language between designers and developers.

In the Justinmind interface, there is a tab in the top right called Requirements. In this tab, there is a comprehensive view of all the Requirements, including version histories, related components and comments.

The widgets that you place on your canvas can be turned into requirements, simply by right clicking on them.

These features enable teams to work in a truly collaborative manner, which is handy if you ever want to reach a consensus.

It’s also possible to categorize requirements using colors and labels which results in a stronger grip on version control (because there’s nothing worse than being lost in twelve different versions of the same thing).

To give your entire team full visibility and enhance collaboration, Justinmind lets you effortlessly integrate with JIRA, too.

A click of the button (or more precisely: File > Export to Document ) and you’ll have your documentation — visuals and all.


Best practice tells us that generating documentation will save you time, money and possibly friendships.

Functional specification documentation keeps all team players on the same page, working from one source of truth.

Deviating from that can result in a poor project and frustrated individuals so for the benefit of everyone’s stress levels, it’s best to create a well-thought out spec.

Steven is the web editor at Justinmind

Add comment

Your email address will not be published. Required fields are marked *