18 June 2019

My Principles for Hiring Software Engineers

Hiring is difficult. Hiring reliable, talented software engineers is even more difficult. In fact, hiring is probably the most arduous task that managers must handle, no matter what type of business you are conducting. And, based on the topic of Marc Andreessen's famous article Why Software is Eating the World, every conceivable industry is now being dominated by companies that are adept at developing software. So, the competition for good software engineers is pretty steep right now and will remain this way for the foreseeable future.

TL;DR (too long didn't read):
  1. The candidate must have a demonstrated ability and hunger to continually learn 
  2. The candidate must be a culture fit for the environment and the people
  3. The candidate must demonstrate humility

On with the background...

Throughout my years of hiring experience that began 20+ years ago, I have learned a thing or two. I've read many articles and books about hiring in the software industry and heard many opinions on the topic. The result of my years of experience is a set of principles that I follow when hiring. But before I get to these principles, let me explain what lead me to them.

Because I'm hiring from a management standpoint, I pay attention to aspects beyond just the candidate with the best technical skills and/or qualifications. I focus on team building which encompasses a myriad of aspects far beyond just technical aptitude. For me, team building requires the consideration of many different cross-cutting aspects. Below are just a few of the skills that candidates must possess:
  • Exhibit the skills necessary for software development
  • Demonstrate the ability to constantly learn
  • Want to work as a team and collaborate closely
  • Behave like a professional 
  • Manage their own work schedule
  • Fit the culture 
  • Demonstrate empathy and humility
  • Not be an asshole
  • ...
Many of these skills can be taught and even bad habits can be broken with the right coaching, but the candidate must come through the door with some base skills intact. Let me walk through what I mean here. 

Consider trying to teach someone a complex task. First, if the complex task requires a large amount of prerequisite knowledge (like software development), then the candidate must demonstrate a certain level of technical aptitude. Let's assume they can successfully demonstrate their technical chops. Second, trying to teach someone is pointless if they are not interested in having others help them to learn or assume that they can figure it out themselves. In other words, sitting in the corner and coding away with zero communication with others is not allowed. Not only must the candidate be open to coaching and learning from others, they need to know how to learn and they must be proficient at learning. If the candidate possesses some of these base skills with the ability to learn and the willingness to be taught, then they can be brought up to speed over time. So, what I'm really looking for are some indicators of these characteristics in the candidates. These indicators are the principles that I have identified.

When I was asked some years ago to summarize these principles, I referred to them as culture-building. When building a culture, leaders must focus on the behaviors, expectations and norms that are most important for the environment and the work being done. Upon much consideration and over a long period of time, I was able to distill my hiring to the following three principles:

  1. The candidate must have a demonstrated ability and hunger to continually learn 
  2. The candidate must be a culture fit for the environment and the people
  3. The candidate must demonstrate humility
In my experience, these three principles serve as indicators for someone who might be a fit for our culture and the position on the software development team. Neither are these principles generic nor are they fool proof. You must adjust for different hiring needs. Also, we have had a few duds over the years, but our turnover rate is less than 10% which is pretty good. Such a low turnover rate is partially due to hiring well and partially due to the benefits, compensation and perks from working for a large, global company. Without these benefits, all the good hiring practices in the world won't stop your turnover rate from increasing over time. I believe that you should pay people enough that they won't go elsewhere only for more money.

These three principles serve as a litmus test for a broad set of aspects as I noted further above. Here is some explanation around these principles:

  • The candidate must have a demonstrated ability and hunger to continually learn - I have met some engineers through my career who chose to go very deep with a very narrow skill set and no interest in spending time on things outside this narrow track. Without the interest to learn new topics and, the desire to do so all the time on an on-going basis, I have watched these people never move their skill set, never stretch themselves. For some positions, this approach is necessary. But for many/most positions, given the changing landscape in technology, I have found that the best candidates are always will to make themselves uncomfortable to learn new things.
  • The candidate must be a culture fit for the environment and the people - Culture fit can mean a many different things. But, as I mentioned above, for me this term embodies the behaviors, expectations, norms, thinking, what is acceptable/unacceptable, working time, work ethic, etc. During your interviews with a candidate, I have found it to be invaluable to include folks from the team where the open position exists. Everyone should be coached to take note of both verbal and non-verbal cues from candidates. Then, assessing such cues after the interview with the entire group will oftentimes can tell a much different story. Also, the questions you ask candidates can really tell an interesting story.
  • The candidate must demonstrate humility - This one is a bit odd for some people because it delves deeper into the psychological aspects of a candidate, but it has proven to be very important over time. Anyone who has worked with people who have big egos will be able to recognize this -- the rock star developer who ignores input from others, the developer who sits in the corner coding away to his liking and everyone else be damned, the developer who has high standards for themselves but does not want to take the time coach younger or newer team members and instead chooses to chastise them, etc. When hiring for a team, you are doing team building this needs to be taken seriously. Teams of developers should operate like a team, not like a ship full of pirates. This requires the ability to empathize with teammates, to assist one another, to exhibit a compassion for others, to be respectful, to be kind and to be humble. Without these characteristics, there may be serious disagreements on a team, even if those disagreements are not vocalized.

While these principles have worked for me, they may not work for others for various reasons. In the past, I have read that people don't leave a company, they leave a manager. While this can certainly be true (I've had my fair share of bad managers), I have left numerous companies not because of my manager, but because of the culture and the processes within the company. The three principles that I have outlined above assume that your company culture and processes are helpful, useful and not problematic. If they are problematic, then as a manager you should be working toward improving them so that they are not problematic. When you the culture and/or the processes are standing in your way of good hiring, all the principles in the world will not help you.