© The Author(s), under exclusive license to APress Media, LLC, part of Springer Nature 2022
M. BreyterAgile Product and Project Managementhttps://doi.org/10.1007/978-1-4842-8200-7_5

5. Creating and Maintaining IT Requirements

Mariya Breyter1  
(1)
New York, NY, USA
 

This chapter compares Waterfall scope management and Agile product backlog practices. It addresses high-level software requirements elicitation, process modeling, UML principles and artifacts (use cases, data models, all relevant diagrams), UI wireframing, and UX design tools and covers multiple approaches to managing and defining requirements in IT. It will explain the logic behind Agile backlog development and prioritization practices: once product features have been identified, the next step is to create a prioritized list of features and split them into smaller requirements, referred to as “user stories.” In addition, this chapter describes the product backlog taxonomy (epic, user story, subtask, bug, etc.), ongoing requirements maintenance, related roles, and stakeholder communication. Topics such as product backlog health, prioritization techniques, technical vs. functional requirements, and product backlog refinement are covered in detail.

Introduction

In Chapters 3 and 4, we discussed multiple techniques and frameworks of customer research. Using validated knowledge about the customers and their problem to solve, or Job-to-Be-Done, product features are sequenced and prioritized based on user needs. This information can be captured and documented in multiple ways.

Chapter 5 covers different frameworks and techniques for creating and maintaining requirements in IT – whether it is software or hardware development. It covers traditional requirements documents – how those are created, what information they cover, and how those are approved, updated, and maintained. As part of the requirements document, we categorize requirements into functional and nonfunctional and discuss software models as they apply to requirements definition. We will review use cases and user scenarios and cover UML (Unified Modeling Language) methodology and formal techniques for process modeling. In contrast to monolithic well-defined traditional requirements, we will review the details of the Agile approach to requirements gathering via collaboration, the role of IT professionals in the process, as well as continuous validation and adaptation that are happening in Agile delivery. We will review the concept of a product backlog, the taxonomy of its elements, and different techniques for creating backlogs, such as story mapping, as well as prioritization mechanisms that are used in product backlog management. We will talk about risk and dependency management as it applies to the requirements definition.

The following are the concepts we will cover in this chapter:
  • Requirements in software development

  • Software requirements specification

  • Unified Modeling Language (UML)

  • Agile requirements management

  • Use cases and user stories

  • Product backlog

  • Product backlog taxonomy

  • Requirements sequencing and prioritization in Agile

  • Story mapping

Requirements in Software Development

Software requirements based on customer research and product definition are the basis of all software development work. Poorly defined or inadequate (inaccurate, incomplete, ambiguous) requirements are the major cause of poor-quality software. The goal of software requirements is to describe the capabilities, features, and constraints of the software products. Requirements contain information on how this product works, how users interact with the product, and, most importantly, what customer problem it solves.

The requirements are usually written in a language that everyone can understand. For many globally distributed teams, requirements are written in a natural language, frequently in English. However, some organizations use requirements templates and specialized techniques, such as UML (Unified Modeling Language) and RUP (Rational Unified Process), which will be discussed later in this chapter.

The goal of software requirements is to define what the system needs to do. It can be viewed as a checklist that designers, developers, and testers use to produce software products. Requirements are based on the vision, mission, organizational OKRs, market research, user research, and the validated problem that the product is solving for the customer.

The topics covered by requirements include
  • Product features (capabilities provided to the user) that need to be developed, along with their priority

  • Processes that need to be supported and key steps within each of those processes

  • User groups and related access details

  • What tasks the users will be able to perform

  • Exceptions (what happens if users are not able to perform required tasks)

  • Security and compliance requirements

  • Hardware and infrastructure preferences or constraints

  • Business logic (what type of processing happens behind the scene)

  • Technology preferences or constraints

  • Any third-party or existing systems that have to be integrated

  • How fast the functionality has to be provided

  • User load at any given point of time to be handled

and many other aspects of the system to be built.

A well-formed requirement is a statement that
  • Can be verified

  • Has to be met or possessed by a system to achieve a specific objective

  • Is qualified by measurable conditions and bounded by constraints

  • Defines the performance of the system when used by a specific user or the corresponding capabilities of the system [1]

Requirements’ format, elicitation techniques, documentation, and approval (sign-off) processes differ drastically among the organizations. In this chapter, we will review different methods in a historical sequence, starting with a traditional software requirements specification (SRS) document.

Requirements in Traditional Project Management

Requirements gathering in traditional project management is part of business analysis. It includes the following stages:
  • Requirements gathering

  • Requirements elicitation

  • Requirements management plan

  • Requirements analysis

  • Requirements traceability

  • Change control

