I get asked on a regular basis what I’m looking for in engineers. I think most people are expecting the answers found in a typical job description - e.g. CS degree or equivalent, 4+ years commercial software experience, work experience with modern language (i.e. Python, Ruby, Scala), multi-threaded programming, and so on. But there is a fundamental truth of hiring that often gets lost in traditional job descriptions: great engineers are not defined by their degree, number of years experience, or the technologies they work with - but by their core abilities / traits.
Here are the 5 abilities / traits I look for in hiring engineers:
Great engineers have an innate ability to decompose a problem and logically weigh the value of different solutions. They approach problems like logic puzzles, identifying the knowns and unknowns, and methodically solving for the unknowns. Unfortunately analytics cannot be taught in college or learned on the job. An engineer without strong analytics might become a good engineer, but they will never be a great engineer.
#2: Ability to Solve Complexity
Every software developer is capable of learning a new programming language or framework - but not every developer is capable of using it to solve complex problems. Great engineers solve complex problems. For senior engineers, I expect they have solved multiple hard problems in previous jobs. For junior engineers or college graduates, I expect them to demonstrate their ability to solve complex problems. An engineer who has moved through their career without confronting complexity could be a good engineer, but they will never be a great engineer.
#3: Passion for the Craft of Software
I learned early in my career that I had an innate passion for building products by writing software. I consider it a privilege to be able to wake up every day and build software. I also learned that there are many people like me, who would be writing software even if they couldn’t get paid to do it. Life is too short to work with people for whom building software is just a job.
#4: Entrepreneurial / Startup-Oriented
The startup community has one of the highest density of great engineers, in part because the opportunity, freedom and complexity that comes with building a new business tends to attract the best engineers. It also selects for people who are self-motivated, can deal with ambiguity, seek broad ownership, and are comfortable taking risks. I’m not saying I wouldn’t hire someone working at a big company. I’m just saying that if presented with equivalent candidates from Google or a startup, I’m going to go with the startup candidate every time.
There are some great engineers out there who have one flaw: they can’t work in a team. You know the type of engineer I am talking about - arguing over minor details, complaining about issues instead of solving them, and generally degrading the overall work environment. Life is too short to work with engineers who can’t enjoy the collaborative process of building software. There are many places for engineers who can’t work in a team - just not with me.
I’ve had the privilege of working with many great engineers in my career, and plan to work with many more. Some of the best engineers with whom I have worked have defied job descriptions, lacking in some cases college degrees or experience with specific technologies I needed. But what these great engineers lacked in my job description they made up for with five essential abilities / traits: analytics, ability to solve complexity, passion for technology, startup-oriented and ability to work in a team.