The Three Key Traits of Great Software Engineers
Where we look at common aspects of great people and bust some outdated myths
What makes a great software engineer? It is a question I get asked a lot, both from hiring managers and fresh computer science graduates looking to take the first step into a successful engineering career, perhaps in a job interview or more commonly during career fairs.
I worked with some great engineers throughout my professional life, whom I greatly respect and still look up to today. Some were my colleagues, other were managed by me, but all displayed a set of common traits that made them rise above the rest of the pack.
Let’s look at what these great engineers had in common.
First of all, let’s dispel a myth. You don’t have to be a genius to be a great software engineer. In fact, the “geniuses” you most often come across in software engineering teams are not true geniuses, which are extremely rare to come by, but rather self-idolizing narcissists with an inflated sense of their own abilities.
Being a great software engineer is something that can be developed over time through constant practice and dedication, not unlike becoming a professional musician or a skilled craftsman.
Through this practice, great software engineers develop a number of traits which are more or less specific to their field of specialization. We will consider three of these traits, which I consider core to define greatness across all of software engineering: problem solving skills, passion and teamwork.
Problem Solving Skills
The top key trait for an engineer is the ability to solve problems. The better your solution to a problem, the better an engineer you are.
Problem solving has little to do with being super smart or super intelligent. At its most basic level, it means being able to break down a problem and select the best software development patterns and algorithms to solve it. This is a classic example of analytical thinking which leads to a valid solution, albeit not necessarily a great one.
“Not all valid solutions are great”
For a solution to be great, it needs to be simple, elegant and easily understood by other developers.
Therefore, we can say that great developers find simple solutions to complex problems.
To achieve this, they rely on lateral thinking on top of analytical acumen, so that existing patterns are applied in unusual ways, or modified and adapted to better fit the problem currently at hand.
However, a great engineer never reinvents the wheel, and so is very cautious to propose a radically novel solution to a problem without doing extensive research on prior existing techniques.
To hone this skill, you can review other people’s code and see how common software engineering patterns have been applied to creatively solve problems. The open source community is full of complex projects that you can analyze for this purpose, such as Firefox, the Android Open Source Project and OpenCV to name a few.
Passion is what will keep you going when things get tough, and push you to improve every day.
It could be passion for making apps, for technology in general or for a specific area of software engineering like database design. It does not matter what your passion is, as long as it is connected to the engineering field you want to pursue.
“Passion is transparent”
Your passion will show through the specs that you write and the code you commit, so there is no point in faking a passionate attitude when you are disinterested, especially during job interviews.
Once on the job, your managers will likely do their best to motivate you, but if passion is lacking you will never perform like a great engineer.
Passion’s best friend is called curiosity. You should not be afraid to explore different interests and expand your horizons, both within software engineering and outside it. Through curiosity and exploration of different topics, you might find a passion for something you have not considered in the past.
In my case, for instance, although I knew I liked computers and coding from an early age, I did not develop a passion for mobile app development until the iPhone and Android came along and revolutionized the idea of software on portable devices. I had looked at Symbian and Windows Mobile prior to that, but the end results failed to spark my interest at the time.
Even if you don’t acquire a new passion, the new experience you gathered looking at something new should help you improve your lateral thinking skills, and by consequence your problem solving skills as we saw in the previous section.
Life is fluid and ever changing, and so is technology. Keeping an open and curious mind will allow you to stay abreast of the latest trends in software engineering and remain a great engineer over time.
The ability to work in a team is often overlooked when talking about good software engineering, partly thanks to ridiculous job titles (and related adverts) such as “Rockstar Engineer” and “Coding Ninja” that seem to focus on personal excellence above everything else. However, teamwork is one of the key differentiators between average and great engineers.
Your ability to collaborate well in a team not only produces benefits for the people around you as they grow from your knowledge, but also allows you to get exposed to different ways of solving problems and different passions and interests, further expanding your own skill set and abilities.
“Great engineers attract great engineers”
A common thought has it that teams tend to self-select, A-teams attracting A-players and B-teams attracting B-players. If an A-player ends up in a B-team, they will most likely leave. If a B-player ends up in an A-team, they can either up their game and become A-players themselves, or sink and leave.
A great engineer goes against this philosophy. They are an A-player who does their best to raise the quality of the people around them so that their team becomes and stays an A-team. Everybody’s ability is different, but the great engineer strives to get the most out of themselves and their teammates, and help the latter become great engineers.
Good teamwork can be cultivated in a number of different ways, not just at work. For instance, it can be developed through online collaboration on open-source projects or in real life through hackathons and similar coding events. Both are also excellent ways to build and maintain connections in the community and find out early about potential opportunities for further career growth.
In closing, greatness in software engineering is not purely based on technical ability. There are also emotional and interpersonal components that come into play to help this technical ability to grow and to be applied effectively.
“Believe in yourself”
A great engineer is not born out of nowhere. They have gotten there through a process of self development and constant improvement, day by day. If you want to be a great engineer, and you persist in your practice, you will get there sooner or later. Just keep going, learn from both successes and failures, and you will most certainly make it.
I hope you enjoyed this article and found it useful. Do you have any tips to share to help engineers develop their skill set and achieve greatness? Please share them in the comments section below so that we can continue the conversation.
Meanwhile, good luck on your journey and keep on making good things!