6 min read

User Stories: The Most Underrated Thing on Teams

What a user story actually is, how to write one using the "who — what — why" formula, why acceptance criteria matter, and the traps teams fall into most often.

User Stories: The Most Underrated Thing on Teams

The user story — supposedly the ABCs — yet time and again you run into teams where nobody gets it, including people with a proud "senior" in their signature. Let me break down what it is, why you need it, and how to write one so the story actually works instead of gathering dust in the backlog.

What a user story really is

A user story is a short description of a single product feature from the user's point of view. Not a five-page spec, not a diagram covering half a wall — three lines that answer three questions: who the user is, what they want to do, and why they want it.

Sounds primitive. And that's the whole point. A good user story is deliberately simple, because its job isn't to describe the implementation — it's to capture the need. The team will figure out the implementation. But the need, if you phrase it wrong, will drag a wrong product along behind it.

For an analyst this is the baseline — the thing you're supposed to swim in like a fish in water. For a junior it's the foundation the entire profession is built on. And yes, I've personally met seniors who genuinely didn't understand what was being asked of them the moment user stories came up. So if you're reading this thinking "well, this is trivial" — great, but check whether it's trivial for your whole team.

What it looks like

The classic formula fits on one line:

  • As a <user type>, I want <action>, so that <goal or reason>.

A few examples to catch the rhythm:

  1. As a user, I want to register on the site, so that I can leave comments.
  2. As an admin, I want to see a list of all registered users, so that I can manage their access.
  3. As a shopper, I want to add items to my cart, so that I can check out quickly.

Notice: not a word about which framework, which database, or where to put the button. Only the user, their action, and their motive. Everything else is the team's responsibility.

The three questions that decide everything

The whole construction rests on three words: who, what, why.

Who — "As a [user type]." The key here is not to write a vague "as a user" for everything. Admin, shopper, guest, content manager — each has their own lens and their own needs. The more precisely you name the role, the clearer it becomes what's actually needed.

What — "I want [action]." One action. Not "register, log in, reset my password, and change my avatar while I'm at it" — that's already an epic, and it needs to be split.

Why — "so that [goal or reason]." This is the part most often thrown out, and that's a mistake. It's the "why" that separates a meaningful story from a wish list. Example: "As a student, I want to see my grades online, so that I can keep track of my performance." Cut off the second half and it's unclear why the feature exists at all, what its boundaries are, and how you'd know it succeeded.

Acceptance criteria — the thing without which the story doesn't work

A user story on its own is a promise of a conversation, not a specification. To be able to close it, you need acceptance criteria: the conditions under which the story counts as done.

Take the story: "As a shopper, I want to add items to my wishlist, so that I can find them easily later."

Acceptance criteria:

  • The user can add an item to the wishlist.
  • The user can view the list of wishlisted items.
  • The user can remove an item from the wishlist.

Without this block you get a genre classic — the good old game of telephone: the client meant one thing, the analyst heard another, the developer built a third, and the tester checked a fourth entirely. Acceptance criteria are an attempt to break that chain. Not a perfect one, but a working one.

A good rule: if a criterion can't be checked unambiguously by hand or by a test, it was written for nothing. Phrase it so that every item can be honestly answered "yes" or "no" — no "well, it kinda works." And keep them next to the story itself, not in a separate file nobody will ever scroll down to.

Why any of this matters

Why does the industry cling to these stories so hard, when you could just write "make a registration form"? Three reasons.

User focus. Phrasing it as "as a <who>, so that <why>" physically won't let you forget who you're building all this for. The team thinks not about the button, but about the person behind it.

Simpler planning. A big, unliftable project breaks down into dozens of small, manageable chunks. Each chunk can be estimated, prioritized, pulled into a sprint — or deferred without hurting the rest.

Communication. A user story is a shared language for the analyst, the developer, the tester, and the client. Everyone looks at the same wording and — more importantly — at the same acceptance criteria. Fewer occasions for "but I thought…".

Common traps (from the trenches)

Now that the basics are covered, here's what people trip over most often.

Writing the story as a technical spec. "As a user, I want the system to make a POST request to /auth with a JWT token" — that's not a user story, it's a chunk of implementation stretched over a template. The user couldn't care less about POST and JWT; they just want to log into their account.

Forgetting the "why." You end up with "as a user, I want an export button." A button — okay, but why? To hand a report to the accountant? To back up data before a migration? The answer decides what you actually end up building — and whether it's the thing that was needed.

Inflating one story into an epic. If "I want" has more than one verb in it and there's an "and" sticking out — it's almost certainly time to split. Small stories are easier to estimate, easier to close, and more pleasant to drag across the board.

Writing acceptance criteria that can't be verified. "The system should be fast" isn't a criterion, it's a wish. "The wishlist opens" — that's verifiable: yes or no.

In short

A user story isn't bureaucracy for bureaucracy's sake, and it isn't a ritual out of some Agile book. It's a tool that forces everyone — analyst, development, testing, and client — to speak the same language and keep the user in mind, not abstract "features."

The formula is embarrassingly simple: who, what, why — plus acceptance criteria, so it's clear when the story can be closed. Master this on autopilot and half of an analyst's job stops being a source of pain for the team. And that, honestly, is already no small thing.


Originally published on my Telegram channel @it_underside.

Yours, DPUPP

Related Articles