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 probably remain this way for the foreseeable future.

TL;DR (too long didn't read):
  1. The candidate must have a demonstrated hunger to continually learn 
  2. The candidate must be a culture fit
  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 beyond technical abilities. 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 and do it proficiently
  • Want to work as a team and collaborate closely with teammates
  • Communicate well
  • Behave like a professional 
  • Manage their own work schedule
  • Fit the culture 
  • Demonstrate empathy and humility
  • Not be an asshole
  • Etc.
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, norms and values 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 company, the environment and the people
  3. The candidate must demonstrate humility and empathy
In my experience, these three principles serve as indicators for someone who might be a fit for our culture and the position. Neither are these principles generic nor are they fool proof. You must adjust for different hiring needs. Also, we have had a couple duds over the years, but our turnover rate is less than 10% which is extremely 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 that takes deliberate steps to care for its employees. Without these benefits, all the good hiring practices in the world won't stop your turnover rate from increasing over time. I also 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 each of 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 willing to make themselves uncomfortable to learn new things. Given the willingness to learn, a candidate must also be proficient at learning. If they find themselves pining away and making little progress, then they need consult someone they trust who can help them identify and conquer the hurdles they are facing. If you're willing to do this, it demonstrates a deeper sense of self which lends itself to things like helping others, being part of the collective, etc.

  • 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, values (what is acceptable/unacceptable), working time, work ethic, etc. During 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 as there are many signals to be picked out that inform you of their true nature. Then, assessing these signals after the interview with the entire panel of interviewers oftentimes winds up telling a much different story than any one interviewer can tell about a candidate. Also, the questions you ask candidates can help to reveal many things, so be conscious of what you're asking and why you're asking it.

  • The candidate must demonstrate humility and empathy - This one is a bit odd for some people because it delves deeper into the psychology of a candidate, but it has proven to be very important measure 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 with zero communication, the developer who has high standards for themselves but does not want to take the time coach younger or newer team members, etc. When hiring members of a team, you are doing team building and this needs to be taken seriously. Teams of developers should operate like a team, not like a ship full of pirates who can't come together to deliver. 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. Without an eye toward how one affects their teammates and how their teammates affect them, as a manager, you are just missing the boat. 

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 or the processes within the company or the lack of career growth opportunities. The three principles that I have outlined above assume that your company culture is healthy, 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 the culture and/or the processes are standing in the way of good hiring, all the principles in the world will not help you.