Chapter 35. Getting Started

Dedication

Over the course of many years, we and others who have contributed to this book have taught, and have been taught by, thousands of students interested in requirements management. As you are aware, there is no one right way to perform requirements management; no one single elicitation technique applies in every circumstance; no one single process fits all teams. Projects have varying degrees of scope and complexity. Application types vary tremendously and come from many different industries.

Yes, requirements management is a very broad topic and also very deep. A recurring theme from the classroom is that students feel the need to have a more prescriptive process—a recipe, if you will—for applying what they learned in class. "You've told us too much," our students might say. "Just give us a single generic process that we can start with," they continue. "We know it's not that simple, but we'll be happy to modify it as necessary for our project, but we need a more prescriptive starting point, a step-by-step process so that we can better apply what we learned. Just tell me how to get started!"

OK, you've got it. This chapter is dedicated to these students, and to those of you who share their point of view and this common "user need."

What We've Learned So Far

Before we can kickstart your project requirements process, however, we need to summarize what we've learned in the book.

Introduction

In the introductory chapters, we learned that our industry often does a poor job of delivering quality applications on time and on budget. Some of the root causes of this problem are also clear. Lack of user input, incomplete requirements and specifications, and changing requirements and specifications are commonly cited problems in projects that failed to meet their objectives.

Perhaps developers and customers alike have a common attitude that "even if we're not really sure of the details of what we want, it's better to get started with implementation now, because we're behind schedule and in a hurry. We can pin down the requirements later." But all too often, this well-intentioned approach degenerates into a chaotic development effort, with no one quite sure what the user really wanted or what the current system really does.

How do we know what the system is supposed to do? How do we keep track of the current status of requirements? How do we determine the impact of a change? To address these issues, we recommend an encompassing philosophy of requirements management, which we defined as

a systematic approach to eliciting, organizing, and documenting the requirements of the system, as well as a process that establishes and maintains agreement between the customer and the project team on the changing requirements of the system.

Since the history of software development—and the future for at least as far as we can envision it—is one of ever increasing complexity, we also understand that the software development problem must be addressed by well-structured and well-trained software teams. Every team member will eventually be involved in helping manage the requirements for the project. These teams must develop the requisite skills to understand the user needs, to manage the scope of the application, and to build systems that meet these user needs. The team must work as a team to address the requirements management challenge.

Team Skill 1: Analyzing the Problem

In Team Skill 1, we introduced a set of skills that your team can apply to understand the problem to be solved before application development begins. We introduced a simple, five-step problem analysis technique that can help your team gain a better understanding of the problem to be solved.

  1. Gain agreement on the problem definition.

  2. Understand the root causes of the problem.

  3. Identify the stakeholders and the users whose collective judgement will ultimately determine the success or failure of your system.

  4. Determine where the boundaries of the solution are likely to be found.

  5. Understand the constraints that will be imposed on the team and on the solution.

All in all, following this process will improve your team's ability to address the challenge ahead, providing a solution to the problem to be solved.

We also noted that a variety of techniques can be used in problem analysis. Specifically, we looked at business modeling, a specific problem analysis technique that works quite well in complex information systems that support key business infrastructures. The team can use business modeling to both understand the way in which the business evolves and to define where within the system we can deploy applications most productively. We also recognized that the business model we defined will have parallel constructs in the software application, and we use this commonality to seed the software design phases. We will also use the business use cases we discovered again later to help define requirements for the application itself.

For the embedded-system software applications, we used systems engineering as a problem analysis technique to help us decompose a complex system into subsystems. This process helps us to understand where software applications should lie and what overall purpose they serve. In so doing, we also learned that we complicate the requirements matter somewhat by defining new subsystems, for which we must, in turn, come to understand the requirements to be imposed.

Team Skill 2: Understanding User Needs

We started Team Skill 2 by introducing three "syndromes" that increase the challenge of understanding the real needs of users and other stakeholders. The "Yes, But," the "Undiscovered Ruins'" and the "User and the Developer" syndromes were used as metaphors to help us better understand the challenge ahead and to provide a context for the elicitation techniques that we developed in this Team Skill.

