We see a lot of emphasis being put on the technical acumen of candidates when interviewing them for software engineering roles. A lot of times we see that the bar for hiring a particular candidate is set at if the candidate can write good quality code for complex coding problems on leetcode.com. Though hiring candidates with strong technical backgrounds is the most desirable part of the interview process, it is also essential that we hire candidates who will be able to seamlessly integrate into the larger team, move the product forward and contribute positively to team culture. What are the qualities that we should look for when we are hiring? Let's look at five such qualities that help us distinguish great candidates from others.
A listening mindset
In a team setting, it is paramount that people collaborate on projects and make informed decisions before proceeding to the next stages of development of their features. Collaboration requires coordinating with multiple team members on design and architecture. The candidate should have an open mindset on the feedback received from other team members on his/her intended design or architecture. A listening mindset fosters deliberation about why the initial design or architecture has flaws, how it could be improved and who are the different people that one could collaborate with to improve the suggested design. Candidates who don't make an effort to involve large team's opinion to build their features, design and deliver features that are harder to extend or provide limited utility. Also, this doesn't foster a good culture within the team as some other people in the team may feel excluded by this behavior.
Believes in disseminating knowledge/skills
This is another excellent characteristic to have in a candidate. Mastering skills in software engineering could be fairly easy for good candidates. But is the perspective candidate good at educating the team with that skill that he/she picked up so easily? There are times when people are not overtly open to sharing details about their projects or how some legacy system works which eventually creates knowledge silos. Creating such knowledge silos within your team could have various negative repercussions like developing duplicate codebases, higher onboarding effort for new hires and difficulty maintaining and scaling projects. A candidate who can share skills and knowledge through various ways like hosting brown bags about their project or just being approachable to their team members when enquired about their project help remedy the problems introduced by knowledge silos.
Learning continuously
There is a famous quote by Mahatma Gandhi
Live as if you were to die tomorrow. Learn as if you were to live forever.
Learning continuously as a software engineer is necessary in the technology industry as the various technologies change fairly quickly in today's world. If as a technology worker, you don't learn emerging technologies in your domain then your technical skills may become obsolete over time. Candidates who prioritize learning new technological changes or improving their existing skills are a great catch in today's rapidly changing world of technology. Such candidates also set an excellent example for other members of the team to be in a constant cycle to learn new skills and improve their existing ones.
Not hesitant to do the dirty work
All software engineers like to work on developing the newest features in their product which involves exposure to cutting-edge technology. If given a choice between on working some new feature and maintaining an existing code base or making incremental changes to it, most of the software engineers would choose the option of working on some new project. However, maintenance of existing software products is critical for running that part of the business which brings in the actual revenue. Candidates who understand this rhythm of the business, who are ready to do the dirty work of code maintenance and who are proactive when they are on-call are much more valuable than the candidates who want to work on the newest features and think maintenance work is burdensome.
Take the team forward through hidden leadership
Candidates who can push your team forward to improve the product or make some processes more efficient are very desirable. Such candidates can make small incremental changes to the dynamics of a team in a positive way which can improve the efficiency of your team and increase the cohesion among the team members. These candidates could make small improvements like improving the on-call experience for engineers, establishing good product backlog hygiene, making the gated tests run faster or less flaky, improving the code coverage of some code base, improving the run time/memory utilization of certain processes in your software system or encouraging introvert folks on your team to participate in important meetings. These small improvements or hidden leadership can help your team function better and focus on actual problems in your product. If these small improvements could be driven by individual software engineers rather than from the top management, then such individuals are a real asset to your organization.