AI Job Matching System

Job Recommendations for a Two-Sided Hiring Marketplace

Design the system that recommends job postings to job seekers and ranks candidates for recruiters, so that both sides are likely to say yes and no job is buried or flooded with applications.

Overview

Job matching looks like any recommender: show each person the items they are most likely to act on. It differs in one way that shapes the whole design. A product or a movie can be recommended to a million people; a job posting usually hires one or a few. LinkedIn's engineers made this point in their RecSys 2017 talk: the system must send each job enough applications from qualified people, but not so many that the poster cannot review them and each applicant's chance drops sharply.

So the design has to answer three questions for every seeker and job: would this person apply, would the employer want this person, and does this job need more applicants or fewer? Keyword search answers none of them well. It misses a job that says 'developer' when the seeker wrote 'software engineer', and it ignores whether a match is realistic for either side.

Questions to ask first

  • Which surfaces? — A job feed for seekers and a ranked candidate list for recruiters
  • How big? — 5 million open jobs, 50 million seekers, 10 million active a day
  • How fast must a new job appear? — Within about 5 minutes of posting
  • What counts as success? — A recruiter replying to an application (not just a click); hires when known
  • Are preferences strict? — Location, remote and minimum pay set by the seeker are strict filters
  • Legal constraints? — No protected attributes (gender, age, ethnicity) as features; audit outcomes

What you will be able to do

  • Split matching into retrieval, two-sided ranking and post-processing, with a latency budget for each.
  • Decide which preferences are hard filters and which are ranking features.
  • Personalize with global, per-seeker and per-job model terms, the way LinkedIn described its GLMix model.
  • Build training labels from a slow funnel (view, apply, recruiter reply, hire) and correct for position bias.
  • Spread applications so no job is flooded or ignored, and check the ranking for bias.

Key concepts

  • Two-sided relevance
  • Candidate selection
  • Hard filters vs features
  • Dual encoders
  • Generalized linear mixed models
  • Delayed labels
  • Position bias
  • Application balancing
  • Fairness-aware re-ranking

Functional requirements

  • Return a ranked feed of up to 25 jobs for a seeker, honoring their location, remote and minimum-pay settings
  • Return a ranked list of applicants or potential candidates for a recruiter's job
  • Index a new or edited job within about 5 minutes; remove closed or expired jobs from results at once
  • Log impressions, clicks, saves, dismissals, applications and recruiter replies with the request that produced them
  • Show a short reason for each match (matched title, skills, location)
  • Boost jobs forecast to get too few applications and damp those forecast to get far too many

Non-functional requirements

  • p99 latency of 200 ms for a feed request (our target)
  • A closed job never appears in a feed (strict); a new job appears within 5 minutes (our target)
  • Graceful fallback: if the ranker fails, serve retrieval order with filters still applied
  • Protected attributes are never model inputs; ranking outcomes are audited by group
  • Every model change ships behind an A/B test

Interview questions

  • How is job matching different from recommending products or videos?
  • How do you retrieve candidates from 5 million jobs in tens of milliseconds?
  • How do you personalize for a seeker, and what happens for a new one?
  • What label do you train on, given that hires are rare and slow?
  • How do you correct for position bias in click data?
  • One job gets 400 applications and a similar one gets 5. What do you do?
  • How do you keep the ranking fair?
  • What happens when the ranker is down?

Sign up free to read the full topic

More System Design topics

Start free on Cariara · Coding problems · System design studio