We also recognized that since we rarely have been given effective requirements specifications for the systems we are going to build, in order to do a better job of building these systems, we are going to have to go out and get the information we need to be successful. Requirements elicitation is the term we used to describe this process, and we concluded that the team must play a more active role in this process.

To help the team on this mission, we then presented a variety of techniques for addressing these problems and better understanding the real needs of users and other stakeholders. These techniques were

  • Interviewing and questionnaires

  • The requirements workshop

  • Brainstorming and idea reduction

  • Storyboarding

  • Use cases

  • Role playing

  • Prototyping

Although no one technique is perfect in every circumstance, each represents a proactive means of pushing knowledge of user needs forward and thereby converting "fuzzy" requirements to requirements that are "better known." Although all of these techniques work in certain circumstances, we did admit to a favorite: the requirements workshop/brainstorming technique.

Team Skill 3: Defining the System

In Team Skill 3, we moved from understanding the needs of the user to starting to define the solution. In so doing, we took our first baby steps out of the problem domain, the land of the user, and into the solution domain, wherein our job is to define a system to solve the problem at hand.

We also learned that complex systems require comprehensive strategies for managing requirements information, and we looked at a number of ways to organize requirements information. We recognized that we really have a hierarchy of information, starting with user needs, transitioning through features, then into the more detailed software requirements as expressed in use cases or traditional forms of expression. Also, we note that the hierarchy reflects the level of abstraction with which we view the problem space and the solution space.

We then "zoomed in" to look at the application definition process for a stand-alone software application and invested some time in defining a Vision document for such an application. We maintain that the Vision document, with modifications to the particular context of a company's software applications, is a crucial document and that every project should have one.

We also recognized that without someone to champion the requirements for our application and to support the needs of the customer and the development team, we would have no way to be certain that the hard decisions are made. Requirements drift, delays, and suboptimum decisions forced by project deadlines are likely to result. So, we decided to appoint someone or to anoint someone to own the Vision document and the features it contains. In turn, the champion and the team will empower a change control board to help with the really tough decisions and to ensure that requirements changes are reasoned about before being accepted.

Team Skill 4: Managing Scope

In Team Skill 5, we learned that the problem of project scope is endemic. It is not unusual that projects are initiated with twice the amount of functionality that the team can reasonably implement in a quality manner. We shouldn't be surprised by this, as it is the nature of the beast: Customers want more, marketing wants more, and the team wants more. We just need to make sure that we can deliver something on time.

In order to manage scope, we looked at various techniques for setting priorities, and we defined the notion of the baseline, an agreed-to understanding of what the system will do, as a key project work product. We learned that if scope and the concomitant expectations exceed reality, in all probability, some bad news is about to be delivered. We decided on a philosophy of approach that engages our customer in the hard decisions. After all, we are just the resources, not the decision makers; it's our customer's project. So, the question is, What, exactly, must be accomplished in the next release, given the resources that are available to the project?

Even then, we expect to do some negotiating. We briefly mentioned a few negotiation skills and hinted that the team may need to use them on occasion.

We cannot expect that the process described so far will make the scope challenge go away, any more than any other single process will solve the problems of the application development world. However, the steps outlined can be expected to have a material effect on the scope of the problem, allowing application developers to focus on critical subsets and to incrementally deliver high-quality systems that meet or exceed the expectations of the user. Further, engaging the customer in helping solve the scope management problem increases commitment on the part of both parties and fosters improved communication and trust between the customer and application development teams.

With a comprehensive project definition, or Vision document, in hand and scope managed to a reasonable level, we at least have the opportunity to succeed in the next phases of the project.

Team Skill 5: Refining the System Definition

In Team Skill 6, we learned that requirements are the key communication technique to capture the user's needs in such a way that the developer can develop a system to meet those needs. In addition, requirements need to have sufficient specificity so that we can tell when they have been met. We needn't be alarmed by this, as it is often our team members—after all, we are closest to the project—who can provide this specificity. This is one of our opportunities to make sure that the right system gets defined.

These requirements can be organized and documented in a variety of ways. We focused on what we called a Modern SRS Package, a logical construct that allows us to document requirements in use cases, documents, database forms, or other techniques. Although we made some suggestions on how to organize this package, we don't really care what form it takes, so long as it contains the right things.

