Menu Expand Search
CS4530, Summer 2025

User Stories and Conditions of Satisfaction

This tutorial provides examples for user stories, conditions of satisfaction and how a minimum viable product can be defined.

Contents:

User Stories

A user story is an informal, general explanation of a software feature written from the perspective of the end user or customer. A user story is always of the following form:

As a <role> I can <perform action> so that I can <receive benefit>

User stories represent something the user/customer might want. There will be many ways to give the user/customer the benefit that they want.

We need to refine these in order to determine what to build. We call these refinements “conditions of satisfaction” (CoS)

Conditions of Satisfaction

A CoS should be a specific capability or behavior that the user expects, in the user’s terms. It should be visible to and verifiable by the user.

The CoS is a guide to the implementation team. It should be specific enough so that the implementation team has a clear idea of what they are building. There still may be many ways to implement a CoS. For example, a CoS probably would not specify any of the graphic or layout details; these would likely be left to the implementation team.

User Stories and Project Planning

In planning a project, need to assign priorities to each Condition of Satisfaction. Priorities tell us the order in which COS and their associated engineering tasks should be addressed, and how much effort should be devoted to each of them. There are many ways to describe priorities. For example, a user story might be described as Essential, Desirable, or Extension:

Minimum Viable Product (MVP)

An MVP is a product that consists of all essential conditions of satisfaction for all essential user stories. (Deciding which user stories are essential is a different project than deciding which conditions of satisfaction are essential to a user story.) Developers should prioritize those above others.

User Stories and Test-Driven Development

We model the development process as a cycle of refinements:

  1. User Stories
  2. Conditions of Satisfaction
  3. Testable behaviors
  4. Executable Tests
  5. Engineering Tasks (Code)

As we proceed down these refinements, we will likely go back and revisit design decisions that we made at earlier stages. This is the topic of Module 2.

Example

Other iterations of this class have worked on a “Fake Stack Overflow” (FSO) question-and-answer website. Here are some user stories that might apply to such a product:

User Story #1

As a knowledgeable developer on FSO, I want to be able to reply to questions with answers so that I can feel good about helping others in the way I was helped in the past.

These are possible conditions of satisfaction for this user story:

User Story #2

As someone who responds to many questions on FSO, I want to be list my replies and how often they are upvoted so that I can use the feedback to improve my communication skills.

These are possible conditions of satisfaction for this user story:

References