Continuous Improvement: Know Yourself, and Know Your Tools!

One of the crucial properties of a software craftsperson is that we should be of aware of opportunities for continuous improvement and professional development.

This is especially important for Atoms here at Atomic Object, since we are generalist and work on a variety of different projects with different tools over the course of a year. At the beginning of the year, we could be working on a Java project in IntelliJ; and at the end of the year, we could be working on a C# project in VisualStudio.


Tool Sharpening – A Continuous Improvement Method

In order to improve ourselves, we have to first identify where we need improvement. Episode 129 of the Ruby Rogues podcast is all about a method on how we can do this — tool sharpening.

The basic premise is that, throughout the day, you should be aware of your weaknesses and your annoyances and keep a list of them. I personally keep an index card within reach to quickly jot things down. Examples of this could be:

  • Leaving your IDE to find a file using a command line tool
  • Constantly digging through menus to find frequently used actions
  • Inefficient uses of the keyboard (using arrow keys in vim instead of hjkl on home row)

Once you have a few items on your list, pick one item off of the list every morning and spend 5-10 minutes improving it. This could be learning the keyboard shortcuts of your IDE, disabling the arrow keys in vim so you are forced to use hjkl as motion, or finding out how to use a feature of your IDE.

Improving yourself could also involve toolsmithing (creating or utilizing another tool to make your life easier). Examples of how I’ve done this in the past are:

  • Customizing the command prompt to display the current git branch
  • Navigating to common file paths using Karlin’s working-directory bash aliases
  • Creating git alias for frequently-used commands
  • Wrapping complicated maven executions in a RAKE file

Tool sharpening isn’t the only method for improving yourself. I also keep a Trello board of more general, long-term professional development tasks, new and interesting frameworks and languages, books that I want to read or coursera courses that I’m interested in.

What are some of the ways that you are continuously improving?