All development should flow from the requirements specified in the Modern SRS Package. Nothing should be developed outside this package, and all specifications in the package should be reflected in the development activities. Since these are the governing elements, it follows that all activities, such as regulatory constraints, should reflect the package and vice versa. The Modern SRS Package is a living package that should be reviewed and updated throughout the lifetime of the project. The package should specify what functions are to be accomplished, not how they are to be accomplished. The Modern SRS Package should be used to specify functional requirements, nonfunctional requirements, and design constraints.

We also provided a set of quality measures for assessing the quality of your package and the various elements contained therein. Where necessary, the requirements documentation may be supplemented by one or more formal, or more structured, methods of specification. The Modern SRS Package provides the detail you need to proceed to implement, or build, the right system.

Team Skill 6: Building the Right System

Designing and implementing the correct system is the biggest job of all. One useful technique is to use the requirements and use cases to drive the implementation architecture and design.

Verification is an analytic approach that allows you to constantly monitor the evolution of the project's features, requirements, design, and implementation. Verification is supported by the use of traceability techniques to relate parts of your project to one another. By using traceability, you can verify that

  • All project elements are accounted for, and

  • All project elements have a purpose

Although verification is an analytical technique, it is important to remember that thinking is important. You can't simply apply the verification techniques mechanically.

Validation, the other half of the V&V approach to ensuring that the system is built correctly, focuses on testing and uses traceability techniques to select system components that will require testing. As in verification, we use the validation techniques to ensure that

  • All project elements are properly tested

  • All tests have a useful purpose

You may also need to apply hazard analysis and risk analysis to help you decide which portions of your system need verification and validation, and in what amounts.

We also described how periodic acceptance testing could help keep our projects on track.

Finally, building the right system also depends on managing change. We learned that change is just part of life, that we must plan for change and develop a process whereby we can manage it. Managing change helps us make sure that the system we built is the right system and, moreover, that it continues to be the right system over time.

Your Prescription for Requirements Management

With this little refresher course behind us, we can now proceed to provide a prescription. However, if we are going to oversimplify the prescription, as is necessary to manage our level of abstraction—and to help us manage the scope of the prescription—we must first make some simplifying assumptions. These will help us communicate more clearly what type of system the prescription can be applied to and also helps manage your expectations for what the prescription can deliver as well.

Simplifying Assumptions

  • The followers of the prescription have read and understood the book and/or received some training reasonably consistent with the methodology in this book.

  • The application being described is a single, stand-alone application, not a system of subsystems or a much larger-scope project. Also, there are no contractual requirements for documents in a specific format.

  • The team size is small to moderate, perhaps 10–30 members.

  • The software is being designed for use by others: an external customer who is fairly readily available to the team.

  • It's a new application, so the team can "start from scratch" in building the project.

  • The team will use modern software methods and they are familiar with the basic concepts of use cases and iterative development.

  • The team has reasonable tool support, including requirements management tools, modeling tools, and a change request system and change management tools.

