One of the vaguest aspects of Scrum is breaking stories into tasks, which is done in (the second half of) the Sprint Planning. Most of the questions I get when training or coaching boil down to one question: “How do I break a user story into tasks”?
Defining The Problem
My favorite definition for a user story is that it is a thin, vertical slice of functionality, describing a small increment in value to the user (or customer).
A task, on the other hand is a step taken by the development team, required to fulfill the requirements of the user story. I further like to define, as a rule of thumb, that a task should take half a day to 2 days to complete.
The question therefore should be what are the steps the team needs to take for the story to be considered complete?
Look at Your Architecture
Explicitly or implicitly, your project has an architecture. It might be anything from a master piece drawn out in painstaking elaboration by a the architecture team, to a high-level conceptual architecture diagram. You should look at the components in your system, and ask your self which components do you need to modify (or add) for the story.
For example, Let’s say that we have a product that is a social networking web site of some sorts. given a story such as In order to broaden my network, as a user, I want to be able to import contacts from Gmail. Looking at a typical architecture for such a product, my tasks could be something like:
- Add a new Import Contacts page
- Add a service to get contacts from Gmail
- Modify the contact class to accommodate Gmail specific data (let’s assume such exists)
- Modify the contacts data schema
Assuming these tasks are right-sized (4-16 hours), that’s it. If one of these tasks is bigger, break it down. If a task is smaller, merge it with a related one (if such exists. If not, don’t sweat it. My 4-16 rule is just a guideline). We now have all the tasks for us to complete the coding of the story.
Look at the Definition of Done
Of course, just coding your story isn’t sufficient for the story to be truly done. In Scrum, “done” means ready to ship, or as I like to define it: the story is as it will be received by the customer / user. Agile teams have a list of requirements that should be true for any story they complete. You should look at your Definition of Done (DoD) to see what tasks remain.
For example, let’s say your DoD includes the following:
- Code Complete
- Automated UAT (User Acceptance Tests)
- Documentation is updated
- Added to shipping package (e.g. InstallShield)
In this case, you should add tasks that help you achieve the story’s DoD. For the above example you might do the following:
- Write UATs for the story
- Document the Contacts Import feature
Assuming you didn’t have to add any new assemblies (i.e. libraries, packages, DLLs, executables, etc.), to your installation, you probably wouldn’t have any need to modify your packaging tool. No need to add a task for that.
That’s It!
You now have 6 tasks for the story:
- Add a new Import Contacts page
- Add a service to get contacts from Gmail
- Modify the contact class to accommodate Gmail specific data (let’s assume such exists)
- Modify the contacts data schema
- Write UATs for the story
- Document the Contacts Import feature
You can now estimate how much time each one will take, and are ready to move on, and break down the next story.