Can I Just Change Jobs?

maanantaina, tammikuuta 05, 2009

The topic of "Love it or Leave It" from Jeff Atwood is an old one that pops up every year. See these two links:
1. Jeff Atwood, "Coding Horror: Programming: Love It or Leave It,"
2. Joel Spolsky, "The Joel on Software Discussion Group - Thinking of leaving the industry,"
Its the notion that software developers are so passionate about coding that they would do the work for free and that anyone who wouldn't is a bad developer. I, after a lot of reflection, agree with this up to a point. I code in my spare time on projects of my choosing because it is something I am interested in and I find it relaxing. It's recreational programming.
There is a misguided notion that coding and software development are the same thing. Software development is a process of requirements gathering, designing, refining, developing, debugging, refining and deploying for the purpose of making money or for academic research. This process often occurs within the scope of one or more teams that have their own hierarchies and procedures for decision making.
The problem with the "love it or leave it" attitude is that it doesn't separate the job from the task. The task of coding is often enjoyable provided you are working on an approach that you don't fundamentally hate. Hate is a strong word for the situation, but most developers eventually get stuck implementing something that is just a horrible idea but we're doing it anyway because we were told to do it. I get really cross in those situations because I feel like I'm failing my own standards even though I am doing what I am told. I feel like I also failed to explain my viewpoint in a persuasive enough manner.
The job of software development can be terribly frustrating depending upon the team and organization. You could have a dictator for an architect who never listens to your designs. You could have a miser for a VP of Engineering or CTO that expects his employees to work 60 hours a week. You could have the most dull job in the world and the code you are writing is not challenging or even interesting. You could have five bosses that compete for your time and get angry when you work on one of the other boss's tasks. You could have three or four cliquey teammates that create unnecessary drama in the workplace. You could be an architect but not have buy-in from the CTO so nothing you design ever gets implemented. You could have a nutty team lead that always wants to take shortcuts in code rather than really fixing a problem. You could have an HR policy that requires a timesheet that describes the work you performed in 15 minute increments. You could have daily standup meetings that take an hour, accomplish nothing, occur at lunch every day and the next round of meetings begins at 1pm. Your manager may take a nap, with the lights turned off in his office, while the rest of the team is on hour 12 of a 14 hour day trying to meet a deadline. Your software developer job could really be a miserable thing.
How many people have seen one or more of the above in their own workplace? I've seen all of these actually happen! A few of them have happened to me. Having five people assigning you tasks and making them negotiate for your time is very trying. That sleeping manager really amazed me but I already had a new job and just wanted to get out of there.
We are fortunate in many areas though. We generally make much more money than the average person. Our salaries plateau early in our careers compared to others, but the plateau is often well above the average pay in your geographic area. We often work in comfortable, climate controlled buildings. We almost always get good benefits like health care, some form of retirement and paid time off. We often get to work on challenging problems that test our abilities. We often get to work with smart people that often care about their work. Many of us have a lot to be thankful for.
Who should we be thanking? Is it our employer? How about teachers? How about team mates? Maybe it's our parents that encouraged us? Our spouses and our family? God? We got to where we are by working darn hard and through some people that supported us. Our job is not easy and not everyone can do it. We give up a lot of free time to master our craft and we often have jobs that require longer hours than almost everyone in the company. We are passionate about our work and expect to be treated and paid well too. And we are thankful to those who support us and stick with us when we are working.
Loving your job and loving coding are two very different things. We cannot sit and judge a person's situation from afar and say that he should be thankful for his job and is whining. Sometimes a job just sucks and it's time to move on. Sometimes we need a reminder that other companies are different and there are better projects, better places and better teams.
There are plenty phenomenal software engineers who are tired of the job and want to try something new. A good friend of mine left software development to become a photographer. He is easily the best software developer I have ever worked with and he walked away from the craft entirely. He codes just for the fun of it, occasionally writing the odd sudoku puzzle solver and thus taking the joy out of the puzzle entirely and moves on to something else. Is he a bad developer? No, he's just done and ready to try something new. How many people do we know that came to software development from some other field? How many of them are good at it and do we call them quitters for leaving the field they started in?
We sometimes take the viewpoint of "code above all else" but we see many that want to have a good job and be able to enjoy other aspects of life. Many of us are naturally inquisitive and need to apply our minds to many different disciplines, which is where we get the art in the "Art of Computer Programming." The art, by Knuth's definition, is the application of many different disciplines in order to code great applications. You need to learn a little accounting if you are going to write Quicken and you need a little expertise in photography and editing if you are going to write Photoshop. We learn to work with others to build a great application. We need to be more than just good at writing code to be great as software developers.
But some of us are tired of all the things that go along with coding as a part of a job. And some of us go off and start our own company because we want to code on our own terms. Others move away from jobs that require coding and become architects, team leads, CTO's and CEO's and yet we don't call them quitters or complain about their lack of coding commitment.
The "love it or leave it" attitude helps no one and labels too many people as not committed enough and opens us to exploitation by our employers. It confuses the job of the software developer with the fun of coding. We code because we love to and we work because we have to pay bills. We are lucky that our work is often on of our favorite things to do, but we are equally cursed when our work demands too much of us and our family. Many of us do not lead lives of quiet desperation but many of us are pulled between the needs of our lives, the requirements of our employers, the dynamics of the team and the love of coding. The pulling creates conflict and everything breaks when pulled too far in too many directions.
This leads me to my final comment: maybe we can just work for someone else. If the job sucks and our lives are miserable, we can just work for someone else and maybe find that one great job that is more aligned with the way we want to live.

You Might Also Like