I'm putting together a presentation to deliver to some of my teammates (all developers), and I'd like to include a short team building activity that focuses on improving estimation skills. Does anyone have any suggestions or know of any team building activities I could use?
Check out Joel On Software's Evidence Based Scheduling, it's a fairly simple way for people to figure out how estimate more accurately.
The best way to learn how to estimate is to have good requirements, practice, practice, and practice. Teaching them things like Evidence Based Scheduling will help the practice be more effective, but nothing can replace actual practicing.
Present an example problem using Minecraft.
The customer needs a brown step pyramid that is 20x20 blocks. The pyramid also needs a moat that is at least 10 blocks wide.
Give them 3 minutes to sketch up a simple WBS and an estimate.
2 minutes in, say that the customer changed their mind and they need a 30x30 pyramid now. Tell them to revise their estimates in the remaining minute.
At the end of the time tell them to put their pencils down, and now say that the developers start working on the project but the client is confused because there wasn't a bridge going across the moat.
Tell them that the bridge would take X hours to develop and ask for everybody who underestimated to stand up.
This will drive the point home.
I suggest a labyrinth generator/solver for the following points :
- It is fun to do
- You can't think of all the cases for the first time
- The generation and solving stuff are quite complementary
- This covers from back-end with data saving to front-end with data loading
- Many points can be assigned to people : file specification, display, generation, solving, optimization, testing etc...
You can play the "How long would it take you to write this?" game. Similar to a group of people bragging about how they can drive to Las Vegas in X hours (where the number X usually decreases with each braggart until someone claims they can do it in under an hour). So for coders: Throw out a simple goal and see what each individual says and if there is a consensus by the group or standout opinions. How long would it take you to write hello world? What does "write" mean, does that mean "run" and "test" too? Does it require a simulation environment first? On which platform and which cross-compiler and are the tools already installed and ready? etc etc.. "Hello world" might take 4 days to "write" on an embedded platform (install tools, get platform ready, re-install tools because it went wrong, fix the JTAG problem, troubleshoot the serial port problem, work around the limitations in the IDE to make a compilable project, finally take 5 minutes to write the code, compile it, fix the link errors and the memory map, re-write the code to use the correct bootstrap, re-compile it, get the final link, then download it, fix the JTAG problem again, finally run it to get output).
After the team finishes deciding how long the goal might take, then measure how long it actually takes (perhaps not for the suggested goal but for a real-world similar one) or recall a previous project with very similar goal. Compare estimate to actual. Wildly exaggerate the error between the estimate and actual and publish a conclusion for all.