A complete guide to writing user stories

Introduction

If you have worked on any product in your career, you have probably come across user stories and wondered how they should be written. You are not alone!

Despite studying software engineering and working in the industry for over a decade, I’ve consistently faced challenges with user stories, especially with fellow engineers who sometimes find them pointless and a waste of time.

And honestly, they’re not entirely wrong. This is unfortunately the fault of the industry that introduced the concept. While user stories are widely practiced, they’re rarely done properly.

In this post, I’ll guide you through everything you need to know about creating effective user stories that actually add value to your product development process.

What Is a User Story?

At its core, a user story is a short, simple description of a feature told from the perspective of the person who desires the functionality. It’s basically a way to capture what the user needs and why.

The Classic User Story Format

User stories typically follow one of these formats:

"As a [who], I want [what], so that [why]"

Or alternatively:

"In order to [why], as a [who], I want [what]"

Let’s break down these components:

  • Who? – The type of user or customer, also known as a persona.
  • What? – The user’s goal for the feature or product.
  • Why? – The reason the user is using the product or feature.

Tip: Think of it as Persona → Goal → Reason. This simple structure ensures you’re always thinking about the actual users of your product and their needs.

Who Should Be Involved in User Story Creation?

User story creation isn’t a solo activity. For the best results, consider including:

  • Actual Customers or end users (when possible)
  • Product Manager
  • Product Owner
  • Development team
  • Key Stakeholders or representatives

Remember, everyone has a story to tell, and multiple perspectives enrich the quality of your user stories. Think about how many times you have shown someone a tool and they’ve perhaps noticed something you didn’t pick up on.

The Three Cs of User Stories

When working with user stories, there are three key components you need to get right to make sure they’re complete and effective for team collaboration. The goal is to keep communication flowing over long documentation, so everyone on the team is on the same page about what needs to be developed.

Does that work better?

1. Card

A written brief description of a user story used for planning. This is typically what’s written on a physical card or entered into your project management tool.

2. Conversation

The user story should serve as a reminder to have a conversation about the feature. Written details can never replace the rich context that comes from team discussions.

3. Confirmation

Each story must identify what it will take for it to be considered “done” by the customer. This is where acceptance criteria come in (more on that later).

Why User Stories?

User stories offer several advantages over traditional requirements documentation:

  • They emphasize verbal communication rather than written specifications
  • They’re relatable and comprehensible for both customers and development teams
  • They’re the right size for planning sprints with faster feedback loops
  • They work well for iterative development and embrace change
  • They encourage deferring detail until you understand what you really need
A User Story Is Like a Piece of Cake: Vertical Slicing

One of the most important concepts in user story creation is “vertical slicing.” A vertical story slice is a cross-section through the layers of a codebase that forms a fully functioning feature.

Think of your product as a cake. A proper user story should be like a slice of cake that includes all layers—from the user interface down to the database. If any layer is missing, the cake loses its completeness.

Horizontal vs. Vertical Slicing

Some teams focus on a single layer (horizontal slicing) because that’s what they’re accustomed to. For example, they might create stories around “implement database schema” or “create UI components.” This approach leaves gaps in delivering actual value for the customer.

Vertical slices, on the other hand, deliver complete pieces of functionality that users can interact with and provide feedback on.

What Makes a Complete User Story? INVEST

A good user story should follow the INVEST criteria:

  • Independent
  • Negotiable
  • Valuable
  • Estimatable
  • Small
  • Testable

Let’s examine each of these criteria in detail:

Independent

User stories should be self-contained and not inherently dependent on other stories. Consider this example of related but not independent stories:

As a premium customer, I want to renew my membership with my:

  1. Visa Card, so that I can continue receiving early discounts.
  2. MasterCard, so that I can continue receiving early discounts.
  3. Maestro, so that I can continue receiving early discounts.

These stories aren’t independent because they’re all variations of the same functionality. We have two options:

Option 1: Combine the stories if they require less effort (less than a day or two):

As a Premium customer, I want to renew my membership with my payment card so that I can continue receiving early discounts.

Option 2: Split strategically if the combined story would take longer than an iteration:

