How to manage project requirements (for fun and profit) – a post at Steven Luscher’s blog

Flowchart Photo credit

Your ability to deliver a web/software project successfully is largely dependent on how well you manage that project’s requirements. I’ve been repeatedly schooled on the how and why of great requirements management as I’ve watched so many good projects turn into nightmares. Being taken down with the ship is about as fun as it sounds, but if the things that I’ve learned can help you steer clear of the icebergs, I’d be happy to share. Let’s go to school.

The bell rings:

Let’s frame the discussion; A client hires you to build a web application, they bring a wish list of things they want it to do, and they ask you how much it’s going to cost. The more you know about what’s required, the more accurate your estimates will be, so you begin to size up the scope of the work by putting the project’s requirements down in writing. You can gather and store those requirements in a ticketing system like Lighthouse or Jira, but you can be similarly effective using Post-it notes and a smooth wall. Let’s bracket out the discussion about tooling, assume that we’re going to use the term “ticket” to describe a distilled requirement, and take a look at the component parts that make up a requirement:

  1. Ticket title
  2. Ticket description
  3. Ticket milestone

1 – Ticket title

The title of a ticket should strike to the very heart of the requirement, summarizing it succinctly and unequivocally. As is true of great ticket content, a great ticket title should be:

  1. Testable – you’ve made an assertion about what outcome you desire
  2. Contextual – you’ve described the conditions and nature of the players involved
  3. Granular – you can’t break this requirement into smaller requirements

The pro requirement gatherers that I’ve come to know develop formulas for their ticket titles, and stick to them. If this was your formula:

{persona} should {imperative} when {condition}

…you might expect to see the following ticket titles:

The system should present visitors with a newsletter
subscription form when the signup link is clicked
 
The system should present an error message when
a visitor submits a subscription form with errors
 
A visitor should be added to the mailing list
upon signing up for the newsletter
 
A visitor should be presented with a confirmation
message upon signing up for the newsletter
 
The system should send monthly subscription
reminders to those on the mailing list
 
An administrator should be able to send
a plain text email to mailing list subscribers
 
An administrator should be able to send
an HTML email to mailing list subscribers
 
The system should remove a subscriber from the
mailing list when their emails are found to bounce
 
A subscriber should be removed from the mailing list
when they click the “unsubscribe” link
 
A subscriber should be presented with a confirmation
that they've been unsubscribed when they click the
“unsubscribe” link

Things to notice:

  1. Each ticket title describes a discrete user/system interaction. Note the splitting of plain text and HTML emails into two separate tickets. From a systems perspective, they may involve two very different pieces of code and, as such, constitute two requirements.
  2. The development/design activity represented by each ticket can be tested for completeness by title alone, by asking the question “did the {persona} {imperative} when {condition}?”
  3. As I wrote the ticket titles, a set of personas emerged; they are: “the system,” “a visitor,” “a subscriber,” and “an administrator.” Like good characters in a book, these personas will develop as the story unfolds, and should follow you around for the entire duration of the project.

If your instincts told you to bundle all of those tickets into one ticket called “Newsletter,” you may have a medical condition called “epiccitis” – a propensity to write Epic Stories. Epics are a great way to bury complexity where it can’t be seen, leading to underestimation, and ensuring that your projects will run over time and blow your budgets. Write Epic fiction, not Epic Requirements.

2 – Ticket description

If your ticket description is half as good as your title, you’re still well on your way. Let’s extend the system that we used to write our titles, and write example ticket content for the ticket titled “The system should present visitors with a newsletter subscription form when the signup link is clicked.”

TICKET TITLE:
The system should present visitors with a newsletter
subscription form when the signup link is clicked
 
TICKET DESCRIPTION:
Upon clicking on the “subscribe now” button,
a user should be required to supply
the following information:
 
  * Name
  * Email (validate against RFC 2822)
  * Acceptance of privacy policy
 
…and may optionally provide:
 
  * Occupation
  * Telephone number

Now there’s a requirement that designers and developers alike can sink their teeth into, right away!

3 – Ticket milestone

I’ll tell you how I feel about this, then you can develop a system that works for you.

Milestones should occur regularly, like a heartbeat. For simple projects, set a milestone every week. For complicated ones, three or four weeks.

Milestones should never move; the only thing that should move are requirements – in and out of milestones. When surprises come up, write the surprises down as new requirements (new tickets) and do one of three things:

  1. Schedule the new requirements in a future milestone
  2. Move requirements out of the current milestone and into a future milestone, to make room for the new ones
  3. Add the new requirements to the current milestone and assign additional personnel to that milestone; the more people working on a milestone, the more requirements it can hold

When a milestone is reached, a snapshot of the project should be deployed, unfinished tickets (tsk, tsk) should be carried forward, and beer should be un-fridged.

Therefore, good milestone names:

Iteration 1
Iteration 2
Iteration 3 (Internal Launch)
Iteration 4
Iteration 5 (Public Launch)
Iteration 6

Bad milestone names:

After Friday
Whenever you get time
Yesterday

School’s out

If writing requirements in this way seems overly complicated and time-consuming, there’s good news: you can reuse them. The first time you write a series of stories for “new user registration” it will seem like time is standing still, yes, but if you write them in an abstract way, you should be able to drop them into all subsequent projects that require “new user registrations” and customize them from there.

Oh… I almost forgot; here are the answers to the test:

  great requirements
= testable requirements
= clarity
= accurate estimates
= less rework
= more met deadlines
= happier clients
= happier staff
= ???
= profit!

So next time you sit down to write a ticket, if you can’t think of a good title, chances are you don’t really know what’s required. And, as we’ve learned from G.I. JOE, knowing is half the battle.

If you can see this, then you might need a Flash Player upgrade or you need to install Flash Player if it's missing. Get Flash Player from Adobe.

Tags:

be the second person to comment on this post:

Want to include some code? Use Pastie and stick the link into your comment. Linebreaks, block quotes, and preformatted code blocks will be removed.

Please make an attempt to prove that you’re still human before submitting your comment.

If you've written a post of your own in response to this one, feel free to trackback from your own site.

  1. Mark Busse said “G.I. Joe has a terrific mustache. And hat.” Reply to this comment.

be the second person to comment on this entry.