The hiring process for high-tech is completely screwed. Here’s why and how I fixed it for me and my team

22.12.2022 - AYB - Reading time ~10 Minutes

image

The history

About eleven years ago, I stepped into team management for the first time. One of my first tasks was to open a position for an “any-key support specialist”. At the time, I was a system administrator. I posted about the open position and received a large number of resumes from people who barely understood which side they should approach the computer from.
The process was very difficult for me. I had to review hundreds of resumes and narrow it down to about 15 for further review. When I called to speak with the candidates, I often found that they had exaggerated their qualifications. In the end, I was lucky to get one from all above that was somewhat acceptable — lacking of knowledge and experience, but promising in the way he thinks.
He never after disappointed me, but the process was really exhausting.

The story

About a year later, I had to hire more people — programmers at this point — and was immediately overwhelmed at the thought of going through the same soul-sucking process again. I almost became depressed looking forward to wade through a flood of resumes from people who were pretending to be professionals, when in reality they were just a scam. An additional challenge was how could I estimate their qualification if I’m not a programmer myself? Yes, I can do some basic programming, profound in Bash scripting, but I had to find good PHP/JS programmers while knowing close to nothing about that.

So, I started thinking how to dodge all that mess.

The problem

First of all, let’s see how the common job-posting looks alike: - There are two to ten paragraphs of information about the hiring company. However, much of this information is superficial and does not provide any valuable insight into the company. It simply serves to puff up the company’s ego and promote an image of exceptionalism. While it may be tempting to include this type of fluff in a job description, it is unlikely that anyone will actually take the time to read it. It is much more important to provide concrete details about the company and the job responsibilities in order to attract qualified candidates. - The job description includes unrealistic and extravagant goals that are not grounded in reality. This is likely due to the exaggerated and self-aggrandizing language used in the previous section. It does not reflect the actual demands and responsibilities of the job and may discourage qualified candidates from applying. - The job requirements listed are unrealistic and impractical. Demanding that an applicant be able to drive a car, fighter-jet, and unicycle simultaneously is unrealistic and unnecessary for the job.

Here’s an example for DevOps specialist position, taken from a LinkedIn. This is a current posting, but they didn’t change for decades — all the same.

Description

Come [legally] hack with us the data on the largest exchange that’s running our world. Not NASDAQ; the one with way more events - the Global Ads Exchanges, where millions of ads are born and clicked every second.Step behind the curtain of algorithms and competitors that move $1T of annual budgets. Plunge into a world of ISP-volumes of traffic, sub-second predictions and TBs of live, real-world data. Use cutting-edge analysis, ML and engineering, or just plain hacker-like thinking to out-perform the market.

…another 5 paragraphs of showing-off that could be replaced just with “XX% of internet ads are ours — come join us”..

If you are experienced but still hungry to learn and impact - we’d love to have you on our team!

You’ll be responsible for:
- Scaling our RTB bidders and ML prediction infrastructure to support extreme loads of data and traffic - 1m QPS.
- Own deployment, monitoring, troubleshooting, maintenance, and uptime of our production cloud environments.
- Infrastructure for massive data (1TB/hr) ingestion, continuous ML training and real-time prediction.
- Building, updating, and implementing CI/CD pipeline and DevOps automation processes, methodologies, and tools.
- Work closely with Engineering and Data teams, taking full responsibility and ownership from conception to post-deployment in a collaborative, fast-paced environment
- Stay on top of modern technologies with our infra stack: Prometheus, Graphana, Python3, Go, BigQuery, Redis, MySQL, Nginx/Kong, Bash, Jira

Requirements
- 3+ years of experience as a DevOps Engineer role preferably at a startup company
- Strong technical skills, good system and infrastructure understanding
- Experienced with building the full application release cycle (CI/CD)
- Familiar with how modern web applications work and scale
- Networking, firewall rules management and application security knowledge
- Ability to see the bigger picture and carry out system architecture planning
- Proven DevOps and Infrastructure experience - Advantage
- Understanding of product and a passion for building software that impacts millions of users
- Experience with Redis, relational and NoSQL databases\data warehouses or equivalent
- A “Self-starter” with a startup mentality, Independence with a sense of urgency.

This text does not provide almost any useful information for a potential candidate. It is simply a wall of words that does not convey any meaningful information about the company and keywords not describing the job. The job description does not provide any information about the specific tasks that the candidate will be responsible for. Additionally, some of the listed keywords may require a separate specialist with specialized skills and expertise, if it’s gonna be a significant part of the job outside the “deploy and forget” approach.

Most job postings focus on superficial details that are not relevant to the role of a DevOps engineer. These details, such as the size of the company or its listing on NASDAQ, are included to make the company appear more attractive to candidates. However, a DevOps engineer is typically more concerned with the technical aspects of the job and may not care about the size of the company or its mission.