The Project Management Institute (PMI) provides requirements management guidelines based on the Project Management Body of Knowledge (PMBOK). Requirements management is considered part of scope management and requires a detailed project management plan containing the following information:
  • Requirements activities management (how requirements gathering, elicitation, analysis, and traceability will be performed)

  • Configuration management activities (how the changes to the product will be initiated, approved, tracked, and reported)

  • Requirements prioritization process (how requirements should be prioritized against each other)

  • Product metrics (which metrics should be used to track requirements and related progress)

  • Traceability structure (which requirement attributed will be captured on the traceability matrix with a complete audit trail of changes) [2]

Requirements traceability matrix is a list of requirements, their attributes (e.g., priority), references to test cases and validation mechanisms, status, and other relevant information. A sample traceability matrix template is provided in Figure 5-1.
Figure 5-1

Requirements traceability matrix (RTM)

 Topic for a Group Discussion

Review each field on the requirements traceability matrix format provided in the sample. Which data is informative and which can be replaced by other, more meaningful, data points? What information is missing? How would you optimize the template provided in this sample?

Software Requirements Specification (SRS)

In traditional project management (Waterfall), software requirements specification is a document that describes features and capabilities provided by the software along with its performance requirements. It also describes the functionality the product needs to fill  the stakeholders' (business customers, end users, clients) need.

A software requirements specification (SRS) usually contains functional (customer-directed capabilities) and nonfunctional requirements (system-based features, such as availability, reliability, and security). Software requirements specification serves as a foundation for a handshake between the customers and the software provider on how the software product should function. The goal is to provide the relevant level of detail upfront to limit any redesign or changes to the list of required features. Usually, it is a comprehensive, well-defined document, which provides a clear and thorough understanding of the product to the development team.

In traditional project delivery, the communication between the development team and customer is limited throughout the development process, so SRS serves as an internal contract for the work that is being performed. Any changes to SRS are considered scope changes to the product and have to be reviewed and approved through the change management process based on the impact on product delivery that is estimated by the delivery team or the development lead.

Typically, SRS contains hundreds of pages of documentation, accompanied by appendices containing data models, descriptions of business logic, a set of assumptions, wireframes, and other relevant information. SRS is usually written and maintained by a product manager, business analyst, technical writer, or (in smaller companies) a systems architect or a software developer. SRS users include managers, software engineers, test engineers, maintenance engineers, customers, and managers.

Frequently, business analysts start their work on software requirements from the Business Requirements Document (BRD), which describes the high-level business needs. This document is extended by the Functional Requirements Document (FRD), which outlines the functionality required to fulfill the business need. Based on this information, they proceed to create SRS, which contains technical implementation details and serves as a primary input into the development. This nomenclature may differ depending on each company's internal processes and practices.

Software requirements specification structure is usually a variation of the following:
  • Objectives (business objective, business processes and how the product will be used in this context, users for the software, and interaction with other systems)

  • Functional requirements (statement of functionality, which can be viewed as a contract with customers)

  • Nonfunctional requirements (performance, availability, usability, security, etc.)

  • Appendices (used to capture any detailed information, such as UML diagrams, list of use cases, data models, lists, wireframes, repositories, and other relevant details)

There is an SRS standard developed by the Institute of Electrical and Electronic Engineers (IEEE), the world’s largest technical professional organization dedicated to advancing technology for the benefit of humanity. The IEEE Recommended Practice for Software Requirements Specifications (IEEE Standard 29148-2018) [1] discusses a number of topics that should be considered during the creation of an SRS. The SRS is defined by IEEE as a specification for a particular software product, program, or set of programs that perform certain functions in a specific environment. IEEE advises that SRS writer(s) shall address the following:

  1. a.

    Functionality: What is the software supposed to do?

     
  2. b.

    External interfaces: How does the software interact with people, the system’s hardware, other hardware, and other software?

     
  3. c.

    Performance: What is the speed, availability, response time, recovery time of various software functions, etc.?

     
  4. d.

    Attributes: What are the portability, correctness, maintainability, security, etc., considerations?

     
  5. e.

    Design constraints imposed on an implementation: Are there any required standards in effect, implementation language, policies for database integrity, resource limits, operating environment(s), etc.?

     

IEEE provided the following samples of requirements:

Example 1.When signal x is received [Condition], the system [Subject] shall set [Action] the signal x received by [Object] within 2 second [Constraint].

Example 2.At sea state 1 [Condition], the Radar System shall detect targets at ranges out to [Action or Constraint] 100 nautical miles [Value].

Example 3.The Invoice System shall display pending customer invoices [Action] in ascending order [Value] in which invoices are to be paid.

Software Design Specifications

Software requirements document usually does not provide details of software design, that is, description of specific subcomponents of a system and their interfaces with other subcomponents. This includes descriptions of software architecture, its structural modules, data models, the flow of information or control between modules, and data structures.

