Vesa Purho
Development Manager, Nokia

In my last article, I talked about how important it is to ask “why” so many times that you get to the bottom of what it is that people actually require without specifying an implementation alternative. Starting from “the possibility to import an XML configuration in the system,” we ended up with “making changes in the configuration and changing the status of the modules has to be easy.” Two issues need to be clarified in the requirement: do we have one requirement or two, and, most important, what is meant by easy?

One can easily argue that there are actually two requirements: making changes in the configuration has to be easy and changing the status of the modules has to be easy. The current requirement clearly reflects the current practice of using the configuration to build the TOC of the document set as well as to monitor the approval status of the modules. Naturally, since these actions may not exist in the new system, it would be wise to separate the requirements. It may also be that “easy” may be defined differently for the configuration change than for the module state change. These changes may be made at different stages in the process, which also speaks to separating the requirements.

The second question, what is meant by “easy,” is more difficult to handle. There are no absolute answers. The requirement needs to be clarified by the people who will actually implement the tool. Their opinion of what is easy will vary a lot from the actual end users’ perspective. For example, entering a bunch of commands with variables and switches in a command prompt may well be the easiest way for an experienced Unix user to change the status of the modules but would not be easy for a technical writer without DOS experience, let alone coding experience.

The problem with defining a requirement in more detail is that it easily turns into an implementation solution. If you ask, for example, “What in your opinion would be “easy” in changing the configuration,” you will probably get an answer like “drag-and-drop.” That is what people are used to. However, that limits the implementer’s ability to innovate. They might come up with an easier way to make changes than “drag-and-drop.” For example, they might use “click-and-click,” a technique in which you simply click the module to be moved and then click the place where you want to place the module without having to keep the mouse button down. Naturally, everyone has already made some assumptions about the implementation at this phase. You can probably assume that if the product is Web-based or PC-based, you would use a mouse and thus can handle clicking.

The answers to “what” and “how” questions should relate to measurable properties that you can actually test during and after the implementation. For example, “Changing the status of a module to approved should not take longer than three seconds” or “Changing a module’s place in a configuration should not take more than three clicks,” are reasonable definitions of “easy” which can be objectively measured. Remember, however, that all time-bound requirements are dependent on factors like network load and may apply only under normal conditions. I have heard responses like “We cannot promise these response times if the network is congested or down” to performance requirements from the development people. Naturally, they can’t and they should not promise; everybody understands that if there are problems in the network, the tools may have problems as well.

Setting requirements for response times and the number of clicks is relatively easy but more is needed to define “easy.” If the buttons are in strange places or the program forces the user to do steps in a strange order, the tool may fulfill all the requirements but still not be easy to use. Some requirements need a bit more definition and must be tested with the actual users to see if they have been fulfilled. Requirements should have measurements that can be verified. For example, you might write a measurement as “90% of the test users can do task x in y minutes with maximum of one reference to help or documentation.”

The only way to ensure usability is to use user-centered design methods in the design and implementation phases. That means creating user profiles, doing task analysis, prototyping, doing heuristic evaluations and usability tests, and so on. You can set requirements such as “The use of the program should follow a logical sequence of user tasks.”

The design group is responsible for designing use cases that show how they believe the users should interact with the product. They review those use cases with the actual users. I have sometimes encountered situations where the user representatives have written the use cases themselves, but I believe that also limits the innovation of the design and development team. The users begin with a reference point to their current tools and may not be able to innovate or may create scenarios that are impossible to implement. Naturally cooperation can help in these cases as well.

All in all, the requirements should not contain subjective words like “easy,” “fast,” or “with minimum effort” but should be further defined in measurable terms without implying an implementation alternative. The user interaction with the product should be defined by the design group and verified with the user community. During the entire development cycle, users should be involved in the decisions about the user interaction.

This article is the personal opinion of the author and does not necessarily reflect the opinion or practice of Nokia.