← Thoughts

04 Sept 2026 · 6 min

How to Write Better User Stories

A user story isn't a sentence with “As a user, I want…” at the beginning. A good user story helps a team understand the problem, the user, and what success actually looks like.

How to Write Better User Stories

There is a sentence that has probably appeared in millions of Jira tickets:

As a user, I want to do something so that I can achieve something.

Congratulations.

You now have a user story.

Or do you?

The format is useful. But following the format does not automatically make a story good.

Consider this:

As a user, I want a blue button so that I can click it.

Technically, it follows the structure.

Practically, it tells us almost nothing.

Why does the user need the button?

What happens when they click it?

What problem are we solving?

Why blue?

What does success look like?

The story has a structure.

It does not have clarity.

And that is the real problem.

A User Story Is Not a Mini Requirement Document

A common mistake is trying to put everything inside the user story.

Background.

Business rules.

Technical logic.

Edge cases.

Validation.

Error messages.

Suddenly, your “user story” is 1,500 words long.

At that point, you don't have a user story.

You have a small novel with acceptance criteria.

A user story should create enough understanding to start the right conversation.

Not replace the conversation entirely.

One of the most useful ideas behind user stories is often forgotten:

A user story is a placeholder for a conversation.

The story provides the starting point.

The discussion creates shared understanding.

The acceptance criteria clarify expectations.

The team then decides how to build the solution.

Trying to put every possible detail into one ticket does not always create clarity.

Sometimes it simply hides confusion inside more words.

Start With the User's Problem

Before writing:

As a user, I want...

Ask:

What is the user actually trying to achieve?

For example, someone says:

“We need an export button.”

That is not necessarily the user story.

The user may actually be trying to:

  • Share information with someone else.

  • Analyse data outside the system.

  • Prepare a report.

  • Keep a record.

  • Submit information to another organisation.

The export button is only one possible solution.

The underlying need is more important.

Instead of immediately writing:

As a user, I want to export the report to Excel so that I can download the data.

You might discover something more useful:

As a finance manager, I want to analyse monthly transaction data outside the platform so that I can prepare reports for management.

Now the team understands the outcome.

Excel might still be the right solution.

But the team now understands why.

A good user story describes the need without unnecessarily locking the team into the first solution someone suggested.

Be Specific About the User

Not every user is the same.

“User” is often too vague.

Compare these two stories:

As a user, I want to approve a request so that the process can continue.

Now compare:

As a department manager, I want to review and approve employee requests so that approved requests can move to the next stage.

The second story gives us context.

Who is doing this?

What is their role?

What are they responsible for?

Why does the action matter?

You don't always need a detailed persona.

But when the role affects permissions, behaviour, goals, or decisions, name it.

A customer and an administrator may use the same feature very differently.

Don't Confuse User Stories With Tasks

A user story describes value.

A task describes work.

For example:

Create an API endpoint for user registration.

That's a task.

Create a database table for user profiles.

Also a task.

Design the registration screen.

Task.

A user story would be:

As a new customer, I want to create an account so that I can save my preferences and access my information later.

The story explains what the user is trying to achieve.

The team can then determine the work required.

Database.

API.

Interface.

Validation.

Email verification.

Those can become implementation tasks.

This distinction matters because when teams fill their backlog with technical tasks disguised as user stories, they can lose sight of the actual outcome.

Use a Simple Structure That Actually Helps

The classic format still works:

As a [specific user or role], I want to [action or goal], so that [benefit or outcome].

For example:

As a finance manager, I want to filter transactions by a selected date range, so that I can review financial activity for a specific reporting period.

The format answers three important questions:

Who needs this?

What are they trying to achieve?

Why does it matter?

That's the real purpose of the format.

Don't treat it like a magic sentence that automatically turns a requirement into a good user story.

The goal is clarity.

Not compliance with a template.

Use Acceptance Criteria to Remove Ambiguity

The user story explains the intention.

Acceptance criteria explain what needs to be true for the story to be considered complete.

For example:

User Story

As a customer, I want to reset my password so that I can regain access to my account if I forget it.

Acceptance Criteria

  • The customer can request a password reset from the login page.

  • A reset link is sent to the registered email address.

  • The link expires after a defined period.

  • The customer can create a new password.

  • The customer can log in using the new password.

The story explains the value.

The criteria clarify expected behaviour.

Together, they create much better alignment.

The “Why” Test

Before finalising a user story, ask:

If someone asked why we're building this, would the story answer them?

If the answer is no, the story probably needs more work.

Consider:

As a user, I want to filter transactions by date.

Useful.

But why?

Perhaps:

As an accountant, I want to filter transactions by date so that I can quickly review activity for a specific reporting period.

