With an agile approach, some degree of consensus on how to evaluate completeness is critical. Without a good understanding of what a complete story is, the team cannot estimate accurately and, thus, cannot set expectations. Not being able to set expectations can cause a breakdown in trust between the team and the product owner. Without trust, it’s harder for management to accept the idea of self-organizing teams, thus negating the efficiency benefits this approach provides.
Quite often, even the product owner is unclear about what to ask for. In these cases, it’s best to make decisions and acknowledge that you may be wrong rather than work with difficult-to-evaluate stories.
The developers on an agile project can contribute to project success in the face of uncertainty by working towards maintaining agile code.
Understanding the needs of the agile planning process, we can now talk about how engineering practices meet the needs of agile methods and drive them when they are lacking. Regardless of the agility of your product backlog, to be an agile team you need agile code. Agile code is code that you can change while still being able to deliver working software on a regular basis.
Agile code can be maintained by a combination of good design and having practices in place that provide constant feedback on the state of your code so that you can detect problems as soon as they occur. These practices include:
- Automated unit and integration tests in combination with continuous integration, to provide immediate feedback on the effects of a change to the code
- Refactoring and continually improving the structure of code while maintaining functionality
- Frequent deployments to a production-like environment to identify issue before they can cause a last-minute emergency and to make the application visible to stakeholders
By maintaining code in a working state and in a state where it is easier to change, you make it possible for the team to implement changes to a product backlog that a product owner might ask for.