The Savvy Developer’s Guide to Resilience
We live in a culture where people are becoming increasingly obsessed with fragility and victimhood. Company policies, new technologies, and politics are all potential sources of outrage. There’s no shortage of snarky social media posts and complaint pieces in the news.
Sometimes these folks are well-meaning people who are upset at legitimate unfairness, but oftentimes they are professional complainers who seek money and/or attention. They usually clamor for policies to appease their fragility.
Sometimes they succeed in enacting their favored policies, but even when they do, it’s not enough. Each attempt to nerf the world results in new things to be outraged about. It’s a never-ending cycle.
You’ve probably seen this effect in your own life. Have you ever had a coworker or friend who believes the world is out to get them or that people go out of their way to attack them? Have you ever heard someone talk about how they’ll never be successful? They don’t even attempt to move forward because of their circumstances.
Have you ever found yourself bemoaning your own situation instead of taking action?
If you want to live a meaningful life, you need to shed any notions of your own victimhood. It’s not easy, but it is necessary. You need to cultivate resilience. In the words of Marcus Aurelius, you need to: “Get busy with life’s purpose, toss aside empty hopes, get active in your own rescue.”
This post is your guide to becoming a more resilient developer. First, you will learn why cultivating resilience is important and some of the specific challenges developers face. Then you will learn several different techniques to increase your resilience. After you’re finished, you will be able to get active in your own rescue.
You can change the world or you can change yourself. Begin with the latter.
Why Resilience Matters
Before we go further, let’s step back and define resilience.
Resilience is the ability to positively adapt to difficult situations and overcome adversity. Lots of people adapt to stress negatively; the difference with resilience is that positive adaptation is key.
There’s no shortage of developers that handle stressful work situations by heading to the bar or hitting up video games. There’s nothing wrong with a drink or some gaming, but too much of either can ruin your life. Positive adaptation means that you don’t have to resort to crutches.
Resilience includes both physical and mental positive adaptation, though for developers, it’s important to primarily look at the mental side. Software development is filled with mental challenges. Most of the physical challenges of the trade are the result of not having enough physical activity.
Resilience ranges from being able to withstand personal traumas to dealing with a stressful work environment.
Resilience sounds like something you want, but why do you need it?
If you want to be successful, especially in your career, resilience is the number one trait that you need to get through life’s hurdles. This argument comes from Angela Duckworth, the psychologist behind the book Grit, who has studied many examples of success, including children, Olympic athletes, business people, and soldiers.
At the highest levels of performance, Duckworth found that grit, the ability to persist in the face of obstacles, was the only common denominator. In all of her case studies, those who had experienced the highest levels of success had to work through difficulties to get there.
Resilience outshines talent, skills, and circumstance. Resilience is at the very core of success.
Another reason we need to cultivate resilience is to deal with the challenges of our lives and careers. As developers, we have some specific challenges. Here’s a few of them:
The single idea that defines a technology career is constant change. You are constantly dealing with new technologies, new techniques, and the ever-changing marketplace, and it all happens at a breakneck pace. Plus there are shifting requirements and users that don’t always know what they want.
While this constant stream of novelty is what attracts many people to this field, having to spend long hours keeping up with new technology or rebuilding a project can wear you down.
Imposter syndrome is the feeling that you are incompetent and that someone is going to find out that you’re a fraud and kick you onto the street. It is rampant in our community.
Constant technological change, combined with lots of judgment about what it takes to be a “real developer,” can make the most experienced developer question their ability. How many “think pieces” on Medium or Hacker News have you read that make you feel inadequate about your skills? Even if you ignore those external forces, you can experience an internal crisis of confidence when you compare yourself and your work to others since most of us tend to judge ourselves harshly. Our confidence in our abilities doesn’t always scale with our skill level.
The Frustration Euphoria Cycle
The life of a developer is a constant battle with frustration. Why doesn’t this code work? Who changed this process? Why do I have to wait for five other people so I can move this ticket forward? Why is this new technology such a pain?
That frustration is punctuated with bouts of euphoria. When you manage to get all the pieces working together, it feels amazing. But bouncing back and forth between these two extremes can wear you down mentally and emotionally.
The Misunderstanding of Others
Most developers work with people who have little understanding of what we do. There are business analysts and project managers that don’t see the need for maintenance, business users who want crazy features that can’t be implemented, and managers that want you to cut corners to meet some arbitrary deadline.
If you have to constantly find ways to explain complex technological choices to people who don’t have your training and experience, it can drain you. It almost feels like a second job — doing the work, and then explaining exactly why you had to do the work the way it was done.
You may also have to deal with non-work people who don’t understand the work you do. Those people could be family or friends or random strangers on the Internet. It’s easy to get frustrated at their misperceptions.
The Developer Lifestyle
Developers are not known for fitness. While our industry is beginning to get better about health, workplaces are often cesspools of unhealthy food, airborne illnesses, and constant distraction.
Lots of developers also work long hours, either on the job or with side projects and keeping up with the latest tech. This sedentary lifestyle means lots of time sitting behind a keyboard, which puts us at risk for lifestyle diseases like metabolic syndrome and diabetes.
We can overcome these challenges by developing resilience. For developers, resilience should be a required skill like any other technical skill. From the challenges of keeping up with a constant stream of new technologies to the disagreements that arise on working on intellectually diverse teams, there are no shortage of situations where resilience will come in handy.
Spending some time developing this skill will yield major benefits to your career. The more resilient you are, the better you can deal with these challenges. The better you deal with these challenges, the more valuable you are in the workplace.
How to Cultivate Resilience as a Developer
Is resilience really something we can build?
You’ve likely heard the platitude “you can’t teach height.” So the question is, is resilience something you’re born with or something you grow up with?
The answer is definitely yes, you can build resilience. While most psychologists agree that some of our resilience is innate, anyone can become more resilient with practice.
To start, I encourage you to adopt a growth mindset. Carol Dweck, a psychology researcher from Stanford University, has found that people who believe in the ability to grow outperform people who believe their abilities are fixed. All skills benefit from the growth mindset, including resilience.
Resilience is not something that you can read about in an article on the Internet and suddenly have near infinite fortitude. It is cultivated through dedicated effort. It takes time to build up your resilience.
Here are some specific tactics for developers to cultivate different kinds of resilience. This list might be a little overwhelming; instead of trying to do everything at once, identify a few areas you can improve and start there.
Resilience is like a muscle, so practicing resilience is just like lifting weights. You build your muscles by challenging them with increasingly heavy weights. Each time you lift, you become a little stronger.
One of the easiest ways to start practicing resilience is by exposing yourself to uncomfortable situations. These situations can include physical discomfort, like a challenging hike, cold exposure, or fasting. You can also practice dealing with mental discomfort, like asking for help, learning a skill you have little natural talent for, or approaching people in social situations.
There are two reasons this action works. The first is that by practicing discomfort, you become acclimated to uncomfortable situations. If you’re constantly overcoming discomfort, you’ll get used to ignoring the feeling and moving forward. This plan pays dividends when you need to ask for a raise, negotiate features, or engage in other uncomfortable conversations.
The second reason is that as you do uncomfortable things, they eventually become easier to do. You expand the range of things that you are comfortable doing.
Be willing to ask the “dumb” questions. Initiate conversations with people. Challenge authority. Make overcoming discomfort a part of your daily life and it’ll become a minor superpower.
Maintain Proper Perspective
The way you see the world can make you more or less resilient. We are not objective viewers of our world. We come equipped with different perspectives, biases, and mental models, some of which allow us to wallow in our own fragility.
One bias is the fundamental attribution error. This type of thinking is where we attribute our successes to our abilities and our failures to circumstance (for other people, it’s the opposite). For example, if you get a promotion, it’s because you’re awesome. Meanwhile, if your coworker trashes the build, it’s because they need to be more careful. This bias enforces a victim mindset because it puts your failures outside of your control.
A more useful mental model would be realizing that successes and failures are composed of both circumstance and ability. You have control over some aspects of your life but no control over others. You don’t control the political situation, where you were born, or your inborn abilities. You do control effort and attitude. Focus on what you can control and accept what you can’t. There’s no sense in wasting energy on things you don’t control.
Another useful mental model is the probabilistic mindset. Almost everything — events, career advancement, project outcomes, new businesses, new technologies — are affected, to some degree, by chance. Even if you do everything right, you can still fail.
Occasionally you succeed by being in the right place at the right time. Sometimes the same actions in similar circumstances can result in different outcomes. One place where the role of chance is obvious is the adoption of new technologies. There’s always the person who spent a lot of time learning a technology only to have it fail (Silverlight) or missed out on the rise of something important (Mobile).
Once you realize the inherent randomness in everyday life, you can do two things about it. First, you can limit downside. Don’t put yourself in a situation where you can lose everything. The other thing you can do is to improve your odds. Learning new technologies, meeting other developers, and building side projects expose you to potential opportunities and make you better able to take on different kinds of opportunities.
Becoming aware of your intellectual limitations and adopting more useful mental models will increase your ability to deal with adversity. Clear thinking means you can better prepare for trouble.
Take Care of Yourself
Staying in the best physical and mental condition you can be in is going to allow you to take on more challenges. Make sure to get enough sleep, eat well, and maintain your body.
Beyond basic personal care, there are two specific self-care practices that will help you become more resilient. The first is exercise.
In addition to the obvious improvement to your physical health, exercise is an excellent stress reliever. When you find yourself in a stressful situation, go for a walk or lift some weights. Exercise has been shown to reduce anxiety and depression. Exercise also encourages the creation of new brain cells.
Cardio, mobility, and resistance training all have specific benefits, but the best exercise is the exercise you are willing to do.
The second practice that will help you become more resilient is meditation. There are several different kinds of meditation, but simple mindfulness meditation is enough. Meditation teaches you to disconnect your random thoughts from your actions. It’s been shown to have a variety of positive effects including reduction of anxiety, increasing immune function, and an increase in emotional regulation.
Another benefit of meditation is that it increases your ability to focus. Development requires extreme amounts of focus, and it’s easy to get distracted. Meditation helps you let go of distracting thoughts and return you to your train of thought.
Cultivate Social Connections
Another way to cultivate resilience is to build and nurture social connections. We (humans) are social creatures. Even the most introverted developer still needs a social network. We rely on our social network to provide us with support in difficult situations.
You want to build two types of social connections. The first is a support network. Your support network will be composed of family and close friends. These are the people you can turn to if you need some help. Spend time nurturing these social connections.
The second type of social connection is finding a group of peers who exemplify grit. We adjust our norms to the groups we’re in. If you can find a gritty bunch of people to hang out with, either in your profession or through a hobby, you’ll become more resilient. The easiest way to meet like-minded people is to find a meetup or activity that tends to attract resilient people, like martial arts.
While these activities are not directly related to your career, you can take this resilience back to your job. Additionally, if your activity is physical, you’ll counter the physical activity that developers have to deal with.
Additionally, when selecting an employer, pay attention to company culture. You want to work with people who exemplify resilience. You are a product of the people you spend your time with, and you spend a lot of time with your coworkers.
Find Paragons of Resilience
Find stories of people who have overcome difficult situations. By learning about people who’ve overcome adversity, we learn that we are equally capable of overcoming our own problems.
This idea sounds fluffy but it’s based on solid psychological evidence. Albert Bandura, one of the most prominent authorities on resilience, states that vicarious experiences, e.g., stories about people overcoming adversity, is a strong source of resilience.
To find stories of people overcoming difficulty, look to history. Almost all major historical figures have overcome serious difficulties in their lives.
A great book for this purpose is The Obstacle is the Way, by Ryan Holiday. He uses contemporary historical examples to highlight Stoic principles. It has lots of riveting stories about people who’ve overcome adversity.
Another fun book about developers overcoming adversity is Masters of Doom, which is about Id Software, the people behind the video games Doom and Quake.
Seek Purpose and Find Your “Why”
Friedrich Nietzsche once said that “If you know your why, you can live any how.” Connecting your actions with your core purpose can help you survive adversity. Having a core purpose allows you to focus on that instead of whatever pain you happen to be feeling at the time.
In Grit, purpose is considered one of the core pillars of resilience. Nearly everyone who has persevered in the face of adversity has some core purpose driving their actions. Usually, it’s a purpose that’s outside of themselves, like family, human progress, or serving their community.
It’s no different in the developer world. For many developers, their main career purpose is supporting their family. This is a good purpose but there are easier ways to make money. There’s probably more to why you ended up on this career path.
Perhaps you were enamored with the empowerment that technology gives you or how much of a positive world impact you can have with software. For me, a big part of why I’m in this field is that technology is one of the best ways to create a prosperous world.
We could spend many pages on different ways to find your why, but I’ll mention two techniques. The first comes from the book Find Your Why by Simon Sinek. This process begins with finding stories from your life that have a high emotional resonance. These can be childhood experiences or more recent events.
After listing out 10 or more stories, start looking for common threads. Once you find your themes, pick the one that resonates with you the most. Then draft a why statement based on that theme. A common format is: “To <contribution> so that <impact on others>.” For example, Simon Sinek’s why is “To inspire people to do the things that inspire them so that, together, we can change our world.”
The second method for finding purpose is to create a goals hierarchy. Most of us have different goals in our lives. List out these goals and start asking “why.” Keep asking why until you run out of reasons. What you end up with is a top-level goal or “ultimate concern.” Ideally, you end up with a goal hierarchy with a small number of top-level goals that reach down into a large number of smaller goals.
I did both of these exercises, and the first one is better for finding a specific purpose, though that purpose is somewhat nebulous. The goals hierarchy was tough for me because I’m interested in a lot of different things, some of which have little relation. Digging back to a core purpose from lots of disparate goals is tough to do. I did learn some things that drive what I do, so it was a useful exercise. Try both exercises and figure out which one gives you a more useful result.
Empower Yourself by Gaining Resilience
Resilience is the ability to positively adapt to adversity. You could use crutches like recreational drugs or alcohol to cope, but that’s not going to help you in the long run.
Resilience is a core developer skill because it’s needed for a successful career. No great success exists without persistence in the face of adversity. Now that you’ve learned about several different ways to cultivate resilience, including practicing difficulty, maintaining perspective, self-care, cultivating social connections, finding role models, and connecting to your core purpose, it’s time to put these ideas into practice.
There’s a lot of material here, but the best way to get started is to pick 1-3 tactics from this post and commit to doing them. Write them down on your to-do list, put them into your calendar, and write them on your bathroom mirror. Commit to at least one of these tactics until it becomes a habit (about three weeks). Then come back and pick another tactic.
Remember, you can change the world or you can change yourself. Begin with yourself.