Over the years, I have not come up with a better alternative to these overly verbose and ineffective job descriptions. I’ve just thrown them away; my own descriptions were straightforward and simple, stating only that the company is called “Companyname” and that it sells a lot of tours. Then there was a quite detailed description of the technology stack used. Despite their simplicity, these descriptions were sufficient for anyone who applied to these jobs. If someone was willing to know more about the company itself — company web-site welcomes everyone. Most probably, the truth here is somewhere in-between.

So, after the tedious process of trying to get any means out of job descriptions, a candidate applies to something that looks less awful than others. And steps into the another boiling pot — interviews.

The absolute most of companies follows the extremely old-fashioned, traditional chain in their hiring process, whoever they’re looking for:
- First touch with an “HR specialist” — 15 to 30 minutes
- Second call with a “Hiring manager” — 40-90 minutes
- Third call with someone else acting as another “Hiring manager” to get another opinion — 40-90 minutes
- Completion of some test assignment (online or offline) — 2-12 hours
- Fourth call to discuss the results of the assignment, terms of works etc. — 30-60 minutes
- Signing up/Rejection with apologies

Overall, based on the lowest estimate of time required, this process takes 245 minutes of the candidate’s time and the same amount of time from the hiring company’s employees. This also adds time spent reviewing candidate’s resume, previous meeting notes, etc. Additionally, two of the employees involved in the process typically have a higher pay grade than the candidate, so this process costs even more in terms of money for the company.

Furthermore, candidates often have several of these processes happening at the same time, which can be quite stressful in and of themselves. Additionally, the pressure of having to solve multiple test cases while also trying to do their current job can lead to the candidate becoming completely burned out and eager for a six-month sabbatical by the time they join the new company.

The Fireworks

Here we come to the solution I found to simplify the hiring process for everyone, literally the best decision of my life as a hiring manager — the hiring process shall be done backwards, starting from the test assignment!

So, my current process since then is the following:
- A pack of tasks published in a public GitHub repo, containing the actual tasks that were completed earlier during the job.
- Some tasks are simplified, while others are unnecessarily complicated. The complicated tasks are used to determine if the candidate is overqualified for the job and will likely quit soon due to boredom. This process also helps filter out people who have attempted to scam me by taking advantage of the common hiring process.
- The trick is that the candidate can see what they will be dealing with at the new job and estimate their interest in it. They are not forced to return the solution as soon as possible, avoiding being labeled a “slow-thinker”. I allow the candidate to enjoy the test assignment, rather than racing through it. They know that someone else may be doing it as well, but this is a less stressful situation than getting an assignment on a Monday morning and knowing that they only have free time on the weekends, which could potentially result in a failed assignment.
- Candidates have to solve some problems of their choice out of the list, according to their experience, attach their CV and send a pull-request to the repo.
- People see this as a fair challenge because everyone receives the same task list and they do not suspect that I am using their “free labor” to solve my job problems..
- I review every but a very small number of PRs and choose the ones I like the most to review the resumes of the candidates. At this stage, there are usually only two or three people left. The rest receive a rejection of their PR with my comments on why they were not selected.
- I’m setting an interview with these chosen people, usually leaving only one as a result.
- The finalist goes to HR to complete all the necessary HR paperwork..
- Signing the contract.

In the past eight years, I have used this process to hire about a hundred people, both for myself and for small companies where I am a friend of the business owner. None of the people I have hired this way have ever disappointed me or the people I hired them for, which I take as a sign that I am doing things right.

Outlines

Q: How did I solve the issue of hiring a good programmer when I am not a programmer myself?
A: I simply found a proven programmer and asked him to write test cases for me and review PRs later. This cost me just a few beers at a bar later.

Q: How do I filter out people who have solved test cases using Stack Overflow or otherwise cheated?
A: There isn’t an immediate way to find this out. At the same time it’s not necessarily important how a task is completed, as long as it is completed. For lower level positions, it’s common for people to use Stack Overflow to solve problems. However, tasks for rock-star positions are usually not solvable using these types of resources. So, for the most cases, it’s helpful to have a voice interview where you can discuss a different, non-similar problem and see how the candidate thinks through and solves it. That would give you a clear view of whether the candidate cheated or spent a week on a 30-minute problem but solved tasks on their own.

Q: What are your voice interviews about if you’ve already seen the code?
A: Exactly, I’ve already seen the code and have a general impression of what this candidate is capable of. In general, I’m just having a casual conversation, similar to what you might have at an office kitchen. I’m telling stories, hearing stories, and trying to determine if this person is someone I would enjoy having a beer with on Thursday night after work or not.

Q: Can you provide an example of a proficient GitHub repository that helped you find a valuable candidate?
A: Sure thing. Here you are: https://github.com/agritask/publictest I posted that link to the DevOps chat on Telegram, which has about 4000 people in it. I received several messages and PRs, and ended up hiring one of the best colleagues I’ve ever had.