I often run into people who are concerned about changing requirements, or evolving requirements if you like that term better, on software development projects (or product teams as the case may be). This is typically a reflection of their training and background in traditional software development strategies where changing requirements are usually perceived as a problem.
In agile we consider changing requirements to be a good thing and we even embrace the idea that this will happen. In fact, one philosophy of Disciplined Agile Delivery (DAD) is that changing requirements are a sign of a healthy relationship with your stakeholders. Changing requirements indicate that:
- Your stakeholders are interested in what you’re working on
- Your stakeholders are thinking about what you’re producing
- There are feedback mechanisms in place that enable your stakeholders to change their requirements
- It is easy (hopefully) for stakeholders to change their requirements as their understanding of their needs evolve
So how do you support changing requirements in practice? The Disciplined Agile Delivery (DAD) framework includes the “Address Changing Stakeholder Needs” goal which guides you through understanding and selecting the right strategy for prioritizing requirements changes as they occur throughout the lifecycle. These strategies include, but aren’t limited to Scrum’s Product Backlog Strategy, a more disciplined Work Item List strategy, or a lean Options Pool strategy. In regulatory situations you may even want to consider a formal change management strategy. DAD’s process goal-driven approach enables disciplined agile teams to tailor their strategy to meet the situation that they find themselves in, avoiding the challenges seen with methods such as Scrum that prescribe a single strategy (in this case Product Backlogs) that don’t work in all situations.
And of course, to minimize the pain of changing requirements you will need to adopt disciplined development practices such as:
- Writing high-quality code;
- Refactoring your work to keep it of high quality;
- Continuous integration;
- and even acceptance test-driven development (ATTD)/behavior driven development (BDD).