I’ve noticed one mistake that is easy to get into with agile project management and that is to not properly close off one iteration and then to seamlessly start the next iteration.
The biggest problems with this are:
- This gives the illusion that a project is just one giant iteration with work broken into a sequence of steps,
- There is no sense of completion or accomplishment along the way,
- Code is left in an unstable state longer and the customer does not see as much value,
- There is little to no effort going into re-evaluating priorities and involving the customer in decisions,
- There is little opportunity to step back and learn from past iterations and remove roadblocks for future iteration, and
- You are really reverting to a planned old school project and not a true iterative (agile) project methodology.
You can avoid this problem two ways. First by ending each iteration properly:
- Deliver fully tested and working code at the end of each iteration (whether or not its actually released into production),
- Have an iteration retrospective (team meeting) and cover:
- What was actually accomplished versus what was planned,
- Iteration velocity,
- Issues and lessons learned, and
- What can be improved for next iteration including any roadblocks that should be removed?
- Make sure the client is involved in the iteration closure. You want them to clearly see the value being delivered and ensure they are a part of any solution to issues that have come up. Fail to do this and it will come to haunt you later.
And second, starting each subsequent iteration properly:
- Have an iteration planning meeting to:
- Estimate effort required for new/existing stories,
- Look at past velocity and anticipated velocity for next iteration,
- Determine which stories will be included in the iteration (ideally the client decides this).
- Determine who will work on what first (volunteer or assign depending on chosen style).
At all times do not allow iterations to blend into one another with no clear start and end.