However, in special cases, some requirements may severely restrict the design. For example, security or safety requirements may reflect directly into the design, such as the need to
  • Keep certain functions in separate modules

  • Limit communication between subsystems within the program

  • Check data integrity for critical variables

Design constraints may be reflected in SRS as nonfunctional requirements.

 Five key questions to review:
  1. 1.

    What is a software requirement?

     
  2. 2.

    What is included in a software requirements specification document?

     
  3. 3.

    What is the difference between functional and nonfunctional requirements?

     
  4. 4.

    What is the relationship between a software requirements specification document and a software design specification document?

     
  5. 5.

    What are the topics that IEEE advises to cover in the software requirements specification based on Systems and Software Engineering – Requirements Engineering standard?

     

Use Cases

Requirements can be expressed in a natural language or in any agreed-upon format. Use case methodology is an effective approach for documenting requirements that originated in object-oriented programming. A use case is defined as a list of actions or steps defining the interactions between a role and a system to achieve a predefined objective. This could be a human or other external system.

The concept of use cases was introduced in 1987 by Ivar Jacobson, who described how this methodology was used at Ericsson to capture and specify requirements of a system using textual, structure, and visual modeling techniques to drive object-oriented analysis and design. In a nutshell, use cases are a methodology that allows for capturing, modeling, and specifying the requirements of a system. It is a combination of a software requirements specification and an implementation-based system requirements specification. According to the Software Engineering Body of Knowledge (SWEBOK) [3], these use cases belong to scenario-based requirements elicitation techniques, as well as model-based analysis techniques. In addition to that, use cases support narrative-based requirements gathering, incremental requirements definition, and modern testing techniques, such as acceptance-driven delivery.

A use case is a scenario that contains the following elements:
  • Title

  • Description

  • Actors

  • Trigger(s)

  • Pre-conditions

  • Postconditions

  • Normal flow

  • Alternative flows

 Tip

Use cases are written in such a way that they are free of implementation details. The concept is to represent functionality rather than describing implementation. For example, the best practice is to specify that a user selects a specific option rather than stating that the user clicks a button.

In the following, we provide a sample use case for an online bookstore:

Title: UC-1 Select a book to buy

Description: While browsing books in a bookstore, a user is able to select a book for purchase.

Actors: Customer, System

Trigger(s): A website provides a set of recommended books based on customer’s preferences.

Pre-condition: A user has a profile set up with preferred book type and prior purchase history.

Postcondition: A user selects a book and places it in a shopping cart.

Normal flow:

1.  The user views the proposed books.

2.  The user chooses the book to view details.

3.  The system presents book details and updates the set of recommended books based on the selection.

4.  The user chooses to purchase the book reviewed.

5.  The system presents a list of books that the users who purchased the originally selected book also have bought.

6.  The user reviews the list and chooses a book to purchase without reviewing details.

7.  The system allows for one-step addition of recommended items to the shopping cart.

8.  The user selects an option to view the shopping cart.

9.  Shopping cart content is presented to the user.

Alternative flow:

2A.

1.  The user chooses to buy the book without viewing the details.

2.  Proceed to step 7.

4A.

1.  The user chooses not to purchase the book.

2.  The user exits the system.

4B.

The user chooses not to purchase the book.

The user is presented with a set of recommended books.

Proceed to step 1.

A set of use cases representing the complete functionality of a system is described in a use case diagram, as shown in Figure 5-2.
Figure 5-2

Online bookstore use case diagram, as modified from (1)

 Topic for a Group Discussion

Review the use case diagram in Figure 5-2 and discuss who are the actors, how authentication is set up, and how payment is performed in this specific system. Review additional use case diagrams in the following UML tutorial and explain the functionality described there. Source: www.uml-diagrams.org/examples/online-shopping-use-case-diagram-example.html?context=uc-examples

Unified Modeling Language

Use case methodology laid the foundation of the Unified Modeling Language (UML). UML was invented in 1999 by Grady Booch, James Rumbaugh, and Ivar Jacobson (a.k.a. the Three Amigos), who did groundbreaking work in object-oriented analysis and design methods in the 1990s working at Rational Software.

Object-oriented analysis and design (OOAD) is an incremental approach to software delivery, which applies object-oriented programming principles to analyzing and designing software. It uses visual modeling (analysis modeling and design modeling) throughout the software development process to drive delivery. OOAD is based on the object-oriented programming (OOP) approach, which calls for organizing code into larger meaningful “objects” that model specific functionality. These objects combine all the necessary variables for describing each possible state of the model’s components, as well as the methods (subroutines or functions) necessary to change each variable’s data.

Alistair Cockburn, an American computer scientist, took this concept to the next level in 2000 by proposing a goal-oriented use case practice involving narrative descriptions of customer experience.

