Sunday, March 02, 2008
« The community around Behavior Driven Dev... | Main | If you want to be sloppy and do whatever... »
In my post summarizing some of my thoughts from the latest Philly ALT.NET meeting on Planned Agility I alluded to the fact that the retrospective is a key component within our agile process.  Since it sounds like we have a slightly different flavor of retrospective then some others I thought I'd put together a post detailing how we run our retrospectives.

A couple times over the last few years our team had the pleasure of working with Jim Shore, author of a great agile book entitled The Art of Agile Development.  Jim introduced us to the style of retrospective that we're using "today".  While we've strayed away from the format I'm about to outlay a couple times, we've found that it provides us with a good foundation within which we can get to the root of the things that we want our retrospectives to uncover.

We typically start our retrospectives off by reminding people of the Prime Directive (should we?).  Once that bit of housekeeping is out of the way we try to get everyone involved by going around to everyone that is participating in the retrospective and have them answer a question.  The primary purpose is to get people engaged, and speaking as early as possible.  The moderator chooses the question, and a "fan favorite" seems to be "What do you hope to get out of this retrospective".

Next, we review our team objectives.  As I'll get to in a bit, we try and end each retrospective with a team objective.  By starting off each retrospective with a review of our objectives we ensure that we maintain focused on the objectives that we've defined.  During this time we evaluate how we're doing with each objective, whether or not they need to be altered, dropped, or given a kick start.  

After reviewing our objectives, we go into an information gathering session.  The purpose of this phase is to gather information from everyone in the team, and hopefully identify an item, or set of items that should be further addressed.  We use index cards for everything under the sun so it shouldn't be surprising that we use them for this process as well.  The way this stage works is that everyone on the team is given a handful of index cards and a pencil.  Each person reflects upon the last iteration (or whatever period of time it's been since our last retrospective), and identifies things that fit into one of the following topics:
  • More
  • Same
  • Less
  • Enjoyable
  • Frustrating
  • Puzzling
We usually take 5-10 minutes to allow everyone to write whatever pops into their head on their index cards at this point.  When I'm leading the retrospective I often encourage people to prepare ahead of time for this phase.  Once everyone has had enough time to write their cards, we go around and everyone reads the topic that their card goes within, and then gives a short overview of what is on their card.  Once everyone has had a chance to go we allow people to put up cards that they've thought of as everyone else was going around.  Once everyone is satisfied that they've gotten their major items identified on the board we begin the next phase.

Once all the data is collected on the board, we have everyone organize the cards into categories.  The categories are pretty loose and can be whatever anyone sees as fitting.  There is usually some debate at this stage as people discuss whether or not things really belong in category X instead of category Y.  Once this stage is complete, we review the categories that have been identified.  Often there is some slight re-organization at this point.  Once everyone is happy with our categorizations we do a quick vote to see what category people feel is the most important.  We then tally the votes and identify the item that is going to be the focal point for our next phase.

With our primary category (or sometimes item) in hand, we begin the discussion portion of our retrospective.  This can take the form of a fishbowl, roundtable discussion, or 5 why's.  The goal at this stage is to drill down into something within our team, process, work habits, communication, or whatever else that needs particular attention.  As part of this discussion a theme usually starts to emerge.  Once it does we identify it, and bring it to everyone's attention.  The primary theme typically turns into a new team objective.

As we go through our retrospectives we try to stay focused on things that we can do to help improve our team, and/or our software.  Since the human side of software is the most important and most problematic, you won't be surprised to hear that our objective usually has something to do with improving the dynamic between some members of our team.  We write our objectives on a wall in the development area for all to see with the idea being that if it's in everyone's face all the time we'll be more likely to meet our objectives.

I breezed through a lot of the details of our retrospectives above in order to get a reasonable summary up and out into the wild.  If you have questions about anything mentioned above or would like me to further expand upon anything mentioned drop me a comment.  If you haven't had a retrospective in a while, now is a great time to schedule one! :)