Since we will be dealing with fairly abstract concepts, let us create a specific example to make the subject more tangible. Let us start with the "too big" story:
As a user of the platform, I want to have a response time of less than 2 seconds, so that I can spend more time actually making progress.
Step 1 - Start asking questions
A good way is to break up the team in a Refinement session and let them actually build a model around the story to help them discover questions, independently.
Here is what the team might come up with:
Which type of users do we have?Regardless of what questions come up, what you need is that these questions are written down explicitly, not a detailed discussion to answer these questions (yet).
Do admins have the same needs as application users?
Does it really hurt if user creation takes a bit longer?
Which function actually takes the longest?
Is 2.1 seconds a problem?
We could make transactions faster by splitting into multiple minor steps, but that has more clicks - would the users accept that?
Step 2 - Bring the questions together
Users and their needsWhat you need now is not the similarities within the clusters, but the differences between the clusters.
Function specific boundaries
Step 3 - Slice based on clustersSlicing is best done across differences, but keep real user value in mind. None claim to solve the entire problem, all will contribute a meaningful partial solution. At the moment, let us "forget" about the overall problem we have and specifically focus on partial delivery.
Here are examples for extract user-relevant, deliverable stories from the basic story:
As a new user, I want to create a new account in less than 2 seconds.These stories are still quite different in size, but they are much easier to handle than the entire block. After we are "Done" on the first two stories, there is still a large amount of work to be done - but also a tangible result. Some of these stories might be discarded immediately, because the team realizes that this specific need is already met.
As admin, I want to wipe a user account in less than 2 seconds.
As transaction user, I want to complete a transaction in the system in less than 2 seconds.
Step 4 - Drill in, Rinse + Repeat
- Workflow: Steps, user goals, scenarios
- Transactions: activities, operations (CRUD)
- Users: personae (user types), roles, responsibilities
- Technology: configuration, context, data streams (& interfaces)
- Data: content, types, subsets
Here is an example of what the "data" group might come up with:
- 60 second timeout when the database is down.
- Stuck in a "Waiting" dialog when the Internet connection is unstable.
- Mass update speed is proportional to amount of updates.
Step 5 - Verify & EngageDepending on how far you take this, you can slice down any large topic to as many small topics as needed until the team arrives at the following two conclusions:
- We have discovered relevant areas for change
- We can resolve a few stories in a fairly short amount of time
The next time you encounter a backlog item that is "too large to do in a Sprint", try asking tough questions and slicing along the differences between the questions.