raganwald
(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Thursday, June 21, 2007
  My "Working" Day


Someone asked how I seem to get so much done. I had to answer honestly:

The unfortunate truth about my personality and my day is that I lurch back and forth between being intensely focused and very distractible. There is some daily rhythm to these swings in attention capacity, some random X factor, and the undeniable fact that if I am “in the zone” and you interrupt me enough, I lose focus and I can’t get back into it.

When I am working from home (either for clients or on my own projects), the key to productivity is not letting those focus hours slip through my fingers. When I’m “on,” that’s the time to put TextMate front and centre. When I’m “off,” I try not to force it too much, there are plenty of things to do that can be done in short dribs and drabs.




Getting Things Done is “The Book” on managing your projects while keeping your blood pressure down. Like many technologists, I find it ideal because it provides a framework for handling the “loops,” the obligations you have to others and others have to you. It is especially relevant for my life within an office because it emphasizes organizing tasks by context.

It’s part of the system to work on office tasks when at the office, phone tasks when you have set aside time for calling, and errands when you're on the road. This fits perfectly with people who need to block aside time for actual programming and still do a myriad of other little tasks in collaboration with others.

My current day job involves working in an office where the prevailing culture is “interrupt-driven,” to the point where it is mandatory (yes, a company rule) to have IM on so that people can interrupt your coding without even bothering to invest the five minutes to walk over to your desk. Needless to say, the day job environment does not feature offices for programmers. Nor do people respect the fact that there is code on your screen and headphones over your ears as signs you may be performing a billable activity.

This would be a complete block to productivity, except for the fact that our clientele impose so much bureaucracy on getting anything done that my ratio of virtual paperwork to code approaches one.1

So:

When I have some serious code to write, I do it at home before I go to the office, or after five when everyone leaves (you can tell a lot about the company culture by observing the stampede for the exits every afternoon). I can debug, embellish, and tinker during the day, but I can’t actually concentrate enough to write anything serious, so I no longer bother trying.

That’s when I usually lurk on reddit, talk to colleagues, talk to clients, and answer emails. It’s a good time for lightweight research, like figuring out how to get JRuby working so it can be called as a scripting language from a Java application.

I use Actiontastic to manage my GTD system on my Apple MacBook Pro. That way, although I’m not getting hard coding done, I am advancing my projects and my clients love my high-bandwidth, real-time communication.

Now, from time to time there is a crunch of some kind where I absolutely must get something done and for whatever reason I can’t just leave. I usually hide in the board room and crank. I have to slap myself if the mouse hovers over the Firefox icon. In extreme cases, I turn Internet Access off entirely.

I also get some night hacking time, and if I’m not too exhausted, that’s a good time for coding. I like to save several evenings each week for family time: from dinner with my family to putting my son to bed is a time slot where work, blogs, and even start ups do not intrude.



  1. Update: R-E-S-P-E-C-T.

Do you have a better idea for how I could be applying my talents to helping a software company grow?
 

Comments on “My "Working" Day:
Heh. You don't happen to work at an ISP, do you?

I just quit my day job basically because of this - an interrupt driven culture (mandatory internal jabber, never an excuse not to talk to a client or answer the phone, and increasing emphasis on process, management, and sales). I can see how the culture works for an ISP which basically makes money via customer service and reselling. As a developer though it was driving me nuts.

Anyway, I was feeling like I couldn't get anything done and wasn't actually, you know, writing any worthwhile code (during the day at least - I'd actually work unpaid overtime just to be able to get something done). But my spare time is less than it used to be - I am completing an addition/remodel project on my house and have a toddler and an infant... So I quit (well - I was also frustrated technologically, but that's another story).

Now I have the opposite problem of staying focused while I take a couple months off paying work. I've used Basecamp for organization and project communication (projects/todos/milestones/forum) but maybe I should investigate GTD while I have some time to play. I bet there's an Emacs GTD package of some kind...
 
I have to slap myself if the mouse hovers over the Firefox icon. In extreme cases, I turn Internet Access off entirely.

Right now I don't have net access at home, due to a move. I am seriously considering never getting net access at home again. I'm getting so much more done it's silly.
 
Are you practicing test-driven development consistently, Reg?

One of the great things about it in my experience is that it makes you more interrupt tolerant: you only need to reload enough context to understand your last test (or think of your next one) before you pick the flow back up.
 
Ha. My office is exactly the same as this. Except none of us follow GTD at all. So nothing much gets done.

Interruptions are a fact of life here, getting pulled from one project to another equally so. No private offices, phones ringing all the time, MSN required to be running... it doesn't add up to a very productive working environment.

Yet, despite that, we've adapted to get stuff done. Perhaps not as efficiently, or as well, as we would without interruptions and with the space and time required to get "into the zone", but we have managed a little!
 
Heh, I'm actually in the same boat with Giles, here - I haven't yet ordered ADSL since moving, and I'm actually savoring the offline working model. Perverse? Sure. Effective? You betcha.
 
I pair program... It's much more difficult to interrupt a pair of people working together than a single person.

And even if the interruption still succeeds, the pair can maintain focus so I can more easily return to work after dealing with the interruption.

Having someone else at your desk works as a better deterrent to interruptions than headphones.
 
Clearly, the problem here is TextMate. I suggest you try emacs, then distractions such as `M-x tetris` are only a few keystrokes away.
 
Greg:

I pair program... It's much more difficult to interrupt a pair of people working together than a single person.

If it were actually more difficult to interrupt, the office would either ban pair programming or find a way to interrupt pair programmers.

What you are missing is that the culture of the office is to be interrupt-driven. It isn't an unfortunate side-effect of being available: availability is a requirement.

And even if the interruption still succeeds, the pair can maintain focus so I can more easily return to work after dealing with the interruption.

That would be useful indeed, I shall try it some time. I have paired in the past, however in those situations where I had the authority to pair, I didn't have any of these problems, so I chose pairing for different reasons.
 
Are you practicing test-driven development consistently, Reg?

"Test-driven" means a lot of different things to different people. If you mean, do I write tests at the same time as I write code, and maybe even write failing tests before I write code that makes them pas, I am way ahead of your suggestion.

However, for certain problem domains, a big chunk of thinking is required to solve the problem before writing the implementation. Doing "test-first development" merely pushes the need for uninterrupted thinking from the code-writing activity to the test-writing activity.

One of the great things about it in my experience is that it makes you more interrupt tolerant: you only need to reload enough context to understand your last test (or think of your next one) before you pick the flow back up.

I think that the kind of activity you are describing here is something I already do and yes, I agree with your statement. I describe it above as debug, embellish, or tinker.

But there is still an important activity in software development that requires uninterrupted flow time for me. I do not find this office a place to do it, so my adaptation is to do such thinking before and after office hours.
 
Personally, I prefer IM to in-person discussion, because IM can be treated as an asynchronous communication; if the receiver is busy, then can not answer for a few minutes until they hit a break. When someone walks over to me or hollers at me, I have to respond immediately and with full attention.
 
Do you really think there's anyone in our office that doesn't view you, your time and your privacy with the utmost respect? On a more substantive note, a quick survey Friday found about half our people on IM, so I bet you could get away with staying offline as much as you want: I do.

Come hide out in my office if you want to get some work done!
 
Why work at a place that wastes your workday and then expects you to put in extra hours just to do your job?
 
Why work at a place that wastes your workday and then expects you to put in extra hours just to do your job?

That's not the situation. I'm asked to estimate how long things will take, and it's up to me to give estimates based on actual velocity, not the amount of time it would take under ideal conditions.

I choose to do work in the mornings and evenings when I'm more productive. Nobody "expects" it: if they did, the office wouldn't be empty after five, would it?
 
Do you really think there's anyone in our office that doesn't view you, your time and your privacy with the utmost respect?

Of course they view my time with the utmost of respect. It's just a question of what they feel is the best use of my time for the organization as a whole.
 
It may help to have an international Peopleware * Union, to force management to fix work environments and limit the behaviours which are proven to needlessly waste valuable lives and wages.

* Based on the book Peopleware and supplementary material.
 




<< Home
Reg Braithwaite


Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

Books
What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

Share
rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

Beauty
IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

Work
The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Management
Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

Notation
The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Opinion
Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

Whimsey
The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

History
06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /