Code Katas

At my current job, we have a weekly opportunity for Community of Practice. Sometimes this turns out to be working with some new technology or framework. Lately, the activity has been filled with working through various code katas, including the Monopoly Kata (see link below). Practicing with katas can have nearly infinite benefits for you as an individual or as a team.

Assuming you are already familiar with the kata, practicing with a kata allows you to focus on technical skills that aren't related to domain knowledge. For example, Monopoly is a game that is familiar to a lot of people, so working through the problems involved doesn't involve a lot of in-depth domain knowledge. Working through domain knowledge is a challenge in and of itself and represents a large portion of work that most developers have to tackle daily. Being able to take a break from this and focus only on technical skills can be refreshing.

Practicing with katas can also be a great team-building opportunity for your teams. If there are teammates that you don't get to work with frequently, katas can provide that. This can provide mentorship opportunities for junior developers. It can also help to strengthen team norms by raising awareness of implicit practices and promoting discussion which can challenge and transform those practices.

Focused practice can add challenging elements to the kata as well. Here are some examples of things that you can focus on while working through the kata:

  • Pomodoro Technique - If you are working through a longer kata, you can practice healthy development practices using the Pomodoro Technique. This can be helpful to focus your efforts if you have issues focussing or by forcing yourself to take breaks if you frequently find yourself sitting too long or working on tasks for too long (that's me).
  • Strict TDD - If TDD isn't something that you normally use, you can work through the kata using a test-first mindset.
  • New editor or IDE - Work on using a new editor like Vim or a new IDE like JetBrains Rider. New extensions, like JetBrains Resharper, also fall into this category.
  • New languages or paradigms - If you normally work with C#, taking the opportunity to work with something like F# can be eye-opening. Similarly, taking the time to practice writing C# in a functional way (as opposed to OO) can also reveal some new ways to approach problems and expose language features that you might not frequently be using.
  • Small commits - Practicing making small changes can also be valuable. So many times, I've been working on some code, made way too many changes, and then found myself with a mess that is impossible to clean up. The only option was to git reset --hard and lose all of the work that I had done. Making smaller incremental commits can help by leaving yourself some waypoints to come back to as you are working on larger changes.

Here's a list of kata resources that I frequently visit for ideas: