Programming Without Walls
Software Engineering with Microsoft .net

10 Rules For Creating Decent Specifications Documents

December 19, 2008 by Bob Barth

It is an unfortunate state of our industry that I've worked on a large number of projects over the years but the quality of the specifications (if they existed at all) has been poor. Here are ten rules for creating decent specification documents, in no particular order. They all begin with the statement, "A decent specification is one that..."

1. Exists

If I had a dollar for every project I was on that contained zero written pages of specification, well, I'd be pretty poor, but the fact remains that a large percentage of projects simply have no written specification. Loads of reasons are given for this oversight (the requirements always change, there's no time for specifications, there's too much to document (!), etc.), but none of them outweigh the return on investment of actually knowing what you're writing.

 2. Describes What, Not How

Many specifications have screenshots, pseudocode, and other things in them. These are all solutions to a problem. The specification should not describe how to fix the problem, just what the problem is. I will not pretend that this is an easy task, because it isn't. It's especially difficult for software engineers who (usually) will immediately try to figure out how to solve a problem. One can only describe the "what" of a problem after some experience.

 3. Can Be Interpreted In As Few Ways As Possible

This one is vital. If the specification is ambiguous, it isn't really worthwhile. If software engineer A thinks it says one thing, QA tester B thinks it says another thing, and the customer thinks it says something else entirely, I can guarantee the solution will never solve the problem it was designed to in the first place.

 4. Is Widely Distributed

Everyone on the team needs to have access to the specification. This includes QA staff, managers, and especially the customer (in addition to the engineering team and whoever is writing it). Without access, everyone will have their own idea of what the software is supposed to do.

 5. Is Agreed Upon As Being The Spec By All Parties Involved

There can sometimes be competing interests in a project, especially if the project has broad appeal. Group A has its goals and group B has its, and the two may not be congruent. If everyone agrees that whatever is in the spec is the way the software will work when its done, you can avoid the incongruous goals of disparate groups (or, at least, force them to agree to some sort of compromise before any code is written).

 6. Is Concise

Wordy explanations and jargon-filled specs only confuse people. Only say what is necessary to describe the problem, and no more. Use language the average person off-the-street who has no knowledge of your problem domain can understand so that new software engineers to the project can come up to speed quickly.

 7. Is Consistent

If something is mentioned one way in one place, say it the same way everywhere. Or, better yet, refer the reader to the prior explanation. Inconsistincies in the spec will manifest themselves in engineering problems down the road.

 8. Is Updated Regularly As Requirements Change

It's a fact of life in the software engineering world that the requirements are going to change. People change their minds. Customers are lost and gained. Those are the facts of life. What this means, however, is that someone is going to have to take on the job of maintaining the specification and time (and money) will have to be budgeted for that work in the project plan.

 9. Describes As Much Of The Problem As Is Possible And Practical

Gather as much information as you can when writing the specification, but if you can't get any information about how a certain piece should work, leave it out. As long as it isn't a key piece of the overall problem, it probably won't affect anything and can be added later. On the flip-side, for things that are well-known, describe enough so that a software engineer can design a solution that will work.

 10. Is Testable

Everything in the specification should be testable in some form. How else will you know if the solution provided solves the problem if it can't be tested? You won't and neither will the customer, and you'll be left to haggle over that last payment.

Be the first to rate this post

  • Currently 0/5 Stars.
  • 1
  • 2
  • 3
  • 4
  • 5
Tags:
Categories:
Actions: E-mail | Permalink | Comments (6) | Comment RSSRSS comment feed

Related posts

Comments

December 24, 2008 1:02 PM

Bill

I particularly like #1. They are overlooked way too often. It's nice to take a step back and ask, "What the hell are we actually doing here?"

At a previous job my project manager defined a one page SRS with some fluff at the beginning and end and then 3 or 4 items in the middle, with one item stating: "Our application will handle and respond to all of your business needs." I don't think there is any worse way to break #3. Needless to say, there were some scope creep problems on that project...

Bill

November 4, 2009 2:36 PM

Lasix

I havenever read such an interesting post. Great thoughts.

Lasix

November 25, 2009 1:43 PM

Best Cheap Hosting

I have been looking looking around for this kind of information. Will you post some more in future? I'll be grateful if you will.

Best Cheap Hosting

November 26, 2009 2:08 AM

MILZ

I have enjoyed your blog, thank you,

MILZ

December 5, 2009 8:56 AM

download puzzle games

hello admin, I found your blog from yahoo and read a few of your other posts.They are great. Please continue this great work!!!! cheers, Will T..

download puzzle games

December 21, 2009 6:54 AM

casino online proudly

Thanks for taking the time to discuss this, I feel strongly about it and love learning more on this topic. If possible, as you gain expertise, would you mind updating your blog with more information? It is extremely helpful for me.

casino online proudly