There are three different issues that ShareKhan is talking about:
- Business value of a functional story
- The reason for splitting requirements into stories AND
- The practice of "storying up" technical / environmental tasks
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.
- As a sales person, I should be able to enter the product code by typing it in
- As a sales person, I should be able to enter the product code by scanning the barcode
- As a sales person, I should be able to enter the product code by scanning the RFID tag
- As a sales person, I should be able to make a sale for the product entered
- 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.