← Back to Resources

User stories & use cases

Project Development and Management

You've talked to your stakeholders (see Understanding Stakeholders) and done your requirement analysis. Now you have a pile of things people want. The next problem: how do you turn "the client wants students to be able to sign up for courses easily" into something your team can actually design, estimate, and build?

Two tools do most of the heavy lifting here: user stories and use cases. They look similar, get confused constantly, and are genuinely good at different things.


User stories

A user story is a short, informal description of a feature from the point of view of the person who wants it. The standard template, popularised by Mike Cohn and the early Extreme Programming/Scrum community, is:

As a <type of user>, I want <some goal>, so that <some reason/benefit>.

For example: "As a student, I want to see which courses still have open spots before I try to sign up, so that I don't waste time picking a course I can't actually join."

The key thing to understand about user stories is that they are deliberately incomplete. The original idea (the "Three C's": Card, Conversation, Confirmation) was that a story is a placeholder for a conversation, not a finished specification. The card just reminds you to have the conversation with the stakeholder before you build it. That's why stories are usually followed by a short list of acceptance criteria — specific, testable conditions that define "done":

Use cases

A use case is a more structured, detailed description of how an actor (usually a user, but it can be another system) interacts with the system to achieve a goal, including what happens when things don't go according to plan. Use cases predate user stories by about a decade — they come from Ivar Jacobson's work in the late 1980s/early 1990s and were later formalised by Alistair Cockburn.

A typical use case includes:

Example — "Sign up for a course":

Actor: Student  |  Precondition: Student is logged in and the course has open spots
Main flow:

  1. Student searches for or browses to a course.
  2. System displays the course details and remaining spots.
  3. Student selects "Sign up."
  4. System checks that a spot is still available.
  5. System confirms the sign-up and updates the student's schedule.

Exception flow (3a): if no spots remain by the time the student confirms, the system shows an error and offers to add them to a waitlist instead.

Postcondition: the student is enrolled and the available spot count is decremented.

So which one do I use?

Honestly — often both, for different purposes. A rough guide:

A useful habit: when a user story feels too flimsy to build from — when your team keeps disagreeing about what "sign up for a course" actually means step by step — that's usually a sign you need to write out the use case behind it before you touch any code.

Why is this important?

Without some intermediate format like this, requirements stay as vague sentences in someone's head (or worse, in a two-month-old email thread), and every team member fills the gaps with their own assumptions. User stories and use cases force those assumptions into the open, in a shape that's small enough to estimate, build, and test one piece at a time. They're also the artifact your supervisor will most likely want to see as evidence that you actually analysed the problem before building — a page of well-written user stories with acceptance criteria says a lot more about your process than a finished feature with no documented reasoning behind it.

Tips

References

Sethi, R. Software Engineering: Basic Principles and Best Practices — good grounding in requirements specification techniques, including use case modelling.

Cohn, M. User Stories Applied: For Agile Software Development — the book that popularised the modern user story format.

Cockburn, A. Writing Effective Use Cases — the standard reference for structured use case writing.

Visual Paradigm — User Story vs Use Case for Agile Software Development

Video: User Stories vs Use Cases