Perficient Portal Solutions Blog

Subscribe via Email

Subscribe to RSS feed

Archives

avatar

Jim Hertzfeld

Posts by this author:

avatar

The Requirements: A Comedy, Part 2

by on September 29th, 2011

In the classic documentary This is Spinal Tap, crack documentarian Marti DeBergi captures a textbook case of requirements specifications gone awry.  The dialogue went like this:

Ian: When we get the actual, uh, set, when we get the piece,  it’ll…it’ll follow exactly these specifications. I mean even these contours and everything?

Artist: Um, I’m not understanding it. What do you mean “the actual piece?”

Ian: Well I mean…I mean when you build the actual piece.

Artist: But this is what you asked for, isn’t it?

Ian: What?

Artist: Well this is the piece.

Ian: This is the piece?

Artist: Yes.

Ian: Are you telling me that this is it?  This is scenery?  Have you ever been to Stonehenge?

Artist: No, I haven’t been to Stonehenge.

Ian: The triptychs are…the triptychs are 20 feet high.   You can stand four men up them!

Artist: Ian, I was…I was…I was supposed to build it 18  inches high.

Ian: This is insane.  This isn’t a piece of scenery.

Artist: Look, look. Look, this is what I was asked to build.  Eighteen inches. Right here, it specifies eighteen inches. I was given this napkin, I mean…

Ian Faith: Nigel gave me a drawing that said 18 inches. Now, whether or not he knows the difference between feet and inches is not my problem. I do what I’m told.

;-)

avatar

The Requirements: In Iambic Pentameter

by on September 29th, 2011

This is the fourth entry in a series on what constitutes good requirements, regardless of how they are written, stated, shown, or otherwise intended.  In this entry, we offer a gentle reminder that requirements should also be verifiable. When requirements are verifiable it simply means that they are expressed in a way that our product can prove that they are met.

You may have heard the theory that an infinite number of monkeys randomly tapping the keys of an infinite number of typewriters will eventually produce the collective works of William Shakespeare. By the way, the same theory posits that an infinite number of coders randomly tapping the keys of an infinite number of keyboards will eventually produce a buildable version of Microsoft Bob.

The Infinite Monkey Theory is an interesting thought experiment, and, although it has some mathematical proof, it would be extremely difficult to verify in the real world.  The good folks at the IEEE don’t write a lot of sonnets, but they have worked out guidelines for good requirements that include the topic of verifiability:

A requirement is verifiable if, and only if, there exists some finite cost-effective process with which a person or machine can check that the software product meets the requirement. If a method cannot be devised to determine whether the software meets a particular requirement, then that requirement should be removed or revised

In other words, if a requirement is not verifiable, then it is a matter of opinion whether it was correctly implemented or not .

In the last post we covered ambiguity, which is a major factor in the verifiability of requirements. When requirements are unambiguous it means that they have one and only one interpretation by everyone involved. But for a requirement to be verifiable, it also needs to meet a few more criteria. Requirements that are incomplete, inconsistent, ambiguous, or infeasible are also unverifiable. Herein lies the rubric for creating verifiable requirements.

Examples of unverifiable requirements:

The system shall have at least 500 concurrent users during peak time.

This statement is incomplete.  500 is the minimum, but what is the maximum?

When two orders are placed at the same time, both shall be on hold and neither shall proceed until the other one does.

This statement is inconsistent. How can an order proceed when both need to be on hold?

The report writer shall be user friendly.

This statement is ambiguous.  “User friendly” is a subjective observation that is unique to each individual.

The recommendation engine will provide users the content they intended to request.

This statement is infeasible.  It is not realistic to presume that technology can actually perform precognitive mind-reading techniques to know what content you will want to see.  Someone is working on this, but even Google does not have an infinite number of monkeys nor coders to complete this work.

Keeping these other requirements characteristics “clean” goes a long way to keeping them verifiable.  There are few more techniques will keep your stakeholders steady and your project teams focused. Use concrete language and measurable quantities where possible, even breaking your requirements down into smaller, more manageable pieces until a good test case can be written for it. When presented a requirement, immediately discuss how it can be tested, reviewed or demonstrated. Build the demo script now!  Above all, check as you go. Adopt test-driven development techniques by writing test cases and requirements together. Reviewing test cases early is a great way to verify the requirements with the customer so you can easily run the same test cases later to verify the product with requirements.

