RSS

Design

Software Requirements


Joe is the author of The Software Development Edge: Essays on Managing Successful Projects and CEO of Ravenflow.


First, the good news: More and more organizations recognize the critical link between requirements quality and the success or failure of software development initiatives. The bad news: There's still a lot of confusion about the best way to address the issue.

Organizations must be able to accurately identify exactly where in the requirements lifecycle the biggest problems lie. For example, are development snafus simply the result of losing track of which requirements a release includes? This is a requirements management issue that is best addressed in conjunction with development. But what if requirements are ambiguous, incomplete, or just plain wrong? This is a requirements definition issue—the more common and thornier challenge.

A Forrester report entitled "The Root of the Problem: Poor Requirements," authored by Carey Schwaber with Gene Leganza and Megan Daniels (September 1, 2006), cogently noted that the focus on—and availability of—tools that manage requirements during the software development process is detracting attention from the far larger problem of whether or not requirements are accurate in the first place. Simply managing requirements—no matter how well this is done—still results in the age-old problem of "garbage-in, garbage-out."

Today, several approaches are emerging to deal with the "garbage in" part of the equation. Here are some considerations.

UI prototyping and requirements definition and validation solutions are two categories that often get mistakenly lumped together. While both seem to address similar problems, each attacks a different root cause. Prototyping and simulation tools help stakeholders "see" the finished user interface, serving up a visual preview of how features will be incorporated and how users will navigate the system. Thus, prototyping and UI design tools answer the question: "How will this look once we get it done?"

Requirements definition, on the other hand, answers the question: "What do we want the software to do?" Needless to say, prototyping a nonessential requirement, or one that is poorly understood, is a waste of time—as it is critical to understand the "what" before addressing the "how."

To avoid this problem, a good place to start is the use case.

The use case is where most organizations begin to spell out the functional requirements of software applications. Primarily written by business analysts or users, the goal of the use case is supposed to be one of illumination, providing developers with the information they need to build a system that delivers on the vision.

Here's where the problem of poor requirements most often takes root. Accurate requirements get lost in translation between business people who think in words, and software architects and engineers who respond to models and visuals. Should organizations then attack requirements quality from the business analyst's perspective or the developer's? Of course, the answer should be both.

For a great majority of organizations, the most fundamental requirements pain point can be summed up in those immortal words from Cool Hand Luke, "What we have here is a failure to communicate." Does this scenario sound familiar? Business analysts hand a phonebook-sized set of use cases over to developers, who then struggle to create working visual models. Thus, the "translation problem" is a direct result of a manual and painstaking process for defining requirements that leaves a lot of room for miscommunication and error.

A better solution is one where words and pictures work with, rather than against, each other. Use cases and diagrams do not "spring forth" in their final forms spontaneously. Rather, an iterative process of elucidation and validation turns starting text into first-pass diagrams, which in turn reveal inconsistencies, leading to improved text and a better set of diagrams. What's needed is a way to automate and simplify this cycle, so that both technical and non-technical stakeholders can leverage text and visuals to collaborate more effectively and efficiently. Only then can true business/IT alignment be achieved.

So where's your requirements problem? Taking the time to find out can go a long way towards ensuring greater software development success.


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

DrDobbs encourages readers to engage in spirited, healthy debate, including taking us to task. However, DrDobbs 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/SPAM. DrDobbs 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.
 

Best of the Web

Triple Buffering as A Concurrency Mechanism

Triple Buffering is a way of passing data between a producer and a consumer running at different rates. It ensures that the consumer sees only complete data with minimal lag.

Quick Read

Embedding GDB Breakpoints in C Source Code

Have you ever wanted to embed GDB breakpoints in C source code? Something like this:
printf("Hello,\n");
EMBED_BREAKPOINT;
printf("world!\n");

Quick Read

Writing Kernel Exploits

Why attack the kernel? Because it has a huge attack surface with potential for very interesting bugs. This presentation (pdf) takes a code-level dive into recently reported Linux-kernel exploits.

Quick Read

Compiling the JavaScript Engines

With growing demand for out-of-browser JavaScript (e.g., server JavaScript), a good knowledge of JavaScript engines is becoming more important.

Quick Read


More "Best of the Web" >>



Video

Enabling People and Organizations to Harness the Transformative Power of Technology