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:

  1. Declarative requirements attached to the use case: these “statements of requirement” may be implicit in the structure (as is the case with preconditions and post conditions), or may be attached to the use case itself. For example, if we are creating a workflow system, we may see a declarative requirement attached to a use case saying something like this: “When a user logs in to the workflow system, the default screen is the task list.”  The interesting thing is that this requirement could be attached to any of a dozen different use cases.  It is universally understandable.
  2. Implicit requirements attached to a step in the use case: these are requirements for user interaction, data fields, and functionality that are implicitly stated by the description in the use case, without being declared.  For example, if we describe a use case in a workflow system where a person can “assign” a task to someone else to perform, we could see a step like this: “Step 3: from a drop-down list, select the name of the person to whom this task will be assigned, or enter their name in the text box”.  From that, we could create some declarative requirements like “users may assign a task to another user,” “the user will be presented with a list of team members to whom it is appropriate to assign a particular task, based on the task type,” and “the user may enter the name of a person to assign the task to.”
  3. The flow of the steps in a use case:  In the use case description, the business analyst is describing a sequence of steps that the user has to go through in order to perform a specific task (or, as I like to say, complete a specific system interaction).  That sequence itself, with the implicit order of “what information is provided first” and “what information is provided next” is often created by the analyst without regard to the difficulties of asking for information in that particular order.

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:

  • Specific – the analyst and the customer carefully considered both the order of steps and the interface controls that they want to see, and the developer should follow the flow and controls described as closely as possible.
  • Sequenced – the analyst and the customer carefully considered the sequence of information and interaction, but the customer is flexible on the interface controls that the developer may use when implementing the flow.
  • General – the analyst and customer agree with the flow, but are willing to consider any alternative flow that meets other requirements for information and functionality.
  • Suggested – the analyst created the flow as a story to elicit requirements.  As long as other requirements are met, the flow is optional.

This removes some of the guesswork about “customer intent” that is inherent in present use case design.

By Nick Malik

Former CIO and present Strategic Architect, Nick Malik is a Seattle based business and technology advisor with over 30 years of professional experience in management, systems, and technology. He is the co-author of the influential paper "Perspectives on Enterprise Architecture" with Dr. Brian Cameron that effectively defined modern Enterprise Architecture practices, and he is frequent speaker at public gatherings on Enterprise Architecture and related topics. He coauthored a book on Visual Storytelling with Martin Sykes and Mark West titled "Stories That Move Mountains".

4 thoughts on “When is the “flow” in a use case part of the system requirements?”
  1. 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.

  2. 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

  3. 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? ;^)



  4. 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.

Leave a Reply

Your email address will not be published. Required fields are marked *

3 × 1 =

This site uses Akismet to reduce spam. Learn how your comment data is processed.