- •Contents
- •Preface
- •Acknowledgments
- •About the author
- •About the cover illustration
- •Higher product quality
- •Less rework
- •Better work alignment
- •Remember
- •Deriving scope from goals
- •Specifying collaboratively
- •Illustrating using examples
- •Validating frequently
- •Evolving a documentation system
- •A practical example
- •Business goal
- •An example of a good business goal
- •Scope
- •User stories for a basic loyalty system
- •Key Examples
- •Key examples: Free delivery
- •Free delivery
- •Examples
- •Living documentation
- •Remember
- •Tests can be good documentation
- •Remember
- •How to begin changing the process
- •Focus on improving quality
- •Start with functional test automation
- •When: Testers own test automation
- •Use test-driven development as a stepping stone
- •When: Developers have a good understanding of TDD
- •How to begin changing the team culture
- •Avoid “agile” terminology
- •When: Working in an environment that’s resistant to change
- •Ensure you have management support
- •Don’t make test automation the end goal
- •Don’t focus on a tool
- •Keep one person on legacy scripts during migration
- •When: Introducing functional automation to legacy systems
- •Track who is running—and not running—automated checks
- •When: Developers are reluctant to participate
- •Global talent management team at ultimate software
- •Sky Network services
- •Dealing with sign-off and traceability
- •Get sign-off on exported living documentation
- •When: Signing off iteration by iteration
- •When: Signing off longer milestones
- •Get sign-off on “slimmed down use cases”
- •When: Regulatory sign-off requires details
- •Introduce use case realizations
- •When: All details are required for sign-off
- •Warning signs
- •Watch out for tests that change frequently
- •Watch out for boomerangs
- •Watch out for organizational misalignment
- •Watch out for just-in-case code
- •Watch out for shotgun surgery
- •Remember
- •Building the right scope
- •Understand the “why” and “who”
- •Understand where the value is coming from
- •Understand what outputs the business users expect
- •Have developers provide the “I want” part of user stories
- •When: Business users trust the development team
- •Collaborating on scope without high-level control
- •Ask how something would be useful
- •Ask for an alternative solution
- •Make sure teams deliver complete features
- •When: Large multisite projects
- •Further information
- •Remember
- •Why do we need to collaborate on specifications?
- •The most popular collaborative models
- •Try big, all-team workshops
- •Try smaller workshops (“Three Amigos”)
- •Pair-writing
- •When: Mature products
- •Have developers frequently review tests before an iteration
- •When: Analysts writing tests
- •Try informal conversations
- •When: Business stakeholders are readily available
- •Preparing for collaboration
- •Hold introductory meetings
- •When: Project has many stakeholders
- •Involve stakeholders
- •Undertake detailed preparation and review up front
- •When: Remote Stakeholders
- •Prepare only initial examples
- •Don’t hinder discussion by overpreparing
- •Choosing a collaboration model
- •Remember
- •Illustrating using examples: an example
- •Examples should be precise
- •Don’t have yes/no answers in your examples
- •Avoid using abstract classes of equivalence
- •Ask for an alternative way to check the functionality
- •When: Complex/legacy infrastructures
- •Examples should be realistic
- •Avoid making up your own data
- •When: Data-driven projects
- •Get basic examples directly from customers
- •When: Working with enterprise customers
- •Examples should be easy to understand
- •Avoid the temptation to explore every combinatorial possibility
- •Look for implied concepts
- •Illustrating nonfunctional requirements
- •Get precise performance requirements
- •When: Performance is a key feature
- •Try the QUPER model
- •When: Sliding scale requirements
- •Use a checklist for discussions
- •When: Cross-cutting concerns
- •Build a reference example
- •When: Requirements are impossible to quantify
- •Remember
- •Free delivery
- •Examples should be precise and testable
- •When: Working on a legacy system
- •Don’t get trapped in user interface details
- •When: Web projects
- •Use a descriptive title and explain the goal using a short paragraph
- •Show and keep quiet
- •Don’t overspecify examples
- •Start with basic examples; then expand through exploring
- •When: Describing rules with many parameter combinations
- •In order to: Make the test easier to understand
- •When: Dealing with complex dependencies/referential integrity
- •Apply defaults in the automation layer
- •Don’t always rely on defaults
- •When: Working with objects with many attributes
- •Remember
- •Is automation required at all?
- •Starting with automation
- •When: Working on a legacy system
- •Plan for automation upfront
- •Don’t postpone or delegate automation
- •Avoid automating existing manual test scripts
- •Gain trust with user interface tests
- •Don’t treat automation code as second-grade code
- •Describe validation processes in the automation layer
- •Don’t replicate business logic in the test automation layer
- •Automate along system boundaries
- •When: Complex integrations
- •Don’t check business logic through the user interface
- •Automate below the skin of the application
- •Automating user interfaces
- •Specify user interface functionality at a higher level of abstraction
- •When: User interface contains complex logic
- •Avoid recorded UI tests
- •Set up context in a database
- •Test data management
- •Avoid using prepopulated data
- •When: Specifying logic that’s not data driven
- •Try using prepopulated reference data
- •When: Data-driven systems
- •Pull prototypes from the database
- •When: Legacy data-driven systems
- •Remember
- •Reducing unreliability
- •When: Working on a system with bad automated test support
- •Identify unstable tests using CI test history
- •Set up a dedicated continuous validation environment
- •Employ fully automated deployment
- •Create simpler test doubles for external systems
- •When: Working with external reference data sources
- •Selectively isolate external systems
- •When: External systems participate in work
- •Try multistage validation
- •When: Large/multisite groups
- •Execute tests in transactions
- •Run quick checks for reference data
- •When: Data-driven systems
- •Wait for events, not for elapsed time
- •Make asynchronous processing optional
- •Getting feedback faster
- •Introduce business time
- •When: Working with temporal constraints
- •Break long test packs into smaller modules
- •Avoid using in-memory databases for testing
- •When: Data-driven systems
- •Separate quick and slow tests
- •When: A small number of tests take most of the time to execute
- •Keep overnight packs stable
- •When: Slow tests run only overnight
- •Create a current iteration pack
- •Parallelize test runs
- •When: You can get more than one test Environment
- •Try disabling less risky tests
- •When: Test feedback is very slow
- •Managing failing tests
- •Create a known regression failures pack
- •Automatically check which tests are turned off
- •When: Failing tests are disabled, not moved to a separate pack
- •Remember
- •Living documentation should be easy to understand
- •Look for higher-level concepts
- •Avoid using technical automation concepts in tests
- •When: Stakeholders aren’t technical
- •Living documentation should be consistent
- •When: Web projects
- •Document your building blocks
- •Living documentation should be organized for easy access
- •Organize current work by stories
- •Reorganize stories by functional areas
- •Organize along UI navigation routes
- •When: Documenting user interfaces
- •Organize along business processes
- •When: End-to-end use case traceability required
- •Listen to your living documentation
- •Remember
- •Starting to change the process
- •Optimizing the process
- •The current process
- •The result
- •Key lessons
- •Changing the process
- •The current process
- •Key lessons
- •Changing the process
- •Optimizing the process
- •Living documentation as competitive advantage
- •Key lessons
- •Changing the process
- •Improving collaboration
- •The result
- •Key lessons
- •Changing the process
- •Living documentation
- •Current process
- •Key lessons
- •Changing the process
- •Current process
- •Key lessons
- •Collaboration requires preparation
- •There are many different ways to collaborate
- •Looking at the end goal as business process documentation is a useful model
- •Long-term value comes from living documentation
- •Index
Chapter 6 Specifying collaboratively |
87 |
Hold introductory meetings
When: Project has many stakeholders
Teams with many stakeholders (for example, when the software is used by many departments inside a company or has several external customers driving requirements) in general you should run an introductory meeting several days before the start of an iteration. Some teams call this meeting pre-planning.
The |
purpose |
of an |
introductory |
meeting |
is to |
gather |
some |
initial |
feedback |
on |
upcoming |
stories |
and ilter |
the ones |
that |
are too |
vague |
to |
be accepted |
into |
planning. |
|
|
|
|
|
|
|
|
The introductory meeting isn’t supposed to deliver perfectly reined speciications but to give the team enough time to gather external feedback on key issues that could be quickly identiied. This isn’t the iteration planning or Scrum planning meeting. Running the introductory meeting several days before the start of a sprint gives the team an opportunity to discuss open questions with remote stakeholders before the real speciication reinement or planning meeting.
Many teams deine high-level acceptance criteria in this introductory meeting, with bullet points rather than detailed examples. This helps focus the later work by specifying the basic cases they will test.
With smaller teams, such as the team at ePlan Services, developers, stakeholders, the project manager, and the product owner participate in this introductory meeting. With larger teams or groups of teams, only a few people participate. At Sky Network Services, which has six teams, each team sends two or three people to this meeting.
Involve stakeholders
A collaborative speciication process works because it taps into the collective brain of business users and development team members and ensures that they all understand the speciications in the same way.
Many teams involved their business analysts or product owners, but not the customer stakeholders, in the discussions. In those cases, the teams consistently delivered products that met the business analysts’ or product owners’ expectations. But these expectations often weren’t what the
end users wanted. As far as I’m concerned, business analysts are part of the delivery team, not customer representatives.
88 |
Speciication |
by |
Example |
|
|
|
|
|
|
|
To |
get |
the best results, |
actual |
stakeholders |
have |
to |
be involved |
in the collabo- |
|
ration |
on speciications. |
They are |
the ones |
who |
can |
really make |
decisions. |
When a project has many interested parties, all the requirements are often funneled through a single person, typically called a product owner. This works well for scope and prioritization but not speciications. Lisa Crispin’s team at ePlan Services ran into this problem. She says:
The product owner wanted to own everything but at the same time he can’t get everything right. He is doing the job of three or four people. Nobody has the bandwidth to do everything. Sometimes we need an answer to complete a story, but he can’t provide that answer. He didn’t understand the accounting requirements, for example. We still had to go and talk to stakeholders directly to understand that.
He felt that we were going around him, so we had to really ind the balance of keeping the product owner in the loop and still getting the information from the people who are going to be using that functionality. If there was a difference, we had to get them in the room to discuss it.
A single person can’t possibly know everything about everything. Having a single decision maker on board to determine priorities is a must, but once the top-priority story gets selected, the team must try to collaborate with the relevant stakeholders on speciications for particular stories. In Practices for Scaling Lean and Agile, Larman and Vodde make the distinction between clariication and prioritization. They argue that prioritization must always be done by one person but that clariication can be done by the team itself.
It’s important to involve the end stakeholders even if the team thinks they know the domain well enough to build good speciications by themselves. Mike Vogel worked on a technical data management project where the developers understood parts of the domain and its technical constraints better than the end users. To meet the project schedule, they were frequently forced to limit or exclude the stakeholders from collaboration on speciications—which Vogel thinks was one of their biggest mistakes. He says:
We started doing too much of the test creation and deinition of the acceptance criteria ourselves. So we could set up the meta programming that drove the system faster than them and we were under heavy schedule pressure. But there would be subtleties that neither we nor the customer understood, and they weren’t able to pick that up from the tests.