Software development methodologies have evolved rapidly over the last few decades, moving from heavy, upfront waterfall documentation to lightweight, iterative agile practices. For a long time, the traditional “Use Case”—a staple of object-oriented software engineering—was viewed as incompatible with modern agile frameworks like Scrum and Kanban. It was often criticized for being too document-centric and slow.
Enter Use-Case 2.0. Introduced by Ivar Jacobson, Ian Spence, and Brian Kerr, this modern framework reinvents the classic use case to be lightweight, scalable, and versatile. It is designed to bridge the gap between the structural benefits of use cases and the flexibility of agile development.
Use-Case 2.0 is the modern evolution of the use-case approach, developed specifically to address the limitations of traditional requirements gathering. Unlike its predecessor, which often required exhaustive detail before coding began, Use-Case 2.0 focuses on essentials, iterative delivery, and vertical slicing.
The core innovation of this framework is the ability to break use cases down into smaller, manageable pieces known as Use-Case Slices. This allows teams to maintain the “big picture” of the system architecture while simultaneously delivering value in small, sprint-sized increments compatible with Scrum, SAFe, and Disciplined Agile.
Use-Case 2.0 is founded on six guiding principles that ensure the process remains lean and value-driven:
To understand how Use-Case 2.0 fits into Agile, one must understand its artifacts. The framework simplifies the heavy documentation of the past into three primary components.
A use case still describes a goal-oriented interaction between an actor (user) and the system. However, in version 2.0, it is not fully detailed upfront. It starts with a name, a brief description, and the main success scenario. Details regarding alternative flows and exceptions are added “just-in-time” as they are prioritized for development.
The Use-Case Slice is the most critical innovation in this framework. A slice is a vertical cut through a use case that constitutes a complete flow of value. It includes a portion of the narrative (stories), the relevant test cases, and the code required to implement it.
Slicing allows a single use case (e.g., “Process Order”) to be split across multiple sprints:
Each slice acts as a backlog item—it is estimable, testable, and deliverable within an iteration.
While slices are handled in the daily work, the Use-Case Model remains as the map. It is the aggregate of all use cases, providing the context and architectural overview that individual User Stories often lack. This solves the common agile problem where a team completes hundreds of stories but loses track of the overall system behavior.
Many teams struggle to choose between User Stories and Use Cases. Use-Case 2.0 argues that you don’t have to choose; it offers the structure of use cases with the agility of stories.
| Aspect | Classic Use Cases (Pre-2.0) | User Stories | Use-Case 2.0 |
|---|---|---|---|
| Upfront Effort | High (Detailed specs) | Very Low | Low → Incremental |
| Big Picture View | Yes | Often Lost | Yes (Via Use-Case Model) |
| Iterative Capability | Poor | Excellent | Excellent (Via Slices) |
| Traceability | Strong | Weak | Strong (Flows to Tests) |
| Test Focus | Manual / Late Stage | Acceptance Criteria | Built-in per Slice (TDD) |
| Best Environment | Waterfall / Structured | Simple Agile Projects | Complex / Enterprise Agile |
Adopting this methodology involves a cyclical workflow that fits neatly into standard agile sprints:
Use-Case 2.0 is particularly effective for enterprise systems, regulated industries, or complex domains where simple User Stories are insufficient.
It provides scalability by allowing teams to start light and add formality only where necessary. It ensures value-focus by forcing teams to think in end-to-end user journeys rather than isolated technical tasks. Finally, it solves the documentation debt problem; because the Use-Case Model is updated iteratively, the documentation evolves with the code, acting as a “living” requirement set rather than a stale archive.