Hiring the right engineer for the job is critical to a company's success. So, how can we ensure that we are finding the perfect person for the position? While testing a potential hire's coding ability should be primary step in assessing fit, the following seven characteristics will be key in finding your perfect developer beyond the technical skills.
A programmer who is passionate about his or her work will be 10x more effective than someone who is in it just for the paycheck. A passionate programmer may not necessarily consider programming both their job and their hobby, but they often do. They like to explore new technologies and concepts, and are constantly pushing their limits, not because they have to, but because they enjoy the challenge. They will often spend much of their personal time learning technologies they are excited about.
Focus - They keep their eye on the ball
A programmer who understands why they are doing what they are doing will stay focused and on task. You want them to be generally passionate about their field, but you also want to know they will stay focused on the short and long term goals at hand. You don't want coders who find themselves on tangents, trying to implement the latest and greatest, but unnecessary, technology into the codebase - or trying to over-optimize things they are interested in that aren't a high priority for the team.
The state of the art of programming is constantly evolving. Programmers need to demonstrate that they can pick up new technologies, techniques and best practices quickly. Once a developer understands the core concepts of programming, they should be able to build off of that knowledge. If a programmer can't pick up any new programming skills on their own without having someone teach them, they aren't going to last long. Staying up to date with cutting edge technology is pertinent to a company's advancement, innovation and success.
Most companies these days are not hiring what you would call "generalists". Generalists are developers who have a solid foundation in computer science and a broad knowledge across many different types of technologies, often with one domain that they know best. For example you may have a generalist web developer who can do both front-end (UI) and back-end (business logic) development. While generalists are great utility players, they will often not be as well informed of all of the latest technologies and techniques. Most companies are looking toward more specialized talent. Advances in development are happening so rapidly that it has become increasingly difficult to stay on top of latest develops within a specific domain. Of course, it's still incredibly important for a developer to have solid fundamentals and a strong understanding of their domain, but they should also be an expert on the specific technology sub-domain they are being considered for. A web specialist would likely know much more than a web generalist about front-end development, but little to nothing about back-end development. This is why testing for specific on-the-job skills is vital in hiring a developer who will most effectively contribute to your company's specialized demands.
Programming is a form of reproducible logic/thought, therefore developers will invariably have their own style. You will rarely see two developers come up with the same exact solution, or possibly even the same general approach, to the same complex problem. Programmers need to be able to show that they can adapt to the standards of a team, and write code that takes into account others potentially needing to work on it later. They should write code that makes logical sense to others and isn't overly specific to their own unique style of organization and thought. A new hire needs to understand how an existing codebase works and how to add to the collective work of a team, while keeping concepts consistent. They should write documentation that helps their colleagues understand their work. They should be able to present their thoughts and take constructive feedback without taking it personally. This is why when hiring a new developer, it is vital to be able to watch their process when writing their code in order to get insight into their unique approach and feel into whether it will fit into the existing teams'.
Problem solving is at the core of what a programmer does. This involves a few aspects - first, engineers need to be able to prove that they can quickly identify the cause to an issue. Next, they need to show determination and efficiency in solving it. This might be a bug with an existing set of code, a scalability problem regarding how to handle increased demand of a product, a maintainability matter when dealing with increasing complexity of code, etc. Not only does the problem need to be located efficiently, but the developer must also be able to solve it in a clear and concise way.
Great programmers take pride in their craft. They write efficient code that is well thought out and well tested. They sweat the details, while still aware that they need to deliver on time. Craftsmanship is all about the quality of the product. There is a big difference between simply being skilled, and executing that skill with creativity and dexterity.
It isn't always easy finding the right developers, but when you know what to look for and to test for, you'll be 10x closer to building your perfect team.