Everything you do requires a collections of skills. Thinking about this, I can’t even begin to list all the skills I use every day to do my job. Supposed I’m handed a bug report in some piece of software – I need to know how to debug, how to construct tests ensuring I eliminated the bug, and how to use source control to get the fix out into a release. This is just at the highest levels of what I might do for one task in software. It turns out there’s a difference between writing a test for a new feature and writing one to validate a bug. And every one of those skills can use practice and refinement.

I’ve begun to believe it’s useful to do coding katas on a regular basis. Less because of the code, but more of understanding how I do my work. Starting off doing a simple kata like TDD calculator on a daily basis start off as a bit of challenge with the code at first. The goal, of course, is to complete the exercise and if you set a timebox on the activity then this can be a struggle. After a little while though, it should not be hard to at least complete much of the exercise, since you know what the result is and how to get there. This means you can spend a little more thought and effort into what’s holding you back or slowing you down while you do the exercise.

One of the first things I noticed when I go this point is that I don’t know how to use my IDE. I mean, I would use short cuts for things like navigation or executing unit tests. But I never used things like templates or snipits much. But going through the same process again and again I realize where the real friction is — places that I always stumble on.

So now, I’ll do the same exercise, but instead of caring about the code or the result I’ll make myself practice using or setting up new short cuts in the IDE. I don’t ignore the code either! Other days I’ll spend the practice time with a different constraint, thinking of ways to deal with it. Going back to the calculator kata example, perhaps I might say each rule has of the calculator must be composable together, letting me test each in isolation. This requires a new way to approach the problem over what I have been doing. Another day I might use a different testing framework or try to use the existing framework in a different way.

So this helps me suss out some skills I might have but don’t think about or practice. Just 20-30 minutes a day on self improvement can go a long way. Even if you don’t want to do code katas, there’s plenty of other skills that we all can benefit from when better. Writing is skill I’ve been thinking a lot about and spending efforts getting better at — with limited success. Doing this mean practice! So I try to write multiple times a week, even if it’s just something that ends up trashed. The act of writing is just sitting down and focusing on getting my ideas onto paper (or screen in this case). I’m not yet sure this makes me that much better at writing, I feel like a writing mentor could go a long way to help out with that. But the act of doing it, thinking about it, and trying can only help me improve.

Travis Smith

Polyglot software craftsman. Knowledge disseminator. Awesome maker.