Salespeople And Other Devils
You said, "It is vital we keep this knowledge among programmers and out of salespeople's hands." Why would we want to keep knowledge out of anyone's hands? I feel like this statement fosters an "us versus them" dynamic.
We program, we write, we talk. It's all about communication. Or is it?
You said, "It is vital we keep this knowledge among programmers and out of salespeople's hands." Why would we want to keep knowledge out of anyone's hands? I feel like this statement fosters an "us versus them" dynamic.
"This house believes that the notion of 'Software Craftsmanship' is a distraction from the things that really matter."
[Note: this post is the English translation of an article I've initially written in French.]
Now that the idea of what a Coding Dojo is and what benefits it brings gets more widespead, an increasing number of people wonders how to set up one. The short answer, as Arnaud Bailly puts it is: "do it." For those of you like longer answer, here are few tips I like giving, based on my experience shaping up the Coding Dojo in Paris for the last five years.
Always meet at the same place and the same time
It helps to build a community and a "ritual" if you limit uncertainties about when and where the next meeting will be. We tend to meet on the same day of the week, too -- but we keep our options open to accomodate specific schedules. Most of the time, we meet in Paris on Mondays 6:30~8:30.
Let the process evolve when needed
We have decided to grow our process organically and to tune it, based on what we learn from retrospectives. We conduct a retrospective at the beginning of each session, looking back at what worked during the previous session, and what we'd like to change. Sometimes, we'll change the process on the spot, sometimes we'll call for online or after-hours discussions. We want to be disciplined about the rules we set, and at the same time, we want to be unafraid to change them when they don't suit us anymore. We've made many discoveries through fortuitous changes, decided on a whim, for the sake of it. An exemple of change: how about we keep track of a customer's satisfaction index? An exemple of whim: what if we shift our focus from the core problem to peripheral complexity and tackle with this first?
Trust your process
It's frustrating sometimes to do something without knowing exactly first why you do it. It's ok. Part of the learning experience is figuring out what is happening. It's also frustrating to realize that others might want to steer your dojo in a direction you don't feel great about. That's ok. Part of building the community is about finding out why you want to meet every week or so as a group. Answers will become clearer as time goes by, provided that everyone feels free to talk and listens to others' opinions.
Keep a collaborative journal
Encourage your community members to post articles about what they have got from the last session on a blog, a mailing list or a wiki. Use that medium to post the code you came up with as well. At the beginning it feels a bit narcissistic, but after a while, it's great to have archived data about what you've done, how long it take, how much you've improved, etc. We are keeping a journal of each session on a wiki, and we also have a blog. The blog is pretty inactive these days, but the wiki has been weekly updated since the beginning. If you're not afraid of reading French, you'll find there ideas for working on your own katas.
Encourage discussions, but on green bar only
Don't discuss about the code when it's in an unstable state. It's speculative for the audience, and very disturbing for the driver.
Use a kata to introduce a new language
It's fun to try out different programming languages, but it can be very frustrating for everyone if the group is stuck with some technical difficulties (this may happens in a randori). Someone having prepared a kata in that new language helps prevent this, and keeps the audience focused. If you're extreme, you may even prefer using a kata that everyone is familiar with.
Don't cram too much in one session
A retrospective takes about 30 minutes, deciding for a subject and doing some preliminary explorations takes another 10. That leaves about 80 minutes for coding -- if you start on time. It may seem short, but actually it doesn't matter. We've found that it's better to code less and accept we didn't finish what we had decided we would do in one session. First, it makes it a great opportunity to celebrate when we do finish what we had plan :) Second, we prefer discussing the reasons why we couldn't finish on time and improve, instead of masking a latent problem by adding 30 more minutes at the end. Third, going at the dojo after works gets everyone tired pretty quickly. We meet every week so that's ok if we don't do much in one session. "Sustainable Pace", as they say... ;^)
Make the sustain of the dojo everyone's responsibility
The first rule we've decided for was at the very first session: if nobody shows up at the next session, the dojo's dead. Therefore, it's every dojo member's responsibility to come and keep the dojo alive. We've then added another rule: if nobody has any subject to propose for the session (be it a kata or a randori), then the dojo's dead. What we want to assert is the dojo works because everyone feels compelled to feed its core. We don't have one single organizer, and we're ok to face the eventuality nobody wants to invest in the dojo anymore. Knowing the project could end very abruptly gives us the energy to work on new subjects and to show up every week.
I hope this will help you getting started. If you have questions, feel free to drop me a note. If you'd rather ask face-to-face, I'll be talking about the Paris Coding Dojo at XP-Days Benelux in late November.
I'm back on deliberate practice - writing 2 to 3 hours a day, some of it being code, some being plain text. I'm happy with what's coming out, and the feeling of actually producing stuff (instead of "just" coaching others) is great.
Incursions dans la pensée post-modernePour programmeurs extrêmesQui se trouvent nuls d'écrire des bugs
A while ago, I wrote an article demonstrating what we do at a Coders' Dojo: code and talk in front of others. It took the shape of a story in which YOU (yes, you) are the hero - you know the kind. Although in the first place I intended it to be printed on paper, it was definitely crying out for a more suitable medium, namely hypertext. It took me some time to do the transfer - and a nudge from fellow dojo attendees - but thanks to Google Sites, here it is.
A fellow agile coach told me recently about his project to write the Ultimate Agile FAQ list - solutions to problems people recurrently have when installing agility somewhere. There were sparkles in his eyes. My reaction may have been harsh.