State machines
How the process runs
The canonical path first — the process written as the commitments it is supposed to keep — and then the funnel as it actually runs. Both are machines you can step through: each state names the actor whose decision it waits on, what the candidate can see while it waits, and where it is known to break.
WF-003 · The path as it is supposed to run the canonical path
One opening, from a real need to a decision the candidate can act on, with each step written as the commitment it is supposed to keep. Every barrier in the registry is a place where one of these commitments stops being kept.
A construct, not a description of any employer.
What moves through it: one opening, and one candidate moving through it
The same machine as an ordered list
-
real-need A real opening, described honestly Hiring manager start
The requisition describes work that exists now, at a level the team actually needs, inside a band the budget already covers. Nothing here is aspirational: the list of requirements is what the job uses, not what the last four candidates happened to have.
What the candidate sees: Nothing yet. Everything downstream inherits whatever is decided here.
Departures documented here
-
published Published with its terms on the page Recruiter
The posting states the compensation band, the location rules, the stages the process has and roughly how long each takes. It comes down when the search ends.
What the candidate sees: The role, the band, the stages, and a date by which the first answer should arrive.
What holds this step up
Departures documented here
-
applied Applied, and told so Candidate
The application is submitted and acknowledged. The record holds what the candidate actually wrote, and the candidate can tell that it arrived.
What the candidate sees: A confirmation that names the role and says what happens next.
What holds this step up
Departures documented here
-
machine-check Machine work stays mechanical ATS vendor
Automation deduplicates, extracts and orders. It does not decide. Where a rule does end an application, the rule is stated and it is one a person would defend out loud.
What the candidate sees: If a rule ends it here, which rule.
What holds this step up
Departures documented here
-
human-read Read by a person, inside the stated window Recruiter
Every application that clears the mechanical stage is read by someone, and read before the window the posting promised runs out.
What the candidate sees: Either a next step or a decision, by the date the posting gave.
What holds this step up
Departures documented here
-
terms-check Terms compared before anyone spends time Recruiter
Band, level, location, notice period and start date are put side by side in the first conversation, before any assessment is scheduled. Either side can stop here at no cost to the other.
What the candidate sees: The numbers and the constraints, from both sides, in the first call.
What holds this step up
Departures documented here
-
work-sample Assessed on the work, against a rubric that is shared Hiring manager
One timeboxed exercise that resembles the job. The candidate is given the criteria before starting, the timebox is enforced against the evaluator as well, and the same rubric scores everyone.
What the candidate sees: The exercise, the timebox and the criteria — before starting, not after.
What holds this step up
Departures documented here
-
panel One panel, one question each, one decision rule Hiring manager
Every interviewer knows what they are measuring and that nobody else is measuring it. The rule that turns their scores into a decision is agreed before the first conversation, and no round is added after the process has started.
What the candidate sees: Who they will meet, what each conversation is for, and how many there are.
Departures documented here
-
level-and-band The level meets the band that was published Employer policy
The level follows from the evidence the panel gathered, and the band was public from the first day. Reconciling them is arithmetic, not a negotiation about whether the band exists.
What the candidate sees: The same band the posting stated, and which point in it the offer sits at.
What holds this step up
Departures documented here
-
approval Approval already exists Employer policy
Headcount was signed before the role was published, so this step is a countersignature rather than a second decision. If the budget goes, the search closes and everyone inside it is told.
What the candidate sees: A date for the offer, rather than an indefinite period described as final checks.
What holds this step up
Departures documented here
-
offer A written offer with everything in it Recruiter
Salary, level, title, location terms, start date and anything conditional, in writing, with a decision window the candidate agreed to. Nothing in it changes after acceptance.
What the candidate sees: The complete offer document, and how long they have to answer.
Departures documented here
-
verification Checks that are proportionate and answerable Employer policy
Only the checks the role actually requires. Where a third-party record disagrees with what the candidate said, the discrepancy is put to the candidate before it decides anything.
What the candidate sees: What is being checked, and any discrepancy, before it is acted on.
Departures documented here
-
hired Hired on the terms that were published Employer policy terminal
Contract executed both ways on the terms that were on the page from the beginning, with a start date both sides chose.
What the candidate sees: A signed contract that matches the posting.
-
declined Declined, with a reason that can be acted on Recruiter terminal
Not every candidate is hired, and a decline is not a deviation. What makes it part of this path is that it arrives, it names the stage it happened at and the criterion that decided it, and it says whether applying again is worth anything.
What the candidate sees: Which stage, which criterion, and whether to apply again.
What holds this step up
Departures documented here
-
closed Search closed, and everyone told Employer policy terminal
A search can legitimately stop: the need changes, the budget goes, someone internal turns out to be right for it. What this path requires is that the posting comes down and every candidate still inside the process is told within days.
What the candidate sees: A message saying the search ended, and when.
What holds this step up
Departures documented here
- real-need → published posted with its terms Fires when: An approved requisition, a band and a described process go live together.
- published → applied application submitted Fires when: The candidate applies against terms they could read beforehand.
- applied → machine-check record processed Fires when: The submission is parsed and acknowledged.
- machine-check → human-read passed to a person Fires when: No automated rule ended it, so a person now has it.
- human-read → terms-check worth a conversation Fires when: A person read the profile and wants to talk.
- terms-check → work-sample terms are compatible Fires when: Band, level, location and timing work for both sides, said out loud.
- work-sample → panel work meets the rubric Fires when: The exercise was scored against the criteria the candidate was given.
- panel → level-and-band panel decides by its rule Fires when: The agreed decision rule returns a hire.
- level-and-band → approval level lands inside the band Fires when: The evidence-assigned level maps to a point in the published band.
- approval → offer countersigned Fires when: The approval that existed before publication is confirmed.
- offer → verification offer accepted Fires when: The candidate accepts a complete written offer inside the agreed window.
- verification → hired checks clear Fires when: Nothing proportionate to the role is unresolved.
- human-read → declined declined after reading Fires when: A person decided no, and said at which stage and on what criterion.
- terms-check → declined terms are incompatible Fires when: The gap is named in the same conversation, before any assessment is booked.
- work-sample → declined work did not meet the rubric Fires when: The score is below the shared criteria, and the criterion is named.
- panel → declined decision rule returns no hire Fires when: The rule agreed beforehand returns no hire, and which dimension decided it is stated.
- level-and-band → declined level and expectation do not meet Fires when: The published band and the candidate's stated expectation do not overlap, which both sides already knew.
- verification → declined discrepancy stands Fires when: The candidate was shown the discrepancy and it remains unresolved.
- published → closed need changed Fires when: The work no longer exists, and the posting comes down the same week.
- approval → closed budget withdrawn Fires when: Headcount is pulled, and every candidate in the process is told within days.
- offer → closed offer withdrawn and explained Fires when: An outstanding offer cannot stand, and the candidate is told why, in writing, immediately.
WF-001 · The hiring funnel, end to end
From the moment headcount is authorised to a signed contract or a closed search, with the actor who owns each step and what the candidate can see from where they stand.
What moves through it: a requisition and the candidate moving through it
The same machine as an ordered list
-
drafted Requisition drafted Hiring manager start
A manager writes the role. Level, band and requirements are decided here, usually by copying the last search for the same team.
What the candidate sees: Nothing. The role does not exist publicly yet.
What lives here
-
authorised Headcount authorised Employer policy
Finance and leadership commit budget against the requisition. Approval can lapse or be withdrawn later without the funnel noticing.
What the candidate sees: Nothing.
What lives here
-
published Posting live Recruiter
The role is public. It may also be refreshed automatically every thirty days, which looks identical to a new opening.
What the candidate sees: The posting, and whatever the posting chose to disclose.
What lives here
-
received Application received ATS vendor
A record exists and is linked to the requisition. Nothing has been read.
What the candidate sees: A confirmation, or silence.
What lives here
-
machine-screened Automated screen ATS vendor
Parser extraction, keyword thresholds, knockout rules and ranking. Decided in under a second.
What the candidate sees: Either nothing, or a rejection within minutes.
What lives here
-
recruiter-queue In the recruiter queue Recruiter
Waiting to be read by a person, against an inbound queue that is usually larger than the week has hours for.
What the candidate sees: Silence, of an indeterminate length.
What lives here
-
recruiter-screen Recruiter screen Recruiter
A conversation about compensation, timeline, location and a two-minute version of the last project.
What the candidate sees: The call itself, and whichever parameters the recruiter chose to share.
What lives here
-
technical Technical assessment Hiring manager
A live exercise, a take-home, or both, scored against a rubric the candidate does not see.
What the candidate sees: The exercise, and sometimes structured feedback afterwards.
What lives here
-
panel Manager and team panel Hiring manager
Depth, ownership and collaboration, assessed across several interviewers who may be measuring different things.
What the candidate sees: The conversations. Rarely the scores.
What lives here
-
levelling Compensation and levelling Employer policy
The level the panel assigned meets the band finance approved. First time the two are compared.
What the candidate sees: A number, or a renegotiation.
What lives here
-
approval Offer approval Employer policy
Manager, director, finance and the talent committee sign off in sequence. Everyone the candidate met has already said yes.
What the candidate sees: Silence, usually described as "final checks".
What lives here
-
offer Offer issued Recruiter
A written offer exists. The requisition is still open until the countersignature lands.
What the candidate sees: The offer document.
What lives here
-
verification Reference and background check Employer policy
A third-party record is compared against what the candidate claimed.
What the candidate sees: A request for documents, or nothing.
What lives here
-
hired Hired Employer policy terminal
Contract executed both ways, start date set, onboarding triggered.
What the candidate sees: A signed contract.
What lives here
-
rejected Rejected Recruiter terminal
A decision was made and communicated. What it says about the cause is a separate question entirely.
What the candidate sees: A message, ranging from a rubric category to a template.
What lives here
-
frozen Search frozen or cancelled Employer policy terminal
Budget withdrawn or the requisition put on hold. Can happen at any point, including after an offer.
What the candidate sees: If the candidate is lucky, an explanation. Often the posting simply disappears.
What lives here
-
lapsed Lapsed without a decision ATS vendor terminal
No one decided anything. The record aged past a threshold, or the posting was never taken down.
What the candidate sees: Silence, then possibly a bulk rejection at two in the morning.
What lives here
- drafted → authorised budget signed off Fires when: Finance commits headcount against the requisition.
- authorised → published posting goes live Fires when: An approved requisition with a written description is published.
- published → received application submitted Fires when: The candidate applies, or answers outbound outreach.
- received → machine-screened rules evaluated Fires when: The record is complete enough for the configured rules to run.
- machine-screened → recruiter-queue thresholds cleared Fires when: Extraction score and every knockout rule pass.
- machine-screened → rejected filtered out Fires when: Any knockout rule fails, or the ranking falls below the advance threshold.
- recruiter-queue → recruiter-screen short-listed Fires when: A person reads the profile and puts it on the list.
- recruiter-queue → lapsed aged out Fires when: No review happened before the expiry threshold.
- recruiter-screen → technical parameters align Fires when: Expectations, timeline and location are compatible, and the profile is submitted to the team.
- recruiter-screen → rejected parameters do not align Fires when: Compensation, level, location or availability rules the candidate out before any engineering is discussed.
- technical → panel assessment passed Fires when: The score clears the rubric threshold.
- technical → rejected assessment not passed Fires when: The score falls short, or the review was too shallow to find what was there.
- panel → levelling panel recommends hire Fires when: Consensus reaches the hire threshold.
- panel → rejected panel does not reach consensus Fires when: A split panel under a unanimity rule defaults to no hire.
- levelling → approval level and band reconcile Fires when: The assigned level and the approved band overlap.
- levelling → rejected level and band do not reconcile Fires when: Expectation sits outside the band and neither the level nor the number moves.
- approval → offer sign-off complete Fires when: Every approver in the chain has cleared it.
- approval → frozen headcount withdrawn Fires when: Budget is pulled or a freeze is announced before the offer is issued.
- offer → verification offer accepted Fires when: The candidate signs and the checks begin.
- offer → frozen offer retracted Fires when: A freeze reaches an outstanding offer before the countersignature.
- verification → hired checks clear Fires when: No unresolved discrepancy in the third-party record.
- verification → rejected discrepancy unresolved Fires when: A record mismatch or an eligibility bar is not reconciled.
- published → lapsed posting outlives the search Fires when: Hiring stops but the listing is never withdrawn.
- rejected → published requisition reopened Fires when: The search restarts, sometimes with a revised profile, sometimes as an automatic refresh.
WF-002 · An application inside the ATS
The machine the candidate never sees: what happens to a submitted application between the form and a human being, and the four ways it can end without anyone reading it.
What moves through it: one application record
The same machine as an ordered list
-
submitted Submitted Candidate start
A form post has been accepted. Fields are validated against the requisition schema; nothing has been interpreted.
What the candidate sees: A confirmation page, sometimes an acknowledgement email.
What lives here
-
parsing Parsing ATS vendor
The document is converted to structured fields. Multi-column layouts, graphics and custom fonts routinely lose whole sections silently.
What the candidate sees: Nothing.
What lives here
-
scoring Rule evaluation ATS vendor
Knockout rules, keyword coverage, years thresholds and ranking features run in sequence, short-circuiting on the first failure.
What the candidate sees: Nothing, for a second or two.
What lives here
-
queued Queued for human review ATS vendor
The record is above the threshold and waiting. Queue position depends on source: outbound lists are usually read first.
What the candidate sees: Silence. This is where most of the waiting happens.
What lives here
-
reviewed Read by a person Recruiter
A recruiter opens the profile. The median attention available per profile is measured in seconds when the queue is deep.
What the candidate sees: Nothing yet.
What lives here
-
advanced Advanced to the funnel Recruiter terminal
The record leaves this machine and enters WF-001 at the recruiter screen.
What the candidate sees: An invitation to talk.
What lives here
-
auto-rejected Rejected by rule ATS vendor terminal
A rule failed. The notification is often queued and sent minutes later, which is what produces a rejection at midnight.
What the candidate sees: A rejection email, minutes after applying.
What lives here
-
human-rejected Rejected by a person Recruiter terminal
Someone read it and passed. What the message says about why is a separate decision, usually a template.
What the candidate sees: A rejection message, generic unless a feedback policy exists.
What lives here
-
expired Expired unreviewed ATS vendor terminal
A scheduled job closed the record after a threshold. Nobody read it, and the email it sends is indistinguishable from one that followed a review.
What the candidate sees: A bulk rejection, or nothing at all.
What lives here
- submitted → parsing document accepted Fires when: Required fields validate and the file is a supported type.
- parsing → scoring fields extracted Fires when: Extraction completes, whether or not it recovered the work history.
- scoring → queued all rules pass Fires when: Every knockout rule passes and the rank clears the advance threshold.
- scoring → auto-rejected a rule fails Fires when: Any knockout rule fails, or the ranking falls below the threshold.
- queued → reviewed a recruiter opens it Fires when: Capacity reaches this position in the queue before the expiry threshold.
- queued → expired threshold reached first Fires when: The record ages past the configured limit with no review recorded.
- reviewed → advanced short-listed Fires when: The profile is put on the active list for outreach.
- reviewed → human-rejected passed over Fires when: The recruiter decides not to advance it.