The Recipe

  1. Understand the Problem Being Solved

    1. Execute the five-step problem analysis process.

      1. Gain agreement on the problem being solved.

      2. Understand the root cause, if applicable to your situation.

      3. Identify the stakeholders and users, or actors, in your system.

      4. Define the system boundary.

      5. Identify constraints imposed on the solution.

      (Use Team Skill 1 as a guideline for your work.)

    2. Circulate the problem statement to external stakeholders and insist that you gain agreement on the problem statement before moving forward.

  2. Understand User Needs

    1. Create a structured interview, using the generic template from Team Skill 2, pertinent to your application.

    2. Interview 5–15 users/stakeholders identified in Step 1.

    3. Summarize the interviews by aggregating the top 10–15 user needs, or use the "pithy quote approach"; that is, document 10 or 15 particularly memorable stakeholders quotes that reflect their needs in their own words.

    4. Use the quotes or the restated needs to start your requirements pyramid. Start requirements traceability now.

    5. Facilitate a requirements workshop for your project. Use "out-of-box" and "in-box" warm-up papers (use "in-box" data from item c).

      1. Run a brainstorming session to identify/refine features.

      2. Perform idea reduction and feature prioritization.

      3. Use the critical, important, and useful classification.

    6. Rerun the workshop once or twice a year to provide a format for ongoing structured customer input.

    7. Create storyboards for all innovative concepts. Present them and show an appropriate set of use cases to your users to make sure you get it right.

    8. Try to make sure that your process yields at least one user prototype system to evaluate, which the users can test in their environment.

  3. Define the System

    1. Adopt the Vision document concept and create a template to suit your project's needs.

    2. Create a product position statement. Circulate it widely and make sure that you have agreement. If you don't have it, stop and get it. Make sure that your customer is in agreement.

    3. Enter all features identified in step 2 and through other inputs, such as development, help desk, and marketing, in the Vision document. Trace them back to user needs. Use attributes of priority (critical, important, useful), risk (H, M, L), effort (team-months), stability (H, M, L), and Release (v1.0 and so on). Also define the general requirements (licensing, documentation, legal and regulatory, and so on) in the Vision document.

    4. Develop illustrative use cases in the Vision document's Appendix so the features in the Vision document can be understood by all.

    5. Make the Vision document be the living document for your project. Publish it for easy access and review. Make the owner of the document, by default, the official channel for changing features. Use a Delta Vision document going forward. Addict your company to having a current Vision document at all times.

  4. Continuously Manage Scope and Manage Change

    1. Based on effort estimates from the team, determine the baseline for each release in the Vision document, using an attribute of "version number."

    2. Get customer agreement on scope. Help the team make the hard scope decisions and get the decisions behind you.

    3. Preach and teach iterative development. Communicate and manage expectations everywhere.

    4. Manage change by using the baseline. Use the Delta Vision document to capture all new features that arise through the normal course of events. Make sure that all suggested features are recorded so that none are lost. Empower a change control board to make the hard decisions.

    5. Install a change request management system to capture all requests for change, and ensure that all requests go through that system to the change control board.

  5. Refine the System Definition

    1. Mandate that there shall be, at all times, a software requirements specification—using the Modern SRS Package organizational structure—that defines the complete set of functional and nonfunctional behaviors of the product. Develop detailed use cases for core functionality of the system.

    2. Have the development team or test team adopt and manage this workload. Assist them with training and find them help if they need it. Use formal analysis methods only where you cannot afford to be misunderstood.

    3. Trace requirements to and from use cases and features.

    4. Also, make sure that you define all of the nonfunctional requirements for your system. The template you use should prompt you to make sure that you have asked the right questions.

  6. Build the Right System

    1. Perform a hazard analysis (risk assessment) to determine what things you can't afford to have go wrong in the implementation. Develop a verification and validation plan, based on these results.

    2. Engage the test department in the requirements management challenge now. Have testers involved in test planning from the beginning. Have the test team build test procedures and test cases that trace back to the use cases, as well as functional and nonfunctional requirements.

    3. If you have an independent QA department, have it assume a role in the monitoring and assessment of the requirements process and the V&V plan.

    4. Rely on the use cases and use-case realizations in the design model to integrate design elements with the requirements. Use inferred traceability through the use-case realizations for impact assessment as change occurs.

    5. Provide periodic acceptance testing milestones to validate your work and ensure your customer's continuous involvement.

  7. Manage the Requirements Process

    1. The champion should personally maintain responsibility for the Vision document, have weekly reviews with the team to assess status, and set up default reports and queries to assist this effort.

    2. Monitor the software requirements specification process to make sure that the vision is properly fulfilled in the detailed requirements.

    3. Engage QA to help monitor the requirements maintenance, change management, and test processes.

    4. Lead the change control review process (CCB) and make certain that impact assessment is done before significant changes are allowed into the system.

  8. Congratulations! You've Shipped a Product!

Now, On to the Next Release!

Congratulations! You and your team have shipped a quality, albeit scope-managed, first release of your new system. You did it with quality and even a little style, and you got to spend the year-end holidays at home with your family. And your customers are happy. OK, they are not ecstatic; many of them were hoping for more. But they are still your customers, and they eagerly await the next release.

  1. Go back to (about) step 2(e)! and build the next iteration of your system.

By the way, don't forget to have some fun! Building great products and systems is a blast! We love this business!

Now, On to the Next Release!
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset