The importance of being idle

I’m the kind of developer who does lots of different kinds of work. I learn new stuff for a living. My motivation is mostly simple curiosity: I enjoy learning new stuff; I can’t resist investigating a dark forest when I walk past one.

I like both of these qualities in myself. Most of the time I think they make me better at my job, and happier doing it. However, lately I’ve noticed a side effect of these qualities that probably doesn’t make me happier and doesn’t make my organisation better.

As a consequence of wanting the make progress, and of enjoying learning new things, I take on responsibilities for support technologies when I should leave them to someone else.

For example, say I need a database. I should go through the official process of getting one  provisioned. (I know, we all want to be working somewhere that this is a two minute job, but I’m certainly not!) To get going quickly, I build my own for the team and give it its own server. It’s much faster and much more flexible if I do it myself. The problem is, now I have a dataserver to support.

When you own a server and it goes down, that’s your problem. Your workflow now goes something like:

  1. Do something on your project
  2. Stop to fix the server
  3. Continue working on your project

This doesn’t sound too bad, yet. But when you start adding a CI server, Archiva, a couple of test deployment environments, a local chat server (yes, we really did this), and then, eventually, when you repeat some of these activities for other teams in your area because you’re “the guy who knows that stuff”, your workflow starts to look like this:

  1. Do some project work
  2. Stop to fix Dave’s server
  3. Continue project work
  4. Bounce Archiva
  5. Fix the password on database X
  6. Continue project work
  7. Berate yourself for not automating a deployment
  8. Continue project work, and so on…

It will keep you busy, every day, but it’s not very productive. You’re constantly context switching. What is more, your day never slows down because when you aren’t doing anything else you’re behind on your own project, or you have responsibilities you’ve neglected with backups/maintenance of the many servers you sort of administer now.

Ultimately, you feel burned out because there is never a slow day at work – you’re always under pressure from all of the work you’ve given yourself.

Compare this to another way of working:

  1. Do some project work
  2. Hear Dave complaining about his server while making tea and sympathise about the performance of the sysadmins/DBAs in fixing it
  3. Continue project work
  4. Raise a ticket reporting that Archiva is down
  5. Continue project work
  6. Raise another ticket about the database
  7. Do some research, or improve your CI build on your project, while you’re blocked
  8. Continue project work
  9. Congratulate yourself when your CI build makes your life easier (yet again)
  10. Continue project work, and so on…

Rather than owning it all, and therefore flitting from one urgent problem to the next, you take advantage of the natural delays in your process to do some of the day’s “shoulds”. Less pressure, less context switching.

And the downsides to working like this? Well, you may miss more deadlines, unless the other people supporting your stuff are very efficient. But if you’re working a good agile process, you will report the delays to your team and you will all reprioritise work (including maybe working out how not to be so dependent on the failing infrastructure) to ameliorate the delay.

Another wonderful side effect is that the delays and inefficiencies will become visible to the business. Why would they invest in something unless they can see what it is costing them not to?

Nobody is going to argue that delays don’t matter. I, for one, hate missing deadlines. The point I’m making here is that they don’t matter as much as working at a sustainable speed, taking enough time to improve the way you work, and keeping your focus clear.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s