The scope of your product and project is defined by the set of requirements that need to be implemented. Without careful management, additional wishes and demands will continually be added to the project’s scope. This phenomenon, known as scope creep, will threaten your ability to deliver on schedule.
Requirements should be stated in concrete, measurable terms whenever possible. For example, rather than stating that “the product must be easy to learn”, which is subjective and unprovable, you might consider a phrasing that lends itself to objective testing, such as “95 percent of users will be able to successfully process a standard passport application after the two-day training session”.
Some requirements are “definitional”: they result from, and form part of, your definition of what the purpose and market positioning of your product is. Other requirements need to be elicited from your users and other stakeholders.
]]>One traditional approach to designing and building software products was the waterfall model, where requirements are first gathered and written up in specifications documents. These are then handed off to designers, who create designs and write design specifications. These are then handed off to developers, who build the product. The product is finally handed off to testers, who verify that the product matches the specifications.
This sounds fine in theory — it’s a very logical, rational decomposition — but for large, complex products, this approach never really seems to work very efficiently. For complex projects, it’s never possible for analysts and designers and programmers to get everything correct and complete on the first try, and so waterfall projects inevitably tend to break down into a chaotic scene of documents being passed back and forth between groups for correction. And since software projects span months or years, it’s very frequent that the requirements will change during the course of the project, meaning that by the time the product is finally built and released, it may no longer actually meet the needs of the users and stakeholders.
An effective way of bringing some order to this chaos is to recognize that complex analysis, design, and development work is never done completely or correctly on the first attempt; it takes many iterations of reviewing, revising, and testing to get it right.
An iterative approach to design and construction breaks the project into many short, structured cycles of work. In each pass around the cycle — each iteration — the work products get better and better and more complete. An advantage to this approach is that you get a basic functioning version of the product available for testing very early on in the project, and this early product can be used to discuss and further refine requirements with the project stakeholders.
Attempts to illustrate an iteration of the design cycle usually end up looking something like this:
This diagram is unsatisfying, though: it suggests that the activities are separate and take place sequentially, and this is not always the case. There is often constant, fluid switching between the different activities, and team members will usually be working on different activities simultaneously in parallel.
In addition, the nature of different products can enable various different design approaches:
And for products that lend themselves to rapid prototyping, often no formal design documentation is ever recorded. The prototype is the representation of the design, and so the Design and Build activities merge together.
The User-Centered Design approach recommends that you involve users in requirements gathering, and in the usability testing and evaluation of designs, prototypes, and the actual product.
In other blog posts, we’ll take a closer look at the activities in the design cycle. We’ll examine requirements analysis and validation, the process of design, prototyping, evaluating designs and prototypes, and conducting usability testing.
]]>That’s not incorrect, but there’s usually a little bit more to it than that. To design a product’s user interface effectively, you have to think through and decide on all of the following:
Thinking through these issues isn’t enough, though. Since you’re probably working in a team, you’ll have to communicate your designs and intentions to the team members who will build and test the product. This communication can take the form of formal design documents and specifications, or prototypes and mockups, or perhaps even just face-to-face communication in front of a whiteboard.
And you need to be sure that what you design is feasible within the constraints of your project: It has to be implementable using your technical framework, it must be implementable with the skills of the team members available, the performance must be acceptable, and so on. Can the project team build the product at a reasonable cost and within a reasonable timeframe? And if the product is being marketed (as opposed to being a one-off custom project for a client), will the product sell enough copies to be profitable?
How do you figure out all of this? To start, you need to understand who will be using the product, and what they want and need. You’ll need to do this at the beginning of the project, and you’ll need to continually research and improve your understanding of your users as the project progresses, as these user requirements can often change.
We should note two things:
UCD makes a lot of sense, and yet in many corporate environments, there is extraordinary management resistance to involving users in the product development process. Let’s examine some common objections to UCD and how you might address them.
Gently identify flaws in the company’s current products that could have potentially been avoided if a user-centered design approach had been used. If it’s too politically sensitive to criticize the company’s products, then try finding examples in your competitors’ products, or in mass-market products you’re familiar with.
If you’re forced to use a company-wide standard project methodology, ask whether the status-quo approach has always delivered flawless results, or whether there’s potential room for improvement. Lean, competitive organizations are often willing to entertain and embrace ideas for doing things more effectively and efficiently.
You’d be surprised at what you can learn from observing users doing their work, asking what problems they have with their current system or approach, and getting their ideas on what could be done better. It’s virtually guaranteed to challenge some of your long-held assumptions.
For enterprise applications, it often sounds like a good idea to only talk to the managers who oversee the users. But it’s important to talk to actual users who work with the system, and not just their managers: The reality of the way knowledge workers really get their jobs done frequently involves workarounds and special cases that their managers may overlook (or may not even be aware of).
Getting the requirements right is important so that you build the right product. This will prevent the team from wasting valuable time on unnecessary features and rework. Likewise, testing the product as it is developed to ensure that it really meets the users’ needs will avoid costly disputes with the customer (for bespoke enterprise systems) or failure in the marketplace (for mass-market products) after the product is delivered.
Your developers and business analysts can learn the techniques from books or training courses, or you might consider hiring a usability consultant.
Some organizations suffer from ugly and unproductive conflicts between competing managers and departments over their areas of responsibility. Try to build consensus around the need to establish the best process for ensuring a quality product, as all departments will benefit if the product is successful.
Users and customers are usually more impressed that the team is taking the time and cares enough to understand their needs and provide a great product. If this is still a concern, then assign experienced senior staff to be involved with the users.
Ensure that all proposed user requirements undergo a proper review process to ensure that everyone’s wished-for features don’t gradually sneak into the product scope (this is known as scope creep or requirements leakage) without analysis and confirmation by an authority. A process such as the Quality Gateway described by Suzanne and James Robertson in Mastering the Requirements Process is recommended for controlling the quality of proposed requirements.
Confidentiality is an important concern during the development of products to be sold on the open marketplace (it’s usually less of a concern for in-house enterprise applications). Consider non-disclosure agreements. Or, if possible, instead of working with users at your customers’ sites or recruiting users “off the street” (depending on your type of product), try to find users within your own organization.
Ensure that users understand that their suggestions and feedback are important, and that the project will try to accommodate as many reasonable ideas as possible, but that no guarantees can be made for any particular feature requests. Explain that the project has deadline and budget constraints and must satisfy multiple stakeholders, and that compromises must be reached.
(Seriously?) Much better to find serious flaws early, when they can be corrected, than to discover them after delivering the product!
[ad#AdSense_Banner]
]]>Gould and Lewis’s seminal 1985 paper Designing for usability: Key principles and what designers think identifies the three key components of the UCD philosophy:
Users should be involved in the project from its very inception. The designers and developers should have direct contact with actual users (or propsective users when a completely new product is being developed).
In order to be able to design a successful product, you must discover the users’ wants and needs, and you must understand users’ demographics, skills, knowledge, attitudes, and behaviors. For the design of hardware devices, anthropometrics (body measurements) may also be needed.
You also need to understand the tasks that the user will perform with the product, and that means understanding the relevant business domain. For example, if you’re designing a system to be used by bank tellers, you need to understand all of the tasks that bank tellers perform, and to do that you need to understand all of the terminology and concepts of retail banking.
In understanding the users’ tasks, you need to understand how the users are currently doing their work, and they might like to do things differently.
Early on and throughout the project, users should be involved in validating the user requirements and evaluating the product designs. This is best done by constructing simulations and prototypes of the product, and observing users while they work with them. You can obtain qualitative data by recording users’ experiences and reactions, and asking for feedback.
Deeper insights can be obtained from quantitative data. You can define metrics for usability factors like learnability, efficiency, and error rates. You can then measure and compare users’ performance across different versions of prototypes.
Continual user testing helps reveal usability problems and defects in your designs and prototypes, and helps you identify improvements.
The product should undergo a repeating cycle of design, modification, and testing, to fix identified problems, and to incorporate changes resulting from gaining an improved understanding of the users’ requirements.
“Build it right the first time” is a nice but unattainable ideal. For complex products, it always takes several tries to get it right. Iterative design strategies recognize this fact and ensure that the product is continually improved and fine-tuned so that the end product is indeed “right”.
A later 1991 paper by Gould, Boies, and Lewis added the following fourth aspect:
The various aspects of the product that contribute to usability – i.e., the conceptual design, user interface design, documentation, training, help system, etc. – are all tightly interrelated. They should therefore evolve together in parallel and be under the same management. It is too problematic to attempt to manage them separately and sequentially.
All of these factors sound obvious and self-evident, and yet they are rarely done in practice. In later blog posts, we’ll discuss how to structure projects so that they involve users and employ an iterative approach. We’ll also explore techniques and practices for collecting user requirements and doing prototyping and user testing.
[ad#AdSense_Banner]
]]>