Monday, March 16, 2009
All Work and No Play...
Note: this article has been re-published on the new Undefined Value blog.
I've been really hating my job for the last twelve months or so. I've wondered why. After all, I'm getting paid well to work on software. This is my dream job, isn't it? Why can't I enjoy it? And if I can't enjoy it, why can't I just be happy that I'm not unemployed or flipping burgers?
While sitting in the car dealership service lounge today, I watched a TEDTalk about the importance of play. During that video, it hit me: I hate my job because I never get to play anymore.
When I say play, I don't mean playing ping-pong in the storeroom or having Nerf gunfights with my co-workers. Play is about curiosity, exploration, and imagination. That's what I've always liked about software development: the opportunity to explore different solutions, to try out new ideas, and to learn interesting things from other people.
For the past year, there has been none of that. My job has mostly been about fixing bugs. There have been a few new features to add, but they have all been uninteresting and uninspiring.
This may sound like whining, but lack of play really does take a toll on productivity. We have several smart people on the team, and yet we are way beyond schedule and over budget. I'm sure that a major reason for that is the fact that nobody is having any fun. Just putting your head down and charging forward may sound like an admirable way to handle an unpleasant situation, but it stifles creativity and makes it difficult to imagine better solutions. When there is no opportunity to be smart, everyone just gets more stupid.
Play should not be considered a luxury reserved for children. The mind needs play, just like it needs sleep. Without it, performance suffers.
I honestly can't remember the last time we did any brainstorming or drew things on whiteboards or talked about abstractions or joked about how to re-implement the whole system some obscure programming language. All we do is write code, and contrary to what some people believe, writing code is the least valuable thing a developer does. It's the thinking behind the writing that makes us more than mere typists, and we aren't doing enough of that.
I don't know the solution to this problem. I just hope that after the current projects are finished, I'll remember how my job is supposed to feel.
Wednesday, March 04, 2009
Implementing Stupid Stuff
Every software developer, at one time or another, will be asked to implement a feature that doesn't make any sense. It will be a request from a client, or from a senior manager, or someone else who can't be ignored. The feature must be added, even though everyone other than the requester knows the feature is ridiculous.
I am in such a situation myself. The first assignment I received when I took my current gig was to implement a feature that all the smart developers had refused to be involved with. As the new guy, I didn't know any better. I did what I was told.
Now, about 25% of my time is spent reacting to "bugs" and questions about the feature. I put "bugs" in "quotes" because most of the time, the feature is working exactly as designed. Unfortunately, the design made no sense, so the behavior of the software doesn't make sense to anybody.
So, I spend a lot of my time trying to explain to everyone why the software works the way it does. This makes me look stupid, because the way it works is stupid. I am held responsible for the "feature." People ask me why it does what it does. Most of the questions are of the form "How can I disable this feature?" I want to preface every answer I give with 'This was not my idea, but ..."
It's depressing. My advice: don't implement anything that seems stupid. Ask a lot of questions. Make sure that either (a) you understand the need for the feature, or (b) make sure that everyone sees how useless the feature is, so that you won't have to do it.