How Do You Get To Carnegie Hall?
Well, if you must know, take the Lincoln Tunnel exit toward the theater district, continue onto Dyer Avenue then turn left onto W 41st St. Use the right two lanes to turn right at the first cross street onto 10th Avenue. Turn right onto W 57th St and proceed a half mile and the Hall will be on the right.
Before you go, though, there’s something you need to do.
Practice.
Practice.
Practice.
Ok, that was a sad and pathetic dad-joke on top of a sad and pathetic dad-joke. A meta-dad-joke, as it were. If you will. Be that as it may.
The point, however, is obvious and goes without saying. Which is exactly why I’m saying it.
If your destination is Carnegie Hall and you want to watch a performance, take a cab.
If your destination is Carnegie Hall and you want to perform, you better practice.
Deliberate Practice
In a post on my blog, Getting Better On Purpose, I refer to the famed 10000-hour rule and the fact that mere repetition does not make us better. We don't get better at typing by just typing. If that were true, many of us who type every day and have done so for years would be typing a gazilion words per minute. We get better at typing by typing with purpose, with the intent to get better.
This holds for any skill. We only get better, we only see a marked improvement in our knowledge and skills when our intent, our sole focus, and all of our energy is poured into getting better. If we don’t care if we improve, nothing we do will move the needle much. If we really want it, anything we do will contribute. Mindset is all.
Ok, Ken, you have driven the nail through the wall. I get it. Now what? How do I apply deliberate practice to the software development enterprise?
Funny you should ask. I happen to have some thoughts on that very question. Weird.
If you engage in any performance-oriented activity, such as playing an instrument or participating in athletics, you expect to practice if you want to get better. There’s a reason golfers spend so much time on the range with their coaches—you don’t improve if you don’t practice. You don’t get better by just playing a round of golf. I can personally attest to this. The most gifted prodigies in the music world, the ones whose raw talent we love to extol, don’t rely on talent alone. They spend hours each day, practicing scales, working on technique, learning complex pieces a little bit at a time.
Why would we believe that software development is any different?
One could make the case that in many performance-oriented activities, there are a finite number of skills to master. In golf you have the long game, approach shots, and the short game. Or, if you’re Rory McElroy, you have a very long game and a short game. Regardless there are at most a couple of dozen skills to master, many of which can be practiced in isolation.
Software, we might argue, is qualitatively different. There are a seemingly infinite number of skills to acquire, along with the requisite knowledge and judgement to apply these skills in the proper way at the proper time. So maybe it is different with software.
I don’t think this holds up under scrutiny.
The ability of a doctor to diagnose conditions or of a police officer to read a dangerous situation don’t involve physical skills at all. In fact, learning the physical aspects of golf are just part of the picture in explaining a Tiger Woods or a Jack Niklaus. Tiger and Jack knew how to play each particular course, knew how to get inside their opponent’s head, knew when to follow conventional wisdom and hit the expected club, and knew when to defy the odds and hit a 1-iron. For the record, the odds are always against hitting a 1-iron.
The measure of world-class performance is expertise. Judgment. The ability to read the situation and respond accordingly. The physical skills needed to respond accordingly are just the cost of admission.
In the case of software development, there are very few physical skills needed. Typing. Using a text editor. Lifting a cup of coffee to your lips. The overwhelming majority of skill needed to create solutions in software is intellectual and emotional. You must know how to solve problems. You must remain calm under great pressure. You must know how to exercise good judgment.
Don’t Judge Me
How does one train oneself to exercise good judgment? Can it even be done? Or is it like common sense—you either have it or you don’t?
Here’s a saying I picked up long ago, I know not where: Good judgment comes from experience. Experience comes from bad judgment.
We learn good judgment by doing a lot of stuff over a long period of time. If you’re a doctor, then that means you see a lot of patients and perform a lot of procedures. If it’s software development, then you solve a lot of problems and write a lot of code.
I can hear you now. “Whoa, Ken. You’ve told us that you can’t get better just working on the job. Now you’re saying we get expertise from working on the job. Which is it?”
Both.
Just working at your job day after day will not guarantee improvement. You have to intentionally get better. You cannot just go through the motions.
The difference between going through the motions and intentionally getting better is immense. It’s the difference between 1 year of experience 20 times and 20 years of experience.
That on-the-job, day-to-day grind that we refer to as ‘living the dream’ is absolutely critical to our improvement. It’s what give us our experience. Not just any experience, though. A specific kind of experience.
Deliberate experience.
Deliberate Experience
Deliberate practice we’ve heard about. It is the real key to becoming an expert in anything. The elements of deliberate practice were formulated by K. Anders Ericsson, a famous researcher in the area of human performance, and the originator of the ‘10000-hour rule’.
They are:
- Motivation: Getting better takes effort and thought. If you really don’t want to, you won’t.
- Planned practice. Your practice sessions should be well-thought out and have clear objectives.
- Immediate Feedback. This allows you to gauge your progress and make corrections.
- Repetition. Practice early. Practice often.
That’s great if you’re shooting a basketball or hitting a golf ball. What about diagnosing cancer or some other knowledge-based expertise? What about software development?
If good judgment comes from experience, and experience comes from bad judgment, then we have a ready-made formula for developing good judgment, aka expertise. In our deliberate practice, we deliberately put ourselves in situations where we exercise judgment. This can be in a formal setting, such as a role-playing exercise in a workshop, or as simple as active reading of a blog post where we anticipate what the author is going to say and see how well we did. And all points in between.
The key is that "see how well we did" part. Feedback. Immediate, if not sooner. Without this we are just going through the motions.
This is the hard part. We don’t like to reflect on our actions, particularly our mistakes. We hesitate to ask for feedback from our peers or, perish the thought, from our clients.
This is how we turn our careers from an opportunity for growth to a Ground-Hog’s-Day nightmare of living the same mistakes in judgment over and over again.
Of course, you don’t want to just willy-nilly start tossing out bad decisions at work just so you can learn from them. I can imagine the feedback your client gives you for that.
So what do you do? How do we deliberately obtain experience without risking our jobs.
Plenty. For example, you can
- Participate in kata. Sites like Hackerrank, Exercism, and Project Euler provide enough coding exercises to keep you busy for the next ten years. These sites are great for improving your ability to code and also provide a fun way to hone your problem-solving skills. Many of them (there are dozens) also offer to have someone look at your code and give feedback.
- Attend meetups, user groups, and hackathons. Focus on the ones where people actually do something rather than ones that have a speaker every month. Those are valuable too, but if your focus is on honing your craft, hands-on is better. Plus, you work in pairs or teams (or you should!), which again gives that feedback that we so desperately need.
- Recruit a mentor or a learning buddy to help you.
These are just a few suggestions. The common thread in all of them is feedback. We need other people. We need their opinions and their own bad judgment. Without external feedback, we cannot improve. This is difficult because we don’t want other people passing judgment on us. We’d rather float along, thinking we’re doing alright.
We think we can evaluate ourselves, but we are really bad at it. As Nobel-winning physicist Richard Feynman put it, “The first principle is that you must not fool yourself--and you are the easiest person to fool”
When we get over that, though, when we get past our petty pride and fear of exposure, we can see amazing things happen with our skills. And by we, I mean you.
And before you know it, you'll be headlining at Carnegie Hall!