Hopefully you found this post complete, consistent, unambiguous, and feasible, and therefore verifiable.

avatar

The Requirements: A Comedy

by on August 22nd, 2011

This is the third entry in a series on what constitutes good requirements, regardless of how they are written, stated, shown, or otherwise intended.  In this entry, we cover how language affects the ambiguity of requirements. When requirements are unambiguous it means that they have one and only one interpretation by everyone involved.

How would you respond to this personal ad?

SINGLE FEMALE seeks male companionship, ethnicity unimportant.  I’m a very good looking girl who loves to play. I love long walks in the woods, riding in your pickup truck, hunting, camping, fishing trips, and cozy winter nights lying by the fire. Candlelight dinners will have me eating out of your hand. I’ll be at the front door when you get home from work wearing only what nature gave me. Call and ask for Daisy.

The Atlanta Humane Society received over 15,000 calls asking for Daisy – a Labrador Retriever!

There is nothing like that terrible moment when two people come to the realization that they have two very different expectations about something like a key feature of your software. Of course, Murphy’s Law states that this realization will occur the day before the product demo to the senior management team.  In the previous post in this series, we discussed ways to ensure that the requirements are correct and complete, which goes a long way in preventing these painful situations. But it is not enough.

Ambiguous requirements are actually a great way to get the project ideas off the ground and get the project team in the same ballpark. You can quickly get a sense of the direction the product needs to go, what features are important, and some the technical challenges you will have.  Somewhere between a hallway conversation and a white board sketch that was subsequently erased, we get can pretty close. But close only counts in horseshoes and hand grenades, and eventually we need to ensure that everyone involved has the same understanding.

As I’ve said before, this is not an endorsement of one methodology or another. We can try to write all of the requirements perfectly up front, and we can patiently iterate on the product to determine the product readiness as we go.  Both are strategies that have evolved to ensure that the product and requirements are lined up. And of course our friend at the IEEE have also pondered this problem in IEEE 830-1998What follows is a collection of tips and red flags to avoid ambiguous language.

  1. Replace every pronoun, particularly “it” or “its.” Each should have an explicit and unmistakable reference.
  2. Avoid passive voice, such as “the counter is set.” (By whom or what?)
  3. Vague words and phrases such as: almost, applicable, but not limited to, generally, ideally , including, nearly, normally, optionally , sometimes, timely, to the greatest extent, when necessary, where practical.
  4. Imprecise verbs such as: be able to, be capable, handled, maximize, processed, provide for, supported.
  5. Implied certainty is a flag for suspicious ambiguity. Avoid words such as: all, always, every, never, none.
  6. Comparatives such as: earliest, highest, improved, latest, words ending in “-er” or “-est” should be suspect.
  7. Words and phrases that are not or cannot be quantified such as: , accomplish, achievable, adequate, as a minimum, better, correct (or correctly) , efficient, fast, faster, flexible, higher, infrequent, less, minimum acceptable, minimum required, modular, normally, often, possible (or possibly) , several, slower, steady-state, sufficient, to be associated with, to be compatible, to the extent required, to the extent , specified, typically.
  8. Words and phrases whose meaning can be disputed between developer and customer such as: achievable, adjacent, average, coincident, degraded, easy-to-use, effective, finish, flexible, instantaneous, intuitive, minimum, nominal, normal, reasonable,  appropriate, seamless, simple, simultaneous, state-of-the-art, synchronous, transparent, user-friendly.

The next post in this series will be delivered soon, ideally with a higher level of satisfaction, acceptable meaning, and improved user-friendliness. It will be published in the future…

avatar

The Requirements: A Drama

by on August 9th, 2011

This is the second entry in a series on what constitutes good requirements, regardless of how they are written, stated, shown, or otherwise intended.  In this entry, we cover two characteristics that go hand in hand and are generally the responsibility of the customer and user: correct and complete.

You probably haven’t tried my grandmother’s meatloaf, but trust me, it is fantastic. A few weeks ago we decided to make this legendary meal on our own. My wife sent me to the grocery store with a shopping list: carrots, onions, eggs, ground beef.

