Creating a shared vision
After the initial set of stakeholder representatives has been assembled to work on the project, the first thing to do is to create a vision of the system that they can all share. To be effective, this vision must provide a shared understanding of the problem to be solved and unify the various stakeholder perspectives. If there is no shared vision, then it will be very difficult to:
Actively involve the stakeholder representatives in the project
Assess whether real progress is being made
Manage the project scope
Validate the decisions made in the day-to-day running of the project
Bring new developers or stakeholder representatives into the project
Have effective communication among the stakeholders
To be able to achieve a truly collaborative and cooperative working environment, it is essential that everyone involved in the project share the same vision of the project and the system to be built.
In this section we will look at:
Identifying the underlying problem to be solved
Capturing the stakeholders' needs
Providing a high-level requirements specification
Providing a product overview
How these elements complement the use-case model
Analyze the Problem
Before you dive into the specification and production of your solution, it is always a good idea to take a step back and consider the problems that you expect your solution to solve and the opportunities it will exploit. This will enable you to ensure that all of the functionality provided by the system is directly contributing to the alleviation of these problems and the success of the product. It will also help you to validate that you have the correct stakeholders involved in the project.
A problem can be defined as the difference between things as perceived and things as desired (Gause and Weinberg, 1989) or as a question or matter to be worked out (Collins Modern English Dictionary). Both of these definitions emphasize that there are many ways to solve a problem, not all of which require the production of a solution. In many cases, changing the customers' perception of what they have now or changing their perception of what they want is sufficient to resolve the problem. If a difference does not exist between what you perceive you have and what you want to have, then you don't have a problem.
If you want to satisfy customers' real needs, you must understand what problem they are trying to solve. You want to avoid hearing a "Yes . . . but . . ." when you deliver the final product (for example, "Yes, it meets the requirements, but it does not solve my problem."). Also, if you want to avoid extra work, it pays to focus on the real problem and to focus on the part of the problem that you actually need to solve. Solving the wrong part of the problem means you may have to go back and redo much of your work.
The best way to capture the problem is to construct a problem statement. This is a solution-neutral summary of the stakeholders' shared understanding of the problem to be solved. It includes an assessment of the problem's impact and the benefits to be gained by its solution. It can be captured using the simple template shown in Table 3-2. The beauty of the problem statement is its ability, as illustrated by Figure 3-6, to represent the tip of the requirements pyramid while simply and succinctly summarizing the problem to be solved. Understanding the problem is the first step in understanding the requirements. The stakeholders often describe the problem in terms of their own needs, but each need should reflect an aspect of the same underlying problem. All projects embarking on use-case modeling should take time to produce at least a simple problem statement.
Figure 3-6. The problem statement represents the tip of the requirements pyramid.
Table 3-2. Problem Statement Template
The problem of |
[describe the problem] |
Affects |
[the stakeholders affected by the problem] |
The impact of which is |
[what is the impact of the problem?] |
A successful solution would |
[list some key benefits of a successful solution] |
Often, the stakeholders have different perspectives on the problem (these are represented by the different stakeholder needs; see the next section), but it is very important that they reach agreement on a shared problem at some shared level of abstraction. If they cannot agree on a simple problem statement, then they are unlikely to agree on the scope or suitability of any proposed solution. Sometimes, achieving a shared definition of the problem can be very difficult, yet it's essential to understand why stakeholders want to do something new. There are many ways to build up this understanding. Our favorite is to perform some root-cause analysis using fishbone diagrams and then apply the Pareto principle to help in leveling the root causes.8
Remember: After a team of people starts use-case modeling, it is very easy for them to forget the problems that the system is intended to address and to start inventing new use cases. It is very easy for their interest in applying a modeling technique, such as use cases, to totally override the original purpose that led to the adoption of the technique. You should always remember that use-case modeling is a means to an end and not an end in itself.
Table 3-3 shows an example of a problem statement for a customer support system. Note that in the problem statement, the subject is the stakeholder, "I need to . . . ;" in the corresponding requirements, the subject is the system "The system provides . . . ." The goal of this problem analysis is to make sure that all parties involved agree on what the problem to be solved is. To this end, it is important to consider the business aspects of the problem as well as technical ones. Without checks and balances, many development teams will immediately dive into the technical details of their proposed solution without even considering the business aspects of the problem the solution is intended to solve. It is essential that the project team have a good understanding of the business opportunity being met by the product and the market forces that motivate the product decisions. This will require the development of additional business-focused documentation (for example, a business case and supporting business model) to complement the problem analysis summarized by the problem statement.
Table 3-3. The Problem Statement for a Customer Support System
The problem of |
untimely and improper resolution of customer service issues |
Affects |
our customers, customer support representatives, and service technicians, |
The impact of which is |
customer dissatisfaction, perceived lack of quality, unhappy employees, and loss of revenue. |
A successful solution would |
provide real-time access to a troubleshooting database by support representatives and facilitate dispatch of service technicians, in a timely manner, only to those locations that genuinely need their assistance. |
Understand the Key Stakeholder and User Needs
Effectively solving any complex problem involves satisfying the needs of a diverse group of stakeholders. Typically, stakeholders will have different perspectives on the problem and different needs that must be addressed by the solution. These can be acknowledged and tracked by explicitly capturing and documenting the needs of each stakeholder type.
We'll define a stakeholder need as
A reflection of the business, personal or operational problem (or opportunity) that must be addressed to justify consideration, purchase, or use of a new system.9
Figure 3-7 uses the requirements pyramid to illustrate the relationship between the needs and the problem statement. Capturing stakeholder needs allows us to understand how and to what extent the different aspects of the problem affect different types of stakeholders. This complements, and provides a deeper understanding of, the shared problem statement. You can think of stakeholder needs as an expression of the true "business requirements" of the system. They will provide an insight into the root causes of the overall shared problem and define a set of solution-independent requirement statements that, if met, will solve the underlying business problem.
Figure 3-7. Needs reflect the problem from an individual stakeholder perspective.
The description of each stakeholder need should include the reasons behind the need and clearly indicate why it is important to the affected stakeholders. The needs should be written in a solution-independent fashion and address the root causes of the problem only. Attempting to address more than the root causes will encourage the solution developers to produce solutions to problems that do not exist. For each stakeholder need it is also useful to understand
The relative importance the stakeholders and users place on satisfying each need.
Which stakeholders perceive the need
How this aspect of the problem is currently addressed. State the current business situation. By specifying the current state you will better be able to understand the impact of the use cases you will write.
What solutions the stakeholders would like to see. Specify the desired business situation.
How success will be measured. All requirements should have some measurable success criteria. If you are unable to measure the success, you will never be able to determine whether you have reached your desired state. When changing something as large as a business, it may be that the success criteria cannot be measured for some time.
The documentation of the stakeholder needs does not describe
The stakeholders' specific requests (which are captured in separate stakeholder request artifacts).
The stakeholders' specific requirements. High-level requirements are captured as features, and the detailed requirements are captured in the use-case model and Supplementary Specifications.
The stakeholder needs to provide the background and justification for why the requirements are needed. A typical system will have only a handful of needs, usually somewhere between 10 and 15. For example, the set of needs for the simple telephone system includes
Easy to Use: The system shall be easy to use by both technology adopters and technophobes enabling all users to simply and effectively use both the standard and advanced features of the system.
Provide Up-to-Date Status Information: The system shall provide real-time information to all users related to the duration and costs of calls.
Extensible: The system shall be extensible, allowing the introduction of new services and facilities without disruption to the level of customer service supplied.
Elicitation activities may involve using techniques such as interviews, brainstorming, conceptual prototyping, questionnaires, and competitive analysis. The result of the elicitation is a list of requests and needs that are described textually and that have been given priority relative to one another.
We recommend the use of the MoSCoW rules10<span class="docEmphasis"></span> when prioritizing stakeholder needs. MoSCoW is derived from the first letters of the following prioritizing criteria:
Must have (Mo)
Should have (S)
Could have (Co)
Want to have but will not have this time round (W)
For most practitioners, the "W" actually stands for "Won't have." Ranking and cumulative voting techniques are used to identify the needs that must be solved as opposed to those that the stakeholders would like addressed. The use cases defined for the system can then be explicitly traced back to the stakeholder needs that they address. This allows a more objective assessment of the benefit provided by each use case and ensures that each use case is actually helping to address actual stakeholder needs.
Describe the Features and Other High-Level Product Requirements
To complement the use-case model and provide a high-level view of the system, it is very useful to create a high-level requirements view of the product to be built. This view is provided by the product feature set and, where required, other high-level product requirement definitions.
More on Features
Features are the high-level capabilities (services or qualities) of the system that are necessary to deliver benefits to the users and that help to fulfill the stakeholder and user needs. The feature set provides a summary of the advertised benefits of the product to be built. Figure 3-8 illustrates the relationship among the needs, the features, and the system to be built.
Figure 3-8. The features fulfill the needs and summarize the product to be built.
Features can be functional or nonfunctional. Many features describe externally accessible services that typically require a series of inputs to achieve the desired result. For example, a feature of a problem-tracking system might be the ability to provide trending reports. Other features describe the externally visible qualities that the system will possess. For example, another feature of the problem-tracking system might be the quality of the data used to produce the trending reports. Because features are used to summarize the capabilities and qualities of the product to be built, they must be accessible to all the members of the project team and all the stakeholders. The level of detail must be general enough for everyone to understand. However, enough detail must be available to provide team members with the information they need to shape, validate, and manage the use-case model and Supplementary Specifications.
The problem with defining features is that they are often "all over the map"; they have no precise definition and cannot be used to really drive the development or testing of the system. Although generally high level in nature, there is no defined level of abstraction to which a feature must conform. They just represent some area of the functionality of the system that, at this time, is important to the users of the system. Because they represent the things that are important at this time, there will always be a list of features for every release and these feature lists will be different each time.
Another side effect to the immediacy of the features is that there is no need for them to provide a complete definition of the system. They represent the advertised benefits, the hot aspects, of the latest release of the system rather than a summary of its entire functionality. In this way, they complement the use-case model, which, in terms of the set of use cases, presents an overview of the system's entire functionality and often shows no changes from release to release.
The immediate and informal nature of features makes them a very powerful tool when working with the stakeholders and customers in defining what they want from a system's releases. When asked, stakeholders will be able to quickly come up with a list of the top 10 features they would like to see added to the system; in contrast, they will often struggle to identify any new use cases that are required.
Features provide the fundamental basis for product definition and scope management. To effectively manage application complexity, the capabilities of the system should be sufficiently abstract so that no more than 25 to 99 features describe the system. Each feature will be manifested in greater detail in the use-case model or the Supplementary Specifications. The combination of features and use cases provides a very powerful mechanism for managing the scope of the system, keeping all of the stakeholders involved and informed about the progress of the system and ensuring that a complete requirements specification is produced in an easily accessible and manageable form. Individually, neither features nor use cases provide such a manageable or complete solution.
Documenting Features
When documenting features:
Include a description of functionality and any relevant usability issues that must be addressed.
Avoid design. Keep feature descriptions at a general level. Focus on required capabilities and why (not how) they should be implemented.
Assign each feature a unique identifier for easy reference and tracking.
In addition to system functionality, also consider the nonfunctional qualities required of the system, such as performance, usability, robustness, fault toler-ance, scalability, licensing, installation, and documentation (user manuals, on-line help, labeling, and packaging).
The features of the system may be categorized and presented in many ways. For elicitation and verification, it is best to present the features by functional area and type. For scope management and publication purposes, it is best to group the features by target release, sorted in order of priority so that it is easy to distinguish between those that are in-scope and those that have been deferred. Again, as with the needs, we recommend the use of the MoSCoW rules to prioritize the feature set. Table 3-4 shows the prioritization of some of the features of the simple telephone system.
Table 3-4. Example Features for the Simple Telephone System
Identifier |
Description |
Priority |
FEAT1 |
The system shall allow the caller to place local calls. |
Must |
FEAT2 |
The system shall allow the caller to place long-distance calls. |
Must |
FEAT3 |
The system shall select the cheapest routing for all long-distance calls. |
Should |
FEAT4 |
The system shall provide a continuously up-to-date call history for all accounts. |
Must |
FEAT5 |
The system shall be continuously available 24 hours a day, seven days a week. |
Should |
Other Product Requirements
Other high-level requirements may not be as readily captured as features of the product. These include any constraints placed on the development of the product and any requirements the planned product will place on its operating environment. These other product requirements should be documented separately from the features and clearly identified as either constraints or operational requirements to prevent team members from confusing them with the actual requirements of the product.
Contraints
No matter how technology independent the requirements-gathering and the software development processes are, some constraints11 are inevitably placed on the possible solution. Constraints are not related to fulfilling the stakeholders' needs; they are restrictions imposed on the project by external forces. Although constraints arise from the stakeholder community, they are not directly related to the problem to be solved. Figure 3-9 illustrates how the stakeholders impose constraints on the project and system to be built.
Figure 3-9. The relationship between the constraints imposed by the stakeholders and the project and the system it is producing
Many different kinds of constraint may be imposed on a project. These include
Business and Economic: Cost and pricing, availability, marketing, and licensing issues
Environmental: External standards and regulations that are imposed on the development project
Technical: The technologies that the project is forced to adopt or the processes that the project has to follow (such as a requirement that the system be developed using J2EE)
System: Compatibility with existing systems and operating environments
Schedule and Resources: Dates the project has been committed to or limitations on the resources that the project must use
Stakeholders may impose constraints for a variety of reasons:
Politics: Constraints may be placed on the project by the relationships among the stakeholders rather than the technical or business forces shaping the project.
Organizational Policies: Organizational policies may be in place that constrain the way that the product can be developed. A company may have made a policy decision to move toward specific techniques, methodologies, standards, or languages.
Strategic Directions: Strategic directions may be in place that constrain the project to use specific technologies and suppliers (such as a corpo-rate decision to outsource all coding or to host all applications on a specific application server).
Organizational Culture: The culture of the organization may itself constrain the project by limiting the way that the project must address the problem. (There is a limit to the amount of change that people can cope with at any one time, and this could prevent a project from adopting its preferred technologies and methods.)
The constraints must be kept in mind when you create and assess the use-case model. Constraints imposed on the system will limit the freedom of the solution and therefore must be reflected in the style, scope, and structure of the use-case model. Understanding the constraints imposed on the system can be particularly useful when selecting the appropriate set of actors and use cases required to describe the system. This is discussed in more detail in Chapter 4, Finding Actors and Use Cases.
Most constraints are low-level design constraints arising from designers' choice of technology and method. These are captured as part of the Supplementary Specification alongside the nonfunctional software requirements. Here we are talking about identifying the much smaller set of high-level constraints: those that will fundamentally impact on the scope and direction chosen for the project. These are documented in the Vision document alongside the stakeholder needs and the product features.
Constraints can limit your ability to successfully provide a solution. Sometimes an apparently simple constraint can introduce tremendous complexity when it is examined. As a result, constraints must be constantly evaluated to determine how and where they will apply. Constraints may also influence your selection of stakeholder representatives, the manner in which those representatives are involved, and your choice of elicitation techniques. For example, a system that has a number of budgetary and financial performance constraints requires greater involvement of project accountants and financial analysts than one without financial constraints.
When documenting a constraint, you should also capture the source of the constraint and the rationale behind it. Because the constraints are unrelated to the problem being solved, they should be documented and tracked separately from the requirements.
Operating Requirements
In some cases the product to be produced results in requirements being placed on the operating environment in which it will be deployed. These are not requirements to be fulfilled by the solution, but requirements that must be met by the operating environment if the solution is to be successfully deployed. These requirements may include:
System Requirements: Any system requirements necessary to support the application. These can include the supported host operating systems and network platforms, configurations, memory, peripherals, compan-ion software, and performance.
Operating Environment Requirements: For hardware-based systems, operational issues can include temperature, shock, humidity, and radiation. For software applications, environmental factors can include usage conditions, user environment, resource availability, maintenance issues, and error handling and recovery.
These should be documented in the same way as the system's constraints, with attention paid to the source and rationale that led to their specification.
Provide an Overview of the Product
The features and other product requirements are not sufficient to provide a complete high-level view of the system. You also need to document the benefits, assumptions, dependencies (including interfaces to other applications and system configurations), and alternatives to the development of the product.
Product Position Statement
Every system is (or should be) built for at least one good reason. Like any good enterprise, the system requires a good "mission statement" or reason for being. You should be able to state in clear terms what the system does and why it does it. The description need not be longin fact, the more succinct the betterbut it should be put in writing.
Think of traveling in an elevator with the president of the company. Suppose the president asks what you are working on right now. You need a short answer that conveys the real value of the system being built. Most projects that find themselves in difficulties do so because, at least in part, no one really knows what is being built and why. The product position statement is a vehicle for communicating a brief definition of the system to all stakeholders.
The template shown in Table 3-5 can be used to express the product positioning statement, a key element of the vision.12 This format reminds people about all of the things that must be considered when establishing a vision for the system. A description of the system is important because it gives everyone a common high-level understanding of what the system does. Anyone associated with the project should be able to briefly describe what the system does in simple terms. Being able to do so creates a foundation for common understanding that pays dividends as the project progresses.
Table 3-5. Product Position Statement Template
For |
(target customer) |
Who |
(statement of the need or opportunity) |
For |
(target customer) |
Who |
(statement of the need or opportunity) |
The |
(product name) is a (product category) |
That |
(statement of key benefit, that is, compelling reason to buy) |
Unlike |
(primary competitive alternative) |
Our product |
(statement of primary differentiation) |
Let's consider an automated teller system. What does it do? One might tend to give details in a description, such as how the user's identity is authenticated and how funds are allocated. These are important details, but they do not belong in the basic description. Think like a venture capitalist: What is the system going to do for someone? What's the value? An example product position statement for the automated teller machine is presented in Table 3-6.
Table 3-6. The Product Position Statement for an Automated Teller Machine (ATM)
For |
Current account-holding customers |
Who |
Require instant access to their account details and the funds they contain |
The |
Super ATM is an automated teller machine |
That |
Provides the ability to perform simple bank transactions (such as withdrawing or depositing funds, or transferring funds between accounts) |
Unlike |
Accessing funds and details over the branch counter |
Our product |
Is available 24 hours a day and does not require the assistance of a bank teller |
This description isn't fancy or complicated; it simply conveys the essence of what the system does. It should state what problem the system principally solves, who it principally serves, and what value it provides. When writing the description, try to describe the system as you would to someone who is unfamiliar with it and the problem it solves and try to convey the value it will deliver. If you cannot describe the system in very simple terms, you probably do not have a very clear idea of what the system will do.
Note that this description does not try to capture even a fraction of the requirements, and it should not. Is it important that the ATM prints a receipt? Not at this point. What about security? Not in the brief description. What about other kinds of transactions that might be handled? No need to describe them all here. We merely want to capture the essence of what the system does so that everyone will be clear about it.
Completing the Product Overview
To provide a complete overview of the product, you may also need to summarize other aspects of the product not directly captured by the high-level requirements. Typically, it is worth documenting:
Summary of Capabilities: Summarize the capabilities that the system offers to its users. Presenting a brief overview of the use-case model will summarize the functionality offered by the system.
Customer Benefits: Summarize the benefits that the product offers to its customers and which features provide the benefit. This may just be a matrix relating the stakeholder needs to the features.
Assumptions and Dependencies: List any assumptions that have been made that if changed, will alter the vision established for the system. Also list any dependencies the product has on other products or the target environment.
Alternatives and Competition: List any alternatives that the stakeholders perceive as available, including a description of their strengths and weaknesses, to allow comparison with the solution being proposed.
It is important to provide the stakeholders with these additional perspectives on the product, because they demonstrate that the product is not being considered in isolation from its target business and operational environments.