Thinking “Right” to become a better Software Engineer

Code
The room was silent as I asked the question to the audience:
“How many of you are Software Engineers?”
Shyly, hands started to rise. One here, another there. I offered encouragement by raising my own hand to signal it was okay to answer. More than half of the attendees were Software Engineers. So they were there for a reason: they wanted to know how they could be better Software Engineers, and that was the premise of my talk that night.
How could Software Engineers become better?
How would their brains help them get there? It seemed pretty obvious to me, but I knew I was shooting for the off-beaten track.
The next question would make people shake in their seats:
“What makes a good Software Engineer?”
This time I was not so lucky. The room stood silent. But that was right. It was a rhetorical question. Nevertheless, the effect was expected: people started to sway, showing some discomfort. They wanted to manifest. All of them had their own opinion regarding what made a good Software Engineer. I gave a little help:
“Code.”
“That’s what everybody is thinking, right?”
“A good Software Engineer writes good code.”
Some of them nodded in agreement. Some stood silent. All of them waited for more. I obliged:
“A good Software Engineer writes good code. No doubt about it. But there’s more to it.”
I started to list other traits of “good” Software Engineers.
They know by heart and follow the best practices of their technology stacks and programming languages. For sure they read GoF’s “Design Patterns” or other similar work and apply the patterns and idioms correctly in their programming. They are mindful of their solution’s architectures making sure it is organized, scalable and flexible enough to accommodate changes. They provide good coverage by writing tests of various types — unit, component, and integration — to guarantee that their code responds to business needs, is correct, deals with edge-cases and does not introduce regressions or new unexpected behaviors. Good Software Engineers use decoupling to separate concerns and isolate software layers to allow parallel evolution and code maintainability. They care about the performance of their code so they choose the best-suited algorithms for the problems they’re solving. Long gone are the days when programmers wrote code in a text editor, saved the changes and then switched to another shell and issued a command to build the executable before running the application to check if the code did what they expected.
Today Software Engineers have complex IDEs and toolchains that streamline the development process and have many, many features, some of them obscure. It takes a lot to know how to handle this. Part of Software Developers routines resemble a lot the procedures that airline pilots use to fly their planes: there are many buttons to push and lots of things going on in the back. So it is no surprise that good Software Engineers have bothered to memorize all the keyboard shortcuts of their IDEs and are knowledgeable of every bit and piece of their toolchains. Even the more obscure ones. There are many other traits that are not mentioned above and that probably belong in the list.
Today there’s much more than just code and it takes much more than just a “mere” decent code to be a good Software Engineer.
The state of the art
Among the many attributes stated above, there is a pattern: everything is technical stuff.
It is no surprise that there is a pattern, but the important thing to say is that nowadays it is assumed that Software Engineers know and are proficient with all that stuff. Companies want to hire the best of the best. So, they expect Software Engineers to know and practice all of the above. Recruiters ask about many of those things in screening interviews. Technical interviewers crush on those points with candidates. Some go to the extreme of doing long whiteboard exercises that focus on algorithms unheard of that are never used in the company. Job applicants decorate their CVs and LinkedIn profiles with many (all?) of those references, in one form or another, in the hope of captivating attention and securing a place in a “good” company. After all, they are “good” Software Engineers so they deserve to work in a “good” company.
This pattern, of having all those competencies, is the trend. Technical proficiency is the new black.
Being a “good” Software Engineer is the state of the art.
So we need to do better. And that brings the question:
“How can you turn into a better Software Engineer?”
Engineering = Brain
Engineering is all about the brain.
Engineering is concerned with designing and constructing things. There’s an intense conceptual focus in bringing something to life. It starts with an idea — in the brain. The idea gets worked and evolves. It gets adapted to conform to constraints and limitations or is expanded to become more encompassing. It is still an idea. It hasn’t left the brain’s realm yet. Once we’re comfortable with the conceptualization we move to the assembly phase. And even here there’s a constant back and forth between the interior of our brain and the external physical world. The building process needs to be tweaked and adjusted and we’re still pretty much in brain land.
‘’Going back to the vast list of the ’good‘ Software Engineer traits, the ’all technical stuff‘, we see that is all ’left‘ side of the brain.’’
As I said this, the entire audience seemed confused, probably asking themselves what were they doing there.
I had to continue.
The “dark” side of… The Brain
We talk about the brain but actually there are two brains with very different domains and functions. Of course, it is only one piece but the longitudinal fissure, the line that divides the brain into two halves, and that is so visible and so characteristic, hints us that there’s some separation. The brain functions, as a whole, from the contributions of the two parts but each one deals with clear and separate responsibilities.
At this moment I paused my presentation, projected an image similar to the following and gave some time to the audience so it could sink in on their brains.

