A stick figure types at a keyboard as the sun goes up (or down) in the window behind.
Practice. It's what gets you there.

I help folks practice to get better at writing software. So sometimes I’m asked, “how do you practice well in general?” A lot of my answer comes from The Talent Code, by Daniel Coyle. I find that the good books basically agree about what makes good practice. I’m also quoting this article for a few bits - it’s good too.

The Basics of Practice

The fundamental characteristics of good practice are simple.

You should be concentrating on the practice.

You should be well-rested and able to concentrate.

You should be doing something harder than the skill you’re improving.


“Concentrating” sounds simple, and mostly it is. But if you do it right, it’s hard. For instance, do you want long practice sessions or short? My answer is, “whatever you’re less likely to cheat at.” I keep most of my practices short, much shorter than feels “right” to me, because that keeps me on task. I have longer practices in a few cases where the project I’m playing with needs more time (more setup, more getting into mindset, whatever.) But I find that in longer practice sessions I’m more likely to slack or be distracted, so I try to keep my sessions short.

In the same way, try to get around whatever blocks your focus. Distracted by people? Go somewhere quiet. Tend to procrastinate? Schedule specific times on clear them on your calendar. Have trouble getting started? Consider a study-buddy or accountability partner. Planning is the key here.


Some of the most surprising bits of The Talent Code, to me, were about sleep. Experts tend to average around 9 hours of sleep per night (average!), and people tend to ‘internalise’ their training during sleep. Basically, if you’re not sleeping enough then you’re going to have trouble getting better fast.

If you can’t sleep well at night, consider napping — especially if you have more than one practice session daily. That sleep in between can help you solidify the skills from your first practice before getting started on your second one.

Harder Than

A hand drawn in chalk balances a pencil, a teapot and an umbrella on one outstretched finger.
And then to practice for this you add a durian on top.

The Talent Code also talks about what to practice. For football (‘soccer’ to Americans) players, there’s a game called ‘futsal.’ It’s similar to football but uses a small, hard ball indoors. Especially in poor neighbourhoods, it’s usually played with lots of players and lots of the ball ricocheting around. Basically, football but harder in every way. Not surprisingly, a lot of very good football players come from places where it gets played.

They have an excellent thing to practice which is ‘like football, but harder.’ That’s what you’re looking for. You want to practice ‘like what I want to do, but harder.’ You’ll see variations on this in many disciplines: run in the mountains in hard wooden sandals. Practice on an icy hill. Practice left-handed.

For art and many other fields, the answer involves critique — have somebody educated and excellent tell you what you’re doing wrong, which makes you work harder. Just working to your own satisfaction can be easy. But an expert mentor won’t let you get away with less than perfection.

You can also pick a hard topic or piece of work, like an artist doing figure drawing — the human figure is difficult because it’s easy for somebody to tell when human proportions are wrong. My book on software technique strongly suggests writing software to study real-world phenomena and systems, because it gives you a difficult system to model. It’s the same kind of idea. Find something harder than what you’ll be doing day-to-day, and do it as practice.


You need to be doing something hard, in a focused way, while you’re well-rested.

So there are some limits on how much you can practice. About two hours a day is an upper limit for productively doing something that hard, that well.

You can add hours, of course. But you’re going to get a lot less out of them per hour.

Knowing Why (“Ignition”)

This is hard. Doing it once for two hours is hard, let alone day after day.

So: know why you’re doing it.

That may mean having a hero: “I want to play guitar like Jimi Hendrix!”

Or it may mean having a reason: “I’m going to lift weights until I can tear the door off a crashed car to rescue somebody inside!”

It may be a reason you don’t want to tell people: “I’m going to sing so well that my sister is ashamed forever of telling me to stop.” I’m not here to judge you. Just pick something that will keep you practicing.


In many industries and hobbies, coaches are common. Athletics and sports have them, obviously. Voice coaches are common for singers, music teachers for musicians, acting coaches for actors… Many industries have coaches that can help you improve.

Here in the software industry, coaching is pretty thin on the ground. I don’t think I’ve ever met a software engineer with a coach. That’s a shame, I think. We could use them. We do like to get together in pairs or groups to write software. And we do like code reviews — that is, looking over each others’ work and giving feedback. So in the (mostly) absence of professional coaching we often do the same for each other.

Whatever you’re doing, make sure you have a source of feedback. A coach is good if you can get one. So is a skilled practice partner. Or regular feedback on your work, especially if it’s from somebody very good at what they do (and/or teaching!) But find yourself a source of feedback. You’ll need it.

Breaking Down

A chalk figure kneeling to repair (possibly) a radio.
That looks plenty broken down.

Whatever you’re doing, break it down into smaller pieces and practice those smaller pieces. It’s unlikely that you’re going to find yourself practicing something “too small.” It’s far more likely you’ll be practicing things that are too big. A musician can play the same two bars (three or four seconds of music) for two hours productivily and keep getting better at it. And two hours is far from the limit.

Don’t be afraid to go back over the basics. Don’t be afraid to go over the same thing for a long time. But keep concentrating. If you’re not getting better after many repetitions, you’re probably not paying attention. If you can’t find something you could do better, you’re really not paying attention.


If two hours per day is a maximum, zero is a pretty lousy minimum. So start. Start right now. And put something on your calendar.

If something’s not working, fix it. And if you don’t fix it, figure out why not. Once you have your motivation, everything else will fall into place with work.

Go do it.