Once a month we have a company-wide get together where everyone from every project is brought together for a few hours. We use the time to do various things such as company-wide retrospectives, general company reporting, and seminars on interesting technologies and research. This compliments our weekly company-wide stand ups and lunchtime “brown bag” sessions.
Last month I organised a “coding challenge” event.
The format was pretty straight-forward: The team were divided into pairs and challenged to write some code to solve any of three simple problems. Each pair picked a problem based on what piqued their own interest.
However, the specific context for the coding challenge was that each pair should treat the problem and its solution as if it were a business requirement from a customer, and thus they must deliver high-quality code using our normal agile development best practices.
So the emphasis wasn't specifically on solving the problems I'd set but on reinforcing our best practices together with having a bit of fun with a challenge that was outside of everyone's day-to-day focus.
Each pair attacked their problem as if it were a user story from a customer. They decomposed it into appropriate components that were developed using Test Driven Development. They explicitly rotated their pairs every ten minutes or so. We had a mini-showcase to demonstrate progress and I acted as the customer representative.
One of my key aims for the exercise was to make diverse pairs. I paired people from one project with someone from another. This had the benefit to foster cross-fertilisation of ideas, techniques and practices between projects. We paired project managers and testers with developers to help the different disciplines better understand the development process. We even mixed in our office and account managers into the pairs, so that everyone was involved.
Ultimately, it was an opportunity for everyone to get together and have a bit of fun, to step back from their day to day work and to get our brains working on a problem completely different from our normal jobs. And in the background allowing people to reinforce good habits.
The problems I picked were fairly simple, after all the exercise wasn't to solve a difficult problem, but to concentrate on the process. So I picked problems from the excellent Project Euler web site. They typically have simple statements of the problem, like a nice short user story, and you can verify that you've got the answer once you believe you've solved the problem. For those who are interested, the problems I set were:
- Problem 42, where they had to count how many words from a set met a criteria based on triangle numbers.
- Problem 57, where they had to expand the formula for root two looking for expansions where the numerator had more digits than the denominator.
- Problem 67, where they had to find the maximal path through a triangle of numbers.
About half the pairs picked problem 42 and the other half problem 67; no-one picked problem 57.
I won't give the answers so as not to spoil the challenge for anyone else who wants to give it a go.
The ultimate test of the event though was the feedback from the team. Everyone found it a fun and interesting exercise and everyone felt that they got something positive out of it. So I would definitely recommend it.
We'll probably try another one in a couple of months time. I just need to find some new problems to us to solve.