As half of the room were Software Engineers I decided to start with the left side. The left side of the brain is all about logic and control. It’s where our reason lives and where we do the analysis and the decisions. Numbers, precise concepts and strategies for problem-solving inhabit this geometric space of black-and-white. It is the home of science.
The right side is where the fun is. The colorful flame of love, the warmth of passion, the obsession of desire dance hand-in-hand to the sound of music on this side of the brain. There’s a lot of freedom and from freedom stems creativity. Emotions, sensations and other intangible realities are felt here.
In short, the right side of the brain deals with unstructured substance and the left side handles structured matters.

Interestingly, the structured matters that the left side of the brain deals with pertaining to Engineering as this is constructing things. Given this mnemonic and facts we established before regarding the left side of the brain it is unsurprising that exercising the left side of the brain is more natural to Engineers.
As a matter of fact, aspiring Engineers train the left side of their brain since their early school days. Once they start to work it gets even more exercised and perhaps even overdeveloped.
Returning to the original question (how can we become better Software Engineers), the answer is now obvious: Develop and use the right side of the brain!
In other words, we have to bridge the gap.

Welcome to the “right” side
Engineers are more at ease with the left side of the brain but they must develop their right side, which is harder for them. There’s a paradox emerging here, so the tendency is to put this idea away and stick to the left side… Which will widen the gap.
How can we then develop the right side of our brain? More importantly, how can we use what we already have to help?
The brain is what we have. It is part of our genetic inheritance. It’s part of our nature. We can’t swap it for another, a “better” one. But we can certainly make it better. We can choose how to use it and how to improve it.
Let’s see what goes inside the right side of the brain.
Emotional Intelligence
In a very simplistic approach, emotional intelligence is having the awareness and control over our own emotions and the emotions of others.
Emotional intelligence is important because we need to relate to others. Relationships are precious sources of joy and fulfillment and have a very utilitarian motivation: the links we establish with others help us thrive. As the saying goes: “If you want to go fast, go alone. If you want to go further go with someone else”. Humans are emotional beings and relationships are states of connectedness. It is no surprise that sometimes these emotional links give a spark or infuse tension. To be able to go farther — that is to keep the relationship — we need to be aware of how emotions run and to rein them back so emotions don’t run wild. Needless to say, that being in a relationship means a certain degree of responsibility, so sometimes when feelings go astray on the other side, we need to keep our cool so that the whole house doesn’t come down.
Vulnerability
Vulnerability is a tough concept. To be vulnerable is to be exposed, is to be open, to be at risk of being harmed. This contradicts our self-protective nature. We are wired to survive, to stand, to fight, to be in a state of alert and to repel danger and minimize risk. We are creatures of fear. We fear so we can preserve ourselves. Fear gets us away from danger. It protects us from damage. We defend ourselves. We raise walls. We fortify under armors. We take cover under shields.
Vulnerability is the opposite: it is assuming we’re safe enough not to be concerned with the risk of being hurt. It is OK not to use emotional armor all the time. Vulnerability is to be open, to give ourselves and to create the space for the others to open themselves so we can receive what they have to give us. In essence, to be vulnerable is to trust.
The establishment of the trust is exactly the need we have for vulnerability. We need to believe and have confidence in others so that we can rely on them. We need to open up for them so they can open for us in return. We need to give so that we can receive. Not surprisingly, trust is also the base of human relationships. No real relationship can thrive without trust.
Sympathy
Supporting and encouraging others requires that we understand them. Understanding is a broad concept that will touch some of the traits of a “Right-side” Engineer. As far as sympathy is concerned, the kind of understanding we are talking about is at the intellectual level. In order to be nice to someone — to support them and offer encouragement — we need to understand them in our minds. We need to be able to apprehend them intellectually, in rational and conceptual terms.
People need to be understood. There are several different types of understanding that need to be in place for us to say “I feel understood, I feel you can comprehend me”. One of them is mental alignment. This is what happens when we are able to sympathize with someone.
Empathy
The main focus of this article is the idea that the mind only is not enough. We can look further in terms of understanding. When we are able to extend understanding beyond the mind, to our heart, when we are able to feel what the other person is feeling, when we connect emotionally with somebody’s pain, we are empathizing.
One of my favorite ways to explain empathy is to use the idea of “putting yourself in another person’s shoes”. We may use this expression so routinely that we forget its literal meaning. Imagine that you need to put on the boots of somebody that wears three sizes below yours. How does it feel? It’s hard to put the boots on, right? They don’t come in easily. You have to pull. You have to twist your foot. You wring your face because it feels uncomfortable. Finally, you make it. It’s in! But… Aw… It hurts. You feel your foot restricted by the walls of the boot. It doesn’t feel that great. It’s awkward. There you are in the middle of your suffering and suddenly comes the idea that eventually you will have to take your foot out. The same process in reverse. This is the idea. If you made the exercise, then you have the notion of what it means “to be in another person’s shoes”.
To be able to do this for someone else is what empathy is about. Empathy is needed for people to become connected with one another and for people to offer help to one another. It’s much easier to help somebody when we feel what they are feeling. And when we help we become connected to the other person. Chances are that the other person will also become connected to us and we open an intense and reciprocal cycle: the other will want to help us back in return, now or in the future.
Compassion
When we feel compassion, we are concerned with other’s pain, suffering, and misfortune. We care. And we try to relieve the other person. We try to ease the burden, to free somebody from their oppression, to stop their distress.
Compassion is very much needed when people make mistakes. Everybody does. When we make mistakes, we feel bad. Sometimes we feel terrible. We feel terrible about our mistake, we feel awful with ourselves, we feel ashamed in front of others. We know we need to stop feeling this bad but we can’t help it.
Enter compassion. Somebody comes and tells us something good that magically stops us from feeling awkward. Somebody comes and does something that makes us think about other things. Somebody comes and offers us some form of relief. And it works. We feel better.
Pardon the interruption: three of a perfect pair
As we have seen before, Engineers, predominantly use the left side of their brain and we have been discussing many traits associated with the right side of the brain. Emotions, we know, are not the preferred terrain of many Engineers. To be perfectly coherent with our “right side of the brain” we need to accept this and open the possibility that sympathy, empathy, and compassion are confusing matters for us. After all, we are not Dalai Lamas nor beings of Light and Perfection.
Let’s then put some structure on such ethereal concepts. As we said before, we will leverage the left side of the brain and the structure is on the left side of the brain.
Putting it simply:
- Sympathy is all about understanding so it happens in the mind
- Empathy is all about feeling so it happens in the heart
- Compassion is about offering help and relief so it’s about actions we do to others to make them feel better
An image is worth a thousand words:

