As a user, I find starting every requirement with “as a user” tedious, pretentious, ostentatious, and pompous.
A tweep (@Symbo1ics) challenged me on this:
I think this is pretentious twaddle. Here’s why.
- I know I need to keep the user front and center in my work, and needn’t be reminded of it by a contrived mechanism.
- I know the users of my product are the, duh, users. If they can’t use it then they won’t be my product’s users anymore.
- Repetitive boilerplate is bad in programming languages. Why should it be good in a user story?
- SCRUM masters and other Agile zealots sell this because it’s part of their palaver. Of course they’ll say you need to do it.
- I’m reminded of the Agile notion of valuing “individuals and interactions over processes and tools.”
I was in a SCRUM meeting (gah) where a developer asked how to write a story to support refactoring code in order to improve its reliability. The answer was to write, “As a user, I want the foobar process to be more reliable.” Another question was how to write a story to support fixing some badly designed foreign keys. (We had tables with circular relationships. Don’t ask.) The answer was to write, “As a user, I want the product to be more easily maintainable.” This is imbecilic.
You could say that in both cases the story should use a different role. E.g., “As a developer, I want the product to be more maintainable.” But that’s gratuitous. Why not, “Remove the circular table relationships in the xyz tables?” Or for my first example, “The xyz nightly process is brittle in the abc phase?” Both of those would be more straightforward.
You could say that starting a story with a role reminds you of who the beneficiary is. I’d say that if you don’t know why a failing nightly process is a bad thing, you’re 12 miles north of Lost, Alaska. Adding three words and a comma to a sentence’s opening won’t help you.
I’m not criticizing user stories. They’re a fine tool.
But! Here’s a compromise I can live with! It comes from a consulting company’s blog post.
I’m OK with this because the columns need a header anyway and there’s no repetitive boilerplate. And if you need those particular words to remind you that your users exist, well, just twitch your eyeballs up on the screen a couple of inches.