Last night I went along to the British Computer Society Software Practice Advancement group for a session on the XP Planning Game. This session was created by the XP Belgian Group and you can find all of the background and instructions on how to run it on their site. It was a very useful way to learn more about XP concepts such as velocity, story estimation, the planning game and the XP lifecycle.
The Planning Game
The game starts with the team acting as developers and estimating how long a particular task would take (e.g. ‘blowing up 5 balloons to a circumference of 40cm’). Then the group had to act as a customer and decide which tasks would produce the most business value (each task had a monetary value on it) within an iteration (180 seconds on an egg timer). When the first iteration was complete we wrote down how many ‘estimated seconds’ we were able to complete as a team. This became our ‘velocity’ and was used to determine how much work the customer should expect from the second iteration.
I like the focus on coming up with stories, using short iterations, focusing on delivering business value and the fact that the velocity could be used as a way of setting sane work goals. I’ve always been a believer that the developer doing the work should do the estimation, but the problem with this is that most developers are terrible estimators (a few years ago I worked out that I was off by a factor of 3 with most of my estimates). Using short iterations and getting the customer involved in frequent re-planning means that the effects of the bad estimation don’t end up in a death march. The only problem with this scenario is that it requires a customer to be involved. It’s strange how many times a customer doesn’t want to get involved, preferring that the developer just go away and get the job done.
I also really like that the XP movement comes up with creative, involving demonstrations of their ideas. Participating in a 'game' session like this is a rich way of learning new material as opposed to passively listening to a presentation (on a slightly related-note, I really like the sound of the programming challenges that Aaron Skonnard mentions they are using in their .NET Campsight training event)
At the pub afterwards
Some other random points I picked up in the pub afterwards:
- ‘Delete Code’ is an important refactoring that was left out of Martin’s book. We were discussing this in context of code that is never called, and more often, commented code that should be removed. I was doing a review of a lot of code this week and found an alarming amount of commented code left lying around, when it should have been deleted. We talked at the pub about how many people seem scared about removing code and relying on version control software to store the previous version if it is ever needed again.
- I heard of a Java project where Hybernate was being used successful as an object relational mapper. The driver had been that they could more easily test their domain model objects, without having to worry about a database. The conversion from their own persistence layer to Hybernate had been harder than expected but was paying off with increased tests. The downside was that it was that if the configuration was wrong it produced some pretty ugly results in the database. I’m still on the fence regarding ORM tools, but it made me want to read Justin Ghetland’s ServerSide.NET’s articles on NHibernate.