25 Use Cases

CONTENT

  • What Is A Use Case?
  • Three Types Of Use Cases
  • Writing A Use Case
  • Example: Logging Into The System
  • Choosing The Right Format
  • Looking Ahead

Key Points

  • What a use case is and how it describes interaction between a user and a system.
  • How different types of use cases support different levels of detail.
  • How to write a use case with actors, goals, steps, alternatives, and outcomes.
  • How use cases help teams understand system behaviour before implementation.
  • How to choose the use case format that fits the design need.

In the previous chapter, we introduced prototypes as tools that help us explore and test our design before writing code.

One of the most useful behavioural prototypes is the use case.

Although the names sound similar, use cases and user stories are not the same thing.

A user story describes what someone wants to accomplish.

A use case describes how the system and an actor interact to accomplish that goal. Be careful – however – a use case won’t say (for example) that “the user presses a button” and then the “system responds”.

In other words, a use case expands a requirement or user story into a step-by-step description of the conversation between an actor and the system.

What Is A Use Case?

A use case models how a system responds when an actor performs a particular task.

An actor is anyone or anything that interacts with the system. In many cases this is a person, but actors can also be external systems, devices, or services.

A good use case describes both sides of the interaction:

  • what the actor does, and
  • how the system responds.

If a description includes only what the user does, or only what the system does, it is not a complete use case.

The goal is to describe the complete interaction from beginning to end.

Three Types Of Use Cases

The amount of detail included in a use case depends on the size and complexity of the project.

Three common formats are used.

Brief Use Case

A brief use case is a short paragraph describing the main interaction between the actor and the system.

It focuses only on the happy path – the situation where everything works as expected.

Brief use cases are often used early in the design process or for relatively simple functionality.

Casual Use Case

A casual use case expands on the brief version by including alternative flows.

Alternative flows describe what happens when something unexpected occurs, such as:

  • invalid user input,
  • missing information,
  • communication failures, or
  • other error conditions.

These alternatives help the design team think beyond the ideal scenario and ensure the system responds appropriately when problems occur.

Fully Dressed Use Case

A fully dressed use case provides the greatest level of detail.

Instead of being written as paragraphs, it is organized into sections that typically include:

  • the use case name or identifier,
  • primary and secondary actors,
  • preconditions,
  • the main flow,
  • alternative flows, and
  • postconditions.

The main flow is usually presented as a numbered sequence of interactions.

Alternative flows reference the step where they branch away from the main flow before describing how the system responds.

This format is common on large or complex projects where many developers need a precise understanding of system behaviour.

Writing A Use Case

Most use cases begin with a requirement or user story.

Select one requirement and ask a simple question: What does the system do in response to the actor?

Start by writing the main flow.

Assume that everything works correctly. Describe one interaction at a time, alternating between the actor’s actions and the system’s responses.

Once the main flow is complete, consider situations where something might not go as planned.

Ask questions such as:

  • What happens if the user enters incorrect information?
  • What happens if required information is missing?
  • What happens if another system cannot be reached?
  • What happens if validation fails?
  • What happens if the actor cancels the process?

Each answer becomes an alternative flow.

Thinking about these situations early helps uncover missing requirements before development begins.

Good Practices

Regardless of which format you choose, several guidelines apply to every use case.

Give each use case a meaningful name or identifier.

This makes it easy to reference related functionality.

For example:

  • 1.0 Create Account
  • 2.0 Log Into the System
  • 3.0 Reset Password

Later use cases can reference earlier ones instead of repeating the same information.

End every flow in a stable state.

A stable state does not necessarily mean the actor achieved their goal.

For example, a failed login attempt is still a stable outcome if the system displays an error message and returns the user to the login screen, ready to try again.

The important point is that the system remains functional regardless of the outcome.

Example: Logging Into The System

Suppose we begin with the following user story: As a user, I want to log into the system so that I can access my account.

A Brief Use Case

2.0 Log Into The System

  • The user will enter their credentials (username/password) into the system which is connected to the main server. The system will verify that the credentials represent a valid user of the system. The system will verify that the password is correct. The system will pull user settings/preferences from the server. The system will pull user permissions from the server. The system will inform the user that they have been successfully logged in. The system will present the user with their control panel based on their preferences and permissions. The system will return control to the user.

Note, in the brief use case example:

  • “connected to the main server” is a pre-existing condition,
  • both the system and the actor are described as doing things, and
  • the use case ends in a stable state.

A Casual Use Case

2.0 Log Into The System

  • The user will enter their credentials (username/password) into the system which is connected to the main server. The system will verify that the credentials represent a valid user of the system. The system will verify that the password is correct. If the system determines that the credentials are not valid or the password is incorrect, the system will inform the user that their credentials are incorrect. The system will provide the user with an option to re-enter their information, create an account (1.0 Create an account), or reset a forgotten password (3.0 Reset forgotten password). The system will return control to the user. If the system determines the credentials are valid and the password is correct, the system will pull user settings/preferences from the server. The system will pull user permissions from the server. The system will inform the user that they have been successfully logged in. The system will present the user with their control panel based on their preferences and permissions. The system will return control to the user.

You should notice that the casual use case looks very similar to the brief use case, save for adding the alternate flow (bolded, and shown in red). Further, you should notice that:

  • other use cases are referenced (specifically 1.0 Create an account, and 3.0 Reset forgotten password),
  • both the main and alternate flows end in a stable state.

A Fully Dressed Use Case

ID/Name 2.0 Log Into The System
Primary Actors
  • User
  • System
Secondary Actors
  • None
Pre-Conditions
  • System is stable
  • The user has created an account (1.0)
Main Flow

1. User submits their username and password to the system

2. The system verifies credentials represent a valid user of the system

3. The system verifies the password is correct

4. The system will pull user preferences from the server

     etc…

Alternate Flows

2a. The system determines that the user credentials are not for a valid user

2b. The system informs the user that there is a problem

2c. The system provides the user with options to re-enter their information (return to main flow 1.0), or to create a new account (1.0 Create an account).

3a. The system determines that the password is incorrect

3b. The system informs the user that there is a problem

3c. The system provides the user with options to re-enter their information (return to main flow 1.0), or to reset their password (3.0 Rest forgotten password)

Post-Conditions
  • The system is in a stable state
  • The user has logged into the system

Notice that all three formats describe the same interaction.

The difference is simply the amount of detail they include.

Choosing The Right Format

The appropriate use case format depends on the project.

Small projects often benefit from brief or casual use cases because they are quick to write and easy to revise.

Larger projects usually require fully dressed use cases so that everyone involved has a consistent understanding of the system’s behaviour.

Regardless of the format, the goal remains the same:

Use cases help us understand how the system should respond before we begin implementing it.

Looking Ahead

Use cases describe how a system behaves.

In the following chapters, we’ll explore additional behavioural prototypes that model interactions from different perspectives, helping us better understand both the structure and operation of the software we’re designing.

 

License

Icon for the Creative Commons Attribution-NonCommercial 4.0 International License

Software Design: Planning Purposeful Solutions Together - A Community-Engaged Approach Copyright © 2026 by Dan Gillis, Nic Durish, Alessandro Arezza is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License, except where otherwise noted.