I picked up everything on the list, but when I returned home we discovered that we were missing one ingredient: bread. I verified that it wasn’t, in fact, written on the shopping list and returned to the store. The list did not meet a key characteristic; it was not complete.

Now that we had all of the ingredients, we set to cooking and then eating. But something just wasn’t right with the meatloaf.  We called my grandmother and it turns out that she uses ground veal, not ground beef. The list did not meet another key characteristic; it was not correct.

Think about these characteristics as they relate to software development.  In a waterfall approach, you have to be pretty darned good to get all of the requirements exactly right.  In an Agile approach, you have to be pretty darned patient to let the iterative process take you down the right path. But no matter what approach you use, you need to be mindful of correctness and completeness. IEEE (in its own formal and, um, charming way) addresses these concerns in STD 830-1998. I’ll leave it to you to read up on their verbiage in section 4.3.

Complete requirements imply that we know the truth, the whole truth, and nothing but the truth. By the time we are done with the product, it includes everything the users need to complete their tasks and accomplish their goals.  There are no TBDs – anywhere. Missing requirements are hard to find because they aren’t there. The best way to determine if the requirements are complete is through ongoing exploration of, mining for, and testing of the requirements and system as it progresses.

Questions to ask: What is missing? Have we talked to everyone? Do the requirements satisfy every business scenario and outcome that is in the scope? Are the requirements and components traceable up to some need or business purpose? If my users require a login ID and password, have we defined how they will reset and recover their passwords (you might be surprised how often this gets overlooked)? Are all 11 secret herbs and spices accounted for?

Correct requirements imply that the requirements we actually know about are the right ones, and accurately describe how the product functions so that users can complete their tasks and accomplish their goals. One of the best techniques for ensuring correct requirements is to ensure that the documentation and code is reviewed, validated, and tested on an ongoing basis by the subject matter experts themselves.  Writing test cases in conjunction with requirements takes this a step further.

Questions to ask: Is this right? Is this calculation correct when I enter high, low, and out of range values? Does this field hold up in all situations? Is that Eastern Daylight Time or Eastern Standard Time?  Did you say “patients” or “patience?”

Again, whether you are writing a comprehensive tome of requirements or you are having a conversation with your users about a prototype you just built, make sure you are getting on the same page with what is complete and correct. And if you are looking for a recipe for Sunday dinner, don’t ask me. Call my grandmother.

avatar

The Requirements: A Love Story

by on July 26th, 2011

“I know that you believe that you understand what you think I said but I am not sure you realize that what you heard is not what I meant.” -Robert McCloskey, former U.S. State Department spokesman

Regardless of how your software project is organized, how it is being run, or what you are building, sooner or later everyone involved is going to come to terms with The Requirements: that collection of all the requests, specifications, expectations, hopes, dreams, and desires of what the product is supposed to do.  The Requirements provide everyone on the team something they need. They tell the architects, designers, and developers what to construct; provide the testers the basis for verifying what was constructed; and help the end users and business stakeholders validate what they really wanted in the first place. And everyone wants The Requirements in a hurry, with the least amount of effort and overhead.

The Requirements represent the “single truth,” regardless of whether they are written, stated, demonstrated, or wished upon a star. The format is simply the means to an end:  use cases, user stories, IDEF0, UML, SRS, an email, 100 emails, a hallway conversation, a wiki page, or the back of the napkin. The means and method vary, but knowing when you have The Requirements has been a classic engineering issue for decades.   In fact, this is such a timeless concern that the IEEE went so far as to write a standard on the subject: IEEE 830-1998 – IEEE Recommended Practice for Software Requirements Specifications.

Now, before you write this off as overly bureaucratic and stuffy, let me help you skip ahead to the good part (the part you can use when you’re done reading this blog post).

Section 4.3, entitled Characteristics of a Good SRS, is a fantastic yardstick for evaluating The Requirements on your project.  It’s also a great tool for getting your team to agree on what comprises good requirements in the first place. Good requirements are:

  • Correct
  • Unambiguous
  • Complete
  • Consistent
  • Ranked
  • Verifiable
  • Modifiable
  • Traceable

Over the next few posts, I will elaborate on how these characteristics can improve The Requirements on your project.   Like anything, be reasonable and use common sense. But what is reasonable? Sorry, there isn’t an IEEE standard for that.