Just a few months back, I resigned my position as senior software engineer and technical lead for a middleware services group at Wells Fargo. The job was great: work from home, great immediate manager, respected among the team members, trusted to explore new technologies when justified, boss stood up for us and got us the tools, training, and working environments we needed, etc, etc. Something still prompted me to move, and it’s not the first time I’ve done so. I’ve opted to resign jobs that had great setups in the past, either as a full-time or consultant, and in this blog I try to articulate why.
I believe to be successful and well-rounded in the technology/software space, you have to change jobs every few years or so. Ultimately, as a software engineer, your job is to solve problems using technology. In most cases, a problem can be solved in many different ways, but not all solutions are created equal. The more problems and solutions you’ve seen and experienced, the more apt you are to solve the problem with a “better” or “elegant” solution. In my opinion, you have to experience how problems are solved in different groups, and different companies using different methods, different approaches, etc etc to really become proficient at problem solving and weigh the benefits and tradeoffs that come with a solution. Otherwise, the traditions and customs of a single company crush your mind from thinking “outside the box” or evaluate how similar problems have been solved in the past by similar companies.
Another part of the equation is ability to learn and your exposure to new technologies. Big companies offer the “this is the way we’ve always done it and we’re not going to change” mentality which is really a career killer for a software engineer. If you’re career goals involve trying to climb the corporate ladder, then by all means embrace the corporate mindset but if you want to stay in the technology space and excel, you will have to seek out opportunities to expose yourself to new technologies and problems..
I feel at this point in my career, I can’t settle for all the comforts of a cushy corporate job. I am still young enough and interested enough in technology to the point that I want to push myself. I want to get out and be exposed to new problems. I crave learning and the challenges of doing so. I honestly feel that if you’re not learning and not solving new problems and not thinking outside of the box you’re going to end up like those technology folks complaining about not having a job because the technology they cling to is slowly going away or drying up. I don’t want to end up complaining about something that I have control over right now. In the end, the technology industry is about problem solving, ability to learn, and pushing yourself to not get comfortable. Maybe I’m cynical in this respect, but the longer you stay at a big company, the more locked-in you get and the more dependent you become on that company (pension, retirement, tenure, job-security, whatever). The longer you stay, the less motivated you get to learn the new technologies that aren’t being used at your company. The longer you stay, you *think* you become critical to their operations, but before you know it the operations themselves are being phased out and your chances of being kept around are becoming slimmer and slimmer. I believe times have changed, and trying to stay at a corporate job in a company for 30 years is a career killer for a software engineer. I want my resume to be my job security, not the number of years I’ve had the corporate mentality beaten into me.
Who knows, though. My wife and I are expecting our first child in the next few weeks, and I know my priorities will shift big time. My focus will be on her and my family. Maybe I’ll do a 180 change of opinion about staying at a big company. But while I’m still motivated, I have to explore other options and opportunities that I know will solve all three of those items mentioned above: exposure to problem solving, learning, and staying hungry. So I continue my journey in the software craft by taking on the role of Principal Consultant at an open-source subscription company, FuseSource, who is the support company behind Apache Camel, ActiveMQ, ServiceMix, CXF, and a few others. I will be helping different companies use these open-source projects, facilitate proper design of their architecture, deliver training, and i’m sure much more. It seems to be a good balance of exposure to new problems, learning opportunities, and working with some of the smartest people in the open-source space which will drive me to stay hungry. Wish me luck!