How to destroy Programmer Productivity
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