With this clarification in place, we can now resume our “right side of the brain” tour. Pardon the interruption.
Holistic View
The next concept we will focus on is the holistic view. In its essence, a holistic view is our ability to see the “big picture”. Humans need perspective and meaning. Humans need to know there’s more than just what is front of them. They need to relate each piece with something bigger and broader. They need the immediate to connect with the distance. This gives a sense, purpose, and intent. It opens space for the existence of a message, of signification, of an interpretation.
Being able to relate to something, ultimately, provides motivation and drive. The fuel to the fire.
Creativity
I like to say that creativity is the ability to see the world in different ways. Of course, this is simplistic and take on such a broad topic is certainly a very conceptualistic (mental? “left side of the brain”?) approach. The dimensions lacking in my working definition are the inventive — the new and original — and the material — bringing something to existence. Even being simplistic is still a good working definition and it certainly can fit well with the “right-side” approach.
Creativity is an extraordinary instrument in our toolbox. It is obviously very handy when it comes to problem-solving or when we need to express something out of the ordinary. In a personal way, creativity is important as it is a means for us to build visions, novel ways of looking at things or at ourselves. As humans we need to self-update, to become what we are not yet, to grow beyond what we are. The way to do this is by creating a vision of ourselves, of our world, of the world, of something else we are involved with. To do this you need to see the world in a different way. You need to have your creativity well developed.
Intuition
“I admit it” — I said to the audience — “This one is my personal favorite.”
Maybe that’s why I left it to the end.
“Intuition: the ability to understand the world with reasoning.”
As I said that I understood how “right-side-biased” I was being. Intuition is when you take thinking, logic and reason from the world and it still makes sense.
“Maybe this one is the most difficult one to attain, as our profession’s intense usage of the rational mind conditions us to look for rationality in everything”.
The faces in the room stared back at me. Either I was nailing it, or I was totally off. My intuition told me it was the former one, my vulnerability pushed me to the later one.
“Gut feeling” — I offered, trying not to lose the audience.
“You need gut feeling because not all decisions are rational. If you are a leader you know this one is true. If you are not a leader, just ask any leader that you know.” — I felt I was getting more and more in quicksand as I dared to advance in my dabbling.
The proverbial light bulb went on over my head. These people are Engineers. More than half were Software Engineers so I chose to speak in a way that spoke to their hearts and minds.
“You know, some of you love to use Vi to write your code. Some others think Emacs is far superior. Even though both sides can offer many apparently rational reasons for using one of the other we know if we choose to be intellectually honest with one another, that all those reasons can probably be counter-argued with equally valid opposed reasons. So, at the end of the day using one or the other is a choice that comes from the gut. It’s our intuition that tells us which one is the right one for us.”
The room started to respond. My intuition had served me well by providing me with the example of the favorite text editor. Relieved, I decided to do a quick summary of the point.
“So, since many of our decisions stray from the realm of reasoning and rationality we will be better equipped to do them well if we have a well-developed intuition.”
Welcome to the (emotional) Matrix
In retrospect from my speech, I found out that I had covered a lot of emotional ground and that a summary would enhance the written version of the presentation. To close that gap here’s a recap of all the “right side of the brain” traits we covered:

Teamwork: the hidden level
As a xenial, I am said to belong to a micro-generation that had analogical infancy and digital adulthood. This being true, I also had the fortune of living through the third generation of computer games. In that remote but addictive past, I immersed myself in computer games. I played and played to beat the bosses in many rounds and jumped the obstacles to assemble pieces of some artifacts that were spread through many different levels. The best part was undoubtedly when, on some games, I could find a hidden level. Some nice programmers had concealed a secret extension of the map that would proportionate some more moments of happiness. I will borrow this concept of the hidden level or the bonus stage as it was also called in some games, to discuss a very important matter that arises out of some of this “right side of brain” dimensions: teamwork.
We said above that sympathy is when we understand others intellectually, that empathy is when we feel what they feel and that compassion is related to what we do to help and relieve them. If this makes sense, we can say that teamwork arises naturally out of sympathy, empathy, and compassion. How? Very simply. Teamwork happens when people understand, feel and help each other.
A good team can relate on a mental level — people understand each other intellectually and the practices they use as a group accomplishing a task. In a good team, members feel each other — they know when someone is not feeling well, when somebody doesn’t feel comfortable, and when one of the members is confused. In a good team, people help and support each other. They cover the backs of one another. They give to others. And they know that others will be there for them as well.
So, when we, and the people we work with, get sympathy, empathy, and compassion, the team will work better together.
Tales of a Happy Engineer
“So, we’re getting near the end.” The room wiggled as I said that “our original question was how could we become better Software Engineers.
I looked around to check how many still remembered and continued:
“The thesis is simple: we need to overcome our natural tendency as Engineers to fall too much back on our left-side of the brain. Analysis and reasons are great. But there’s a whole world to grasp on the other side: a varied world of emotions and feelings. We have them as Humans and we need to learn to relate with that side. After all, as much as we may want to believe that our world as Engineers is a conceptual one, that everything happens inside our mind and our computers, the truth is that it is much more vast than that. It’s a world of interactions, of relations with others, a world outside ourselves that we will take a lifetime to master. But that should not discourage us. We should feel confident because we are equipped with all the tools we need. We just need to make a conscious effort to be more aware of and to use what we’ve got. That is the road to becoming a better — and happier — Software Engineer”.
I vaguely remember some applause, as I babbled a few “thank yous”. Deep inside I was just hoping that my presentation would put at least one of those persons on the road to become a better Software Engineer. If that would be the case, it would have made my day.