Often, in an agile software development project, there can be a “fly by the seat of your pants” feel to the development effort as stories are created, prioritized and scheduled into Sprints without a formal Requirements Phase or a 10 pound Requirements Book – especially if you are working in an almost-Agile or mostly-Agilish environment. One way to handle the lack of a Requirements Book, is to create a “3 Things My Agile Project Needs to Accomplish” document.
The “3 Things My Agile Project Needs to Accomplish” document is lightweight, and should typically be a single page. It simply lists the 3-5 things your project needs to accomplish, with 3-5 bulleted items below each of the things breaking the “Thing” down into high level, one sentence descriptions of functionality that will accomplish the “Thing”.
Here’s an example template:
My Agile Project
Project Purpose in 1-2 sentences.
1. First (Most Important) Thing the Project Needs to Accomplish
- High level functionality that will accomplish the first thing
- More High level Functionality
- More High level Functionality
- Perhaps More High level Functionality
- Perhaps More High level Functionality (Max 5 items. If you need more, then you probably need another thing to accomplish or you aren’t thinking big enough.)
2. Second Thing the Project Needs to Accomplish
- High level functionality that will accomplish the second thing
- More High level Functionality
- More High level Functionality
3. Third (Least Important) Thing the Project Needs to Accomplish
- High level functionality that will accomplish the second thing
- More High level Functionality
- More High level Functionality
Instructions
You may need up to 5 things the project needs to accomplish. Any more than that and either, you aren’t thinking big enough, or the project has a very broad scope and should likely be broken down into smaller projects.
The bulleted items represent business objectives. At this level, you should definitely be thinking in terms of “What does the solution need to do to accomplish one of the 3 things?” “What?” implies using business objectives and business nomenclature. We should not be concerned with “How the solution needs to work or how the solution needs to be built.” Also, the bulleted items are not User Stories, or even Features, in and of themselves. They are bullets of business functionality that describe “What?” is needed.
On index cards or in an ALM tool like MS TFS, each bulleted item can be translated into one or more (usually not more than 3-5) Features. (If you need more than 5 features, you should probably go back to the 3 things and add another bullet, or even add an additional thing.) These features should be written using business nomenclature and are still “What needs to be done?”, rather than “How?”
Each Feature, can then be elaborated into User Stories and Test Cases. The process of making this happen usually occurs in a meeting with the developers, testers, SME’s and project/team leader (e.g. ScrumMaster or PM).
Traditionally, the User Story should be in the format:
Casual: As a <type of user>, I want <some goal> so that <some reason>.
More Formal: As a Concerned Party , I want goal or business or technical feature or function (remember What, not How) , so that reason/business purpose/justification .
Using notecards, the User Story is written on the front of the card, and 3-5 Test Cases that will prove that the feature or function works are on the back. The combination of the User Story and Test Cases should be sufficient to qualify as “Requirements”. It should be possible for the team to elaborate the Tasks needed and estimate the Story Points (for the Stories) and Hours (for the Tasks).
For example, here is a User Story:
As an Analyst, I want a Widget Month Pricing table that includes one record for each Widget for each month that that Widget was on sale, including a blank Market Price field, so that I can store the Market Price generated by the Pricing Algorithm for each Widget/Month combination.
And here are some Test Cases:
- Does the table show only relevant records based on Month and Widget?
- Can the Pricing Algorithm, and only the Pricing Algorithm, write to the Market Price field?
- Does the table show the right Widget/Month records for all Widgets?
- Does the hourly refresh of the table run in under 90 seconds?
The User Story and Test Cases above give me the info I need to be able to estimate the story (in Story Points), task it out and start working on it.
A note about the Test Cases and Non-functional Requirements (NFR’s). NFR’s, like security requirements and performance requirements, are not well suited to User Stories. But they work very well as Test Cases. As shown above, the User Story made no mention of the hourly refresh, but this requirement came out in the discussion of the story and was captured as a Test Case. Also note the inclusion of the performance requirement for the hourly refresh. Both the assumption that there would be an hourly refresh and the performance requirement that it not take more than 90 seconds are NFR’s that should be captured while the Story is being elaborated.