Cloud & platform · hire.fairhireCI passing

Recruitment and Applicant Tracking System

An ATS that makes interviews pick better people and checks, per stage, that it treats groups fairly.

Open the live demo View the code Evaluation report Demo tour Run it ›_ last push 1 day ago

0.58 → 0.97hire-rate ratio between groups on 15 held-out companies, plain rubric panels vs the fair process

+0.23 SDbetter hires with calibrated rubric scores than one interviewer's overall impression

37 of 53biased interviewers found by the audit, 1 false flag among 157 others

A shortlist: each panel member's rubric score, their leniency adjustment, and the calibrated result
A shortlist: each panel member's rubric score, their leniency adjustment, and the calibrated result. Screenshot from the project's demo (synthetic data).

demo Demo tour

Screenshots from the running application, with its synthetic demo data. Select one to enlarge.

A shortlist: each panel member's rubric score, their leniency adjustment, and the calibrated result.
A shortlist: each panel member's rubric score, their leniency adjustment, and the calibrated result.
The interviewer audit: leniency, own-group gap against co-panelists, and how many scores it rests on.
The interviewer audit: leniency, own-group gap against co-panelists, and how many scores it rests on.
The four-fifths check per stage, in both directions, through three processes.
The four-fifths check per stage, in both directions, through three processes.
The blind r�sum� screen: what was removed, and evidence per competency with quotes.
The blind r�sum� screen: what was removed, and evidence per competency with quotes.
Evaluation: hire quality and group ratio for each process on held-out and shifted companies.
Evaluation: hire quality and group ratio for each process on held-out and shifted companies.

01 The problem

Hiring rests on interviews, and interviews are noisy: one person's overall impression, debriefs anchored by the first voice, interviewers who are simply harsher or kinder, and some who favour their own group or a well-known school. Different candidates meet different panels, so luck and bias decide close calls, and most systems never measure either.

02 How it works

  1. Blind screen
  2. Rubric panels
  3. Leniency calibration
  4. Interviewer audit
  5. Offers
  6. Four-fifths check

03 What I built

  • Panels that score a rubric per competency independently, with each interviewer's leniency learned from past panels (alternating least squares, shrunk) and taken out.
  • An audit comparing each interviewer with co-panelists on the same candidates, own group versus others, flagging the clearest case first and removing it before looking again; flags change who sits on panels, never a candidate's score.
  • Schools hidden from the screen and interview packet, a four-fifths check per stage in both directions, and a blind résumé screen where code redacts identity and education and Claude must quote the résumé for every level.

04 What I learned

Calibration made hires better and the group ratio worse: with noise removed, a consistent bias decides more close calls. Fairness needed its own fix.

A unit test written after the held-out run showed the audit flagging unbiased colleagues of a biased interviewer; it now peels off the clearest case first. Both runs are in the ADR.

The four-fifths check was one-sided and marked a company passing where group A was hired at 0.6 of group B's rate; it now works both ways.

05 Known limitations

Every repository documents what it doesn't do yet. The main ones:

  • A simulation: bias sizes are assumptions, two groups only.
  • Per company, 9 of 15 held-out companies were still below four-fifths (chance alone: about 1); the audit needs history.

06 Stack

PythonFastAPINumPyClaude APIDocker

The repository has the design document, operations runbook, full evaluation report and known limitations. All data is synthetic, generated by code in the repository.

run Run it yourself

Every project runs on a laptop: no cloud account and no paid API needed.

git clone https://github.com/codeROCK-IZZY/applicant-tracking-system.git
cd applicant-tracking-system
pip install -e ".[dev]" && pytest
ats evaluate --gate                        # writes eval/reports/report.html

↑↓ to move · Enter to open · Esc to close