Now the team understands the context.

And context creates better questions.

Should users filter by a custom date range?

Month?

Quarter?

Financial year?

Should the system remember the last selected period?

Without understanding the why, teams often build the obvious feature instead of the useful one.


A User Story Format You Can Actually Copy

If you need a practical format for your project, use this.

User Story

As a [specific user or role], I want to [action or goal], so that [benefit or outcome].

Example:

As a finance manager, I want to filter transactions by a selected date range, so that I can review financial activity for a specific reporting period.

Background / Context

Why are we building this?

Briefly explain the problem, business context, or user situation.

Example:

Finance managers currently need to manually review all transactions to find records from a specific period. This makes monthly reporting slower and increases the risk of missing relevant transactions.

Acceptance Criteria

The story will be considered complete when:

  • [Expected behaviour 1]

  • [Expected behaviour 2]

  • [Expected behaviour 3]

  • [Expected behaviour 4]

Example:

  • Users can select a start date and an end date.

  • Only transactions within the selected date range are displayed.

  • Users can clear or change the selected date range.

  • The system displays an appropriate message when no transactions are found.

Business Rules

Rules or restrictions that must apply:

  • [Business rule 1]

  • [Business rule 2]

  • [Business rule 3]

Example:

  • Users can only view transactions they are authorised to access.

  • The start date cannot be later than the end date.

  • Date and time should follow the user's configured timezone.

Out of Scope

This story does not include:

  • [Item intentionally excluded]

  • [Future enhancement]

  • [Related functionality]

Example:

  • Exporting filtered transactions.

  • Saving custom date filters.

  • Comparing multiple date ranges.

Dependencies / Notes

Include anything the team should know before development begins.

  • [Dependency]

  • [Assumption]

  • [Open question]

  • [Related story or system]


The Complete Copy-and-Replace Template

You can copy this directly into Jira, ClickUp, Notion, Azure DevOps, or another project management tool.

User Story

As a [USER / ROLE], I want to [ACTION / GOAL], so that [BENEFIT / OUTCOME].

Background / Context

Problem:
[What problem are we trying to solve?]

Why does this matter?
[Explain the user or business value.]

Acceptance Criteria

  • [Expected behaviour 1]

  • [Expected behaviour 2]

  • [Expected behaviour 3]

  • [Expected behaviour 4]

Business Rules

  • [Rule or restriction 1]

  • [Rule or restriction 2]

  • [Rule or restriction 3]

Out of Scope

  • [What is intentionally not included?]

  • [What may be handled in a future story?]

Dependencies / Notes

  • [Dependency]

  • [Assumption]

  • [Open question]


One Important Rule: Don't Fill Every Section Just Because It Exists

A simple story does not need a 500-word background.

Not every story needs business rules.

Not every story has dependencies.

Not every story needs five acceptance criteria.

The template should create clarity.

It should not create bureaucracy.

Use the sections when they add useful information.

Remove them when they don't.

A password reset story may need several acceptance criteria.

A simple text change might need almost none.

The level of detail should match the complexity and risk of the work.

The goal is not to make every ticket look complete. The goal is to make sure the team understands what needs to be built—and why.

The Best User Stories Create Conversations

A good user story does not mean nobody has questions.

Questions are healthy.

Questions such as:

  • What happens if this fails?

  • Who is allowed to perform this action?

  • What happens in unusual situations?

  • Is this solving the actual problem?

  • Is there a simpler solution?

A good story should make these conversations easier.

It should not attempt to eliminate them.

If nobody asks questions, you may have a very simple story.

Or you may have a team making assumptions without realising it.

A Quick Test Before Adding a Story to the Backlog

Before adding a user story, ask:

1. Do we know who this is for?

2. Do we understand what they are trying to achieve?

3. Do we understand why it matters?

4. Are we describing a user outcome rather than an implementation task?

5. Are we avoiding unnecessary solution details?

6. Do the acceptance criteria make the expected behaviour clear?

If you can answer yes to these questions, you probably have a useful story.

The Point Is Not to Write Better Sentences

This is the part worth remembering.

Writing better user stories is not really about writing.

It's about thinking.

A poorly written story often reflects a poorly understood problem.

And a beautifully written story can still be useless if the team is solving the wrong thing.

So don't judge a user story by whether it perfectly follows a template.

Judge it by whether it helps the team understand:

Who are we helping?

What are they trying to achieve?

Why does it matter?

What needs to be true for this to be successful?

Everything else exists to support those questions.

Because a user story is not supposed to impress anyone with how well it is written.

It is supposed to help a team build the right thing.

Product ManagementUser StoriesAgileProduct Development