The goal of UML is to provide a visualization of business processes and software architecture. It’s a graphical language providing a standard way to describe the functionality and create a system model covering conceptual ideas. It includes an integrated set of diagrams that describe and visualize the artifacts of software systems. It is also used for business modeling and other nonsoftware systems. The UML represents a collection of best engineering practices that have proven successful in the modeling of large and complex systems.

UML has been primarily used as a general-purpose modeling language in the field of software engineering; however, it has proven effective in documenting business processes, functional scenarios, and workflows. Since UML is agnostic of any specific programming language, there are tools that allow using UML diagrams to generate code in multiple programming languages or reverse engineer functional or system diagrams from the existing code. For example, Sparx Systems’ UML Tool, Enterprise Architect, allows Java Binaries (JAR files) to be reverse engineered, creating code and UML diagrams. Developers can model UML classes, as well as dependencies to other classes.

UML is not confined to visualizing functionality only. UML diagrams include two types:
  1. 1.
    Behavioral UML diagrams:
    • Activity diagram (swimlane-based workflow used for business process modeling)

    • Use case diagram (functional requirements scenario-based diagram discussed before)

    • Interaction overview diagram (activity diagram providing details on relationships between actors)

    • Timing diagram (activity diagram with timing between steps)

    • State machine diagram (a.k.a. statechart diagrams, used to describe the different states of a component within a system)

    • Communication diagram (a.k.a. collaborative diagram focused on communication between objects)

    • Sequence diagram (business process design and implementation)

     
  2. 2.
    Structural UML diagrams:
    • Class diagram (in software development, classes are considered abstract data types, whereas objects are instances of the abstract class)

    • Object diagram (see the aforementioned text)

    • Component diagram (it breaks down the system into smaller components. It is a useful way of representing multitier software architecture)

    • Composite structure diagram (a rarely used UML diagram representing the internal structure of a class and relations between class components)

    • Deployment diagram (used to visualize the relation between software and hardware)

    • Package diagram (macro container for preceding deployment diagrams)

    • Profile diagram (it provides additional notations, such as tags, constraints, and other extensive UML elements)

     

However, there is usually no need to use all these different types of UML diagrams to provide software specifications in each instance since some may not be applicable and some may contain an excessive level of detail. Use case diagrams, activity diagrams, class diagrams, and sequence diagrams are most frequently used in software specifications.

While UML was broadly used in the early 2000s, it is used significantly less nowadays. There are two primary reasons for that:
  1. 1.

    UML is based on object-oriented programming (OOP) practices. Object-oriented programming is still widely used. However, there is an increasing number of programmers who feel that this architecture is counterintuitive and error-prone. OOP was created when systems were single-threaded and objects were easily traceable. Nowadays, as the program executes, it is usually multithreaded.

    As a replacement for OOP, functional programming (FP) is continuously growing in importance and level of adoption, as well as procedurally oriented programming, data-oriented programming, compression-oriented programming, and data-driven design. The essential idea of functional programming is that a procedure should take input parameters and produce output with full predictability. This means it should not modify any variables that already exist. In this way, functional programming is similar to a mathematical function, which returns a consistent value that neither depends upon nor impacts anything outside the function scope. C++ provides an example of functional programming. However, UML is not suited for modeling functional programming languages [3a].

     
  2. 2.

    While it was recognized in UML that software engineering is typically conducted in an iterative and incremental way, there is no iterative process built into this methodology. The diagrams have to provide a sufficient level of details in a static way in order to be informative, so most of the requirements definition work was done upfront.

     

To address the problem of defining requirements without any feedback loop and to reflect the modern iterative way of developing software (and any IT product or service), a new customer-centric format has been adopted in Agile delivery, referred to as “user stories.”

User Stories

User stories are short, simple descriptions of a feature told from the perspective of the actor who desires the new capability, usually a user or customer of the system. Each user story expresses one very specific need that a user has. It can be viewed as a minimum requirement focused on user needs.

User stories are used in the Agile development process to describe product features. They allow developers to focus on what the user need is. The best user stories are based on user research and market analysis, as described in Chapter 4 they aren’t “made up” and actually reflect user needs.

The difference between use cases and user stories is that user stories are written from the user perspective (hence the term “user stories”) rather than that of a business analyst describing the system’s functionality.

They are focused on outcomes rather than scenarios. And most importantly, they do not describe “how” to achieve the desired functionality; they focus on “what” this functionality should be. User story allows developers to design a functional solution to the user problem it presents.

User stories follow the standard format based on role–action-benefit (or “who–what–why”).

It is important to keep in mind the following good practices:
  1. 1.

    A role (“who”) represents a user type. It has to be as specific as possible. The system can be a role, but the development team or product manager cannot design the system for their own benefit.

     
  2. 2.

    The action (“what”) describes the system behavior. It is usually unique for each user story. Actions are preferably written in active voice (buyer needs to purchase a book, rather than “a book needs to be purchased”).

     
  3. 3.

    The reason or benefit (“why?) has to be specified (otherwise, the question arises why this feature is being developed at all). Multiple user stories may share the same benefit. The benefit may be for other users or customers, not only for the user in each particular story.

     

