There is an odd relationship between the concepts of a use case and a requirement. A use case is a structured chunk of text, useful for understanding and evoking requirements from the end user. It is also a way to place those requirements into context (as in “this requirements is attached to step 3 of UC41”). There is also the “flow” itself… the order in which information is entered and the “screens” that the user enters them into. In many cases, a use case is quite explicit about the flow, and the customers will spend a good bit of time describing that flow. In other cases, the flow is incidental.
So, I can see three types of “requirements” that are part and parcel of use cases:
I specifically want to focus on type 3: implicit order. The analyst creates this order. In some cases, the order was created in order to “tell a story” and it is NOT a requirement from the end user… it is a requirement from the analyst. In other words, the customer doesn’t care about the order itself. In other cases, the customer and the analyst will carefully create that sequence of steps, focusing time and attention on the order in which information is provided. The customer cares a great deal about the order of information (usually for valid reasons).
Here is where there is a potential for misunderstanding. When a use case is delivered to a development team, the analyst needs to make it clear whether the order of steps is a “useful story” or a “well considered requirement.” This indicator is missing from nearly every use case I’ve ever seen described, yet there is an interesting effect here. Developers will read a use case and will make decisions, in code, on the basis of what they see. Some will take all sequences in the use case as a verbatim requirement, even when it is not necessarily a requirement from the customer. Others will look for ways to create interesting and insightful interfaces, regardless of how hard the analyst worked to create the use cases.
Testers have a problem with either option, because they are often out developing test scenarios and estimating test effort from the requirements, without consideration of the developer’s choices.
And a developer who takes the flow of a use case as a verbatim expression is the kind of developer that would never have developed the original iPhone interface, because no analyst in the world could have designed that. The iPhone interface was developed by a design team that took the time to reconsider every aspect of user input on a touch device. It was not dictated by a business user through a use case process.
Suggestion for improving the standard structure of use cases:
There should be an indicator of some kind attached to the use case that says one of the following options is available to the design and development teams. Let’s call this indicator “Requirements for Flow Design” and the indicator will have one of the following values:
This removes some of the guesswork about “customer intent” that is inherent in present use case design.
I understand the problem domain you describe - however, there are organizational considerations implicit in the situation, such as;
(a) often times development teams won't accept "suggested" or "general" specifications. Many times are much more comfortable working in a "do as designed" mode, unless the solution is technically not feasible or there is a belief that an alternative flow will provide a benefit - in which case discuss with the analyst who can update the spec accordingly.
(b) additionally, analysts often times (certainly so in the product development arena and even in the enterprise space) ARE providing the requirements. System users may provide vague descriptions of desired functionality and from that point forward, it's the analyst's job to design the solution. This of course isn't the situation in agile environments, but the problem isn't really relevant to agile organizations in the first place.
Hi Jason,
The analyst is not usually qualified to design software, or even to design the user experience of software. They don't have the skills and most methodologies suggest that someone else is actually responsible for the design role.
Of course, you are right. In many cases, they do. But they should not. Business analysts role is to collect the requirements, not design the solution. It's a balance. But it is a FLAW in the process if they do more. I'm seeking to expose the flaw and provide a mechanism to correct for it.
If the user has nothing more than vague requirements, the analyst can suggest better ones. That is their job. That is why it is such a tight-rope act. In the "suggesting," they are designing. I know this.
That's why I point it out: the analyst needs to be honest with the developers. His or her opinion is not better or more informed than theirs. Teamwork requires honesty.
--- Nick
Nice post, Nick - this is an interesting perspective, and reflects an unfortunate reality - developers are often working in isolation of the requirements elicitation process. For exactly the reason you state (BA's are usually not qualified as developers, and the converse is usually true too) a delegate from the development team should be appointed as a stakeholder and participate in the requirements discovery and elaboration so that they can ask those sorts of questions and help contruct a use case that preserves a more robust record of the agreement between the stakeholders.
I think that the construction of the body of the use case should be used to lend more clarity. If the sequence is suggestive and not mandatory, use prose. Where the business requires adoption of specific steps, use a set of steps in the primary flow.
One more consideration - the testers should be doing both white box testing (which would require some developer insight) and black box testing strictly from the perspective of the actors in the system. The latter tests can be quite effectively designed from use cases. You did have a stakeholder from Quality in the requirements review, right? ;^)
Cheers,
Ron
Hi Ron,
I'm not trying to dictate details of processes, because I've seen a wide variety of different ways that development teams have attempted to capture and describe requirements. I'm only trying to point out one problem that I've typically seen with use cases.