|
| 1 | +--- |
| 2 | +title: "User Stories Applied by Mike Cohn" |
| 3 | +date: 2025-06-14 |
| 4 | +summary: Explore how user stories improve collaboration, clarity, and adaptability in agile software development |
| 5 | +tags: |
| 6 | +- books |
| 7 | +- process |
| 8 | +--- |
| 9 | + |
| 10 | +{% |
| 11 | + include progressive-image.html |
| 12 | + asset="user-stories-applied" |
| 13 | + path="books" |
| 14 | + alt_text="User Stories Applied" |
| 15 | +%} |
| 16 | + |
| 17 | +How exactly do product development teams decide what to do? |
| 18 | + |
| 19 | +At its core, this is a communication problem. Those who need the software must effectively communicate with those building it. |
| 20 | + |
| 21 | +When communication is clear, resources are well-allocated, releases go smoothly, and software aligns with customer needs. When things _don't go well_, we get unrealistic deadlines, misunderstandings, and products that fail to meet customer needs. |
| 22 | + |
| 23 | +How can we avoid these common pitfalls? |
| 24 | + |
| 25 | +Mike Cohn addresses this question in his influential book, _User Stories Applied: For Agile Software Development_. |
| 26 | + |
| 27 | +## The Traditional Approach |
| 28 | + |
| 29 | +The traditional way of solving this problem is by specifying an exhaustive list of “requirements.” In practice this means writing lengthy, complex, implementation-focused descriptions of how a system should work: |
| 30 | + |
| 31 | +<div class="example"> |
| 32 | + <header>Requirements</header> |
| 33 | + <p>The system supports password resets using SendGrid</p> |
| 34 | + <p>The system allows users to save up to three unique credit cards in a relational database</p> |
| 35 | + <p>+1000 other requirements...</p> |
| 36 | +</div> |
| 37 | + |
| 38 | +At first, detailed requirements may seem beneficial. |
| 39 | + |
| 40 | +Wouldn't they help clarify features, control costs, and enhance predictability? Wouldn't it be nice to have a fully formulated plan guiding product development decisions? |
| 41 | + |
| 42 | +Cohn identifies several problems with this traditional approach. |
| 43 | + |
| 44 | +### Requirements can be incorrect |
| 45 | + |
| 46 | +Requirements written in advance are based on assumptions, which may later prove false. They may be written with the wrong target audience in mind or fail to consider technical constraints. The result: wasted time and effort. |
| 47 | + |
| 48 | +Even worse, teams might rigidly adhere to the initial set of requirements, ignoring better solutions that emerge later. This rigidity risks delivering products that miss customer needs entirely. |
| 49 | + |
| 50 | +### Requirements can be misleading |
| 51 | + |
| 52 | +Lengthy written requirements often seem comprehensive and complete, but this is an illusion. It's impossible to anticipate and write down every decision in advance. Once the work begins in earnest, the deficiencies in the requirements are unearthed. |
| 53 | + |
| 54 | +Making matters worse, written words are surprisingly imprecise. There’s no guarantee that two individuals will interpret a written statement in the same way. |
| 55 | + |
| 56 | +Consider the requirement: "Each lunch order must include a choice of soup or salad and bread." |
| 57 | + |
| 58 | +Does this mean lunch orders will include: |
| 59 | +<ul class="example-misleading-requirements"> |
| 60 | + <li>Soup or (salad and bread)?</li> |
| 61 | + <li>(Soup or salad) and bread?</li> |
| 62 | +</ul> |
| 63 | + |
| 64 | +### Requirements are hard to estimate |
| 65 | + |
| 66 | +Requirements, by their nature, are compound and contain many details. Consequently, it becomes difficult to know _when_ they will be done. The longer the list of requirements, the greater the uncertainty. |
| 67 | + |
| 68 | +### Requirements are difficult for everyone to understand |
| 69 | + |
| 70 | +Detailed requirements typically contain technical jargon, making them inaccessible to non-technical team members. This limits their use for effective collaboration. |
| 71 | + |
| 72 | +So what other option is there? |
| 73 | + |
| 74 | +## An Alternative: User Stories |
| 75 | + |
| 76 | +One of the many fruitful practices that emerged out of the Chrysler [C3 project](https://en.wikipedia.org/wiki/Chrysler_Comprehensive_Compensation_System) was the use of _user stories_. User stories are minimal, natural language descriptions of features, written from a user's perspective. |
| 77 | + |
| 78 | +<div class="example"> |
| 79 | + <p>As a customer, I can regain access to my account when I forget my password</p> |
| 80 | +</div> |
| 81 | + |
| 82 | +<div class="example"> |
| 83 | + <p>As a frequent flyer, I don't have to re-enter payment details each time I book a flight</p> |
| 84 | +</div> |
| 85 | + |
| 86 | +This simple shift in perspective provides significant benefits: |
| 87 | + |
| 88 | +### User Stories Force Conversation |
| 89 | + |
| 90 | +Unlike requirements, user stories make no attempt to detail precisely what must be built. User stories are, in fact, just _placeholders for a future conversation_. |
| 91 | + |
| 92 | +Before the work can begin, a shared understanding of what is needed must be worked out in a conversation between the customer, the development team, and business representatives. These discussions clarify understanding, resolve ambiguities, and prevent wasted effort. |
| 93 | + |
| 94 | +### User Stories Encourage Deferring Decisions |
| 95 | + |
| 96 | +Deferring commitment is a well-known practice used by agile teams. The idea is to wait until the last responsible moment to make a critical decision. |
| 97 | + |
| 98 | +This is not an elaborate form of procrastination; It’s a fundamental risk avoidance strategy. By waiting, the team maximizes available information before committing to a direction. |
| 99 | + |
| 100 | +For this reason, user stories are written in terms of _goals_ rather than solutions. By waiting until the work begins to discuss an specific solutions and acceptance criteria, the team is more likely to get things right. |
| 101 | + |
| 102 | +### User Stories Simplify Estimation and Prioritization |
| 103 | + |
| 104 | +Each user story represents a single, independent, relatively small unit of work. If a story is too large, teams are encouraged to split it into smaller parts. As a result, estimation and prioritization of stories is manageable. |
| 105 | + |
| 106 | +### User Stories Are Accessible to All Team Members |
| 107 | + |
| 108 | +User stories intentionally use everyday language, ensuring all stakeholders (customers, developers, product teams, marketers) clearly understand them. |
| 109 | + |
| 110 | +Not only does this approach ensure the team is aligned, it empowers all stakeholders to take an active role in shaping the software's development. Customers are not relegated to testing the software _after_ it is built; they can write stories, help determine their priority, and provide early feedback on proposed solutions. |
| 111 | + |
| 112 | +## Writing Effective User Stories |
| 113 | + |
| 114 | +Not all user stories are alike. Writing effective user stories requires a thoughtful approach. Good user stories exhibit the following qualities: |
| 115 | + |
| 116 | +### Valuable |
| 117 | + |
| 118 | +User stories should be valuable to the purchasers or users of the system. If the planned work is not valuable to this audience, then it puts the business at risk of losing sales. |
| 119 | + |
| 120 | +Cohn suggests including three essential elements in every user story: |
| 121 | + |
| 122 | +1. **Who wants the functionality**. The user or purchaser of a typical product or system. Rather than referring to these individuals generally, it is often beneficial to be specific about the role the person is playing (e.g. "job seekers" or "employers"). |
| 123 | + |
| 124 | +2. **What it is they want**. The thing that is desired or needed. It should be framed as a goal while remaining agnostic as to how that goal is achieved. |
| 125 | + |
| 126 | +3. **Why they want it**. An explanation of why the individual wants the functionality. This is provided to help the team decide how best to solve the problem when the work begins. |
| 127 | + |
| 128 | +In the book, Cohn suggests a template which captures all three elements: |
| 129 | + |
| 130 | +<div class="example"> |
| 131 | + <p>As a (role), I want (function) so that (benefit)</p> |
| 132 | +</div> |
| 133 | + |
| 134 | +### Written By The Right People |
| 135 | + |
| 136 | +Ideally, customers write user stories. The customer is in the best position to know what problems they'd like solved. If customers aren't available, a representative from the business who deeply understands the users' needs _may_ serve as a proxy. |
| 137 | + |
| 138 | +It is important to note that user proxies are risky. The proxy may unconsciously introduce personal biases. For example, the customer support team might prioritize features that reduce the number of support requests. Developers may downplay user issues in order to prioritize adopting a new technology. Those writing stories should strive to be as objective as possible. |
| 139 | + |
| 140 | +> The best way to ensure that each story is valuable to the customer or users is |
| 141 | +to have the customer write the stories. |
| 142 | + |
| 143 | +### Written For The Right Audience |
| 144 | + |
| 145 | +User stories must be written in a common language that is understood by all stakeholders. If business stakeholders dominate, stories might become too vague. If developers dominate, excessive technical jargon can obscure meaning. The goal is to create crystal-clear, shared understanding. |
| 146 | + |
| 147 | +### Independent |
| 148 | + |
| 149 | +Care should be taken to avoid introducing dependencies between stories. Dependencies between stories lead to prioritization and planning problems. Consider the following user stories: |
| 150 | + |
| 151 | +<div class="example"> |
| 152 | + <p>As a customer, I can pay with my Visa credit card</p> |
| 153 | +</div> |
| 154 | + |
| 155 | +<div class="example"> |
| 156 | + <p>As a customer, I can pay with my MasterCard credit card</p> |
| 157 | +</div> |
| 158 | + |
| 159 | +The developers believe it will take three days to add support for the first credit card. Each additional credit card is trivial. |
| 160 | + |
| 161 | +This creates a dilemma: which user story should be given the three day estimate? Visa or MasterCard? We can do better by recognizing they are dependent and combining them. |
| 162 | + |
| 163 | +<div class="example"> |
| 164 | + <p>As a customer, I can pay by credit card</p> |
| 165 | +</div> |
| 166 | + |
| 167 | +### Negotiable |
| 168 | + |
| 169 | +Stories must remain negotiable. They are _not_ written contracts describing functionality that the |
| 170 | +developers _must_ implement. Stories should be written with an understanding that the precise solution to the problem will be negotiated through _conversation_ when the work begins. |
| 171 | + |
| 172 | +> Because story cards are reminders to have a conversation rather than fully detailed requirements themselves, they do not need to include all relevant details. |
| 173 | +
|
| 174 | +### Right Sized |
| 175 | + |
| 176 | +Story size matters. |
| 177 | + |
| 178 | +When user stories are too large, they can be difficult to estimate and prioritize. Teams should break these down into smaller, manageable pieces. |
| 179 | + |
| 180 | +When user stories are too small, its an indication that the solution has been embedded into the stories. Teams should combine too-small stories into a single story that reflects their overarching goal. |
| 181 | + |
| 182 | +> Like Goldilocks in search of a comfortable bed, some stories can be too big, |
| 183 | +some can be too small, and some can be just right. |
| 184 | + |
| 185 | +## Testable |
| 186 | + |
| 187 | +Stories must be written in such a way that they can be tested. Consider the following: |
| 188 | + |
| 189 | +<div class="example"> |
| 190 | + <p>As a user, I never have to wait too long for any screen to appear</p> |
| 191 | +</div> |
| 192 | + |
| 193 | +This story is not easily tested because it contains the word "never" and because it does not define what "too long" means. How would someone verify that this story is complete? |
| 194 | + |
| 195 | +## Limits of User Stories |
| 196 | + |
| 197 | +While user stories offer significant benefits, they aren't universally applicable. Certain aspects, like system constraints (e.g. "handle 50,000 concurrent users"), are better documented separately. As with any agile practice, use user stories where they add clear value. |
| 198 | + |
| 199 | +## Conclusion |
| 200 | + |
| 201 | +Adopting user stories can significantly enhance communication, clarity, and adaptability within agile teams. By shifting from rigid, detailed requirements to concise, user-focused stories, teams improve their ability to collaborate and build valuable software. User stories aren’t a silver bullet but, applied thoughtfully, they provide a powerful foundation for successful agile software development. |
| 202 | + |
| 203 | +<style> |
| 204 | + .example { |
| 205 | + background-color: white; |
| 206 | + color: black; |
| 207 | + max-width: 55ch; |
| 208 | + padding: 1rem; |
| 209 | + border-radius: 0.25rem; |
| 210 | + box-shadow: light-dark(#aaa, #1a1a1a) 0.125rem 0.125rem 0.5rem; |
| 211 | + } |
| 212 | + |
| 213 | + .example header { |
| 214 | + font-weight: bold; |
| 215 | + margin-bottom: 1rem; |
| 216 | + } |
| 217 | + |
| 218 | + .example p { |
| 219 | + font-style: italic; |
| 220 | + line-height: 1; |
| 221 | + } |
| 222 | + |
| 223 | + .example p + p { |
| 224 | + margin-top: 1rem; |
| 225 | + } |
| 226 | + |
| 227 | + .example-misleading-requirements { |
| 228 | + margin-top: 0; |
| 229 | + } |
| 230 | +</style> |
0 commit comments