Being Prepared

Search for a command to run...

No comments yet. Be the first to comment.
In my post on "Being Prepared", I wrote about the need for us to practice our craft in order to deliver high quality code. Unfortunately, there are a lot of demands for our time working on projects that are under tight deadlines and supporting exist...

Do you actively monitor your applications? Chances are that if your development team doesn't, your operations group does. There are a variety of metrics that they are watching at a high level like CPU and memory usage performance counters and whether...

Have you ever had this experience before? I drove up to a Chase ATM to transfer money from my Liquid account (re-loadable debit card we use for budgeting purposes) to our main checking account. (I know - it would be nice if I could just transfer th...

Is creating readable code an important feature of writing quality software? Is it something that you would mention when reviewing code for one of your team members? Typically, when we review code we focus on making sure that: It does what it is supp...

It happens every once in a while.
I waltz into the classroom looking forward to a new lesson and suddenly realize that today is the final exam. Everything I should have been preparing for is finally due. And I haven't done anything -- no flash cards, no notes, no readings, no late night, caffeine-infested sessions the night before. In fact, I can't remember if I have attended any of the prior classes.
As I begin to panic and look for an excuse to leave and make up the exam later, I wake up. It was all a dream - or a nightmare! It takes a few seconds, but I finally realize that nothing that I was experiencing is actually true. What a relief!

But how many of us come to work unprepared each day?
I mean -- how well do we know our tools?
Do we know all of the ins and outs of our particular language, platform, tools, and techniques?
Or do we only know those parts that we had to use for our latest project?
Or do we only understand the basic "Hello, world" features that we learned from reading a blog, listening to a podcast, or attending a conference session?
This question came up in a book, The Passionate Programmer: Creating a Remarkable Career in Software Development (Pragmatic Life) by Chad Fowler.
In it, he suggests that,
Our industry tends to practice on the job.
He then relates our craft to the art of playing music, and,
Musicians are paid to perform in public—not to practice.
So why would we expect to do it differently in our profession?

It takes hours of practice in order to learn our craft and, unfortunately, too many are practicing on the job these days, because it is acceptable. You cannot learn everything that you ought to know as a software craftsman by merely writing code for production software. Focusing on certain aspects is needed in order to increase the quality and resilience of what we produce.
One of the areas that musicians focus on developing is physical/coordination or focusing on fundamental technical aspects of playing an instrument. They do this by playing scales in all of the range of the instrument, building the muscles in their lips or gaining callouses in their fingers, practicing dynamics with their diaphragms, etc. They cannot always be playing nice sounding music - they have to play simple, focused, seemingly monotonous exercises to focus on these fundamentals.
How can a software craftsman do the same?
They can practice the full range of functionality available to them within a certain language, platform, tool, or technique, using them in private exercises known as code katas or building a demo project.
And even though they may not prove expertise in a particular technology, I have found certification exams to be invaluable in forcing me to look at the full scope of functionality that a platform provides.
For even more accountability and support, you could start/join a coding dojo, getting involved with a community of like-minded people wanting to grow in their knowledge and skills as well.
So spend some time thinking about what tools you already know something about and start practicing coding in areas of that tool or technique that you are not familiar with. Get to know what is available and practice the full range of motion. You will be much more prepared the next time you need to use that toolset.
Feel free to comment below on other suggestions you have for practicing our craft.