Antelope Love Fan

Let's talk about interruptions...again.

Dear non-technical people,

We (developers) keep writing about this (just Google developer interruptions cost) and I think a lot of you still don't get it.

Like the recruiter who "just popped in for a second" to talk about one of the candidates he had sent over. Or the manager who had "a quick question". Or the dozens of other brief interruptions that shatter my concentration every day.

Most of my job is thinking. I think. Eventually I write a little code, but mostly it's just thinking.

If I'm lucky, it takes 15-30 minutes to get enough information into my head to start doing the hardcore thinking I need to get my job done.1

What's the big deal? I'm only taking up a second of your time.

Here's the problem. It only takes one brief interruption to get me out of that state. And maybe it's just me, but each interruption after is more disruptive. It starts to pile up pretty fast.2

If I get two interruptions during a one-hour period, that hour is wasted!

Here's a timeline, assuming that I'm having a good day and it's only taking 15 minutes to get settled in:

9:00am Sit down to start working through a problem

9:15am OK, I'm in the zone now. All the pieces of the puzzle are in my head and I'm starting to make progress.

9:16am "Hey, quick question! (that could've easily been an email or chat message)"

9:18am Question is answered, back to work. (A 2-minute 'quick question' is super optimistic. But I'm trying to show you how bad even the best case scenario is.)

9:33am Back in the zone. Juggling chainsaws, amazing things are happening!

9:35am Tap, tap tap, "Hey, got a second?". (Even if I don't have a second, it's too late before I can even say anything. The interruption has already happened.)

9:40am Back to the computer, trying to remember where my thought process was.

9:59am Back in the zone. Unfortunately it's time to head to the weekly 10am meeting.

Sometimes the above happens all day long and I get nothing significant done.

Sometimes I'm lucky and I can get a couple of hours or more of focus.

How can I help? What am I supposed to do?

The best thing is give every developer a space with a door that can be closed. Unfortunately, that's not going to happen until the people making seating decisions start to understand the problem and we don't have to write these kinds of articles anymore.

For now, we need a signal that means "I'm busy, go away."

In my case, that signal is wearing headphones. If my headphones are on, send me an email or chat message.

But, ultimately, just be aware of how distructive your interruption is and think hard about if it's really necessary.

Understand and respect that the way a developer works is completely different than the way you do.


  1. http://en.wikipedia.org/wiki/Flow_(psychology) 

  2. http://blog.ninlabs.com/2013/01/programmer-interrupted/ 

comments powered by Disqus

All posts

  1. Bardstown Rd Businesses That Don't Care About Pedestrians (part 1)
  2. Bikejoring or, How to Wear Out Your Dog as Fast as Possible
  3. Thoughts on wasting time
  4. Tragedy and Perspective
  5. On the idea of admiration
  6. The joy of waiting for things
  7. Advice for junior developers
  8. The 4 common ways cars try to kill me
  9. I ran a marathon
  10. The Madness of Saturday
  11. Keeping a daily work log
  12. A frustrating Web.config transformation error
  13. My first century
  14. How _not_ to compare file versions in C#
  15. Auto-incrementing build numbers in Visual Studio 2012
  16. "The definition of the report 'XYZ' is invalid."
  17. Side effects of bike commuting
  18. By the numbers: Coldest ride ever
  19. The difference between 'git fetch' and 'git pull'
  20. Freshman Lunch Shenanigans
  21. Getting an '__doPostBack is undefined' error in IE10
  22. Noticing an odd difference between different implementations of JSON.stringify
  23. How not to make a sale
  24. Prayer for the repose of the dead
  25. You Meet All Kinds of People Cycling
  26. So iBooks Have a Hidden Unique ID
  27. The Three Most Important Pieces of Information for a Kid
  28. 20 Years Later, I Still Can't Read Ramona the Pest
  29. In which I decide not to bother with New Year's Resolutions
  30. I kinda regret deleting my Instagram account
  31. Hacking my eating habits
  32. I have been a dad for 10 years
  33. The most uncomfortable training session ever
  34. Minor hiccup with Google Drive
  35. I love living in The Highlands
  36. A dark start to the day
  37. Renting an Apartment in Boston
  38. I think I need to get over myself a little bit
  39. Making a mobile site behave like an iOS app
  40. Picasa data API fun: Creating albums and uploading images
  41. SVN working copy is nested?
  42. My one, feeble attempt at being a cracker of software.
  43. My Own Personal Daily WTF v1
  44. Get on your bike. No excuses
  45. Pixel level drawing with the canvas element
  46. New Year's Resolutions
  47. How to write a very simple jQuery Plugin
  48. Must-Have Chrome Extensions
  49. Preserving the $ with jQuery.noConflict
  50. Can't load XRegExp twice in the same frame
  51. Converting a Unix timestamp to a real Postgres date
  52. HTML5 Data Attributes and jQuery.data()
  53. Memories Wrapped Up in Music
  54. A poem for our daughters
  55. Handling Windows API Callbacks in VB .NET
  56. My Favorite Explanation of clip: rect();
  57. Basics of QR Codes
  58. Adding/Deleting Events with the Google Calendar API
  59. Basic Authentication with Titanium.Network.HTTPClient
  60. Even better overriding the Firebug console in IE
  61. SQL Management Studio 2008 says Saving changes is not permitted.
  62. Revert to a previous revision with Subversion
  63. Catching Ajax errors with jQuery
  64. Fun with Vim movement commands
  65. Copying ADODB Recordsets Across Databases
  66. The Proxy Pattern in Javascript
  67. Snippet for popping up a jQuery UI Dialog
  68. A Caveat When Declaring Javascript Arrays
  69. With jQuery, Awesomeness Abounds
  70. One-liner to syntax check a Python script
  71. Coding for Doctors in Haiti
  72. Changing an application's favicon in CherryPy
  73. Localizing PHP with gettext
  74. Running a CherryPy app with Apache and mod_python
  75. Basics of the Alternative PHP Cache (APC)
  76. Converting an RFC 3339 date to a Python timestamp(plus an update to my Google Docs backup script)
  77. Flickr REST API Basics
  78. Short list of required web developer tools
  79. Getting the caption of an image attached to a WordPress post
  80. Simple tabbed HTML navigation buttons
  81. Making sure FireBug console calls don't bomb in IE
  82. You have to be able to talk to people
  83. Not breaking the rules, but still being a jerk
  84. Fear
  85. Growing Up Pyro
  86. Locking Down Facebook
  87. Automatically blocking Twitter spam accounts
  88. File modification date/times in Python
  89. SSH Tunneling: Taming the series of tubes
  90. My single-handed destruction of an Ecuadorian cafe
  91. Basic page routing with CherryPy
  92. Demystifying Python Decorators
  93. Handy VBScript ASP syntax shortcut
  94. Twitter Trends: Experimenting with Adobe Air
  95. Getting started with CherryPy
  96. Installing things on Linux is still a pain in the tuchus
  97. Facebook's OpenID Support: Much Improved!
  98. Basic Lighttpd Setup
  99. Be Safe and Don't Be a Jerk
  100. Facebook's OpenID Support: It's cute and all but...
  101. Basics of the PHP PCRE functions
  102. This Bash trick will make your brain explode
  103. Saving the world with PHP array functions
  104. The PalmOS Browser War That Never Was
  105. 8 years today (and 14 years last March)
  106. It's not hard to avoid sounding like a moran moron
  107. Premature Optimization less harmful than Immature Stupidity
  108. Where am I? Where are you?
  109. Using PrototypeJS with Greasemonkey
  110. Yes, it's a camera. No, it doesn't need film
  111. Backing up your Google Docs
  112. Twitter Search API: Make millions, wow your friends.
  113. The shapening
  114. Writing a simple Twitter-bot in PHP
  115. Event handling with PrototypeJS
  116. Sometimes being a dad is all too real
  117. A refugee from the world
  118. HTML Emails for fun and profit
  119. Javascript awesomeness with Prototype
  120. Regular expressions in VBA
  121. Manipulating PDF files with Visual Basic .NET
  122. Google Client Logins
  123. Your data is your life. Why aren't you protecting it?
  124. RAID basics
  125. My .vimrc file
  126. I'm just a little bit starstruck
  127. In which handiness ensues
  128. It begins
  129. Profiling PHP with APD
  130. Fun with Branching Merging
  131. Comment Engine: Round 2
  132. Comment Engine: Round 1
  133. Foray into the Google App Engine
  134. Un-befuddling OpenID
  135. From Javascript to PHP and Back Again
  136. The fun solution is not always the right one
  137. Good Lazy vs. Bad Lazy
  138. Search Replace with vim
  139. The Editor War
  140. Interviewing is hard and annoying
  141. Further Adventures of a Domino's CSR
  142. How I Single-Handedly Further Disgruntled a Disgruntled Domino's Assistant Manager
  143. Further Tales of a Disgruntled Domino's Manager in Training
  144. Domino's Nightly Stoner Encounter
  145. Most bizzare lack of tip on a delivery
  146. The Saga of an Uhappily-Married-Disgruntled Manager at Domino's: Part 1