Netflix CEO Reed Hastings once said that “in creative roles, the best is easily 10 times better than the average” and for sure being a software engineer is a creative role that requires problem-solving and thinking outside the box. So, what makes a great software engineer, the so-called A-Player?
Over the years we’ve spent in the industry cooperating with partners from around the world we noticed some skills, which mostly aren’t related to coding directly, and approaches that separate great software engineers from good software engineers. Clearly, we need to assume that in both these groups the level of technical expertise is top-notch. Yet being an experienced developer, familiar with all the intricacies of the tech stack is necessary but insufficient to be called a great engineer.
Based on our experience we chose 5 traits that allow having a bigger share in the value created, became a priceless “A-Player”, and described these below. Whether you’re an aspiring IT specialist seeking a direction of personal development or a business expert looking for what to verify when hiring internal/outsourced engineers reading this article is definitely worth few minutes of your time.
1/ Great software engineers are quality-oriented and value software craftsmanship.
First things firsts – for the opening quality we chose what might be considered the foundation upon which great software engineers can develop their excellence. As stated in the intro, we need to assume that great developers’ technical proficiency is top-notch, but this is more about the attitude than the skill itself. Working in accordance with software craftsmanship means creating code following all best-practices and ensuring it’s easy to understand, test, maintain, and change. It’s performing even simple tasks as well as possible and caring about all the details. Just like an experienced craftsman woodworker, who won’t build an average table, but use his skills to create one that makes him proud, a great software engineer doesn’t want to create code that “just works”, but do it in the best possible way, caring about its quality during all stages of work.
2/ Great software engineers are team players with excellent communication skills.
Although many programming tasks are a one-man job, the whole project is almost always run by a team consisting of people with different skills and backgrounds. And even though it is near to impossible to have all the team members with the same technological proficiency level, the best engineers shouldn’t focus on their awesomeness. They might be able to do their tasks at a rate of knots, but instead of rushing through the to-do list, great engineers use their expertise to accelerate the whole team’s work. That might mean for example helping those who got stuck with something or creating ways to overcome obstacles that the team is facing. This approach boosts the overall effectiveness and allows to reach the common goal much faster, instead of having your A-Player wait till the rest is done with their part.
Another critical factor in becoming a great team player is having top-notch communication skills. Even though software development often requires maximum focus, and most developers like to work with soothing music in the background or even in total silence the importance of communication skills can’t be stressed enough.
The complexity of projects nowadays is reaching an enormous level, so keeping the whole communication unambiguous and easy to comprehend for all the people involved is a critical element of ensuring work effectiveness. Throughout the whole software development lifecycle, countless points of interaction with different stakeholders happen. These people usually have different backgrounds, specializations and some of them might even have very low technological knowledge (like business representatives, or end-users whose feedback is being gathered to improve the system). That’s why great software engineers have the ability to not only use a technical language understandable for their teammates, but also can get outside this bubble, share complex technical matters in simple ways, and translate the business requirement into technological language.
But like Steve Jobs used to say, there’s one more thing. Communication is a two-way street and being proficient in sharing thoughts and ideas is not enough to add “supreme communication skills” into one’s CV. To obtain this mark one needs to master active listening, and that’s more than just letting others speak and waiting until they finish without interfering. Being a great listener means striving to understand what the others are trying to share, asking additional questions if something is unclear, and being focused even if the subject seems easy and not significant because great listeners know that the devil is in the details. What’s more, we’ve seen situations in which less experienced team members were able to detect something invisible to the rest due to having a fresh, unbiased view. That’s why great engineers never underestimate anyone and are willing to not only guide but also admit that someone’s idea is better and be guided.
3/ Great engineers feel responsible for the project, focus on the purpose, business and are ready to adapt.
Although writing the code is the essence of every programmer job, another element that divides proficient developers from great engineers is the question asked before launching a code editor and their approach to work. Even highly experienced developers with enormous technical knowledge who ask only “what” to write would never be able to create as much value as those who in addition to “what problem we are trying to solve” ask “why”. To put it directly – a great developer strives to understand the business side, knows the needs of the end-user, and considers work done only when the code goes into production and meets those needs, as opposed to a skilled programmer who focuses only on writing code based on the received tasks without considering the full picture. Visualizing the finished product, knowing what problem it’s supposed to solve, and how, allows great engineers to choose the tools respectively and plan the work. Having a broad understanding of the business context and problem at hand supports great software engineers in creating real business value and making wise evidence-based decisions. That’s crucial not only at the first project stages when the work is being planned but also through the whole software development life cycle. Understanding what you’re developing allows optimizing the work respectively, finding a golden mean between effort and result, and suggesting improvements whenever possible.
And that allows us to smoothly transfer to the second part of this paragraph – great software engineers feel responsible for the outcome and ready to adapt when that’s necessary. Since they know where “the true north” is, they keep the hand on the pulse of the progress and quality of teams’ work and take corrective actions if the project is starting to drift. At the same, they are aware that IT-world, especially when it comes to innovative start-ups, is a fast-paced environment with constant pivots. That’s why if some changes need to be implemented to either reach business goals or simply refine the product, they are willing to adapt. These changes might come from the business representatives and be related to the business environment, yet at the same time, these might be invisible for others, and that’s another moment when great engineers have a chance to shine. And that leads us to the 4th trait.
4/ Great engineers are not afraid to take the initiative and continuously improve.
Let’s now follow up on the 3rd quality and take it one step further. Since we established that great engineers feel responsible for the outcome, that leads to them being proactive. In most cases, the technological knowledge of software developers highly excels the business-representatives familiarity with this subject, or even their manager or Product Owner. That’s why if they see any loose ends in the concept, great engineers always take the initiative and bring the subject up instead of blindly following the provided requirements. These clearly include but are not limited to the technical aspects of the work.
Great software engineers might also be able to help refine system logic and see the potential for process optimization. They strive to become better and better, and always seek for fields that could be improved both when it comes to creating the code and ways of working. Great software engineers are habitual learners, with extensive experience (often gathered in multiple diverse environments) and a continuous improvement attitude which as result allow them to boost value creation and work effectiveness. Furthermore, even if their idea won’t prove to be as brilliant, the discussion it started might lead to a game-changing result. All in all – a lot to win, nothing to lose.
A great software engineer is a partner in project discussions, not only a worker who just follows assigned tasks blindly. Additionally, this engagement and initiative combined with everything we wrote earlier highly boost the chance of creating a self-organizing team. As we all know this is one of the most effective structures and it can make the team’s productivity jump through the roof. Yet that’s another story, about which you can find more under this link!
5/ Great Software Engineers are passionate about their craft.
Last but not least, a quality that may sound cliché, but definitely isn’t. Being passionate about development doesn’t mean that one will work over hours or never take a day off. That’s a slippery slope to become a burnt-out workaholic. Passionate software engineers are curious about new technologies, different and more effective ways of handling regular tasks. They aspire to get better at what they do and expand their horizons. Passion is the best motivator, that gives great engineers energy and helps them provide astonishing results. It’s a drive that allows them to become the true A-Players and makes them responsible for their work, and for the rest of the team. Clearly, passion can’t be measured in any way, yet we’re sure that if you had or would have a chance to work with a software engineer passionate about his/her craft you would surely understand what we have in mind (apart from the software of course ?). Can one become a great engineer without being passionate about it? We highly doubt it. After reaching a high level of proficiency one needs to simply love his/hers craft to truly strive for perfection and as result get to the absolute top.
Can someone become a great engineer in just a blink of an eye after reading this article? Sadly nope, just like Rome wasn’t built in a day, so becoming a great software engineer takes time and experience would be your best teacher. Yet sooner you start looking outside the technical box and try to develop both coding and soft skills rather than focusing on your technical abilities only it should be a matter of time before you’ll join the group of A-Players, and start being the contributor that surprises the rest with the ways he/she can help to reach the desired goals.
But that’s only the developer’s perspective, what about the mentioned business experts who might come here to learn how to identify the best talents from the market? You could either focus on these 5 qualities in the recruitment process (we shared our process in this text so if that’s what you want, make sure to check it out) or team up with an external partner who already invested in sourcing great engineers. Since recruiting experienced software engineers nowadays is a long and expensive process and the difficulty arises when you’re after the best of the best, choosing the second option is a more effective way. Yet whatever you select, if you would manage to include a great software engineer in your team you would undoubtedly notice the difference. And if you want to talk with one of such A-Players and ask some additional questions, use the contact form below – our experts are happy to share their knowledge and insights!
About the authorSoftware Mind
Software Mind provides companies with autonomous development teams who manage software life cycles from ideation to release and beyond. For over 20 years we’ve been enriching organizations with the talent they need to boost scalability, drive dynamic growth and bring disruptive ideas to life. Our top-notch engineering teams combine ownership with leading technologies, including cloud, AI, data science and embedded software to accelerate digital transformations and boost software delivery. A culture that embraces openness, craves more and acts with respect enables our bold and passionate people to create evolutive solutions that support scale-ups, unicorns and enterprise-level companies around the world.