Friday, March 6, 2009

Development Katas

As many people in the software craft movement have pointed out, it's very hard to focus on reflective improvement while you are coding. In fact, the nature of your work (maintenance, time pressure) may make it hard to develop specific skills like design or clarity of code.

So why not do specific exercises outside of work, designed with the intent to sharpen our thinking - perhaps in public under scrutiny?

Micah Martin has proposed such "katas", based on martial arts. It's interesting stuff and there's video.

What are your favorite developer (or maybe test) katas? I intend to make a list.


  1. This notion has been around a bit longer than Micah's talk. There is a good list of katas in the "kata catalogue" at

    Also, I think that the problem you're solving using a kata is a bit secondary to the skill you're trying to improve. For example, I could solve a kata while focusing on my TDD skills, or my refactoring skills, or my testing skills (like in the triangle example).

    That said, I wouldn't be surprised to find that certain katas are more suitable for working on certain skills. I just think that that you shouldn't underestimate the value in doing the same kata multiple times, while focusing on different techniques.

  2. Agreed. I studied a karate kata with an instructor and one move was "clearly" to me, an upward block. When I bought the book on the kata, after the kata itself was practical applications. The "upward block" was shown to dislocate the opponent's shoulder! Same move, different application which would train a different aspect it.

    A good teaching story has multiple lessons.