I have mixed feelings about User Stories. Not the structure, necessarily, but the idea that the end user is the only perspective that matters.
I feel this is distilled pretty well in User Stories, so Iâll use them as scapegoats here.
At a high level itâs pretty reasonable: focus on the user when defining a problem/need.
âAs a [type of user], I want [some goal] so that [some reason].â
However, itâs not immediately clear how âwe need to update the databaseâ or âwe are asking to get hackedâ fit into this frame.
To be more specific, if a devâs job is to take care of an iceberg worth of âshit that needs doingâ, User Stories seem to only fit well for the exposed tip of the ordeal.
Plus, a user can want an infinite amount of features, including features that donât fit well into the product.
What do we do with those other tasks? How can we stop the feature creep? Are user stories not fit for purpose?
User Stories
âUser Stories are chunks of desired behavior of a software system.â
Martin Fowler1
Sounds like a great way to ensure the team focuses on adding value to the product instead of tinkering endlessly with not-so-relevant parts of the system.
It seems particularly useful in the context of Lean Startups, or greenfield projects more broadly.
Especially in regard to build-measure-learn, where the assumption is that users will guide product direction through measured behavior and feedback.
That same approach kinda falls apart when youâre knee-deep in a legacy codebase or a mature product.
These systems are often full of past compromises (made to get to market fast) that now need attention, but The User doesnât know or care about this.
So whatâs the approach here? How do we make space for that work?
Dev Stories
You might try to create a somewhat separate backlog of âDev Storiesâ to ensure technical stuff doesnât get drowned out by shiny new features.
But how would that look like?
âAs a developer, I want to fix known issues so that I donât get emergency calls at 2 AM.â
âAs a developer, I want a secure, up-to-date tech stack so that my job doesnât suck as much.â
Doesnât quite have the same ring to it, does it?
Jokes aside, this would mean juggling two separate backlogs, when one is already hard enough to keep at bay.
Also, how is your Product Owner/Manager/Analyst/Thing supposed to prioritize stuff they donât even understand?
How important is keeping your server OS updated? Is it more urgent than the feature marketing wants by Friday?
Itâs a hard sell without a clear link to user value.
The Temptation of More
The average user seems to want one tool to rule them all. Technically minded people (usually) know that to be a bad idea.
A tool that tries to do everything is often great at nothing, and since we (hopefully) want our products to be great, there is a conflict between what the users think they want and what is best for the product.
Add to that the constant marketing ânecessityâ to add flashy features to more easily sell the product, and you end up with a great recipe for feature creep.
This manifests as a near-infinite pile of User Stories that often begs the question: Who actually asked for this and why?
I think that question is pretty key.
Do we know what The User wants, or are we just guessing? Is marketing chasing trends or chasing value? Are we conflating The User with the marketing team?
Anecdotally, itâs hard for me to map this feature obsession with actual people using actual software.
100% of my non-tech friends and family have 0 interest in The Cool New FeatureTM and would much rather have any given software be better and faster at what it already does, than poorly perform new tricks on every update.
Do we actually know what percentage of our users want/need that new feature, or are we spending time and money chasing hunches?
Hierarchy of (Software) Needs
I find it useful to adapt Maslowâs pyramid to software, where each additional level only adds value if the previous one is in place.
In my mind, a software product should be:
- Functional: It does what it should.
- Reliable: It can be trusted to do so.
- Usable: Itâs accessible to non-tech users.
- Secure: It protects user data and privacy.
- Performant: Itâs reasonably efficient.
- Scalable: It adapts to reasonable increases in workload.
- Delightful: Modern UI, quality-of-life features, polish, etc.
The point here isnât to undervalue #7. Itâs critically important.
But using a beautiful UI to entice a bunch of new users to use a service that can barely cope with the current ones makes no sense.
And showing off shiny new features when user data is simply not safe in the system due to poor security practices is not only disingenuous, but immoral.
The issue here is that the average user only seems to see tips #1, #3 and #7 of the iceberg.
Blind User Is Blind
Most users are too technically illiterate to ask for quality software.
But that desire exists, itâs just âhiddenâ as a combination of implicit assumptions and unconscious expectations.
This is often visible after the fact: Once a service gets hacked and its users start getting spam calls all day, they care about security. If the software starts behaving subjectively âtoo slowâ, they will complain. If the team takes too long to adapt to market changes due to horrible developer experience, they will leave.
By the time The User asks for security, reliability or scalability to be âaddedâ to a system, itâs usually too late.
These are not things you add later, they must be built and designed into the system from the start and maintained constantly.
They can hardly be just bolted on.
However, I donât think that makes User Stories unfit.
Itâs just a matter of reading between the lines, surfacing implicit requirements instead of waiting for The User to manifest them.
These implicit needs should bubble up as any other item in the backlog.
âAs a paying user, I want the system to scale well so that broad adoption doesnât hinder my experience.â
âAs a privacy-conscious user, I want my data protected, so future attacks donât affect me even if successful.â
If these User Stories donât fit in the backlog, thatâs just the team not caring about their users.
At least not in those regards.
So What Do We Do?
Itâs always good to question new features:
- For whom is it?
- How does it fit the system?
- Whatâs the cost to stability and maintainability?
Learn to say no.
More features is not âmore betterâ.
I think we should, on one hand, expose those âhidden featuresâ as any other User Story, they are just as important if not more.
When raising a technical concern about the system, tie it to real user impact.
On the other hand, if you canât do this, either try harder or admit there is no actual reason to be concerned. You might just want to improve something and thatâs valid too.