Turn a need into a testable outcome

  1. 01WhoA specific role
  2. 02WhatThe needed action
  3. 03WhyValue to the user
  4. 04AcceptanceObservable behaviour
The story starts a conversation. Criteria establish what to verify.

User stories look simple, yet teams often turn them into miniature technical specifications and lose the most important part: the user’s need. This article covers what a story should capture, why acceptance criteria matter, and the mistakes that weaken both.

What a user story really is

A user story is a short description of a need or expected value from a user’s point of view. It usually answers three questions: who the user is, what they want, and why it matters.

Ron Jeffries’ three C’s are a useful foundation: Card, Conversation, Confirmation. The short written note provides context for discussion and verification rather than replacing a specification. Implementation details belong elsewhere; an unclear need sends the conversation in the wrong direction from the start.

The template is easy to memorize. The harder part is making sure the entire team reads the role, outcome, and boundaries in the same way.

What it looks like

One common template is the Connextra format. It is a conversational aid, not mandatory syntax:

  • 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.

There is no framework, database, or button placement in those examples. The story captures the user, need, and motivation; the technical solution is discussed separately.

The three questions that decide everything

The common template rests on three questions: who, what, and why.

Who: “As a [user type].” Avoid using a generic “user” for every story. An administrator, shopper, guest, and content manager operate in different contexts and have different permissions and goals.

What: “I want [action].” If the story contains several independent outcomes, it is probably worth splitting.

Why: “so that [goal or reason].” This explains the value and makes alternatives easier to discuss. For example: “As a student, I want to see my grades online so that I can track my progress.” Without the goal, a team may deliver the literal request without solving the underlying problem.

Acceptance criteria make the outcome testable

A user story is an invitation to a conversation, not a complete specification. Acceptance criteria add the testable conditions under which the team can consider the story complete.

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

Possible acceptance criteria:

  • An authenticated shopper can add an available item from the product page.
  • The item appears in the wishlist and remains there after a page refresh.
  • The shopper can remove the item, after which it no longer appears in the list.

The exact criteria depend on the product rules, but these examples already define context, behavior, and an observable result. That reduces room for conflicting interpretations across product, analysis, engineering, and QA.

A useful criterion can be checked unambiguously, either manually or through automation. State the conditions and expected behavior clearly. Keep criteria close to the story, with links to detailed rules or specifications where needed.

Why any of this matters

User stories provide three practical benefits.

User focus. The “who, what, why” structure moves the discussion from an interface element back to the person’s goal.

Simpler planning. Stories that represent small vertical outcomes are easier to estimate, prioritize, and deliver independently. The template does not guarantee good slicing, but it supports it.

Communication. Product, analysis, engineering, and QA discuss one need and one set of acceptance criteria, reducing mismatched expectations.

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 specification. “As a user, I want the system to send a POST request to /auth with a JWT” describes an implementation, not a need. The user’s goal is to sign in; the protocol and authentication mechanism belong to the technical design.

Forgetting the “why.” “As a user, I want an export button” does not explain the job. A report for accounting and a backup before migration have different data, format, access, and workflow requirements.

Inflating one story into an epic. Several independent actions or outcomes in the same sentence are a signal to revisit the slicing. A smaller story is easier to estimate, verify, and put in front of users.

Writing acceptance criteria that cannot be verified. “The system should be fast” is a wish. “The wishlist loads within two seconds under the agreed test profile” is testable. The target and load profile should come from the product context, not guesswork.

A story should lead to a testable outcome

A user story is a compact frame for discussing a user’s need. The “who, what, why” structure and testable acceptance criteria do not replace analysis, but they help a team align on the intended outcome before implementation begins.


Originally published on my Telegram channel @it_underside.

Yours, DPUPP

Related Articles