Some user story examples include the following:

As an online book shopper, I want to view the details of the book in an online store so that I can make an informed decision.

As a mortgage provider, I want to view the requestor’s credit score so that I can approve or decline their mortgage based on the risk associated with it.

As a service provider, I want to authenticate my customers so that I can provide personalized service based on their subscription type.

There are several rules for a user story.

“3 C’s” are an important characteristic of a user story that allows for keeping the purpose of the user story in perspective. This model was proposed by Ron Jeffries in 2001 [4]. These 3 C’s include the following:
  1. 1.

    The first “C” is the user story in its raw form, the Card (i.e., index card). The concept is that the whole story has to be concise, that is, fit into a single index card. It also has to do with the way user stories are grouped together on a Kanban board (Kanban board is a way of visualizing work in progress based on user stories that are being delivered. The concept comes from Lean. In Japanese, “Kanban” literally means “visual card”). See an example in Figure 5-3.

     
Figure 5-3

Sample Kanban board

  1. 2.

    The second “C” is the Conversation. Conversations represent discussions between the project team, customers, relevant stakeholders, and business subject matter experts. In these conversations, stakeholders or team members exchange thoughts, opinions, and suggestions. While the conversation is largely verbal, it can be done in a digital firm (e.g., a distributed team may communicate via a persistent chat, such as Slack) and may be supported with documents or within requirements management tools, for example, via Slack Comments.

     
  2. 3.

    The third “C” is Confirmation. A user story is the start of a conversation. Once the need is articulated, the team raises a lot of questions, discusses them, and comes up with the best solution. The goal is to build a shared understanding.

    This agreement is being recorded as a set of so-called acceptance criteria, a set of success criteria to validate whether the user story has been successfully completed. These acceptance criteria are frequently used as an input into software test cases because they cover ideal paths and exceptions (alternative paths) for each user story.

    In software delivery, there is a programming practice that is based on acceptance criteria. It is referred to as “Acceptance Test-Driven Development” (ATDD). According to Scrum Alliance [5], these acceptance tests represent the user’s point of view and act as a form of requirements to describe how the system will function as well as serve as a way of verifying that the system functions as intended. In some cases, the team automates the acceptance tests. Different flavors of ATDD are referred to as Story Test-Driven Development (SDD), Specification by Example, or Behavior-Driven Development (BDD).

     

There is an opinion that for ATDD, tests always have to be automated. This is not accurate. Despite us advocating for test automation and despite the tools, such as Fit/FitNess or Cucumber, ATDD is highly beneficial even if it is not automated (2).

ATDD is built on the concept of Test-Driven Development (TDD). ATDD process is built “backward.” First, a developer writes a failing unit test that demonstrates that the existing code base does not fulfill the requirement. Once the unit test fails, they write the production code until the test passes the requirement. When the test is passing, they clean up the code and improve the design. Similarly, in ATDD, the team creates one or more acceptance-level tests for a feature before beginning work on it.

These tests are usually recorded when the team is working with the business stakeholders to understand this story. ATDD tests are heavily based on acceptance criteria for each story. Frequently, the team uses the Gherkin format for acceptance criteria that allows for directly translating acceptance criteria into an ATDD test. BDD (Behavior-Driven Development) is using the Given-When-Then test scenario format – this format is used in Gherkin, line-oriented language that is used in a tool called Cucumber. This format allows to describe scenarios by specifying pre-condition, action, and postcondition, as shown in Table 5-1.
Table 5-1

Acceptance criteria sample

Given

When

Then

User views online books

User selects a book to buy

It is visible in a shopping cart

User adds a book to the shopping cart

User views pricing

Cost is updated

User has a coupon

User adds a book to the shopping cart

Coupon is applied

User purchased a book

User is presented with a choice

Which book format do they prefer

Besides the title, description, and acceptance criteria described before, user stories may contain
  • Component (database, UI, business logic tier)

  • Category

  • Priority

  • Constraints (e.g., timelines based on market regulations or business conditions)

  • Estimation of the complexity or time to completion

  • Comments to establish a full audit trail

  • Attachments (wireframes, data models, link to repositories and artifacts)

and many other relevant data points.

The acronym INVEST is a mnemonic introduced by Bill Wake, which helps to remember a list of criteria to assess the quality of a user story. The acronym represents the following qualities of a user story:
  • Independent: User stories have to be as independent of each other and external prerequisites as possible. At the same time, when delivered independently, it should provide user value by itself.

  • Valuable: The business value of any user story should be listed, and each story should be of value to a specific user type.

  • Estimable: The effort required to complete this story can be estimated so that the team can plan their work successfully and establish the predictability of the delivery.

  • Small: A user story should be small enough so that it can be completed within a short period of time (usually in days from start to finish).

  • Testable: There has to be a clear way to verify whether the story has been completed, such as well-specified acceptance criteria.

