The Proactive Software Developer
I recently wrote about lessons I’ve learned from my personal burnout, and touched on the topic of being proactive, and how this is helping me move forward. My attitude towards being proactive is greatly inspired by Steven Covey’s first habit: “Be Proactive”. I want to explore what’s involved in having a proactive mindset as a software developer and why I believe it’s something every developer should strive for.
We can’t talk about being proactive without first talking about its opposite ugly brother; being reactive.
Reactive — acting in response to a situation rather than creating or controlling it.
In other words, reactive people allow external events or factors to dictate their reactions in their lives. Strong emotional reactions are common in reactive people, as they allow themselves to be defined by other peoples actions.
It’s easy to fall into the reactive mindset when certain conditions are right, especially when we are tired or our mind is preoccupied with something else.
Having a reactive mindset over a long period of time can push you into a state of loss or need, which over time can develop into desperation, blame and even depression. This can arise after many years of exhaustion or constant financial or emotional issues.
Examples of being reactive: “I have to attend that boring retrospective again. It’s such a waste of time.” or “If only I made more money, I’d be happy”.
These examples clearly show external forces leading to reactive emotions. Firstly “frustration” because the meeting is “forced” and they see no value. Secondly “desperation” because the money situation is assigning their happiness to having more money.
The choice of Proactivity
Proactivity is all about taking responsibility of your life. Where you take responsibility for your actions and reactions. We can’t always change what happen to us, but we can decide how we choose to react. Only you are responsible for how you react to any given situation.
Proactive — creating or controlling a situation rather than just responding to it after it has happened.
So, the definition also supports this. But what does it mean to take responsibility and choose your reaction?
Although we care about a great many things, which may reside in our Circle of Concern, it’s only when focusing on matters that are within our Circle of Influence, we can truly be proactive. Meaning looking at and caring about things that can be done something about.
So proactivity is a choice.
The Proactive Developer…
As with other parts of life, being proactive relates very well to the field of software development. Here are some important aspects of what a proactive developer does.
1. …is present
Much of becoming proactive is about listening to your feelings and reactions to external events, and choosing a reaction. Being mindful about yourself throughout the day is a key skill here. The first step is noticing and acknowledging the feelings and reactions you are having before expecting to be able to change your reactions.
Be very clear on what your personal values are and how these relates to your work, colleagues and employment.
“How are you starting to feel when reading another developers code-review of your code where it has been slaughtered as not-fit-for-production?”
“Why are you growing frustrated / angry / sad when speaking to … about …?”
2. …speaks in proactive terms
How we phrase ourselves is crucial to how we think, and is also equally obvious for the next person to understand where you are.
A reactive person will begin sentences with: I can’t, I have to, if only.
A proactive person will begin sentences with: I can, I will, I prefer, I choose.
3. …seeks opportunities, not limitations
There will often be limitations at your current employment where things aren’t how you’d prefer them to be. Nor are they going to change any time soon. A reactive person would fall victim to this and accept defeat since that they can’t change anything. Meaning they are focusing on their Circle of Concern.
A proactive developer, on the other hand, will focus on their Circle of Influence, and concentrate on what they they can change or focus on.
By continuously focusing on your immediate Circle of Influence, you will not only find that you are able to get work done, but you will also realize that said Circle of Influence will expand.
4. …learns from mistakes
We will make mistakes in our jobs. The key is to not let ourselves be defined by the mistakes we make, but rather the learnings we do and be willing to accept feedback, even if it isn’t good. It will be a great learning opportunity.
5. …sets themselves up to succeed
A proactive developer takes steps to set themselves up to succeed, by having focused goals and creating habits that aid them along the way.
Part of this is being a great team player. Thinking win-win and looking for synergies.
6. …improves themselves
A crucial part of being a proactive developer is taking active measures to keep yourself up-to-date on the technologies that mean the most to you, work-wise or hobby-wise.
A reactive developer would most likely seek to improve others, whereas a proactive developer will seek ways to be the change they want to from others, and thus leading by example.
7. …is aware of their context
Focusing on your Circle of Influence will allow you to do the things that give you most value and that you can actually change, but you need to be aware of the context you are in.
If you are only focusing on yourself without realizing the needs and expectations of your team / department / project then you may just end up focusing on the wrong things.
By starting with the context it’s easier to make every day decisions and show how tou are proactively considering the bigger picture.
Following are a few examples to give you an idea of how reactive vs proactive mindsets of a software developer may differ.
When working in a software team, you often need tasks or stories to work on. How do you go about selecting tasks?
- [reactive]: Wait until something has been assigned to you by team lead / scrum master.
- [proactive]: Actively seek out next most important task from the backlog?
You’re stuck on something, and are dependent on another team member that isn’t available. Whato do you do now?
- [reactive]: Go check Facebook.
- [proactive]: Write down where I am and what I need from said team member and send it to them so that we both have a log to come back to. I can then move on to something else.
You cannot agree on a solution to a problem. You’re feeling you are getting agitated. What now?
- [reactive]: Agitation bubbles over into anger and an argument starts.
- [proactive]: Stop talking, listen to what the other person is attempting to solve and acknowledge this. It’s only then you can make your point afterwards.
I need to make a change to this method. I can either add another if-statement or spend some time to refactor.
- [reactive]: Adds the if, moves along.
- [proactive]: Spends the extra needed time to refactor. Knowing that this will aid themselves and their team in the future.
Knowing that having a proactive mindset is a conscious choice is a blessing. It means that we can choose to stop having knee-jerk reactions and roller-coaster feelings. It means that we can take small steps to improve ourselves, and thus also improve those that surround us.
I have found great pleasure and challenges in knowing of this choice, and take small steps every day to shift into a proactive mindset.
What are your experiences of having a more proactive approach to software development?
Please feel free to reach out to me directly if you have any thoughts, questions or criticisms. Or leave a comment.