As a Premium customer, I want to renew my membership with my Visa Card, so that I can continue receiving early discounts.

As a Premium customer, I want to renew my membership using two additional payment methods so that I can continue receiving early discounts.
Negotiable

User stories are not contracts. They should have room for conversation and adjustment. If some details are already known, they can be added as additional notes—ideally just a line or a paragraph.

Avoid too many notes. If you realise there are too many details to consider, then the story requires splitting.

Example:

As a premium customer, I want to renew my membership using my payment card so that I can continue receiving early discounts.

Note: Accept Visa, MasterCard, and Maestro payment cards.
Valuable

Stories must provide clear value to the end user or customer. Consider this poorly written story:

As a software engineer, I want to utilize the pipeline to evaluate our data models so that I know how well they are performing before moving to a production environment.

What’s wrong with this?

It’s:

  • Not from the user’s perspective
  • The benefit isn’t obvious to the end-user

While it may help improve the system, it should be documented as a technical task associated with a non-functional requirement or an epic.

Estimatable

The team should be able to estimate the effort required to implement the story.

If they can’t, it’s usually because:

  • The story is too big
  • There’s a lack of domain knowledge
  • There’s insufficient technical know-how

When a story isn’t estimatable:

  • Refine it if it’s not understood
  • Slice it if it’s too big
  • Create a spike story for further research

Examples:

Too big:

As a content creator, I want to manage my content page so that I can keep my content up-to-date.

Too small:

As a content creator, I want to enter my email so that I can update my personal information.
Small

User stories should be small enough to be completed within a single iteration or sprint. If there are too many activities required to fulfill the user’s goal, split the story. Determine if the story is compound (multiple unrelated actions) or complex (multiple related actions).

Testable

A good user story must have acceptance criteria (AC) that specify the conditions for satisfaction. Untestable stories often appear as non-functional requirements.

Example:

As an epidemiologist, I want to view the source of reported outbreaks, so that I can check the information is reliable.

Acceptance criteria:

  1. View the source reporting the outbreaks.
  2. Display the link to the source, referencing the reported outbreaks.
Common Pitfalls in User Story Creation
1. Writing Technical Tasks as User Stories

Remember, user stories should represent user needs, not technical implementations. If you find yourself writing “As a system, I want to…” you’re not writing a user story.

2. Creating Stories That Are Too Large

Large stories, sometimes called “epics,” should be broken down into smaller, manageable pieces before development begins.

3. Neglecting the “Why”

The “so that” part of a user story explains the value. Without it, teams may implement features without understanding their purpose.

4. Writing Stories Without Involving Users

The best user stories come from understanding actual user needs, not just what the team thinks users want.

5. Treating Stories as Requirements Documents

Stories should initiate conversations, not replace them. Avoid the temptation to add extensive details that turn stories into specifications.

Tips for Better User Story Writing Sessions
  1. Set the stage properly: Ensure everyone understands the purpose of the session and the product vision.
  2. Use real user personas: Create detailed personas based on research to make stories more concrete.
  3. Prioritize: Not all stories are equally important. Use techniques like MoSCoW (Must have, Should have, Could have, Won’t have) to prioritize.
  4. Review regularly: Revisit and refine stories as you learn more about user needs.
  5. Keep them visible: Whether physical or digital, make sure stories are accessible to the whole team.
Conclusion

User stories are powerful tools when used correctly. They shift focus from writing about features to discussing them, and from technical specifications to user needs.

By following the INVEST criteria and avoiding common pitfalls, you can create user stories that truly guide your product development toward meeting user needs.

Remember that user stories are meant to be conversation starters, not comprehensive documentation. The real value comes from the discussions they generate and the shared understanding they create within your team.

Next time you sit down to write user stories, ask yourself: “Is this truly from the user’s perspective? Does it clearly communicate value? Will it spark meaningful conversation?” If the answers are yes, you’re on the right track to creating effective user stories that drive product success.

Resources for Further Learning
  • “User Stories Applied: For Agile Software Development” by Mike Cohn
  • “User Story Mapping” by Jeff Patton
  • Mountain Goat Software’s resources on user stories (www.mountaingoatsoftware.com)