Home / Case studies / Recruitment pipeline and analytics

One hiring system, three times the candidates screened

A custom recruiting system that puts every applicant in one searchable place, with stages, notes and handoffs, and shows the company where hiring stalls.

Client
A fast-growing BPO startup in Indonesia
My role
Engineering lead
Team
9 AI-equipped developers in 3 teams
Users
4 to 5 HR and recruiting staff
The problem

Recruiting ran on a Google Form and one job board. Applications were exported to a spreadsheet and sifted by hand by two or three recruiters. There was no standard way to view an applicant, notes got lost, and there was no way to pause and hand a candidate to a colleague. If someone got busy, the candidate simply waited, and waiting candidates get lost. About three or four candidates were screened a week.

Hiring is the engine of a BPO: they hire to meet their clients' needs. If they cannot hire fast enough, they lose clients, revenue and growth.

Before: a form, a sheet and manual siftingGoogle FormJob boardSpreadsheetexported by hand2 to 3 recruiterssifting manually………………✕✕✕✕✕✕Candidates waiting, and some lostNo shared view. Notes lost. No way to hand over. About 3 to 4 candidates screened a week.
Before: a form, a sheet and manual siftingGoogle FormJob boardSpreadsheetexported by hand2 to 3 recruiterssifting manually✕✕✕✕✕✕Candidates waiting, and some lostNo shared view. Notes lost. No way to hand over.About 3 to 4 candidates screened a week.
The requirements

The COO asked for it, with HR's input. The form and the job board were not the problem. The problem was sifting through everything, so that is what we aimed at. HR and recruiters needed:

  • One standard place to see every applicant: the resume, the answers, and the details pulled out of them, all searchable and filterable.
  • The video, stages, notes and who did what, in the same view, so anyone could pick up where someone left off.
  • A clear path from applied to screened, through interviews, to offer and hired, even when one posting means several hires.
  • A view of how hiring was going, now and over its whole history.

Two ground rules shaped the design. Candidate details are private: only HR sees them, and everyone else builds on test and anonymized data. And a human always decides, because software should help people do what they do better, not replace their judgment.

The budget was a requirement too. As a growing company, they needed their money in their most important resource, their people. So the system had to fit their cost needs, today and in the near future.

The solution

We did not buy an expensive suite or replace everything. We built one bespoke, extensible system aimed only at the part that was broken: sifting through applicants.

Kept

The Google Form and the job board. They already worked, so applications still arrive the same way.

Replaced

The spreadsheet and the manual sifting. A scheduled job reads every CV, extracts the details, and stores them in one database.

Added

One screen for recruiters: resume, extracted details, video, stages and shared notes. Every action is logged and audited.

Built to run

Durable and reliable, with alerts and monitoring, autoscaling, and tuning that balances processing time against cost.

Extensible

Custom fit to their needs today and in the near future, and built to be extended as new requirements come.

Handed off

Proper, detailed documentation left with the company, so they can run it and keep growing it without me.

After: one place, every candidate trackedGoogle FormJob boardThe systemreads every CVon a scheduleOne shared viewresume, video, notes,stages, who did whatAppliedScreenedInterviewOfferHiredEvery candidate moves through clear stagesAnyone can pick up where someone left offNotes shared. Nothing lost. A human always decides. 10+ candidates screened a week.
After: one place, every candidate trackedGoogle FormJob boardThe systemreads every CVon a scheduleOne shared viewresume, video, notes,stages, who did whatEvery candidate moves through clear stagesAppliedScreenedInterviewOfferHiredAnyone can pick up where someone left offNotes shared. Nothing lost. A human always decides.10+ candidates screened a week.
Design call

Processing runs in batches every few hours, not instantly. That keeps the running cost down, and recruiters were never reacting in real time, so they never noticed.

The build

I led nine AI-equipped developers in three teams, each with a clear job and clear contracts between them:

Pipeline teamReads every CV on a schedule,reads the text with OCR, andstructures the details. New andexisting applications alike.Search and review teamThe recruiter screen: search andfilters, resume and video, stages,notes, and internal job postings.Analytics teamIngests the full applicationhistory, keeps it current with everynew action, and finds the insights.datacontractdatacontractOne shared database: indexed, private to HR, and cheap to query
Three teams, one shared databasePipeline teamReads every CV on a schedule,reads the text with OCR, andstructures the details. New andexisting applications alike.data contractSearch and review teamThe recruiter screen: search andfilters, resume and video, stages,notes, and internal job postings.data contractAnalytics teamIngests the full applicationhistory, keeps it current with everynew action, and finds the insights.One shared database:indexed, private to HR, and cheap to query
How I led it

I set the foundation and the rules first, so nine developers could move fast without getting in each other's way.

Foundation first
Architecture, infrastructure, security rules, repositories and CI were all in place before anyone wrote a feature.
Clear contracts
Each team knew its job, what it would receive and deliver, and exactly who to ask if a contract had to change.
Steer, not dictate
I guided choices toward cheap and fast. When a team planned to sync the whole database, we moved to paging and limited queries.
Agents with written specs
The developers' AI agents worked from well-written specs, which kept them on course. We taught the tools as we went.
Learning in the open
Regular live demos, with no blame, to steer early. Every contribution credited, and teams ran their own tracker.
The results
Candidates screened per week (approximate)Before3 to 4After10+
Candidates screened per week (approximate)Before3 to 4After10+
About 3x
More candidates screened each week (approximate)
$50 to 75
A month to run the whole system (approximate)
Watches itself
Alerts and monitoring, with autoscaling for busy periods

Recruiters screened about three times as many candidates and were very happy with the system. Notes stopped getting lost, candidates stopped waiting on one busy person, and the company could finally see its hiring funnel. The analytics showed that in the summer surge, both years, they screened fast enough but interviewed too slowly. The bottleneck had moved from sifting to interviews, which is a much better problem to have.

Why it worked: we fixed the part that was actually broken, built it to fit and to grow, and kept a human in charge of every decision.

Hiring stuck in forms and spreadsheets?

Book a free 30-minute call and we will see whether a lean, custom fix makes sense.