Challenge
Unvoid has a very comprehensive and effective hiring process for developers and designers. We receive more than 500 candidates for each available spot, sometimes surpassing 1.000 candidates per spot.
Although highly effective in attracting and filtering candidates, the hiring process was inefficient. It relied too much on manual tasks from Unvoid's tech recruiters.
The challenge was to automate as many parts of the hiring process as possible so that the recruiters could do less repetitive work and the candidates would receive replies faster.
KPIS
Recruiter Productivity:
How many candidates each recruiter can handle
Time to Reply:
Average time taken for the company to answer candidates
Time to Hire:
Total time elapsed from opening the job role and hiring a professional
Solutions
Step 1 - Document Current Workflow
The first task was to document a blueprint of the entire hiring process and the tasks of every party involved.
Step 2 - Enforce Current Workflow
With the entire workflow documented, the next step was to enforce it consistently. In other words, it was time to introduce a structured task manager to guarantee that all recruiters and technical evaluators were consistent and didn't skip any steps accidentally.
Two task managers were considered for this purpose:
On paper, ClickUp was the most complete solution. But we didn't have a good adaptation to it. Users reported lag on several features, and the UI was too convoluted. So ClickUp was rejected, and we decided to use Linear.
The recruiters and technical evaluators then started using Linear in a Kanban view to manage the current stage of each candidate in the hiring process.
Step 3 - Design Optimized Workflow
With a deeper understanding of how everything currently works, our UX designers were then tasked with designing an optimized workflow, taking advantage of web technologies to automate (or at least accelerate) all stages of the workflow.
Step 4 - Code
The next step was to hand the designed workflow to our developers so that they could implement the automation.
We started by exploring existing automation services as a starting point before jumping to a custom solution, but unfortunately, very little could be done using such tools. We quickly realized that we would really need a custom solution to do all the automation as designed.
The tech stack for our custom solution used:
- NodeJS to execute JavaScript code from the server side
- Express to create webhooks with the apps we needed to integrate with
- TypeScript for type-safe code
- Nx to connect all parts of our monorepo
- NodeMailer with SendGrid to send transactional emails
Step 5 - Iterate
Workflows and technologies are not static. The workflow will naturally evolve, and new technologies will emerge. For those reasons, it's important to determine a frequent interval to revisit the issue and see if anything can be improved.
No work is ever done such that it can't be further improved. But it is equally important to remember that the goal is to become more efficient, not to automate everything. Perfection is not a realistic goal, and some tasks are simply better executed manually until technology offers a better solution.
For this particular project, we decided to revisit the workflow every 3 months in search of improvements.