Most books about specifications still assume that requirements can be known up front and won't change much during your project. In today's "real world," however, you must specify and build software in the face of high and continuing uncertainty. Scrum and other agile methods have evolved to reflect this reality. Now, there's a complete guide to specifying software in agile environments when prerequisites are unclear, requirements are difficult to grasp, and anything about your project could change. Long-time agile coach and enterprise architect Mario Cardinal shows how to create executable specifications and use them to test software behavior against requirements. Cardinal shows how to trawl requirements incrementally, step-by-step, using a vision-centric and emergent iterative practice that is designed for agility. Writing for analysts, architects, developers, and managers, Cardinal makes a strong case for the iterative discovery of requirements. Then, he moves from theory to practice, fully explaining the technical mechanisms and empirical techniques you need to gain full value from executable specifications.
You'll learn to connect specifications with software under construction, link requirements to architecture, and automate requirements verification within the Scrum framework. Above all, Cardinal will help you solve the paramount challenge of software development: not only to solve the problem right, but also to solve the right problem.
You will learn how to * Establish more effective agile roles for analysts and architects * Integrate and simplify the best techniques from FIT, ATDD, and BDD * Identify "core certainties" on which your project team should rely to ensure requirements discovery * Manage uncertainty by discovering stakeholder desires through short feedback loops * Specify as you go while writing small chunks of requirements * Use storyboarding and paper prototyping to improve conversations with stakeholders * Express stakeholder desires that are requirements with user stories * Refine your user stories, and plan more effective Scrum sprints * Confirm user stories by scripting behaviors with scenarios * Transform scenarios into automated tests that easily confirm your software's expected behavior as designs emerge and specifications evolve * Ensure higher-quality software by specifying nonfunctional requirements