- How can software and other project elements be designed and delivered incrementally? What set of management and technical practices would enable this?
- How do you know whether your Agile project will complete on schedule?
During the October 2011 meeting I found myself reconsidering the value of defining "done" when writing User Stories. I always have thought that defining done is essential to tracking progress. But what done means is still a difficult question. Andy Singleton of Assembla suggested that
The only useful definition of done is that you approved it to release, in whatever formWhile the goal of agile methods is releasing software, I find that this definition, while appealing in its simplicity, misses some things:
- Agile methods have a goal of continuously shippable code. Of course, "shippable" might not mean "ready to release" and cane mean something closer to "runnable," but you can get there by doing no work since the end of the last release. That isn't the goal of agile.
- With that large scale definition of "done" you have no way of tracking progress within a sprint.
- Without an agreement on what you're going to, it's hard to know when you are changing direction. And acknowledging change is an important part of being agile.
The last point about acknowledging change isn't just about "blame" for things not working out. It's about evaluating how well you understand both the business and technical aspects of your project, and it forms the basic for improvement.
True, having incremental definitions of done that you can use to track progress does help manage budgets. But that really is the least important aspect of having a good definition of done. Even if I were on a project with an infinite time and money budget, I'd want to have a sense of what our goals are.
Having an agreement among all of the stakeholders on what being "done" means lets me:
- Improve communication among team members and between team members and business stakeholders.
- Evaluate my understanding of the problem and help me identify what I can improve.
- Set expectations so that it's easier to develop trust between stakeholders and the engineering team that the team can, and will, deliver.
"Ready for Release" is a key component of "done" and and essential part of being agile. But it's not enough.
See Andy's response, and read more in Part 2 of this conversation.