In this episode, Ivar Jacobson shares with listeners the birth of Use Cases, how to apply Use Cases in agile environments, and what lies beyond Use Cases. After listening to the podcast, listeners will understand:
- how the concept of a Use Case was first developed
- how to use Use Cases in an agile environment
- why Use Cases can be a powerful tool in agile development.
The Birth of Use Cases
In the mid-1980s, Ivar Jacobson was working in telecommunications and needed a way to describe the flow of events for a system function. Ivar decided to treat the system as a black box. He was less concerned about the internal working of the system and more concerned with how users would interact with the system and the value that users get from the system.
From his abstraction, he created a generic construct (Use Cases) that could be used in many situations to describe a system’s functionality through its interaction with the user. Ian Spence and others helped iterate on the Use Case concept through the popular tool it has become today.
Use Cases not only allow you to specify requirements; they are the beginning of test cases. As we describe the system interactions with Use Cases, the corresponding test cases emerge in a way similar to test first design.
Use Case 2.0 for Agility
As Ivar began looking at Use Case analysis and development, he realized that each Use Case may be made up of multiple threads (flows of events, scenarios, or slices). The best approach is to start with the most important thread an only about 10% of threads represent the architectural baseline.
By slicing Use Cases, the system can be developed and tested in small, valuable pieces that represent the architectural baseline.
In looking at scrum, Ian Spence connected Use Case slices to a product backlog. Each slice represented one or more user stories. This makes it possible to scale by seeing the whole system through a Use Case Diagram and delivering the system in small slices that can be used in iterative development.
Ivar and Ian wrote a book (Use Case 2.0) describing how to apply Use Cases in agile environments while including testing and reusable elements.