The following image about programmer productivity is making its rounds on the internet:



As Homer Simpson might say, it’s funny because it’s true.

I haven’t figured out the secret to being productive yet, largely because I have never been consistently productive. Ever. Joel Spolsky talks about this in one of his blog posts:

Sometimes I just can’t get anything done.

Sure, I come into the office, putter around, check my email every ten seconds, read the web, even do a few brainless tasks like paying the American Express bill. But getting back into the flow of writing code just doesn’t happen.

These bouts of unproductiveness usually last for a day or two. But there have been times in my career as a developer when I went for weeks at a time without being able to get anything done. As they say, I’m not in flow. I’m not in the zone. I’m not anywhere.

I’ve read that blog post about half a dozen times now, and It still shocks me that someone who we see as an icon in the programmer community has a problem getting started.

I’m glad I’m not alone.

I’m not here to share any secret methods to being productive, but I can tell you what has kept me from being productive:

Open Floor plans

Developers arguing about Django vs. .NET

Developers arguing in general

A coworker coming up to me and asking, “Hey, did you get that email I sent?”

Chewing. Apparently I suffer from Misophonia

Not understanding the problem I’m working on

Not really believing in the project

Not understanding where to start

Facing more than one task that needs to be complete BECAUSE THINGS ARE ON FIRE RIGHT NOW

Things BEING ON FIRE RIGHT NOW DROP EVERYTHING

Twitter Notifications on my Phone

Email pop ups

Really, any pop-ups

IMs

My wife asking, “Hey, when you have a minute could you do X ?”

?” Long build times

Noise

Constant parade of people going past my desk

MandoFun

Wikipedia (Seriously, don’t click on any links)

Hacker News

The Internet in General

Things that have contributed to making me productive in the past:

Quiet atmosphere

Quiet workspace (A private office works wonders)

Understanding the next step I need to take in a project

Knowing the problem space well

No interruptions

Seriously: No interruptions

Staying off Twitter

Staying off Hacker News

No hardware problems

Loving the project I’m working on

Short build and debug times

Not debating politics on the internet



It’s telling that half of the things that keep me from being productive are problems I’ve created; but some of them aren’t. Like Open Office floor plans.

Ultimately, each of us controls what makes us unproductive. I suck at peaceful confrontation. I either come of too strongly, or I sit there and let the other person walk all over me. I’m really not good at it at all. As such, I don’t have any good advice for handling the external forces that contribute to not being productive, but I do know this: Whatever I can control, I should control. That means:

Turning off notifications on my iPhone (this has the added benefit of increased battery life)

Giving myself a reward for 3 hours of continuous coding (usually in the form of “internet time” like checking Hacker News or twitter)

Working from home when I really, really, need to get something done

Investing in a good-for-the-price pair of noise canceling headphones

Scheduling ‘no meeting’ times on my calendar. These are times shown as busy to everyone else. It’s my work time.

Not getting into programmer arguments around the office; people have strong opinions, and the programmers who have arguments love to argue. If there’s an actual business problem that needs to be solved, let’s grab a conference room and come up with the advantages and disadvantages of each approach. Let’s get some data. Let’s not just argue.

Position my desk in such a way that passersby aren’t distracting.

Taking a first pass at the problem, and *then* asking another developer to walk me through the problem so that I can get a better understanding of what to do. This accomplishes two things: First, it allows me to get the ‘lay of the land’ so that I’ll at least have a basic understanding of the forces at work. Second, it allows me to ask more intelligent questions when I ask for help

What makes you unproductive, and what do you do to combat it?

Discuss this post on Hacker News or Reddit.

Edited on 9 July 2014 for typographical errors.