Software engineering tends to attract idealists, people for whom abstract principles and fundamental concepts are very important, who enjoy creating "pure" designs on "clean" sheets of paper. It makes sense that many of us would have a rough time dealing with the dirty realities of the world.
Sometimes this can lead to BurnOut and disillusionment, loss of all of enthusiasm for software, and worry that one might have to switch to a whole different career (a scary thought!). But one can muddle through with some coping techniques:
- It's just a job. Repeat this to yourself as necessary. Your job does not have to define you.
- Look at your expectations. Accept that you might not ever get the chance to develop a killer app, or do a beautiful, perfect design that everyone will commend you on. In 20, ten, five, or two years the software that you're sweating over now will probably be thrown away. Accept this and maintain perspective.
- Find alternative outlets for your "pure" creativity. Stay up 'til the middle of the night doing the software you love. Do music, art, or other hobbies with more personal freedom and satisfaction. Focus more on friends and family. There's nothing like kids to distract you from the jerk managers; coming home to the smiling faces helps to put the stupid software battles in perspective, and remind you of why you're doing this. (of course this works both ways; after enough hours with hyperactive kids, you're happy to go back to work and deal with people who are relatively mature... {grin})
- Get your main (boring) work done quickly, efficiently, and with high quality so that you have some time for (fun) side projects, and some credibility to push for more interesting stuff. When you do see an opening for exploring new tools and technologies, run with it, and don't be shy about sharing your enthusiasm. Many managers value enthusiastic employees, and will give them some slack to keep them.
- Don't feel you have to excel at every task you are asked to do; if you aren't careful, you will end up doing work you would not have chosen (examples might include system administration, training, customer support, and other activities tangential to software development). This can happen so gradually you don't even realize you are sliding away from what you really love doing.
- Pick your battles. Try to pull back your emotional attachments to various languages, systems, techniques. They are all just tools for building software, they aren't religions. When you lose a battle and are forced to do things the "wrong" way, maintain your professionality and dignity and make it work anyway.
- Look to broaden your skills beyond "just programming." Focus more on design, or requirements analysis, or testing. Become an expert in some particular tool or technique, especially one that isn't widely taught or understood (but careful not to tie yourself to a dead-end tool!). Start paying more attention to the social aspects of software engineering -- really understanding your users, managing your manager, selling your ideas.
- As you get more experience, look for opportunities to try out technical leadership. This does NOT have to mean an inevitable slide up to the evil ranks of "management", although you will have to start dealing with more of the b.s. Think of it as providing some cover so your fellow software folks can focus on the software, and getting a better view of, and influence in, the "big picture" decisions.
- Be a "squeaky wheel"; don't assume your manager knows what you think, how you feel, whether you are frustrated or bored or constrained by non-technical obstacles. Don't wait until you are at the end of your rope to ask for help.
- As you get older, you may find that your changing body (especially brain chemistry) causes you to experience difficulty focusing (both mental and eyesight), difficulty sitting at a computer for hours, repetitive stress injuries, and so on. These can be difficult to distinguish from attitude and motivation problems. Sometimes medication and other lifestyle changes can help, but the reality is that some software development activites will take more conscious effort that when you were younger. On the plus side, you may be surprised how much you've learned and internalized, and take for granted -- this comes to light when you see younger developers making the mistakes you already made and learned from years ago...
- If all else fails, JustLeave. Sometimes you may find yourself in the right place at the wrong time, or with the wrong team, or assigned the wrong project for your skills and interests, and after months or years of hinting, bugging, and even yelling that you're not satisfied, its time to exit stage right. Usually there's a lot of inertia and it is hard to leave, and you hate all the job search bullcrap, and you worry that the next place won't be perfect, either. Do it anyway, you'll kick yourself later wondering why you waited so long.
A lot of this is easier said than done. Also,
YourMileageMayVary on the relative importance or priorities. -- Andy
(I have refactored this to remove most personal stuff, as well as my recent pessimism, which has suddenly been relieved by a new project on which I get to lead a team of at least three developers, get a clean sheet of paper, and get to use new technologies; but I know this is just a temporary reprieve, and I will have to address my career dissatisfaction eventually.)
Andy, I have to agree (and sympathize) a lot. I've just hit 40, and found myself in a contract which, on paper, looked perfect ... a language I like (Python), a customer and project with a worthy aim ... colleagues I respect and think are smart. And it's still getting me down. I'm still feeling stupid, pulling late nights and weekends to get things finished, still wishing I was working on something else, still infuriated by the design-decisions of others etc. And I realize there's no excuse this time, this is me, not some big problem with the job. It's just that something as demanding as software requires so much energy that not to do it on your own terms is incredibly stressful. I also am thinking of trying to get out of BeingAProgrammer and only coding for my own projects.
If you do anything for 8 or 10 hours day in and day out, you will eventually get bored. It is not the career, but the lack of rotation. Too bad we could not have 3 or so different careers that we rotated between every week or so. Our species probably did mixed things before modernization. Hunted one day, gathered the next, fixed the hut another day, climbed a mountain to chant the next, etc. The variety seems to have disappeared over the centuries.
It has? Only if you let it, IMO. Variety is one of the many attractions of self-employment. Even if you're not willing to go that route, plenty of people have hobbies and or charity work that they treat as seriously as they do their careers.
"Think of it as providing some cover so your fellow software folks can focus on the software, and getting a better view of, and influence in, the "big picture" decisions."
I HaveThisPattern. About 2 years ago, I volunteered to manage a group doing pretty much a scutwork release, because it would (a) get me some leadership experience, and (b) free up some other people to do more useful stuff. --PeteHardie
I've been lucky enough to have several managers who were good at providing ManagerialCoverFire. I appreciated them a lot, and they've inspired me to step up to the plate and do my share. Just today, at the end of handling a lot of b.s., one of my developers showed me some nice tool building he did that will benefit all of us. It was something I had thought about and in the past I would have tried it, but in this case I gave him cover and he did it, but I still feel proud for making it easier for him to do it... -- Andy
As a contracting consultant I have this mantra: "It's okay. I bill by the hour."
See Also: ChoosingSatisfactionOverMoney
CategoryLifeStrategies