[An expert] is someone who knows some of the worst mistakes that can be made in his subject and knows how to avoid them
—Werner Heisenberg
Behind every great business, there are great people. No matter how automated a business is or to whom you are providing the goods and services, without good people, your business will fail. Competence and incompetence permeate every layer of your organization. From top to bottom. A good teammate can lift everybody up, while a few bad apples have the power to kill every last morsel of passion, enthusiasm, and collaboration. Bad apples will destroy products faster than good people can build them. As such, hiring the right people is self-evident, no matter what industry you are in. But that is easier said than done. As any recruiter can attest to, finding good professionals is difficult, and often the difficulties begin by actually trying to define what a right fit looks like for your business. Hence we begin this chapter with the latter: What do we mean with the “right people”?
Defining “Right People”
- 1.
Has the required technical knowledge to perform the expected activities
This should be obvious, yet we all know this one colleague whom we could not trust to make even a cup of coffee. A common pitfall that results in the hiring of this colleague is the focus on key words in the resume, instead of careful scrutiny. The most effective way to ensure a high level of technical talent is to create high barriers of entry. That is, make technical exercises and technical interviews challenging, and design them in such a way as to best reflect the requirements of the role. Except for the most junior roles, take-home technical exercises that only take an hour or two are often too short to correctly classify candidates. Similarly, a single, 1-hour long, technical interview will most likely not allow you to collect sufficient signals to determine whether or not the candidate is a good fit. Remember that the purpose of the interview process is not to find the perfect candidate or to push as many candidates through the pipeline as possible. Instead, the purpose of the interview process is to filter out unsuitable candidates.
When it comes to solemnly technical abilities, we found the most effective technical interview process to contain:
- 2.
A complex take-home exercise which accurately reflects the working environment and project requirements, and which candidates can do in their own time. Make the exercise technically challenging, but ensure that these challenges are similar to those that the candidate would face on a daily basis. Avoid brain-teasers and math problems unless that is the type of problems that they will be solving daily. Ask candidates to include tests and focus on good code quality. Once completed, ask them to submit the exercise using a version control system. Mirror submission to day-to-day interaction.
- 3.
A technical interview in which candidates need to talk through their submitted solution, justifying their decisions, design, and architecture. Here it is important that you dive into the details, and try to expose as much of the candidate’s background as possible. Sometimes decisions that seem small were carefully thought through and can show how thorough a candidate can be. Usually, this type of interview lasts 1-2 hours and gives enough room to allow the candidate to ask questions. Remember: the type of questions a candidate asks can tell you a lot about their level of experience.
- 4.
An additional systems-design interview round1 that lasts roughly 1 hour (applicable only when hiring more senior candidates). This allows you to evaluate the candidate’s overall level of experience, beyond the narrow focus of the job. A good software engineer should have a solid, all-around understanding of how a system is built and structured. They should understand how to model data, what security considerations need to be taken into account when building a system, how to choose and reason about different technologies, as well as understand the impact of their decisions and potential gray areas. Good candidates will understand what trade-offs to make between the frontend and backend, and how this affects the overall product.
- 5.
Is capable of anticipating problems before they happen
Mistakes are costly—both in terms of time, money, and morale. A good software engineer not only solves problems, but is able to anticipate them before they occur. They are proactive rather than reactive. While there are plenty of experienced professionals that are not capable of anticipating problems, years of experience can usually be one solid indicator: Younger engineers have often not lived through enough of their own mistakes to spot problems before they occur. Older engineers, in contrast, have almost certainly been bitten by their own decisions.
Being able to anticipate problems not only means having lived through one’s mistakes. It also means being able to reason within an environment that contains high levels of uncertainty. We will discuss this in detail later on in this chapter (see section “The Importance of Experience”), but in essence it comes down to this: People that do well in environments with high levels of uncertainty are people that are good at estimating probabilities (subconsciously or otherwise). Unfortunately, more than half a century of research in psychology shows that the majority of people are terrible at this. Calibration tests are one commonly used method of measuring how good somebody is at estimating probabilities. While some professionals such as weather forecasters2 are quite good at estimating probabilities, most people are not.3 One possible explanation for this is outlined eloquently by Lichtenstein et al. as they summarize Pitz’ (1974) research:4
“Pitz (1974), too, accepted that people’s information-processing capacity and working memory capacity are limited. He suggested that people tackle complex problems serially, working through a portion at a time. To reduce cognitive strain, people ignore the uncertainty in their solutions to the early portions of the problem in order to reduce the complexity of the calculations in later portions.”
Calibration testing aside, finding candidates that are good at dealing with uncertainty is difficult. Diving deep into a candidate’s background and designing well-prepared systems design interview questions weed out the most unsuitable candidates.
- 6.
Is humble and self-conscious
Nobody knows everything. Good professionals are aware of their limitations and act this way. That is, they perform their tasks carefully. They are able to learn from their shortcomings as well as accept advice and suggestions from other team members. Arrogance incurs a large cost on both the team and the product, as arrogant engineers are not only difficult to work with, but are often incapable of accepting thoughts and improvements coming from others. On the other hand, humble engineers are almost by definition good team players. In an interview, this is a difficult trait to test for. Therefore, instead of actively trying to find a humble candidate, filter out those that are clearly not humble. Huge red flags are candidates thatHave difficulties speaking about times when they were part of a team.
Always refer to themselves and never speak of their team. Sentences begin with “I,” never with “we”.
Speak badly of their past company or teammates.
Are unable to discuss solutions or accept direction/suggestions as part of questions in the technical interview process.
Are unable to identify their own limitations;
Use specific technologies/frameworks as escape hatches to avoid showing that they do not know something (as opposed to discussing a topic holistically).
- 7.
Possesses good analytical skills
Having good analytical skills does not only mean that the person is able to gather relevant information to solve the problem. It also means being able to properly scope a problem. That is, being able to identify what is not part of the problem. Engineers that are not able to draw accurate boundaries will inevitably implement solutions that are unnecessarily complex while also spending company time (i.e., money) implementing things that are not needed.
Furthermore, engineers with high analytical skills are able to test and experiment with data, and draw accurate conclusions based on this data. Being able to understand a problem is not very useful in itself if you are not able to evaluate your solution.
When it comes to identifying candidates with strong analytical skills, the systems design interview question is critical. Not only does the question help gauge a candidate’s overall level of experience and technical abilities, but it also provides insight into how a candidate bisects and reasons about problems. Candidates that do well on system design interview questions demonstrate that they can accurately identify requirements and establish boundaries.
Alongside the systems design interview question, presenting candidates with a dataset which they need to analyze helps filter out candidates that possess lower levels of analytical skills.
- 8.
Are good communicators
Any book, article, or podcast on management, leadership, or interviews will tell you about the importance of good communication skills. As such, we do not want to spend much time on an already exhausted topic. Good communication skills are critical. Period. Professionals that are good communicatorsGive straight answers (No BS)
Are polite and honest
Are able to handle conflict when divergent opinions arise
Are able to give and receive feedback
Are able to discuss and justify their decisions and solutions
Are humble and self-conscious (i.e., able to admit when they are wrong and aware of their own limitations)
Are reachable. That is, they respond to and act on messages in a timely manner as appropriate
The “Good Engineer” Checklist
Action biased instead of overplanners.
Iterators. They understand the importance of iterative development and realize that as long as a contribution improves the system, that contribution does not need to be perfect. Continuous iteration results in constant improvements.
Capable of breaking down larger concepts/problems into smaller ones.
The “Bad Engineer” Checklist
A bad engineer is basically the inverse of the previous two sections. Here is a list of behaviors commonly found in underperforming professionals. These behaviors are the direct consequence of a lack of the attributes described in the previous section and are summarized in Figure 4-1.
Cannot justify decisions technically.
Is not disciplined.
Is unreliable. For example, they agree to something in a meeting, but then go away and forget to action on the agreed or do something completely different altogether without communicating this change.
Does not incorporate advice, comments, or industry best practices.
Ignores feedback. This not only makes interactions with the professional frustrating for others, but actually means that they are unwilling to learn. They lack the technical background for the job, but are so uncooperative that they are unable to gain these skills.
Offloads work on to other people’s shoulders and has to be “carried” by the team.
Does not interact during meetings or fails to attend meetings in the first place.
Is unable to give an insight into the progress of their work/estimate when things will be done. When asked, they either give an overly general answer, or go into pointless minute details.
Is not proactive, only reactive.
Masks incompetence by using arrogance or other subterfuge like job titles, department responsibilities, etc.
Lacks attention to detail and acts in a generally negligent manner. Attention to detail when performing one task generally means lack of attention in general. As an old saying goes: “How we do one thing is how we do everything else.” That is, people that tend to greatly underperform in one area of their job tend to do so in all other areas of their job too.
Lacks pride and interest in their work.
Is not able to think through problems.
Keep in mind that the points listed above are behaviors that bad engineers do consistently, great engineers can have a bad day and slip into those behaviors occasionally but they certainly shouldn’t be a habit for them.
Attitude trumps lack of technical background in most jobs. That is, with the right attitude, we can learn to excel at a job. However, a characteristic of an underperforming engineer is that they lack both the right attitude AND technical background/knowledge. Without the right attitude, they are unable to learn the skills they lack.
The Importance of Experience
Live through other people’s decisions
Make decisions without all the necessary data
Know the importance of decisions and how they might affect the future
In slightly more complex terms: experience allows us to deal with uncertainty. Most importantly, “unknown unknowns.” That is, it enables us to deal with the correlation between experience and a broader knowledge that decreases the surface of things that we do not even know we don’t know (unknown unknowns). In his book “Risk Intelligence,” Dr. Dylan Evans illustrates this notion (depicted in Figure 4-3) using the concept of a darkened room:
“Picture your mind as a lightbulb shining in an otherwise dark room. Some nearby objects are fully illuminated; you can see them in every detail, present and identifiable. They are the things you know very well: the names of your friends, what you had for breakfast this morning, how many sides a triangle has, and so on. The objects on the other side of the room are completely shrouded in darkness. They are the things about which you know nothing: the five thousandth digit of pi, the composition of dark matter, King Nebuchadnezzar’s favorite color. Between light and darkness, however, lies a gray area in which the level of illumination gradually shades away. In this twilight zone, the objects are not fully illuminated, but neither are they completely invisible.”
Assuming that an individual learns from both their past experiences and the experiences of others, they will, with time, become better at navigating this twilight zone. That is what we mean when we say that “experience allows professionals to deal with uncertainty.” Note that this does not imply that the twilight zone will shrink with experience. Of course it might if the individual remains in the same domain for years and gathers more and more minute knowledge. But in most cases, the twilight zone will always remain—people switch jobs, tackle new challenges, or venture into new domains. With experience however, the individuals become more self-aware of their limitations, the limitations of their field as well as how much relevant information they may not have to make a decision. Over and under-confidence are replaced with better self-knowledge, and the individual becomes “better calibrated” to their task environment. Not only does this allow for more effective task execution as risks and uncertainties can be identified more readily, it also makes for better communication: The more experienced someone is in a field, the better their educated guesses and probability estimates become.
In contrast, inexperienced professionals might have learned the necessary technical skills to execute a task that lies “outside the twilight zone,” but they usually are unable to make (or even identify) far-reaching decisions and voice them with the right amount of certainty. Without having been bitten by their own mistakes a sufficient number of times, inexperience means bringing either a “dangerous excess or a problematic deficiency”6 to the table. An inexperienced candidate has not had the time to make all the mistakes that they need to make. Since they do not know what these mistakes are (or how to avoid them), chances are that they will make at least some while working on your project.
It is therefore no surprise that experience is highly valued in the field of software engineering. Engineers can make multiple important decisions in a short time frame that will deeply impact the future of an entire project, especially in the initial phases of a project. Therefore having a good understanding of the consequences of those decisions in the future, the knowns, unknowns, and unknown unknowns, will directly impact the success of the project.
To put this all into more concrete terms: There are decisions that are easy to change later, like choosing a certain existing library for a very specific feature. However, other types of decisions, such as selecting a programming language or framework for a project, are much harder to change or revert. Experience plays an important role in this context, as it not only allows the engineer to properly differentiate between the different types of decisions, but also enables the engineer to handle difficult decisions more effectively. That is, when making a decision that is difficult to revert in the future, they can take the necessary steps that could make a potential reversal less difficult. For example, applying different techniques to properly isolate code and hence minimizing the impact of future changes.
Decision making and uncertainty aside, experience also acts as a natural filter for unsuitable job candidates. As Tim Nichols concisely puts it in “The Death of Expertise”:7
The Dunning-Kruger Effect
We probably all know this one incompetent colleague who was consistently unable to deliver, but thought the world of themselves. It turns out that there is a name for this type of illusory superiority: the Dunning-Kruger effect. First proposed in the late 1990s by two psychologists, David Dunning and Justin Kruger,8 the effect basically states that the incompetent are unaware of their incompetences due to the lack of competence (Figure 4-4). Put more bluntly: the stupid are too stupid to realize that they are stupid. For example, an incompetent software engineer may be unaware of their inability to design and write good software, since the very skills that would allow them to develop such software are the same skills that allow them to identify “bad” software. The irony therefore follows that, in order to make a bad software engineer realize their incompetence, they must become more competent.
Honesty
Finding new hires is expensive (as we will see in the next section “The Cost of Hiring”). To ensure that these expenditures pay off (that is, to ensure that you actually retain your new hires), honesty during the interview process is crucial. Expecting job applicants to talk honestly and openly about their past experiences is a given. Unfortunately, many employers do not see honesty as a two-way street. Sugar-coating the position and company is common practice, either because the interviewer does not want to sound too negative (and hence be responsible for painting the company in a bad light) or because they are afraid of failing to attract the right candidate. This is problematic in two ways. Firstly, by lying, you are acting unethically. As Sam Harris eloquently puts it in his book “Lying,” when he writes that “[by lying] we deny others a view of the world as it is. Our dishonesty not only influences the choices they make, it often determines the choices they can make—and in ways we cannot always predict. Every lie is a direct assault upon the autonomy of those we lie to.”
That is, by sugar-coating a position, you deny the candidate to see what they are actually signing up for. Since people spend most of our waking hours at work, a candidate’s understanding of the company will have a significant impact on their life if this understanding turns out to be false.
Secondly, by lying to candidates, you will end up generating additional costs for the company, as honesty and expectations are closely linked. You are hiring intelligent, capable candidates. And—surprise surprise—smart candidates will soon figure out what is wrong with the company. You, in turn, will gain a reputation as a dishonest leader, and will lose the trust of those working for you. A lack of trust combined in a company that fails to meet expectations results in brain drain: If the job market permits, people will leave. Which means you will need to start the hiring cycle all over again.
One prevailing source of dishonesty in leaders comes from unfeasible targets. An honest leader, operating in an honest environment, will never purposely aim at unfeasible targets. Leaders that catch themselves thinking about a $50-100 billion valuation in 5 years while the company only has 500 users should ask themselves how honest they are with themselves. While your job as a leader requires you to remain positive even when in adverse circumstances, you should remember that there is a balance to be struck between positivity and realism. Especially in business, honesty and realism go hand in hand. As Ayn Rand once famously said: “You can ignore reality, but you can’t ignore the consequences of ignoring reality.”
Another common source of dishonesty stems from sugar-coating challenges. Leaders can be upfront about the technical and organizational challenges that await candidates without needing to put everything into a completely negative light. Unfortunately, most leaders prefer to try and make reality look better than it really is.
Summarizing these two major sources of dishonesty in interviews: If you can be honest about the status quo and what the company is aiming at, then you will be able to avoid a significant percentage of churn.
Exactly what promotion opportunities does the company offer?
What percentage of the current employees walked that path?
How long would the candidate need to wait to be considered for a promotion?
Does the company have a clear path for promotions for that position?
Are the opportunities and the candidate’s expectation in synchronism?
The seven golden rules for successful technical interviews
- 1.Interviews are all about looking for signals. Try and gather as many signals as possible by
- a.
Not dwelling on minute technical details
- b.
Not dwelling on a candidate’s mistakes. Move on quickly
- c.
Ask for specifics. Dig deep
- 2.Structure your technical interviews so that you can quickly identify signals which indicate a candidate’s
- a.
Ability to break down and analyze problems
- b.
Ability to abstract
- c.
Concern for code organization, clarity, and maintainability
- d.
Concern for testing
- e.
General technical knowledge (not minute details)
- f.
Concern for documentation and how to keep and transfer knowledge
- 3.Behavioral and cultural interviews should look for signals that indicate
- a.
An openness to learning and constant improvement
- b.
An ability to give and deal with feedback
- c.
A willingness to compromise
- d.
A general fit for the company’s culture
- 4.Successful interviews require preparation on behalf of the interviewer. This means
- a.
Creating a bank of possible questions to ask across interviews
- b.
Creating a scorecard and template for notes
- c.
Reading up on the candidate’s background before the interview
- d.
Recording feedback and notes either during the interview or as soon as possible after the interview
- 5.
Be transparent. There is no point in over-selling the role just to have someone leave shortly after accepting an offer as the role does not meet expectations.
- 6.
Be empathetic and positive. Regardless of the candidate’s performance, you should ensure that the interview is a positive experience for the candidate. Negative interview experiences reflect badly on both you and the company.
- 7.
Dive into details when required. If a candidate only gives a generalized response, dig deeper.
The Cost of Hiring
Hiring involves direct and indirect costs. The direct costs, such as man-hours spent by recruiters or advertising, are obvious and as such we won’t elaborate on those here. The indirect costs however are more subtle, yet usually greater. Recruiters naturally like to push as many candidates through the pipeline as possible. This approach leads to lost engineering man-hours. Technical interviews need extensive preparation, and technical exercises require reviewing. By narrowing the pipeline—that is, detailing the exact job requirements as best as possible, as well as setting high screening standards—a company can reduce these costs.
Once a candidate is hired, they will need to be on-boarded. Not only is this engineering time that is spent not developing the product (opportunity cost), but the on-boarding phase is likely to introduce risks to the product. New bugs tend to be introduced as new engineers begin working in a new, unfamiliar environment. While this decreases over time, and good engineers will more than make up for the cost of hiring (otherwise they would not be hired), it is important to keep this cost in mind as companies with a high churn will pay a high price.
The cost of hiring increases the higher your churn is. Once you begin losing a certain percentage of your teams, you not only lose knowledge but also impact team morale and team processes. Even if you have perfect hand-over processes and perfect documentation, lost knowledge is difficult to get back and usually takes many months (or years). A loss in morale on the other hand can result in a snow-ball effect: colleagues leave and either bring others with them to the new company or motivate them directly or indirectly to jump ship.
Last but not least, processes die with people. People enter a company and bring with them new processes and establish these for different reasons, experienced professionals implement them knowing their pros and cons, while inexperienced ones do so because they are comfortable with it and want to mitigate changes. Hopefully, the new processes might make actual sense and improve things. However, many times they are introduced because people want to set a mark, be seen to be doing things, or simply because they are used to working this way. Regardless of the “why,” the introduction of new processes by new hires can often fan an existing fire: People are creatures of habit and like working in ways that they are used to. A large influx of new hires and new processes can therefore increase dissatisfaction and result in further brain drain.
- 1.
Hiring is complex and costly. There are both direct and indirect costs.
- 2.
New hires can result in further churn.
- 3.
Knowledge and morale lost will be difficult to regain.
The objective of the interview process is to weed out the unsuitable candidates. Interview processes is not made to find the perfect candidate. Only time can reveal this.
The Cost of Bad Engineers
Before we begin to discuss the price that a company pays for hiring “bad” engineers, we need to distinguish a bad engineer from a bad hire. On the surface, this difference might not be immediately obvious. Nevertheless, it is an important one to keep in mind, and the essence of it is this: Sometimes a hire might not be the ideal fit for a team/company, but could still be a good fit for another team/company. Every single one of us is subject to situational forces, meaning that our surroundings define and exert certain processes of transformation on our character, changing how we act and react to those around us. Put into one team, a certain engineer might excel at tasks that, if placed in a different team, they would perform poorly. Being able to differentiate the causes of poor performance—that is, poor performance due to their surroundings, or poor performance due to incompetence—is difficult and requires careful observation. The cost of bad engineers is therefore different to the costs associated with bad hires. The latter can often be rectified or compensated with relatively little change and poses a lower risk to the company as a whole. This is because bad fits are due to situational forces, while bad professionals are “bad” because they lack certain attitudes, abilities, skills, or intelligences that are required in order to excel at the job regardless of the team.
Have a detrimental impact on the code base and hence the product as a whole.
Have a negative impact on team morale. A good engineer paired with a bad engineer in the same position will cause the good engineer to feel demotivated.
Introduce architectural decisions that can be difficult to revert and which result in a domino effect: Problems in systems tend to cascade and accumulate (this is detailed in depth in “Chapter 5: Quality”).
Increase churn and burn-out rate. Bad employees increase the workload for others, since good engineers need to make up for the bad engineers. This leads to higher stress levels and load.
Above all, bad engineers that are allowed to persist in their positions will set bad precedents and lower the standard of the team as a whole. Most people tend to sink to their lowest acceptable levels of performance. By not removing unsuitable team members, leaders set a low bar and signal to others that poor performance is acceptable. Once settled, these behavioral and cultural habits can be difficult to reverse even if the responsible individuals have been removed.
Bad habits are like mold. Spread by underperforming professionals, they affect company culture and are difficult to remove.
[There is ] wisdom in the old Chinese warning to beware a craftsman who claims twenty years of experience when in reality he’s only had one year of experience twenty times
—“The Death of Expertise” by Tim Nichols (page 36)
Retention: Understanding the Career Cycle
When we first join a company, our career enters the “on-boarding” phase: We do not yet know much about the technicals of the project we work on, the processes and internal workings of the company itself. As such, we are in a strong learning phase, and are not yet very productive. As time goes on, we become more familiar with our task environment and become more productive. We are enthusiastic, are constantly learning and discovering new things, and are trying to maximize our productivity and output. During the honeymoon phase, we see nothing “wrong” with our surroundings. We are dazzled by all the nice people around us and the world is our oyster—career opportunities glisten before us, and we put all our heart and energy into the job. We are at “peak contribution,” meaning that we have learned a sufficient amount to be highly productive. As time goes on however, we start to see the cracks in the walls: politics, colleagues that we do not get on well with, a difficult boss, some big-picture decisions that we do not agree with, better pay elsewhere …Our enthusiasm wanes. Slowly we become used to the rut, and execute with less energy and enthusiasm. Stress might consume our remaining energy, and there isn’t much to learn. We have entered the phase of decline. At the end of this phase, we either transition into a new role within the company (a promotion, a new team, or a new department) or we leave the company. Regardless of our decision, the cycle starts again.
The ideal cycle on-boards quickly and stretches out the honeymoon and peak phase for as long as possible, hence maximizing retention. Employees whose careers follow this shape remain productive in their positions for a long time, and only decline eventually.
Practical Tips
Hiring good engineers is easier said than done. And so far, we have done the easy part: We discussed hiring and retention in theoretical terms. Now comes the hard part: putting the theory into practice, and defining a set of concrete guidelines that you can apply immediately.
Tip 1: Review Your Interviewing Process
Many interviewers that we have spoken to over the years believe that they can accurately gauge a candidate simply by speaking to them. From our experience, nothing could be further from the truth. Interviewing is less about “informal chats” and much more about gathering signals. A signal is a concrete indicator that tells you something about the candidate’s suitability for the role. Therefore, the first step that leaders should take is to ask themselves (i) what signals they should be looking for, (ii) whether the current interview process allows for the gathering of these signals.
It is important to remember that signals can be both positive and negative. An example of a negative signal might be disinterest, expressed by asking overly generic questions. In order to be able to gather such a signal, your interview process must actually allow for time to ask questions. While this may seem obvious, it often is not so in practice: Many interviewers only allow for 5 minutes in the end to ask questions, a timeframe that is hardly big enough to gauge a candidate’s true level of interest in the company.
Tip 2: Make Your Process Known Beforehand
It is important that the candidates know what to expect from your process even before applying, how long the process is supposed to be, details on each step and how long does it take to move between the different steps once they are completed. That way candidates can better plan their time and know upfront if they are willing to do what it takes to get into the company, in addition to that it helps keep the process more reasonable otherwise it won’t attract the desired people.
Tip 3: Understand Staffing Requirements
Those closest to the ground tend to know best what resources are needed to turn roadmaps into reality. Leaders should gather feedback from engineers and managers in order to define staffing plans.
Tip 4: Define Attractive Compensation and Benefits That Reflect Market Realities (and Review It Periodically)
Although this is self-evident, we are surprised by how many leaders fail to understand that software engineers are expensive. Especially since the beginning of the COVID pandemic, demand has sky-rocketed and so has compensation. As with everything else, you get what you pay for. Companies that are still stuck in an “outsourcing” mindset will eventually fall behind as they naturally fail to compete in a global marketplace. Therefore, it is crucial to understand the positions that you are hiring for and define a suitably attractive compensation. At the same time, the company needs to keep a constant eye on the market to ensure that the values offered for the engineers that are already on the team remain attractive enough to mitigate their chance of leaving.
Tip 5: Recruiter Screening
- 1.
Provide recruiters with an accurate list of keywords to scan for.
- 2.
Use years of experience/years in the market as a filter. Hiring recent college graduates for remote positions can be difficult and should be avoided. Instead, University career fairs or other forms of direct contact with Universities tend to be more effective.
Tip 6: Scheduling
Avoid scheduling back-to-back interviews and meetings. A golden rule of interviews is to (i) always allow 15 minutes for the candidate to ask questions, and (ii) avoid hard stops so that you do not need to cut the interview short if you can avoid it.
Tip 7: Tooling
Make explicit the tools the candidate is expected to have installed or prepared before the interview so they don’t spend time setting them up during the interview. If accounts on specific platforms are required send the invites a few days earlier and ensure they have access to such platforms before the interview starts.
Tip 8: Hiring Scoreboard
The hiring scoreboard, also called interview rubric or interview matrix, is a tool that defines relevant competences that should be measured for a certain position during the interview. With it the person (or team) conducting the hiring process can attribute numbers within a given range (0 to 5 for example) to certain characteristics that they believe are relevant for the job. Having that numerical measurement allows an easier comparison between two candidates, an aspect that is usually highly subjective.
There are many templates online for this but it is important to note that the attributes, technical or not, that go into the scoreboard need to be defined by the interviewers. This process helps identify what is actually relevant for the job and also is useful while making the interview by guiding the interviewer on what to assess from the candidate.
* 0 – Never heard of it
* 1 – Studied a similar technology
* 2 – Has experience with similar technology
* 3 – Has superficial experience with it
* 4 – Has extensive experience with it
* 5 – Expert
The scale and what each number means will vary per competence but it is better to keep it always 0 = undesirable and 5 = perfect so at the end of the process we can sum the values and use it as a metric to compare candidates.
One last useful aspect of the scoreboard is that it can be used for giving feedback to a candidate that was not approved, by having numerical values for relevant characteristics you can provide useful insight on what the candidate can improve for their future.
Tip 9: Technical Screening
- 1.
Does the candidate have sufficient technical knowledge for the job?
- 2.
What is the candidate’s true level of experience? A candidate with 5 years of experience on the CV might in reality only have 1 year of experience, repeated five times.
- 3.
Does the candidate have the necessary soft skills to execute their job?
While behavioral interviews assess the candidate’s culture fit, good technical interviews are structured in such a way as to allow the interviewer to gather some signals about the candidate’s personality and what it would be like to work with the person.
One hour is usually too short to allow the interviewer to collect a sufficient number of signals to answer these questions with any level of certainty. A good approach is to apply one of the following three options to your technical interview process.
Option 1: Three Phases, Remote
Phase 1: A challenging take-home exercise that the candidate completes in their own time. The exercise is to be submitted using a version control system, and will be reviewed by the interviewing engineer(s).
0 to 10 minutes: Introduction and Overview. Ask the candidate to give you a 1–2 minute overview of their background, and to confirm the role to which they are applying to. This serves as (i) an ice-breaker and low-ball question to ease any nerves, (ii) for the interviewer to confirm that they are interviewing for the correct role. Next, provide the candidate with an overview of what will happen during the upcoming hour.
Until minute 30: Ask the candidate to share their screen and walk you through their implementation of the take-home exercise. This will allow the candidate to talk through any additional concepts and solutions that they did not tackle (but are aware of) and allow the interviewer to dive into the solution in detail, gathering signals that indicate that (i) the candidate did indeed complete the exercise themselves, (ii) has the sufficient technical understanding to dive deeper than just the demonstrated code. The key activity for the interviewer here is to ask technical questions.
Minute 30 until 45: Ask general technical questions that are not related to the solution itself, but that help you gather further signals. For example, “How would you go about testing this code?,” “How would you ensure a high level of code quality when working with a team of engineers on this exercise?” or “What is your experience with <insert relevant framework/language/etc.>?”
Minute 45 until 60: Leave the floor open to the candidate. It is now their turn to ask questions
Phase 3: A 1-hour long systems design question. The benefit of a systems design interview question is that it allows for more accurate gauging of a candidate’s experience, since answers are not restricted to specific technical solutions/implementations. Instead, they involved bigger picture decisions, evaluations of all aspects involved in engineering, as well as requiring candidates to potentially make design decisions which are difficult to revert if they were implemented (and hence require careful consideration). Since system design interview questions are more open-ended, they can end up taking many shapes and forms and hence allow for a more collaborative setting. This in turn allows the interviewer to gather signals on what it would be like to work with the person.
Option 2: Three Phases, Remote
Phase 1: A 75-minute long technical screening consisting of a programming challenge which the candidate needs to solve while sharing their screen, thinking out loud as they do so. The interview is structured similarly to phase 2 in option 1:
0 to 10 minutes: Introduction and Overview. Ask the candidate to give you a 1–2 minute overview of their background, and to confirm the role to which they are applying to. This serves as (i) an ice-breaker and low-ball question to ease any nerves, (ii) for the interviewer to confirm that they are interviewing for the correct role. Next, provide the candidate with an overview of what will happen during the upcoming hour.
Until minute 45: Ask the candidate to share their screen and explain the exercise to them. Encourage candidates to think out loud, and emphasize the focus on arriving at a solution (rather than on implementing minute technical details). Candidates may feel pressured due to “having somebody watch over their shoulder,” so do your best to make them feel at ease, and remove any hard stoppers (i.e., allow for the interview to run over the time limit if need be). The objective behind the programming challenge is to gather signals on (i) the candidate’s ability to reason, abstract, solve and communicate; (ii) technical competence; (iii) behavior in a collaborative setting.
Minute 45 to 60: Ask questions regarding their solutions. Can they identify any problems with their code/solution? Are they able to think of an alternative approach? How would they test their code?
Minute 60 to 75: Leave the floor open to the candidate. It is now their turn to ask questions.
Phase 2: A 1-hour long systems design question. See option 1, phase 3.
Phase 3: Interview with an engineering manager or technical lead, designed to drill into any specific competencies that the position requires, but that could not be covered by phases 1 and 2.
Option 3: Three Phases, Two Remote, One in Person
Phase 1: A 75 minute long technical screening consisting of a programming challenge which the candidate needs to solve while sharing their screen, thinking out loud as they do so. This phase is identical to phase 1 in option 2.
Phase 2: A 1-hour long systems design question. See option 1 or 2, phase 2.
A collaborative programming challenge that simulates a typical work day at the company
Interview with an engineering manager or technical lead
Interview with stakeholders
The more time and interactions interviewers have with a candidate, the more signals they can gather. Hence, the more accurate their evaluation of the candidate will be. If a company can muster the necessary expenses and resources for on-site or in-person interviews, then it should do so. In-person interviews are a great way to get to know the candidate(s), and in turn allows them to more closely evaluate the company too. It also signals that the company is willing to invest in attracting good talent.
Conclusion
Everybody knows that, if you want your company to grow, you need to hire good professionals. However, many people forget that hiring is not just about growth: it is also about retention and maintaining a solid baseline. A few bad hires can destroy entire teams. To complicate things further, finding good talent is difficult. As such, we outlined a set of attributes that will help you hire the right candidates. In summary, these are humility, experience, a high degree of self-consciousness, technical ability, good analytical and good technical skills as well as the ability to anticipate problems before they happen.