If a user story is too large in terms of the effort required to complete it by the team, it has to be split into smaller independent stories, which is referred to as “user story decomposition.” It is not always obvious how to split a user story; however, there is a set of possible parameters that allow successful decomposition. Some of these parameters include the following:
  1. 1.

    CRUD method (Create, Read, Update, and Delete). For example:

    As an online book store shopper, I want to manage my user profile so that I can view and update my account details and settings.

    This user story can be split into four:
    • I want to create a user profile.

    • I want to view my user profile.

    • I want to update my user profile.

    • I want to delete my user profile.

     
  2. 2.

    Business rules

    As an online bookstore shopper, I want to search for books so that I can select an interesting book to read.

    This user story can be split by business rules:
    • I want to search for books by the author.

    • I want to search for books by title.

    • I want to search for books by topic.

    • I want to search for a book similar to the ones I’ve previously purchased.

     
  3. 3.

    Workflow steps

    As an online bookstore shopper, I want to buy a book so that I can start reading it. This user story can be split based on the sequence of the following activities:
    • I want to add the book to my shopping cart.

    • I want to review the card.

    • I want to confirm my selection.

    • I want to pick payment type.

    • I want to submit the payment.

     

Other ways to decompose user stories are by user type (new vs. repeating user), by book type (paper vs. digital), by price, by geography, by language, and so forth.

 Topic for a Group Discussion

Decompose the following user story and rewrite it as needed:

As a user, I want to log on to the online bookstore to check my order status.

The benefits of user stories include the following:

  • Customer-centricity since stories keep the focus on the user. Apart from a list of tasks, user stories keep the team focused on user needs via delivering functionality.

  • Team empowerment and collaboration, since stories define “what,” not “how.” Team members work together to decide how to implement specific functionality.

  • Creativity and innovation since stories are focused on outcomes vs. outputs (tasks). Stories encourage the team to focus on solving customer problems.

  • Flexibility. User stories can be tweaked on the fly unless they are already being executed – in this case, it will need a discussion and further analysis. They do not require any process-heavy change control. Once new information becomes available, the definition or acceptance criteria can be changed with a full audit trail.

  • Progressive elaboration. User stories support an iterative and incremental approach to requirements gathering. They are prioritized top to bottom, from highest priority to lowest. The top-priority user stories are well defined, and acceptance criteria are provided. Lower-priority user stories do not need to be well defined since they may change or become obsolete by the time the team will start working on them. So why waste time – a definition might be sufficient until their priority changes. This reflects the “just-in-time approach” coming from Lean that eliminates any waste related to specifying details before it is required. This concept is similar to the “progressive elaboration” of requirements in traditional project management.

 Five key questions to review:
  1. 1.

    What are user stories?

     
  2. 2.

    What is the difference between user stories and use cases?

     
  3. 3.

    What does the acronym INVEST stand for?

     
  4. 4.

    Why ATDD practice is driving quality improvement?

     
  5. 5.

    What are the benefits of using user stories vs. software requirements specifications? What are the drawbacks?

     

However, Agile requirements are not a collection of individual user stories. Given that for larger systems, there are usually hundreds of user stories developed, they need to be prioritized, sequenced, and organized in a meaningful way. This way of organizing, prioritizing, and maintaining user stories is called a product backlog.

Product Backlog

The product backlog is a collection of prioritized discrete items of different types connected by parent-child relationships. Relationships between product backlog items are referred to as “product backlog taxonomy” shown in Figure 5-4.

Agile does not prescribe the types of elements in the product backlog; however, traditionally, functional requirements are represented in user story format. The team using the product backlog determines the format they choose to use and looks at the backlog items as reminders of the aspects of a solution the team may work on.

Besides user stories, other product backlog elements may include the following:

Epics. Epic captures a large body of work. It represents a feature that may be independently released to end users. It is usually written in the same format as a user story; however, this is not necessary. For example, “As a customer, I want to pick a flight ticket so that I can travel to a conference.” This epic includes “selection” criteria, “view details” functionality, and “select functionality.”

Technical Tasks. Tasks do not provide user functionality; however, they are necessary for software development. For example, deploying applications on the cloud, building test environments, implementing security features, upgrading software tools, and so forth.

Spikes. Spikes are research items. They are created to research the tool, define strategy, test performance, compare implementation methods, and so forth. They have an outcome, which is learning and potentially implementation or tooling decision, but they do not produce shippable products. If there are prerequisites to user stories, spikes usually address those prerequisites and precede user stories they are supporting.

