"2016." A year of ups and (if you agree with many of the social media channels in the last month) a significantly larger number of downs. I'm not sure exactly what it is about this time of year that causes us to reflect so much more than the rest of the year; I suspect it mostly has to do with a heightened sense of awareness as we approach boundaries.

As children, we know they are there because our parents tell us and we frequently come close to them often by virtue of desiring to push past to see what is beyond. As parents, we know they are there because we create them; often intending to protect our children from things that are dangerous or to set parameters for healthy age-appropriate interaction. As software developers we encounter boundaries in tests, the design of our code as it relates to components in a system, API's, the list goes on and on. Being in constant consideration of boundaries, whether consciously or subconsciously, has the side-effect of switching our brain into analysis and reflection mode.

I recently had some friends reach out for advice as they were contemplating a transition at a critical boundary: quitting their job.

"It's time for a change"

...

"I've been restless but I'm trying to be cautious"

These exchanges, coupled with the time of year and my brain switching into reflection mode, have had me considering reasons I left jobs in the past. The more I thought about it the more my brain kept telling me that those reasons were often not valid reasons to justify leaving. I wrestled with it and tried to move onto other thoughts but it just kept nagging at me; this is usually an indication I need to deal with those thoughts in a positive way. So, here I am attempting to impart some wisdom about reasons not to quit your job in 2017 (but mostly just typing as an exercise to free my brain up to move onto other things!) ;)

Technology

On April 3rd, 2014 I wrote some of the reasons I left the last job I was at. I've re-read that post a dozen times trying to mine some fragments of wisdom, mostly to attempt to justify the decisions at that time. The only conclusions I've come up with at this point are: there are a lot of emotions in my writing that stemmed mainly from too much focus on Technology as one of the reasons I quit.

Technology is seductive; it attempts to woo us through flashy demos from paid evangelists or conference talks from influential heroes. Technology is like the trench-coat wearing crook on the street corner who promises us the Rolex and ends up delivering a cheap imitation. When the tech-stack you work with (or want to work with) becomes the justification for a career change it has the potential to snowball into a full on addiction to newness that sets your brain up for a dependence on switching tech in the same way a drug addict depends on their narcotic of choice.

The truth is that most systems that we work on move slowly towards disorder and complexity, so it is no surprise that the promise of a fresh-start in a new technology stack is appealing. An entire generation of software developers have become so accustomed to quitting their job based on technology that I suspect the coming decades will yield a significant need for people who have experience dealing with systems over a long period of time. If we don't deal with our addiction to newness, the recruiter pitch of "Junior Developer Wanted, 5 years experience Node.JS/Rails/..." that we so frequently deride will turn into "Senior Developer Wanted, 10 years experience dealing with software entropy" and there will be no one to answer the call.

Don't get sucked into the new tech cycle; learn to embrace what you're working on now and strive to work the best with the technology constraints you've been handed.

Scale

So, you've thought considerably about your current job and ruled out technology as the main reason for leaving. In fact, you're sticking with the tried and true tech-stack you've always known, but there's just been that nagging feeling that you'd be so much better off if you could experience working with your stack at a larger scale. Oh to be able to understand the constraints of systems at an order-of-magnitude or two beyond where you are working now; that's the ticket!

Scale is subtle; on the surface it promises a similar thing to the tech-stack switch: an opportunity to learn new things that your current scale of operations can't teach you. Chances are you will probably actually learn some new technical things by increasing scale; the reality is that we tend to focus more on the technical and less on the human side of software development which often affects increases in scale much more. In his book, Predictable Success, Les McKeown gives some wisdom about how scale affects success in an operation:

Predictable Success is defined as one of the seven stages of organizational development. It can be attained by any organization or group that acts as a human machine, well-oiled, working in concert, not without challenge, but focused and "in the zone" where growth is attainable and sustainable. It is not about size or the age of an organization. It has nothing to do with resources, culture or industry.

I particularly like his focus on the "human" factors and exclusion of the traditionally technical things we tend to focus on. While the book is targeted towards business growth and the reasons why companies tend to fail, it can be broadly applied to any group or organization (including software development orgs). Ask the following questions about the organization you're contemplating joining:

  • What stage of organizational development are they in?
  • Can I really grow the way I want to there, not just technically but also in my capacity as a human?
  • Will the scale inhibit or promote my growth?
  • What potential problems will exist at the new operating scale?

In my experience working as a consultant the only constant I've observed is that the same problems (and the same trend towards entropy) exist regardless of the scale of the company and how they use their technology.

Think hard about using scale as justification for quitting your job; chances are you haven't considered the human factors involved.

Adversity

Ruling out both scale and technology as reasons for quitting a job is great, but to be honest they aren't the most common reasons I've quit in the past. Typically that honor is reserved for a more sinister and damaging character-trait: an inability to handle adversity.

Adversity is double-edged; it shows us the best and worst of ourselves, sometimes at the same time! If I take a step back and examine times when I left jobs because things just got too challenging I truly feel like there was always an opportunity to overcome in spite of the challenging situation and emerge a stronger human. How we respond to challenges in our workplace says a lot about our character:

Calvin Builds Character Shoveling Snow

Calvin Builds Character Eating Dinner

Calvin Builds Character Being Cold (and Frugal)

Before you quit your job because it's just "too damned hard" I would encourage you to take a moment and step outside yourself; reflect on the situation and the facts -- take the emotion out of it and be objective.

If you can turn a challenging situation from a painful pity-party into an opportunity to conquer and emerge better you will be amazed at what you can come through.

Still Ready to Quit?

There are valid reasons to quit your job, but I think we tend to dwell on them far too often before considering the reasons not to. My hope for you at the end of 2016 is that as you approach the boundary and transition leading into 2017 that you would be prompted to introspect and reflect on what it is you truly want. Set some goals, list some objectives for your life and above all ask yourself some tough questions before throwing in the towel; as a wise friend of mine once said:

If the grass is greener on the other side, then you'd better water your own lawn.

If you enjoy this post, let us know by twitter or e-mail! If you'd like to discuss it, open an issue on our feedback repo!