What makes a great Software Engineer?

The one-million dollar question

photo-1507668077129-56e32842fceb.jpeg Have you ever wondered what makes a great Software Engineer? You probably have, recurrently. If you are like me, this question likely has kept you awake at night on a few occasions, endlessly browsing in forums for answers, hoping to catch a glimpse of clarification. Chances are you have also felt disoriented and lost by the array of opinions on the subject, and even a bit discouraged at times. Is this great software engineer a God or what?

I bear bad news my fellow friends, I am not here to bring the answers, I would if I could. I am a 32-year-old woman who started working professionally in Software Development 6 months ago, after 13 years of building a career in Hospitality. The idea for this article came after reading this great research that attempts to answer the very same question asked above. The lack of specificity and depth on exactly which skills are needed for a good software engineer makes it hard for us to become one and for others to recognize it in us.

Let me tell you from the get-go that switching careers has been one of the hardest things I've done in life. I knew I would have to be resilient to make it, but I had a lot of imprecise assumptions on where my difficulties would lie. At first, I thought: "Well, I suck at Math, gotta get better at Math. Gotta write Algorithms till I drop dead.", followed by: "Gotta learn the tools. Gotta learn ALL the tools.". My focus at first was solely on technical knowledge, thinking that my soft skills would be fine. After all, I was a thick-skinned person, being so experienced in dealing with difficult people, toxic workplaces, and unpredictable situations. How näive I was.

My utmost surprise was realizing that developing hard skills were the minimum, but barely enough to make me an accomplished software engineer. Taking this insight a little further, I found out that I can only take my technical competencies further if I possess certain "behavioral" traits. I don't have any cognitive problems that can limit how deep I can master a subject, I already understood that. My real learning challenges have been all related to impatience, lack of self-confidence, and when my persistence was falling short, none of which can be acquired after hours of practice in HackerRank. The funniest of all was perceiving that my emotional weaknesses "splashed" on my team members, really proving that "a chain is only as strong as its weakest link". What a bummer.

"Software Engineering is a sociotechnical field.". This sentence was said by a friend and it's likely to provoke a lot of controversies. The same idea is also reinforced in the article cited above. Great Software Engineers were described as "people that are able to mold another person’s understanding of the situation while tailoring the message to be relevant and comprehensible to the other person" among several other characteristics. If social aspects are indeed present in Software Development, we need to start thinking about it profoundly with the same energy we use when planning the technical details of it.

The style and quality of a painter's art have more to do with who he is than with the brush he uses. The same happens with software, our creative mind is the real tool, an IDE or programming language being merely workbenches. We need to stop thinking about software as a purely technical discipline and start seeing it as an activity with individual human contributors and their collaborations fueling software progress. Only then we might be a bit closer to answer what a great Software Engineer is.