Subtasks. User stories, epics, technical tasks, and sometimes even spikes may be broken down into subtasks (sometimes referred to as “tasks”). While each of these backlog item types either provides end-to-end functionality or provides an answer to a specific question, subtasks are used to divide responsibilities between team members in implementing any of these items, for example, coding, testing, designing, etc. Subtasks are helpful in planning and aligning as a team during execution.

Agile is a framework, not a methodology, so it does not prescribe specific taxonomies or formats for product backlogs. Each organization optimizes against its needs and processes. For example, there may be other item types in Agile organizations, such as bugs, risks, and so forth. It depends on organizational size, structure, reporting, and tracking. Since Agile assumes continuous improvement, many organizations experiment with the most efficient structure of the product backlog.

 Tip

Frequently, product backlog taxonomy is prescribed or configured within an organization by the software delivery life cycle tool that this organization is doing. To enable organizational-level transparency and reporting, it is important to standardize product backlog taxonomy across the organization. For example, if an organization is heavily regulated, it may implement Risk issue type or create a new one, for example, Compliance Approval. As long as there is consistency, training, and a glossary of product backlog elements, customization is encouraged. However, having more than five to seven item types is usually confusing and creates an unnecessary overhead.

Figure 5-4

Product backlog taxonomy

It is important to prioritize elements in a product backlog top to bottom in a thoughtful and methodical way. Some common mistakes include the following:
  1. 1.

    A product backlog item comes before its prerequisites. For example, if there is a user story to select a book from a list, then a repository of books available for sale should be established first. As an exception, it is possible to test this user story with mock data. In this case, there should be a subtask to set up mock data in a relevant format for testing purposes.

     
  2. 2.

    Product backlog items on the bottom of the backlog are defined in detail, while the items closer to the top lack acceptance criteria. This violates the Lean “just-in-time” principle and creates waste since by the time the team gets to work on the lower-priority items, either the needs will change or there will be further details that will require rework.

     
  3. 3.

    Prioritization is based on the “loudest voice in the room.” This happens when more senior stakeholders insist on prioritizing requirements that are considered most important, and the team does not argue because of their seniority. It is important to validate any assumptions with thoughtful user research, as described in Chapter 4.

     
  4. 4.
    Prioritization is based on user value only. Prioritization is usually a combination of two primary criteria, and in addition, it is influenced by constraints. The primary criteria are
    • User value

    • The effort to develop this functionality

     
The higher-value/lower-effort stories are prioritized top to bottom in the backlog. An effective prioritization technique is described as follows:

User Story ID

Value (from 1, lowest, to 10, highest)

Effort (1, highest, to 10, lowest)

Priority Index

3.2

8

9

72

2.1

6

8

48

1.2

10

3

27

1.1

7

3

21

3.1

8

2

16

However, this logic is impacted if there are constraints. For example, user story 1.2 describes a regulatory requirement that has to be implemented by a specific date. In this case, it does not matter that there is a significant effort to have it implemented, and this user story gets prioritized “just in time” based on the date when the regulation goes into effect and the estimation of the time that will require to deliver, test, and debug this user story.

While product backlogs represent a hierarchical structure with parent-child relationships, they are not usually created as such. An effective technique of creating a balanced, well-thought-through product backlog is referred to as “story mapping.”

Story Mapping

Story mapping (a.k.a. user story mapping) is a valuable tool for software development. The concept of story mapping was introduced by Jeff Patton (3). In this process, the team explores the user story’s life cycle, starting with opportunities and moving deeper into discovery and then sequencing these user stories into MVP and subsequent releases.

 Tip

Jeff Patton provides a quick reference to story mapping – a highly informative document, which serves as a foundation and a guide for the story map workshops. This reference can be downloaded from his website: www.jpattonassociates.com/wp-content/uploads/2015/03/story_mapping.pdf. Review the document and discuss practical takeaways from this approach.

In a nutshell, a story map tells a story about a type of person doing something to reach a goal. Story map represents features that comprise the major product features, which are later organized into subsequent product releases. A sample story map is provided in Figure 5-5.

It is a prerequisite to have a general understanding of the “big picture” in order to create an informed story map. The story mapping session usually starts with reviewing OKRs for the product, major functionality, persona types, and their needs and then moves top to bottom from requirements elaboration perspective: from “themes” (or functional categories) to product features, and sometimes even to user story level, so that the finished product may be used as a skeleton for creating a product backlog.
Figure 5-5

Sample story map for an airline reservation system

As it is shown in the preceding example, the user story map starts with the personas, defines epics (or sometimes collections of epics), and then decomposes those into features and user stories. Many story maps represent the product at the epic level and above, hence the term “story map” rather than “user story map.”

 Five key questions to review:
  1. 1.

    What is a product backlog?

     
  2. 2.

    What is the structure of a product backlog?

     
  3. 3.

    Which elements are mandatory and which are recommended?

     
  4. 4.

    What is a story map? What are its elements?

     
  5. 5.

    Why is story map a more accurate term than “user story map”?

     
