Showing posts with label Stories. Show all posts
Showing posts with label Stories. Show all posts

Tuesday, September 23, 2008

User Stories: Value and Size

ShareKhan brought up the issue of story value and size in his recent post here. My comment was getting too long so here's a post.

There are three different issues that ShareKhan is talking about:
  1. Business value of a functional story
  2. The reason for splitting requirements into stories AND
  3. The practice of "storying up" technical / environmental tasks
Business value of a functional story
Maximizing work not done is the art of our trade. The business value of a story is looked into precisely for this reason. If you don't have a good reason (business value) behind a given piece of functionality (story), you are wasting time by working on it.

This means that technical necessities, like refactoring of code, also have to pass the business value test to be played. They are not stories by themselves at all. Refactoring happens as part of a functional story which requires the code to change in a certain way.

Splitting requirements into small stories
The basic reason why we split requirements into stories is to deliver working software to the client as soon as possible and get her feedback on it. Development convenience, Better tracking of the iteration progress / velocity, etc are just side effects of having small stories.

Another thing that we aim at doing is delivering value (read "usable software") with every build. This means that if the plug is pulled, the client still walks away with something she can use. Of course, if you pull the plug after the first day itself (like in ShareKhan's example) you won't get much but I guess that's true for anything in life.

What small stories do is they let you build a coherent piece of software that has some value. Let's say we have the following stories.
  1. As a sales person, I should be able to enter the product code by typing it in
  2. As a sales person, I should be able to enter the product code by scanning the barcode
  3. As a sales person, I should be able to enter the product code by scanning the RFID tag
  4. As a sales person, I should be able to make a sale for the product entered
  5. As a customer, I'd like to get an itemized bill for the products that I bought

I'd have 1, 4 and 5 built first and keep 2 and 3 as niceties. If the client pulls the plug after 3 stories, she still ends up with a system that let's her sell products. Now if you don't do it this way, your client ends up with a piece of software that can take in a product code in multiple ways but can't make a sale. Making a sale is the crux of the system (taking the POS example from ShareKhan's post).

Technical / Environment / Infrastructure tasks and the practice of tracking them as stories
I think my main problem is with calling these "stories", unless you can actually clearly define the value that they bring. Most of the times the value of such tasks is as vague / intangible as your NFRs. You know these tasks are valuable but it's a waste of time trying to find out and put down in words exactly what value they bring in. I don't even think that it affects prioritization of these tasks in any way.

That leaves one problem, tracking and I think we should track them as convenient to the project. Track them as cards, count them in velocity, deduct time spent on such tasks from development capacity. Anything that suits you and the client.

Friday, September 19, 2008

When do you decide that a story has business value?

We were discussing an issue with a client today. It was about getting some hardware installed that involved a series of tasks like getting racks, loading them, having the machines setup with some config and so on. The person in charge of this area was asking for stories to be created for each of these tasks "so that the work could be tracked".

The manager we were talking to was questioning the value of this with the logic that these are just simple tasks that need to be done by one small team to get the machines installed. How will having stories to track this help?

The idea of having a story is to track how delivering upon a small discrete requirement can generate business value for the business. Whats the point of generating more overhead with creating, delivering to and tracking a story for such low level tasks?

Then I thought, how do you quantify this business value per story? If the complete goal is to build a retail POS system, then what business value can I have by just getting a story to work where it lets the user scan a barcode and have the value register? If the rest of the system (and maybe 200+ stories) don't get done or don't work, then the miniscule "business value" of this scanning story is meaningless.

So then at what level does story breakdown make sense? To me, it now seems more of a development nicety to break it down so it fits in an iteration, give closure, blah blah.