Friday, December 10, 2004

Why Does My Job Suck?

I work in the software industry, and my job sucks. To be fair, my job doesn't really suck in any objective sense. It's fairly low stress, pays well enough, has flexible hours, and in my particular case i get to listen to a lot of music. But many days i'd just as soon not do it. This is not an isolated phenomenon. I've got numerous friends in the same industry who are at the same stage. It just isn't that much fun anymore.

There's nothing more self-indulgent and whiney than complaining about your job when your job is far better than what most people have to put up with. So screw you, get your own damn blog. No, but seriously, this is of interest to me because of the uniqueness of this profession. Everybody reaches a point in their career where they'd rather just fish (where by "fish" i intend a metaphor for whatever it is that people wish to do rather than work; i don't actually like to fish). But software people are different, weird really, in a way that would probably be regarded as mental illness by folks outside the profession. Some of us have at times so loved to make software that we'd do it in our spare time for free in addition to our regular jobs. But now a lot of us would rather fish.

I've been desperately trying to figure this out, because software building is just about the only thing i've ever been able to do that people will actually pay for. In fact, my undergraduate degree is in chemistry, and if it had not been for the software boom i might have had to get a job as a chemist, which would have been unbearable to me and potentially hazardous to my colleagues.

I absolutely loved programming in the early days. Like many geeks, i'm self taught. My first experiences with computers go back to the personal computers of the late 70s, writing BASIC programs and storing them on cassette tapes. In college i spent my life savings on an IBM PC and began writing programs in 8086 assembly language. I came very close to failing out of college because i essentially skipped all of my classes during my sophomore year so that i could write programs (and play Zork). The next year, i started working as a research assistant to my p-chem professor so that i could write molecular modeling programs. That experience led to my first job at the San Diego Supercomputer Center, where i learned about Crays, Unix, C++ programming, and this funny new thing called the Internet. In 1988 there wasn't a world wide web yet, and we thought FTP was pretty cool. At that time being into computers and networking was about as cool as being into ham radio or role-playing games.

By now i've experienced almost every facet of sofware development. I worked as an engineer and a manager, i was one of the key engineers at a start-up company, i experienced all of the trends (CMM, UDP, XP) . I've done desktop software, enterprise software, internet software. I've done defense, pharmaceuticals, and e-commerce. All of these jobs had their frustrations, stress, politics, bullshit. But i never questioned if i was in the right industry until my late 30s.

After a run of about 5 years where i'd been working 6 days a week i started to realize that my health was suffering and i wasn't spending as much time with my kids as i wanted to. I tried to return to a role that was more straight engineering and less project management. It was then that i started to realize that software building wasn't that much fun anymore. I attribute this to a number of causes:
  • There's nothing new under the sun. In the early part of my career the onslaught of new technologies seemed exhilirating. Between 1985 and 1995 i went from programming in assembly language on an isolated personal computer to writing C++ programs distributed between Cray supercomputers and SGI workstations connected via high-speed network connections, to writing Java applets. Often you'd have to create new datastructures, or code your own hashmaps or btrees. We'd blithely make up our own application protocols and move stuff around over sockets. We went from clunky vector graphics on specialized workstations to interactive volume visualization. We started building web applications with cgi-bin and HTTP. However, web technologies began to dominate so much of the software landscape that it seems (to old, cynical dweebs like me) that a lot of folks have been trying to invent new ways to do it for the last decade. Imagine that the auto industry went through a decade-long process of trying to standardize the steel-belted radial, and you'll sort of get the vibe. I went through a phase where i felt like everybody in the world was working on the same integration project and i thought i could probably reduce my resume to one line: XML, metadata, transactions, messaging.
  • There's too much new stuff. On the other hand, there's been an explosion of largely redundant and overly complex software that doesn't solve any new problems. There's an illusion of progress because of the astounding number of meta-applications that are built to surround and contain the monsters we've created.
  • I didn't get rich enough to stop. There are several paths for geeks. Most geeks continue to enjoy the technology and they fashion long, happy careers from it either as engineers or managers. Some ride the wave of one or two notable successes and create careers out of being professional commentators and visionaries. Some make a lot of money, and they get to do whatever the hell they want. Somehow, i failed to do any of those despite ample opportunities.
  • It's not a prestigious career. Believe it or not there was a time when some of us in the software engineering field viewed it as a professional career on a par with being a doctor or lawyer. Now it's on a par with being a blacksmith-- honorable, interesting work if you happen to live where there are plenty of horses.
  • The Deathmarch. Orson Scott Card once wrote a comparison of software creation to bee keeping. Let the bees do there thing, 'cause the bees will be bees; and then skim off the honey when they're distracted. Somewhere along the line, people lost sight of this. Building software is odd in that attempts to manage it drive it to mediocrity. In fact, with all due respect to my peers, software management is largely about getting things done with mediocre talent. A small, talented group of programmers will build good quality, high value software because that is their nature. To manage software, you have to add process that doesn't result in creating software, and then you have to apply this to both the talented and not-so-talented workers. Unfortunately, one part of the process that most software organizations are not good at is estimating how much can be done in a given amount of time. Also unfortunately, another part of the process that most software organizations are not good at is managing the scope of the project as it progresses. The frequent result is the so-called deathmarch: a long, hard, stressful road to inevitable failure. It's not fun, which is probably why the word "death" figures so prominently in it's description.
So, anyway, i figure this is my version of a mid-life crisis. I expect it to last until i figure out what i want to do when i grow up. Any suggestions would be appreciated.




No comments: