Dr. Dobb's is part of the Informa Tech Division of Informa PLC

This site is operated by a business or businesses owned by Informa PLC and all copyright resides with them. Informa PLC's registered office is 5 Howick Place, London SW1P 1WG. Registered in England and Wales. Number 8860726.


Channels ▼
RSS

Less Is More


Less Is More

It's reasonable to define what you're going to build before you build it; to identify the requirements for something before you code it. What isn't reasonable is defining all of the requirements in a comprehensive document before you begin implementation—experience shows that this approach is not only a poor way to work, but actually puts your project at risk. In the U.K., Andrew Taylor's 2001 study of 1,027 projects ("IT Projects Sink or Swim, British Computer Society Review) revealed that scope management related to attempting waterfall practices—including detailed, up-front requirements—was cited by 82 percent of failed projects as the number one cause of failure.

Why are people motivated to pack on the pounds when it comes to requirements? They often believe that they need all of the requirements defined before they can accurately develop cost and schedule estimates. However, according to the Standish Group's 2003 Chaos Report, 15 percent of projects are outright failures and 51 percent are over budget, over time or missing critical features. Also, many stakeholders believe that they need detailed requirements to ensure that they get what they ask for. Unfortunately, what you ask for at the beginning of a project is rarely what you need once it's delivered (see "Benefiting from Brevity).

Agile Requirements Management

To handle this quixotic situation, try just enough initial modeling to identify project scope and develop a high-level schedule and estimate. Then, during development, you can model storm in a just-in-time manner (See "The Best-Kept Secret?, The Agile Edge, Oct. 2004) to explore each requirement in detail.


[click for larger image]

In Practice
Both XP and Scrum take a lean approach to deciding when requirements will be implemented.

"In Practice overviews the agile approach to managing requirements, reflecting both Extreme Programming's planning game and the Scrum methodology. Your development team has a list of prioritized requirements that need to be implemented—Extreme Programmers have a stack of user stories written on index cards. From the top of the stack, the team takes the highest-priority requirement that they believe they can implement within the current iteration. Scrum suggests that developers freeze the requirements for each iteration to provide a level of stability. If you do this, any change to a requirement you're currently implementing should be treated as a new requirement.

Setting Priorities

New requirements, including defects identified as part of your user testing activities, are prioritized by your project stakeholders and added to the stack in the appropriate place. Your project stakeholders can define new requirements, change their minds about existing ones, and even reprioritize them as they see fit. However, they must also be responsible for making decisions and providing information in a timely manner.

When it comes to requirement prioritization, a single person must be the final authority. In Scrum, this person is called the product owner. The product owner must work with the other stakeholders to ensure everyone is represented fairly—often a difficult task. Beware a potential liability of this approach: Your stakeholders might prioritize the requirements in such a way as to push an architecturally significant (read devastating) requirement several months forward. For example, the need to support several technical platforms can cause significant havoc to project teams that are unprepared for these changes. In my experience, the order of requirements doesn't matter as long as you keep your design modular and of the highest quality possible via refactoring. Also, just as you do some initial requirements modeling up front, make sure to do some initial architectural modeling up front. You'd be amazed at how quickly you can sketch a few whiteboard diagrams that capture a viable architectural strategy for your team.

Estimating Requirements

Developers are responsible for estimating the effort required to implement the requirements that they'll work on. Although they may initially lack the requisite skills, it doesn't take long for people to hone their estimation expertise when they know that they'll have to live up to those estimates.

Smaller requirements are easier to estimate accurately. Shall statements, such as "The system shall convert feet to meters, are an example of very small requirements. User stories are a little larger but still relatively easy to estimate. Use cases can become too large to estimate effectively, although you can reorganize them into smaller and more manageable artifacts.

Use this rule of thumb: A requirement must be implementable within a single iteration. Scrum teams usually have month-long iterations, whereas XP teams often choose one- or two-week iterations. Short iterations reduce the feedback cycle, making it easier to stay on track. Successful teams deploy a working copy of their system at each iteration's end into a demo environment where their stakeholders have access to it. This provides another opportunity for feedback, often generating new or improved requirements, and shows stakeholders that the team is making progress.

The primary weakness of this approach? It isn't clear how much the system will cost because as the requirements change, so must the cost. But so what? When you deliver working software at each iteration's end, your stakeholders are completely in control of the purse strings—once they've had enough, they can stop funding the project. Would you rather have a detailed—and probably wrong—estimate up front, or be in control and spend your money wisely? The approach I'm describing enables the latter.

Embrace Change, Don't Prevent It

Active stakeholder participation throughout the project's lifecycle is key. Stakeholders must prioritize requirements, make decisions and provide information in a timely manner. Because they're the business experts, they should also be actively involved with any requirements and analysis modeling efforts. By embracing change and finding ways to truly manage requirements, you can deliver software that meets the needs of your users in a timely and cost-effective manner. Who can say no to that?

Benefiting from Brevity

What's wrong with comprehensive requirements documents? Plenty.

  1. Requirements change. Stakeholders will change their minds throughout the project, because their needs have changed or because once they've seen what you've built, they realize that they didn't understand what they wanted to begin with.
  2. Stakeholders will ask for everything . Stakeholders are motivated to tell you everything that they might possibly want, because they may not have another opportunity. Thus, the requirements document includes many features that stakeholders don't really need, resulting in higher development and maintenance budgets.
  3. It takes longer to recoup your investment. By taking the time to define all of the requirements up front, you forgo the opportunity to focus on implementing the highest-priority requirements right now. You also forgo opportunities to deliver that functionality into production early, missing out on the benefits that would have accrued, thereby pushing out the payback period for your system.
  4. Change management becomes change prevention . Once you baseline your requirements doc, you need to install a requirements change-management process to ensure that your project doesn't suffer from scope creep. Traditional change management processes usually involve a group of people—a change control board (CCB)—that does some form of impact analysis to determine the cost and priority of a new or changed requirement. These processes typically take weeks to process a potential change, and the amount of effort that it takes to get something through the CCB often motivates stakeholders to not bother submitting minor changes.

—SA

Senior Contributing Editor Scott Ambler is author of the Productivity Award--winning Agile Database Techniques (Wiley, 2003)


Related Reading


More Insights






Currently we allow the following HTML tags in comments:

Single tags

These tags can be used alone and don't need an ending tag.

<br> Defines a single line break

<hr> Defines a horizontal line

Matching tags

These require an ending tag - e.g. <i>italic text</i>

<a> Defines an anchor

<b> Defines bold text

<big> Defines big text

<blockquote> Defines a long quotation

<caption> Defines a table caption

<cite> Defines a citation

<code> Defines computer code text

<em> Defines emphasized text

<fieldset> Defines a border around elements in a form

<h1> This is heading 1

<h2> This is heading 2

<h3> This is heading 3

<h4> This is heading 4

<h5> This is heading 5

<h6> This is heading 6

<i> Defines italic text

<p> Defines a paragraph

<pre> Defines preformatted text

<q> Defines a short quotation

<samp> Defines sample computer code text

<small> Defines small text

<span> Defines a section in a document

<s> Defines strikethrough text

<strike> Defines strikethrough text

<strong> Defines strong text

<sub> Defines subscripted text

<sup> Defines superscripted text

<u> Defines underlined text

Dr. Dobb's encourages readers to engage in spirited, healthy debate, including taking us to task. However, Dr. Dobb's moderates all comments posted to our site, and reserves the right to modify or remove any content that it determines to be derogatory, offensive, inflammatory, vulgar, irrelevant/off-topic, racist or obvious marketing or spam. Dr. Dobb's further reserves the right to disable the profile of any commenter participating in said activities.

 
Disqus Tips To upload an avatar photo, first complete your Disqus profile. | View the list of supported HTML tags you can use to style comments. | Please read our commenting policy.