Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What are your feelings on functional specs? And Software design? [closed]

Does the functional spec help or hinder your expectations? Do programmers who practice the waterfall methodology, are they open to functional specs? I'm a web designer/developer working with a team of 5 programmers and would like to write a functional spec to explain what we need, so that when I begin my work - I know we are working towards the same goal.

like image 539
jrutter Avatar asked Dec 19 '08 15:12

jrutter


People also ask

What is a functional spec in software development?

A functional specification is a formal document used to describe a product's intended capabilities, appearance, and interactions with users in detail for software developers. The functional specification is a kind of guideline and continuing reference point as the developers write the programming code.

What is the purpose of functional view specification?

A functional specification basically tells developers what features they need to build and why. It also helps all the stakeholders involved in the process to work through their often diverging opinions by focusing on a set of goals.

What are functional design specifications?

A Functional Design Specification also is known as FDS is a document that describes how a process or a control system will operate. Functional Design Specification does not contain any highly technical detail.

What is a functional specification example?

Examples of functional requirements include company information, start date, list of services, the purpose of the product, audience, organization, how it works, competition, and budget/deadline. Other possibilities include context, user requirements, a data flow diagram, and a logical data model.


2 Answers

I won't start any freelance project until I've got a design spec and functional spec written up and signed off. There's too much room for rogue clients to nickel and dime you to death if you don't have it. The functional spec allows you to stay on target/focused and gives you a natural check list to work to.

If there's no functional spec then you get all the "what ifs" starting to creep in and developers thinking - you know, this would be useful, and it'll only take me an hour. Sure an hour to code the prototype and get it basically working - plus the day to design all the tests and make sure all test cases are covered, then another couple of days to iron out all the bugs, then time to write the documentation. There's far too much room for what seems like a trivial addition to be inserted when there's no spec. You've no doubt heard of the infamous "scope creep". There's also far too much room for clients to say "that's not what I wanted..." when you deliver it and try and wriggle out of paying you.

If you've got the design spec and the functional spec written up ahead of the development and both you and the client have signed off that your understanding of not only the basic details but all the nuances of the language used is one and the same - only then can the real work begin.

There are a couple of anecdotes out there the first is quite true, while the other is a common misconception:

  • Software development is only 15% about the code, the rest is resource/people management.
  • It takes 20% of the time to complete the first 80% of the project and the remaining 80% of the time to complete the last 20%.

The misconception is that a working prototype is 80% of the way there - don't be fooled, it is not. So it's easy for a client to say "what's taking so long, I thought you were almost done!" and then quibble that they're paying too much for something that should've been finished months ago. Some of the design methodologies out there really lend themselves well to this popular misconception. The waterfall design methodology is one of them if it's not used correctly.

My view is make sure your understanding is the same, both sign off. Set milestones and make the client very aware at the outset that prototypes are a long way from the completion of the project and set expectations right from the outset as to what those milestones are and when the client can expect to see them delivered.

For project managers of development teams documentation and expectations are everything. You can't live without it, it's the only form of recourse you have against "That's not what I said" or "That's not what I meant" and ergo "I'm not paying you".

I learned from a lot of mistakes made by far more qualified developers than me and saw what it did to them. The two most important documents for your project are the design spec and the functional spec. Don't leave home without them or it can [or most likely will] come back and bite you in the ass.

Addendum re: User Stories:

An additional note about user stories is that they're great for what they are. They should be included in your functional specification but shouldn't be your functional specification.

A user story only describes a single task. It is very lightweight and doesn't contain excessive detail. As the common recommendations go, it should fit on a 3x5 card...if you as a project manager handed me a 3x5 card and told me to write a piece of software based on what I read, no doubt it would be handed to the user at the end and they'd tell the project manager that's not what they wanted.

You need a far greater level of detail in a functional spec. It shouldn't be limited to basic workflows. A functional spec is a whole bunch of user stories along with notes on interpretation of those user stories, improvements that can be made to them, common tasks that can be combined to improve efficiency. The list goes on.

So user stories are a good beginning, but they're not a replacement for a functional spec, they're bullet points in a functional spec.

like image 107
BenAlabaster Avatar answered Oct 03 '22 23:10

BenAlabaster


I work with mostly the Waterfall model, and solely with functional specs. When working on my own (where I can set my own model and program any way I want) I start by writing up functional specs and then implementing them. It gives me a much better idea of the size and scope of the work, helps me estimate the time involved, and helps ensure that I don't miss anything.

Also, you can pass this document to:

  1. Users so that they can make their requirements clear
  2. Developers to create the functionality
  3. Testers to make sure they are testing the right thing
  4. Architects so that they can analyze the requirements

Using functional requirements over user stories is a matter of preference and the scope of the project. If you have a small user base, then you may be able to get away with user stories (which outline various event sequences the user might do), but for larger projects, you should use functional requirements as they have more detail and lead to fewer misunderstandings. Think of them as a means of communication with all people involved in the project.

like image 25
Elie Avatar answered Oct 03 '22 22:10

Elie