Prioritizing Requirements
Donald Firesmith, Software Engineering Institute, U.S.A. |
 |
COLUMN

PDF Version |
Abstract
In this column, I address the often difficult task of prioritizing
requirements so that the highest priority requirements can be implemented
first as part of the scheduling of an incremental, iterative, and time-boxed
development cycle. After defining the meaning of the term “priority”,
the purpose and benefits of requirements prioritization are listed.
This is followed by a brief discussion of the challenges and risks
that a requirements team must face when prioritizing requirements.
Then, various techniques for prioritizing requirements are identified,
and finally a set of recommendations (including a recommended prioritization
process) are made.
1 INTRODUCTION
On projects producing large complex software-intensive systems, it
is not unusual to have hundreds and even thousands of individual requirements.
And it is also not unusual for the customer organization acquiring
such systems to have valid reasons to want each and every one of its
requirements implemented. Yet, such projects cannot avoid the following
fundamental facts of life:
-
Differences in importance. Not all requirements
are equally important, and the many different stakeholders in the
system
typically
will not agree as to which requirements are most important.
-
Limited project resources. All projects have limited
resources in terms of budget, staff, and schedule. It is usually
impossible
to implement all of the requirements, at least not during the system’s
current release. Thus, non-trivial systems are typically implemented
using an incremental development cycle in which the requirements
are incrementally developed and implemented.
-
Long schedule. Such large incrementally-developed
systems require many months or often multiple years to develop,
during which the requirements are subject to significant iteration as the business environment
changes, business needs change, and new requirements are identified.
-
Small RE budget. Requirements engineering rarely
receives more than 2-4% of the project budget, although several
studies show that projects are more successful when 3-4 times as
much of the budget and schedule is invested in getting the requirements
right. Thus although requirements
activities and tasks are typically time-boxed, the boxes allocated
to requirements engineering are typically much too small and work
must be properly prioritized.
These facts of life make the prioritization
of requirements a critically important part of requirements analysis
that every requirements engineer must perform. Unfortunately, there is little agreement within industry
as to how, when, and why requirements should be prioritized. In fact,
some books provide no guidance beyond merely stating that prioritizing
requirements is important [Schneider 1998]. Hopefully, this column
will help clarify requirements prioritization and make it easier for
the reader to prioritize requirements and effectively use their priorities.
2 POSSIBLE MEANINGS OF PRIORITY
A fundamental problem with prioritizing requirements is that the phrase “prioritizing
requirements” can have very different meanings to different stakeholders.
So let’s start by looking in the dictionary. According to the
Merriam-Webster Online Dictionary, the term “priority” means:
- The state of being prior (i.e., given precedence in terms of date or time)
- Given or meriting attention before competing alternatives
- Given preference
Although all three of the preceding definitions are closely
related, definitions 1 and 2 are very different from definition 3 in
terms of their impact on how and why requirements are prioritized and
on how the resulting prioritizations are used. The first two definitions
deal
with scheduling, whereas the third definition deals with relative importance.
And it is not unreasonable to schedule based on more than importance
(as is implied by rate monotonic scheduling and the
prioritization dimensions listed in section 5).
Some authors (e.g., [Sommerville 1997]) recommend another approach. For
them, prioritizing requirements means categorizing raw potential
requirements from the standpoint of importance into:
- Essential requirements that must be included
in the system (i.e., the actual requirements)
- Useful capabilities that would reduce system
effectiveness if left out
- Desirable capabilities that make the system
more desirable to certain stakeholders
Although this categorization implies that some requirements are merely
useful capabilities or desirable “nice-to-haves”,
it also contradicts the very nature of requirements as being mandatory
or required. Clearly, only the first category of potential requirements
above contains real requirements. The rest, although useful information,
are not requirements
and are thus outside the scope of prioritizing requirements.
Based on the preceding, prioritizing real requirements could mean:
- Prioritization by implementation order. Prioritizing requirements is the
requirements task of determining the implementation order of
the requirements in an incremental and iterative development cycle.
- Prioritization by importance. Prioritizing
requirements is determining the order of importance to some stakeholder
or class of stakeholders of the requirements along one or more dimensions (e.g., personal
preference, business value, cost of implementation, and risk).
The remainder of this column is largely an argument that requirements prioritization
is determining the implementation order of requirements
and that prioritization by importance is merely one means to that
end.
3 PURPOSE AND BENEFITS
The purpose of requirements priority can thus be to:
- Determine the relative necessity of the requirements. Whereas
all requirements are mandatory, some are more critical than others.
For example, failure to implement certain requirements may have grave business ramifications
that would make the system a failure, while others although contractually
binding would have far less serious business consequences if they
were not implemented or not implemented correctly.
- Help programs through negotiation and consensus building to eliminate
unnecessary potential “requirements” (i.e., goals, desires,
and “nice-to-haves” that do not merit the mandatory nature
of true requirements).
- Schedule the implementation of requirements (i.e., help
determine what capabilities are implemented in what increment).
Properly prioritizing requirements provides the following significant
benefits to the project:
- Modify schedule. When using an iterative incremental development
cycle, it enables the project manager and customer to modify the
project schedule to deal with the project realities of limited resources and fixed
deadlines.
- Improved customer satisfaction. It improves customer satisfaction by
increasing the likelihood that the customer’s most important
requirements are implemented and delivered first.
- Lower risk of cancellation. The project is less likely
to be cancelled during development because valuable progress is being
demonstrated with each increment. And even if the project must be cancelled
before the delivery of the final increment, it is not a total loss
because some important functionality has been implemented and delivered.
- Address all requirements. Prioritizing requirements is
a good way to force stakeholders to address all requirements and
not just their own.
- Estimate benefits. Priorities provide management and engineering
with a rough estimate of the benefit of the different requirements,
which is useful when performing cost/benefit analyses of the requirements
to determine where best to expend limited project resources in
preparation for requirements negotiation.
- Prioritize investments. Requirements priorities can help
determine how to prioritize the investment of limited project resources.
For example, the project can allocate most of its limited resources
for quality assurance and system testing according to the highest
priority requirements.
4 CHALLENGES AND RISKS
There are numerous challenges and associated
risks that must be addressed when prioritizing requirements including:
- Mandatory nature of requirements. By definition,
all requirements are required (i.e., mandatory). This leads some
stakeholders in the requirements to believe that all requirements should have the same highest priority.
However, although all real requirements are mandatory at a given
instant in time, they are not all equal in terms of current importance
or value to the customer or other stakeholders. Even when they admit that
in theory different requirements can have different priorities, they
may still strongly push for having 85-90% of the requirements be classified
as high priority, thereby eliminating the benefits of prioritization
[Wiegers 1999]. Priorities should have a reasonable distribution
[Wiegers 2000], although enforcing a strict distribution can also
lead to problems (e.g., as when grading on the curve in a class of legitimate A students).
- Large number of requirements. A very large
number of requirements need to be prioritized. It is not unusual
to have hundreds of requirements, and very large systems and systems of systems often have thousands
of individual requirements. It is difficult to consistently prioritize
such a large number of requirements. This is why priorities are
often grouped into a manageably small number of categories. This
is also why techniques for determining the priorities of all requirements
such as pair-wise comparisons or Quality Function Deployment (QFD)
typically
do not scale unless requirements are previously grouped in some
manner (e.g., by major system function or by limiting the requirements
to those that are needed for the very next release). Another approach
is to only apply semi-quantitative prioritization schemes to requirements
of intermediate priority [Wiegers 1999].
-
Limited resources. Because of cost and schedule
limitations, it is rarely possible to implement all requirements
in any given increment. It is also difficult to determine how much of the project’s
limited resources are worth expending to implement the different
requirements.
- Quality requirements. The architecture
and costs, both development and maintenance, of most systems is largely
driven by such quality requirements as availability, interoperability, performance, portability,
reliability, safety, security, and usability. Unfortunately, these
types of requirements are often given far too little priority,
are not specified at all, or are specified in a vague untestable
manner. If the quality requirements are not specified or not specified
properly, they will not be properly prioritized.
- Goals vs. requirements. System and software requirements
are typically multiple levels below the business goals and needs
that
drive them. Thus, it is often difficult to directly relate requirement
priority to business goal importance.
- Changing priorities. The priorities of
requirements will typically change over time because:
- The business environment and needs change.
- The stakeholders in the requirements may change.
- The requirements stakeholders change their minds as to
which requirements are most important to them, especially once
they understand the cost and schedule implications [Wiegers 1999].
- Individual requirements change.
- The system may be incrementally developed so that some
of the requirements are implemented before others. Thus, the
important priorities become the priorities of those remaining requirements that
have yet to be implemented.
- As new requirements are added, the relative priorities
of existing requirements may need to change accordingly [Fellows
1998].
- Incompatible priorities. Different types
of stakeholders tend to prioritize requirements differently (e.g.,
they tend to prioritize use cases higher when they are the actor that benefits from the execution
of the use case). Even different stakeholders within the same stakeholder
type prioritize them differently because of their different individual
needs, experiences, and levels of training.
- Stakeholder and developer collaboration. Only
the stakeholders can properly prioritize the requirements, while
only the developers can properly estimate the cost and schedule consequences of the
stakeholders’ priorities [Wiegers 1999]. This requires the stakeholders and developers
to collaborate during requirements prioritization, and this may
be difficult due to contractual and organizational factors.
- Incompatible requirements. Some requirements
types may be incompatible (e.g., performance vs. maintainability
and reliability, usability vs. security) in the sense the increasing compliance with one
requirement makes it more difficult to achieve the other requirement.
- Lack of trust. Customers desiring the immediate
implementation of all requirements might mistakenly assume that
the real reason to prioritize the requirements is the developers’ devious desire
to eliminate some of the more difficult or risky requirements.
- Non-requirements. The initial set of raw unanalyzed
requirements prior to prioritization and negotiation often includes
desired capabilities or items from somebody’s wish list that are not really
requirements (i.e., not mandatory) and thus do not deserve a priority.
- Subjective prioritization. Most prioritization
approaches are subjective, biased, and influenced by project politics.
They also ignore the reasons why stakeholders set their priorities the way they have.
However, more objective approaches (such as the number of other requirements
that depend on a requirement, the number of objects and stakeholders
that interact with a requirement, the estimated cost of implementing
the requirement, numerical weightings, etc.) are often expensive,
impractical, and do not scale well when applied to large numbers
of requirements.
- Consequences of poor prioritization. Incorrectly
prioritizing and scheduling requirements for implementation can
lead to serious financial consequences [Davis 2003] as well as significant
stakeholder dissatisfaction.
5 TECHNIQUES
Prioritization Dimensions
Requirements can be prioritized along many different, related and
even opposing dimensions. And these dimensions can be valued differently
by different stakeholders. For example, requirements can be prioritized
by:
- Personal preference. Different stakeholders
(e.g., customers, users, marketing, operators, maintainers, and architects)
will prefer certain requirements over others. This is especially true when practical
reasons such as schedule and budget mean that all of the requirements
cannot be implemented and released during the current build of an
incremental development cycle.
-
Business value. When implemented, different requirements
will have different values to the business. Some requirements will
be critical, whereas others will be less important though still mandatory.
Some potential requirements are not requirements at all but merely
desirable though not necessary features or characteristics, and others
will be merely characteristics that would be nice to have or items
on someone’s wish list. Also, some requirements have a tactical usefulness,
whereas others have a more long-term strategic value to the business.
- Harm avoidance. The opposite of prioritizing
requirements in terms of their business value when implemented is
to prioritize requirements in terms of the harm that can or will occur if the requirement
is not implemented. This would especially be true of safety and security
requirements, which are specifically specified to avoid accidental and
malicious harm to valuable assets due to hazards and threats of attack
respectively. Also, stakeholders who are risk adverse would tend to prioritize
all requirements in terms of the damage or danger to be avoided if
the requirement is implemented
- Risk. Related to harm avoidance is risk
management. It may well make sense to prioritize requirements by
the risks associated with their implementation. For example, one
can attempt to implement those requirements having the highest risk
first
so as to deal with the resulting problems during development. On
the other hand, it may make sense to implement the lowest risk requirements
first in order to maximize the amount of the system implemented by
ensuring that limited resources are not wasted on trying to implement
high risk aspects of the system that may be impossible to successfully
implement. Postponing the implementation of high risk requirements
can also maximize the time available to research the risks and determine
appropriate risk mitigation approaches.
- Cost. The implementations of different
requirements have different development or life-cycle costs. Given
limited budgets, cost can be an important and even overriding factor when prioritizing
requirements. Thus, the highest priority requirements may be those
that the project can afford to implement first.
- Difficulty. Related to prioritizing requirements
by risk and cost is prioritizing requirements by their estimated
difficulty to implement. As with risk, one can implement either the
difficult or the easy requirements first, based on whether one considers
it more important
to have more time to deal with difficult requirements first or to
hold off on the most difficult so that a larger number of easy requirements
can be implemented first.
- Time to market. Some requirements take
more effort and thus more calendar time to implement given limited
development resources. In certain application domains in which competitors are marketing competing systems,
time to market can be an important factor when prioritizing requirements.
- Requirements stability. Some requirements
are relatively stable whereas others are very much subject to change
during development. To minimize unnecessary rework, it may well make sense to implement stable
requirements first and hold off on the implementation of the most
volatile requirements until late in the development cycle.
-
Dependencies among requirements. Certain requirements
depend on other requirements [Davis 2003]. For example, requirements
at a lower tier in the overall system structure “implement” requirements
on a higher tier. Thus, software requirements implement subsystem
requirements which implement system requirements. Dependency
relationships between use cases and usage scenarios imply dependencies
between their priorities. Similarly, the interaction and postcondition
requirements of
a use case implement the overall requirement of the use case.
Derived requirements are engineered to support more fundamental
requirements, which depend on the implementation of the derived requirements.
Similarly,
certain secondary requirements support core requirements that
are essential to the success of the system and should be prioritized
in terms
of how they support these key requirements. In all of these
cases, the implementation of certain requirements depends on
the implementation of other requirements and this implies dependencies
on their
priorities. Thus, if requirement A depends on requirement B,
then the priorities of these requirements should be consistent
and requirement B should have a priority that is at least as high
as A (e.g.,
B should be implemented either before A or during the same build as
A).
- Implementation dependencies. When developing
large systems, certain components of the system depend on other components
(often foundational and infrastructure components) of the system. Requirements
pertaining to these foundational components often need to be implemented
before other requirements. Similarly, certain capabilities (e.g.,
safety and security) need to be architected and built into the system
rather than added on later during development. Therefore, architects
(who are important stakeholders of requirements) often prioritize
requirements in terms
of the optimum implementation order of the requirements.
- Different kinds of requirements. Different kinds
of requirements (e.g., functional, data, interface, quality, and
constraints) may need different approaches to prioritization. Non-functional
requirements may be prioritized directly whereas functional requirements
may be prioritized indirectly via their use cases and scenarios.
- Legal mandate. Requirements may be given
higher priority if mandated by law, by regulation, or by governmental,
international, national,
or industry standard [Wiegers 2000]
- Frequency of use. Functional requirements
may be given higher priority based on the expected frequency or volume
of usage [Wiegers 2000].
- Reuse. If a requirement is highly reusable
within a product line, then it might be wise to give it a higher
priority so that no system within the product line has to wait for its implementation.
As the preceding list illustrates, there are many factors that
can (and probably should) influence the priority of a requirement.
One of the common mistakes that some approaches make is to consider
and use only a single dimension when prioritizing requirements. For
example, eXtreme Programming tends to only consider business value
as defined by the customer [Beck 2001]. Although more difficult, it
makes far more sense to consider all relevant factors when prioritizing
requirements, even though some dimensions will prove far more important
than others, at least for certain requirements.
Prioritization Approach
Once the actual requirements have been identified, prioritization
can then be used to categorize them for the sake of scheduling into:
- Requirements that have already been implemented
- Requirements that are being implemented during the current build, increment, or release
- Requirements that are to be implemented during the next build, increment, or release
- Requirements that are to be implemented during some future build
To avoid requirements churn and meet schedule, the set of requirements
being implemented as part of the current increment must be
well known and frozen reasonably early during the build process and
prior to release. But the farther into future increments one goes,
the more fluid
the assignment of priorities to requirements and requirements to increments
becomes. In fact, some mandatory requirements may never be implemented
because they never bubble up to the top of the stack before
eventually being dropped because they are no longer needed.
Prioritization Techniques
Various techniques can be used to determine, negotiate, and develop a consensus regarding
the priorities of the requirements:
- Business Case Analysis / Return On Investment (ROI) estimation
- Pair-wise comparisons
- Prioritization working groups
- Scale of 1-to-10 rankings
- Voting schemes (e.g., give each stakeholder a specific
number of votes to distribute amongst the requirements or classes
of requirements being prioritized)
- Weightings (e.g., weight the votes of different stakeholders)
- Value-Based Software Engineering [Boehm 2003]
- WIN-WIN [Boehm 2001]
- Quality Function Deployment (QFD)
The best approaches to use also depend on many factors such as the
number of requirements to be prioritized and the formality of the requirements
engineering process.
6 REQUIREMENTS PRIORITIZATION PROCESS
Given the need to properly
prioritize requirements, I recommend the following basic subprocess
(related to the process
in [Fellows 1998]) to incorporate requirements prioritization into the requirements
engineering process:
- Convince stakeholders. During requirements
planning, the requirements team needs to convince the stakeholders in the
requirements engineering process of the importance of prioritizing requirements.
- Train stakeholders. Prior to eliciting requirements,
the requirements team should train the requirements stakeholders in the requirements
prioritization process.
- Categorize raw potential requirements. During requirements identification (elicitation,
discovery, invention, gathering), the requirements team should work with the stakeholders to
categorize the raw potential requirements into actual
requirements, useful capabilities and desirable (nice-to-have)
capabilities so that the actual requirements can be prioritized.
- Prioritize the actual requirements.
During requirements analysis, the requirements team should work closely
with representative stakeholders to prioritize
the actual (i.e., mandatory) requirements.
This includes negotiation with the stakeholders to develop a consensus and validation of the resultant
priorities with them.
Requirements prioritization should be done on an iterative and incremental basis, concentrating on those requirements
that are most likely to need to be implemented in the current or next release and those
requirements that are of intermediate priority and thus most likely to need significant negotiation.
To develop proper priorities, representatives from all
major stakeholder groups need to be represented. For the requirements
team led by a professional requirements engineer, this should include
one or more dedicated customer representatives, user representatives,
architects, system testers, and subject matter experts. Other stakeholders that also need to be involved in requirements
prioritization include operators, maintainers, safety engineers, security analysts, and
any others that have a significant stake in the scheduling of requirements implementation.
- Publish the priorities. During requirements specification,
the requirements team should publish the priorities so that all effected stakeholders
know and can use the priorities.
- Estimate effort. Led by the technical leader and architecture team,
the development team that must actually implement the requirements creates and records realistic
estimates of the effort required to implement each requirement. These estimates should
be based on current staffing, with the understanding that stakeholder inputs may require management
to increase staffing size (but only if the technical leader agrees that increasing staff will actually
decrease schedule or increase deliverable functionality).
- Schedule development. The requirements team should work with the management team and
the development team to allocate requirements to increments and to schedule the incremental
implementation of these increments based on priorities of the requirements, the required effort
to implement the requirements, and the available resources. This allocation of requirements
to releases and scheduling of releases should be updated with each increment to deal with changes
in requirements and resources. Allocation and scheduling should also include both development-internal
increments as well as releases to the customer organization and deployment to the users.
- Maintain
priorities. During requirements management, the requirements team should work with the requirements
stakeholders to maintain the requirements parameters as they change. This will typically include
storing the priority as metadata (i.e., an attribute) in the requirements repository, and then updating
the value of the priority as it changes.
7 CONCLUSION
As the preceding information has hopefully demonstrated,
prioritizing requirements is both a critical and yet difficult task for
the requirements engineering team. Many risks, challenges, and issues must be properly
taken into account if a useful set of priorities is to be developed, negotiated, maintained, and
used. Still, requirements prioritization is critical because it:
- Forces stakeholders to openly address the relative importance of their requirements,
- Leads to increased communication and consensus among stakeholders,
- Provides a logical basis for requirements negotiation, and most importantly
- Enables management and engineering to rationally schedule
of the development and release of large complex software-intensive
systems when using an incremental, iterative, time-boxed development cycle.
REFERENCES
[Beck 2001] Kent Beck and Martin Fowler, Planning Extreme Programming, Addison-Wesley, 2001, pp. 48-49 and 63-69.
[Boehm 2003] Barry Boehm, “Value-Based Software Engineering,” Software
Engineering Notes, Vol. 28, No. 2, ACM, March 2003.
[Boehm 2001] Barry Boehm, Paul Grünbacher, and Robert O. Briggs “Developing
Groupware for Requirements Negotiation: Lessons Learned,” IEEE Software, Vol. 18, No. 2, IEEE, May/June 2001.
[Davis 2003] Alan M Davis, “The Art of Requirements Triage,” Computer,
Vol. 36, No. 3, March 2003, pp. 42-49.
[Fellows 1998] Larry Fellows and Ivy Hooks, “A Case for Priority Classifying Requirements,” Eighth
Annual International Symposium on Systems Engineering, Seattle, Washington: International
Council on Systems Engineering, 1998.
[Lauesen 2002] Soren Lauesen, Software Requirements: Styles and Techniques, Addison-Wesley,
2002, pp. 2226-227,304, 378-379.
[Schneider 1998] Geri Schneider and Jason P. Winters, Applying Use Cases: A Practical Guide, Addison-Wesley, 1998, pp. 84.
[Sommerville 1997] Ian Sommerville and Pete Sawyer, Requirements Engineering: A Good Practice Guide, John Wiley & Sons, 1997.
[Wiegers 1999] Karl E. Wiegers, “First Thing First: Prioritizing Requirements,” Software Development, September 1999.
[Wiegers 2000] Karl E. Wiegers, “Karl Wiegers Describes 10 Requirements Traps to Avoid,” Software Testing & Quality
Engineering, January/February 2000.
ACKNOWLEDGEMENTS
Many thanks to Ian Alexander, Keith Collyer,
Andrew Gabb, David Gelperin, Rolf Goetz, Simon Hutton, Naveen Kumar,
Frank Moisiadis, Scott Overmyer, Abd-El-Kader Sahraoui, Emmie Lou
Tucker, and Ricardo Valerdi from the requirements
engineering mailing list at re-online@it.uts.edu.au; their observations
and recommendations provided many useful insights regarding the proper
prioritization of requirements. I would
also like to thank my coworkers Peter Capell and Tim Morrow at the
SEI who reviewed this column prior to publication for their helpful
comments and suggestions.
Disclaimers
The Software Engineering Institute is a federally funded research and development
center sponsored by the U.S. Department of Defense.
The views and conclusions contained in this column are solely those of the author
and should not be interpreted as representing official policies, either expressed or implied,
of the Software Engineering Institute, Carnegie Mellon University, the U.S. Air Force,
the U.S. Department of Defense, or the U.S. Government.
About the author

|
 |
Donald Firesmith is
a senior member of the technical staff at the Software Engineering
Institute. He has worked exclusively with object technology since
1984 and has written 5 books on the subject. He is currently writing
a book on the engineering of safety requirements. Most recently,
he has developed an 1100+ page informational website on the OPEN
Process Framework at http://www.donald-firesmith.com.
He can be reached at dgf@sei.cmu.edu.
|
Cite this column as follows: Donald Firesmith: “Prioritizing
Requirements”, in Journal of Object Technology, vol. 3, no. 8,
September-October 2004, pp. 35-47. http://www.jot.fm/issues/issue_2004_09/column4
|