The benefits of story mapping include the following:
  • Establishing team collaboration

  • Ability to define MVP (minimum viable product) by sequencing and to prioritize features

  • Exposing any dependencies, internal and external

  • Developing a better, more user-centric product

  • Focusing product development teams on features that provide customer value and improvement

  • Enabling the prioritization process

  • Enabling the delivery of incremental releases, early and often

  • Setting realistic expectations with customers and stakeholders

Based on alignment and prioritization achieved with story mapping, the structure of the product backlog is shared between all stakeholders and can be used as a more flexible analog of a software requirements document.

Key Points

  1. 1.

    The goal of software requirements is to describe the capabilities, features, and constraints of the software products. Requirements contain information on how this product works, how users interact with the product, and, most importantly, what customer problem this software solves.

     
  2. 2.

    Requirements are based on the vision, mission, organizational OKRs, market research, user research, and the validated problem that the product is solving for the customer.

     
  3. 3.

    Requirements’ format, elicitation techniques, documentation, and approval (sign-off) processes differ drastically among the organizations.

     
  4. 4.

    In traditional project management, the software requirements document is a comprehensive description of complete product functionality, requiring a lengthy elicitation process and a complex sign-off. The Project Management Institute (PMI) provides requirements management guidelines based on the Project Management Body of Knowledge (PMBOK). Requirements management is considered as part of scope management and requires a detailed project management plan.

     
  5. 5.

    A software requirements document (SRS) usually contains functional (customer-directed capabilities) and nonfunctional requirements (system-based features, such as availability, reliability, and security). Software requirements specification defines the agreement between customers and the delivery team on how the functionality and performance of a software product.

     
  6. 6.

    Requirements in SRS can be expressed in a natural language or in an agreed-upon format. Use case methodology is an effective approach for documenting requirements that originated in object-oriented programming. A use case contains a list of actions or event steps that define the interactions between a role and a system with the purpose of achieving a specific goal.

     
  7. 7.

    Unified Modeling Language (UML) provides a visualization of business processes and software architecture. It’s a graphical language providing a standard way to describe the functionality and create a system model covering conceptual ideas.

     
  8. 8.

    While it was recognized in UML that software engineering is typically conducted in an iterative and incremental way, there is no iterative process built into this methodology. The diagrams have to provide a sufficient level of details in a static way in order to be informative, so most of the requirements definition work has to be done up front. This does not address the incremental and iterative nature of software delivery.

     
  9. 9.

    In Agile, the construct that lies in the center of requirements definition is a user story. User stories are short, simple descriptions of a feature told from the perspective of the person who desires the new capability, usually a user or customer of the system. Each user story expresses one very specific need that a user has. It can be viewed as a minimum requirement focused on user needs.

     
  10. 10.

    Each user story specifies the value that this functionality provides to the customer. User story success criteria are defined in the form of statements referred to as acceptance criteria.

     
  11. 11.

    The acronym INVEST is a mnemonic, which is used to remember the criteria for a high-quality user story. If the story fails to meet one of these criteria, the team may want to rethink it. The acronym represents the following qualities of a user story: a user story should be independent, valuable, estimable, small, and testable.

     
  12. 12.

    Acceptance Test-Driven Development (ATDD) is a delivery technique that validates whether the system functions as intended. In some cases, the team automates the acceptance tests.

     
  13. 13.

    User stories support an iterative and incremental approach to requirements gathering. They are prioritized top to bottom, from highest priority to lowest. The top-priority user stories are well defined, and acceptance criteria are provided. Lower-priority user stories do not need to be well defined since they may change or become obsolete by the time the team will start working on them. This concept is similar to the “progressive elaboration” of requirements in traditional project management.

     
  14. 14.

    The product backlog is a collection of prioritized discrete items of different types connected by parent-child relationships. Relationships between product backlog items are referred to as “product backlog taxonomy.” Agile does not prescribe the types of elements in the product backlog; however, traditionally, functional requirements are represented in user story format. The team using the product backlog determines the format they choose to use and looks to the backlog items as reminders of the aspects of a solution they may work on.

     
  15. 15.

    Besides user stories, product backlog may include epics (collections of user stories), spikes (research equivalent of user stories), technical tasks (which are technical requirements not providing immediate user value, such as upgrading a software tool or setting up a new environment), or subtasks (child item of user stories, spikes, or technical task, which enable team members to align on delivering each of their parent items).

     
  16. 16.

    Story mapping (a.k.a. user story mapping) is a valuable tool for software development. In this process, the team explores the user story’s life cycle, starting with opportunities and moving deeper into discovery, sequencing these user stories into the minimum viable product (MVP) and subsequent releases. This technique allows the team to establish a “big picture” of product delivery and sequence it into releases, starting from MVP.

     
..................Content has been hidden....................

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