I’m working on modeling some requirements for a document management system. I’m a big fan of using models to represent every element, from goals and strategies through to business processes. From there, I model use cases and requirements and on down to system components that fulfill those requirements. Just call me a traceability hound.
I find that the effort to develop requirements in this way is, if anything, substantially less than the traditional “text first” method, and I can always output text documents for those times when people need their Word Document.
User Experience Scenarios are not, however, an easy fit with our current modeling languages. We have models for business processes (which are excellent for illustrating activities in the scope of roles), interaction diagrams (which are excellent for illustrating component lifecycles, timing, and information flow), and activity diagrams (which are excellent for illustrating the activity of a single module).
I am not completely comfortable illustrating a user scenario in any of these three visual languages. They really capture the wrong information, and fail to illustrate the things I care about.
For a user scenario, I want to know what persona is involved, what motivation that persona has for interacting with my business service, and what information they will have before the scenario starts. I also want to know what constraints they will expect of the scenario: what is their level of commitment to my business service? How frequently will they be interacting, and what is their understanding of the underlying information? While I can annotate one of the UML models above with this information, I cannot truly model this information in the UML diagrams described.
I’m using the following diagramming “language” to describe the connection between people, motivations, scenarios and use cases. To see this sample full-size diagram, click on it. The model attempts to show the people involved in creating and using architectural standards.
Using a UML-derived diagramming language, I can document the scenario (labeled “<<Scenario>>” in the diagram) as a sub-activity diagram. That activity takes on a sense of reusability, since it can be from the perspective of any involved actor while keeping the actor itself outside the scenario. This allows a single scenario to apply to different people (Object Oriented Encapsulation, as applied to workflow).
On a different view (a different diagram), I can illustrate each of those scenarios with links to the constraints that I mentioned above (frequency, information objects, level of commitment. etc).
The advantage of creating a model of this kind is obvious to me, because I’m a modeler. But for many folks, the benefits may not be clear. Let’s put it this way: if you change any one object or line, there is the potential for impacting other objects. With a model of this kind, you can SEE those potential impacts before they happen. By developing a model, the architect develops clarity of thought, and in doing so, reduces mistakes in the design.
I’m curious if others find this kind of model interesting.