Agile New England (which used to be called the New England Agile Bazaar, and which was started by Ken Schwaber) , has this wonderful activity before the main event each month: they host Agile 101 sessions, where people who know something about agile lead a short (30 minutes) small (about 10 people) class on agile basics for those who want to learn more about some aspect of agile. From time to time I lead a session on Agile Execution, where the goal is to help people understand how to address the following questions:
- 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?
When I lead the sessions, I tend to focus on tracking, defining stories in terms of vertical slices and the importance of continuous integration and testing to making your estimates trackable. Since the classes are so small and since the attendees have diverse experiences, the classes are sometimes more of a conversation than a lecture, and I find that I learn a lot, and sometimes find myself rethinking what I know (or at least exploring things that I thought I understood well enough).
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 form
While 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.
- 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.