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
- My wife asking, “Hey, when you have a minute could you do X?”
- Long build times
- Constant parade of people going past my desk
- 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