The concept of coding dojos has been generated a lot of interest lately. Some people mailed me to learn more about coding dojos, how to conduct them, and how they can help an organization. So I decided to set up a FAQ. But before I say anything more, the credit for this concept goes to Dave Thomas who conceptualized the idea of coding katas (similar to dojos but to be done individually).
Q1. What is a coding dojo?
A1. A dojo is a exercise that brings the element of practice to programming. It lets developers explore various solutions and approaches to a problem without time pressures. Just like musicians and sportsmen practice to improve their skills, these exercises help raise the bar of a programmer's skills.
Q2. How is a dojo conducted?
A2. The dojo begins with the facilitator/coach explaining the problem statement to the group, followed with a quick design discussion. Once everyone has understood the problem, the first pair starts programming while the others watch on the projector screen. The audience should be a participative audience and not a passive one. They should point out alternate solution paths and mistakes. Everyone should contribute their knowledge. After 20 minutes the first pair returns to the audience and the next pair continues programming from where they left of... and so on. It is the responsibility of te programming pair to ensure that everyone in the audience understands what they are doing. If someone has a doubt, they can stop the pair and request them to clarify what they are doing.
Q3. Are there other learning opportunities for the participants besides "raising the bar of programming skills"?
A3. A lot of "technology learning" can also happen as a side effect. When I conduct dojos for clients, I take every opportunity to transfer technology specific knowledge every time an opportunity arises. For example, once we needed to use some IO classes, and I spoke to the group about the IO and Reader hierarchies and about the Decorator design pattern. Once we needed to implement a callback, so I took the opportunity and explained anonymous inner classes and callbacks. Several learning opportunities will arise, but they will usually change with each exercise.
Q4. What kind of equipment do we need to conduct a dojo?
A4. A computer loaded with necessary software and a projector.
Q5. What software needs to be loaded on the computer?
A5. Assuming you will be working in Java: JDK(1.4+ is a good idea), an IDE (Eclipse, NetBeans...), JavaDocs for the JDK classes, and any other tools, libraries that are specific to the exercise.
Q6. How many participants can attend a dojo?
A6. Between 4 - 16. Try not to exceed 16.
Q7. How long is a typical coding dojo?
A7. It depends on the exercise. In my opinion, for ant meaningful learning to happen you need about 4 - 6 hours.
Q8. Can I take a large exercise and break it into multiple dojo sessions.
A8. Well, it can be done, but I will not recommend it, because breaking up will mean that participants have to spend time remembering what they did in the last session. This break in the may waste some time and reduce the learning.
Q9. Can a dojo be conducted without a coach/facilitator?
A9. Yes, but that will work well only with a group of experienced developers.
Q10. What are the skill levels needed to participate in a dojo?
A10. Fresh developers to very experienced programmers can all benefit from a dojo. Software development is an art and there is always scope for improving skills. However I will suggest that participants have academic exposure to the programming language in which the dojo will be conducted.
Q11. What kind of a mix of people (from a skills perspective) is best for an effective dojo?
A11. Having a group of similarly skilled people usually works out better. Even though this can be subjective, a good guideline is to group people with the following experience ranges together: 6 months - 12 months, 12 months - 36 months, 36+ months. Again, this is very subjective, and your mileage may differ.
Q12. Can dojos be used to explore refactorings?
A12. Yes, infact they can be used very effectively to understand refactoring principles. In this case the dojo starts with smelly code that needs refactoring, and the exercise is to refactor the code while discussing pros and cons of each refactoring.
Q13. Can dojos be used for anything else?
Q13. I think dojos can be used as a learning tool to understand any concept that needs hands-on practice and an exchange of ideas. Design patterns, test first development, pair programming, specific API's and probably many other skills can be learned very effectively with dojos.
Q14. Are there any links to resources and example exercises?
A14. You must check out Dave Thomas' excellent page.
Q15. Do you conduct dojos?
A15. Yes I do. I conduct open as well as inhouse dojos in Pune, India. If you are located elsewhere, I will be glad to share my experiences and help you conduct the dojos yourself. You can mail me at - info (at) adaptivesoftware (dot) biz
Alternately, you can also post your questions as comments to this post. I will be gald to answer them here.