Feast or Famine
About four weeks ago, the project that I was working on was abruptly canceled. It wasn't that there was anything wrong with the way the project was going -- there were lots of things wrong with the way the project was going, but the cancellation was due to a change in business direction. So for the past four weeks I've been trying to find something useful to do with myself.
First I spent a few days just catching my breath -- after all, I'd been working full out on the project for months. There's an excellent reason why projects run for months with tens of people working on them then are suddenly canceled. It is because... ah, never mind: I don't feel like explaining it.
Then I took a look at my annual goals. Annual goals... those silly things we write back in January (uh, guys... it's it's mid-March, and management just changed the requirements for goals, so could you please re-write them and get approvals? The final signatures are required in two days, and you're now expected to have at least goal accomplished by the end of the first quarter). So I spent some time working on completing my annual goals.
I spent a week going through the Subversion commits from the canceled project to find all of the pieces that were useful generally and not specific to the project, and incorporated them into a new branch -- perhaps a future project can adopt them and they'll eventually see the light of day.
I got really bored: I started a blog.
Finally I got assigned to a new project. With two other developers I dug into it. Technically, the project wasn't approved yet, but there was an initial piece that we could get started on just to get things moving. The initial piece of work looked quite small -- only about 4-5 days of coding, but we'd need to get the specifications for the Equifax interface first. Three days later, we'd basically finished coding it when I found that the business had changed their mind -- they're now talking to Experian and putting the Equifax contract on hold. So we went back to being "on the bench".
I took a week of vacation. It was fun to visit my in-laws for Thanksgiving.
After vacation I asked my manager if I'd been assigned any new work. He explained that we are seriously short-staffed: the number of projects in the pipeline is more than our development group can handle. It's just that none of these projects quite have their requirements complete. I spent large parts of the week performing code reviews on old code. I wrote up formal documentation about database schemas that had been designed years ago.
On Friday, my manager seeks me out. He's got a rush priority job that has to be done as quickly as possible. There's been a change in lending policy at the bank and it's effective today. I can grab as many developers as I need: this takes priority over everything in the maintenance channel. Start work immediately -- hopefully within the next few hours they will have finished deciding exactly what the lending policy changes are going to be.
It's always like this in my industry: work comes in fits and spurts; feast or famine. To my mind, this is a good thing. Programming should be exciting: there should be deadlines to work against and meaningful things to accomplish. But programming is also a creative endeavor -- almost as much so as writing or composition. Three months spent optimizing the database performance can't hold a candle to a single 10 minute inspiration of how to design it differently in the first place. So, like other creative professionals, we programmers need a chance to figuratively "recharge our batteries". (Literally too!)
Of course, no real work can start until Monday, so by 4:30 on Friday I'm feeling good: about to head home secure in the knowledge that next week I'll be busy again. My batteries are charged, and I'm ready to go. It's around then that a coworker stops by my desk with a question. "It was about 4 years ago, but the checkin log shows that you wrote the comment in this stored procedure. Could you explain to us what it means?"
And that's how, at I got involved in fixing someone else's production issue. (Of course, genuine production issues are everyone's problem.) It was real (the whole call center system was going down every so often throughout the day, and although I hadn't been involved in the work that triggered it, I did understand that part of the database well enough to propose a solution, code it up, discuss with senior management how best to deploy it, run a hurried test, and deploy it to production (with help on most of those stages). So I finally went home shortly before 5:00 AM on Saturday.
That's the way it goes: you're finally consuming a huge feast and your neighbor drops by with a pie.