hoba

State machines

How the process runs

Interactive state machines for the hiring process: step through the canonical baseline, ATS internal pipeline, end-to-end funnel, and client contracting workflows.

Process Simulator Guide

🗺️

Step 1: Select a State Machine Pipeline

Switch between the Canonical Hiring Path, the ATS Pipeline, the End-to-End Funnel, or Client Contracting.

proc.the_path_as_it_is_supposed_to_run · The path as it is supposed to runthe canonical path

What moves through it: one opening, and one candidate moving through it

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.

📐 10 distinct routes run through this path: (3 terminal states)

A construct, not a description of any employer.

1 end at hired on the terms that were published; 6 end at declined, with a reason that can be acted on; 3 end at search closed, and everyone told. A count, not a likelihood — the atlas has no basis for saying which one a person takes.

The same machine as an ordered list
  1. real-needA real opening, described honestlyHiring managerstart

    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.

    What holds this step up

    Where this commitment stops being kept

  2. publishedPublished with its terms on the pageRecruiter

    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

    Where this commitment stops being kept

  3. appliedApplied, and told soCandidate

    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

    Where this commitment stops being kept

  4. machine-checkMachine work stays mechanicalATS 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

    Where this commitment stops being kept

  5. human-readRead by a person, inside the stated windowRecruiter

    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

    Where this commitment stops being kept

  6. terms-checkTerms compared before anyone spends timeRecruiter

    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

    Where this commitment stops being kept

  7. work-sampleAssessed on the work, against a rubric that is sharedHiring 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

    Where this commitment stops being kept

  8. panelOne panel, one question each, one decision ruleHiring 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.

    What holds this step up

    Where this commitment stops being kept

  9. level-and-bandThe level meets the band that was publishedEmployer 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

    Where this commitment stops being kept

  10. approvalApproval already existsEmployer 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

    Where this commitment stops being kept

  11. offerA written offer with everything in itRecruiter

    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.

    Where this commitment stops being kept

  12. verificationChecks that are proportionate and answerableEmployer 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.

    What holds this step up

    Where this commitment stops being kept

  13. hiredHired on the terms that were publishedEmployer policyterminal

    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.

  14. declinedDeclined, with a reason that can be acted onRecruiterterminal

    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

    Where this commitment stops being kept

  15. closedSearch closed, and everyone toldEmployer policyterminal

    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

    Where this commitment stops being kept

  1. real-need → publishedposted with its termsFires when: An approved requisition, a band and a described process go live together.(turnaround: 2d / max: 7d)
  2. published → appliedapplication submittedFires when: The candidate applies against terms they could read beforehand.(turnaround: 7d / max: 30d)
  3. applied → machine-checkrecord processedFires when: The submission is parsed and acknowledged.(turnaround: 1d / max: 2d)
  4. machine-check → human-readpassed to a personFires when: No automated rule ended it, so a person now has it.(turnaround: 2d / max: 5d)
  5. human-read → terms-checkworth a conversationFires when: A person read the profile and wants to talk.(turnaround: 3d / max: 7d)
  6. terms-check → work-sampleterms are compatibleFires when: Band, level, location and timing work for both sides, said out loud.(turnaround: 3d / max: 7d)
  7. work-sample → panelwork meets the rubricFires when: The exercise was scored against the criteria the candidate was given.(turnaround: 5d / max: 10d)
  8. panel → level-and-bandpanel decides by its ruleFires when: The agreed decision rule returns a hire.(turnaround: 3d / max: 5d)
  9. level-and-band → approvallevel lands inside the bandFires when: The evidence-assigned level maps to a point in the published band.(turnaround: 2d / max: 4d)
  10. approval → offercountersignedFires when: The approval that existed before publication is confirmed.(turnaround: 2d / max: 5d)
  11. offer → verificationoffer acceptedFires when: The candidate accepts a complete written offer inside the agreed window.(turnaround: 3d / max: 7d)
  12. verification → hiredchecks clearFires when: Nothing proportionate to the role is unresolved.(turnaround: 5d / max: 14d)
  13. human-read → declineddeclined after readingFires when: A person decided no, and said at which stage and on what criterion.
  14. terms-check → declinedterms are incompatibleFires when: The gap is named in the same conversation, before any assessment is booked.
  15. work-sample → declinedwork did not meet the rubricFires when: The score is below the shared criteria, and the criterion is named.
  16. panel → declineddecision rule returns no hireFires when: The rule agreed beforehand returns no hire, and which dimension decided it is stated.
  17. level-and-band → declinedlevel and expectation do not meetFires when: The published band and the candidate's stated expectation do not overlap, which both sides already knew.
  18. verification → declineddiscrepancy standsFires when: The candidate was shown the discrepancy and it remains unresolved.
  19. published → closedneed changedFires when: The work no longer exists, and the posting comes down the same week.
  20. approval → closedbudget withdrawnFires when: Headcount is pulled, and every candidate in the process is told within days.
  21. offer → closedoffer withdrawn and explainedFires when: An outstanding offer cannot stand, and the candidate is told why, in writing, immediately.

proc.an_application_inside_the_ats · An application inside the ATS

What moves through it: one application record

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.

The same machine as an ordered list
  1. submittedSubmittedCandidatestart

    A form submission 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.

    Entries at this step

  2. parsingParsingATS 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.

    Entries at this step

  3. scoringRule evaluationATS 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.

    Entries at this step

  4. queuedQueued for human reviewATS 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.

    Entries at this step

  5. reviewedRead by a personRecruiter

    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.

    Entries at this step

  6. advancedAdvanced to the funnelRecruiterterminal

    The record leaves this machine and enters proc.the_hiring_funnel_end_to_end at the recruiter screen.

    What the candidate sees: An invitation to talk.

    Entries at this step

  7. auto-rejectedRejected by ruleATS vendorterminal

    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.

    Entries at this step

  8. human-rejectedRejected by a personRecruiterterminal

    Someone read it and did not take it forward. 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.

    Entries at this step

  9. expiredExpired unreviewedATS vendorterminal

    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.

    Entries at this step

  1. submitted → parsingdocument acceptedFires when: Required fields validate and the file is a supported type.(turnaround: 1d / max: 1d)
  2. parsing → scoringfields extractedFires when: Extraction completes, whether or not it recovered the work history.(turnaround: 1d / max: 1d)
  3. scoring → queuedall rules passFires when: Every knockout rule passes and the rank clears the advance threshold.(turnaround: 1d / max: 2d)
  4. scoring → auto-rejecteda rule failsFires when: Any knockout rule fails, or the ranking falls below the threshold.(turnaround: 1d / max: 3d)
  5. queued → revieweda recruiter opens itFires when: Capacity reaches this position in the queue before the expiry threshold.(turnaround: 4d / max: 14d)
  6. queued → expiredthreshold reached firstFires when: The record ages past the configured limit with no review recorded.(turnaround: 30d / max: 60d)
  7. reviewed → advancedshort-listedFires when: The profile is put on the active list for outreach.(turnaround: 2d / max: 5d)
  8. reviewed → human-rejectedpassed overFires when: The recruiter decides not to advance it.(turnaround: 2d / max: 5d)

proc.client_account_hiring_funnel · Client account hiring funnel

What moves through it: a seat funded by a client contract and the candidate moving towards it

From client demand and commercial contract to profile submission, client interview, and placement or unannounced closure.

The same machine as an ordered list
  1. demandClient demand & contract scopeClientstart

    The end client identifies project headcount demand or issues a vendor tender. Budget exists if the contract is signed or is contingent on winning the bid.

    What the candidate sees: Nothing. The search is not visible publicly.

  2. search-openVendor search openedRecruiter

    Vendor recruiting opens direct outreach or listings. Whether an executed contract or an unawarded bid sits behind it is not disclosed.

    What the candidate sees: Outreach messages or job postings without commercial contract context.

    Entries at this step

  3. vendor-screenVendor recruiter screenRecruiter

    Introductory conversation assessing experience and target compensation against the vendor target margin.

    What the candidate sees: A screening call where the rate band is presented as the vendor internal range.

    Entries at this step

  4. vendor-technicalVendor technical evaluationHiring manager

    Technical interview or test task scored against the vendor assessment of the client technical threshold.

    What the candidate sees: A technical evaluation round with vendor engineering staff.

    Entries at this step

  5. submittedSubmitted to clientClient

    The candidate CV is submitted to the client account team for profile review and interview selection.

    What the candidate sees: An extended waiting interval while the client reviews candidate batches.

    Entries at this step

  6. client-interviewClient interview roundClient

    Interview conducted directly by client engineering or project management leadership.

    What the candidate sees: An external interview round evaluating project and culture fit.

    Entries at this step

  7. offerOffer formulationRecruiter

    Compensation package calculated from client billing rate minus required gross margin.

    What the candidate sees: An offer package structured around vendor compensation models.

    Entries at this step

  8. verificationPre-placement verificationEmployer policy

    Client-mandated background checks, certifications, and compliance paperwork.

    What the candidate sees: Document requests and compliance background screening.

    Entries at this step

  9. placedContract signed & project startEmployer policyterminal

    Contract executed and candidate onboarded onto active client delivery.

    What the candidate sees: Confirmed start date and client team onboarding.

    Entries at this step

  10. vendor-declinedVendor-level rejectionRecruiterterminal

    The search terminates at vendor screening or technical evaluation before client submission.

    What the candidate sees: Standard rejection message from the vendor recruitment team.

    Entries at this step

  11. declined-by-clientDeclined by clientClientterminal

    The client declines the CV submission or rejects the candidate after the client interview.

    What the candidate sees: A generic rejection relayed by the vendor without client feedback details.

    Entries at this step

  12. closed-unfundedSearch closed unfunded / tender lostClientterminal

    The search closes because the client tender was lost, project budget was cancelled, or the commercial contract was paused.

    What the candidate sees: Unannounced silence or a notification that project requirements changed.

    Entries at this step

  13. bench-filledRequisition filled from internal benchEmployer policyterminal

    The position is allocated to an existing internal specialist released from another account, closing the external process.

    What the candidate sees: A sudden search closure notification after advancing through interview rounds.

    Entries at this step

  1. demand → search-openContract signed or tender profiles requiredFires when: Commercial contract signed or tender requires candidate CVs(turnaround: 3d / max: 10d)
  2. search-open → vendor-screenCandidate responds to vendor outreachFires when: Outreach accepted and screen booked(turnaround: 5d / max: 14d)
  3. search-open → closed-unfundedTender lost or client contract cancelled earlyFires when: Commercial opportunity discontinued before screening(turnaround: 7d / max: 30d)
  4. vendor-screen → vendor-technicalVendor recruiter screen passedFires when: Expectations aligned with client billing margin(turnaround: 3d / max: 7d)
  5. vendor-screen → vendor-declinedScreening mismatch or rate misalignmentFires when: Candidate rate exceeds allowable vendor margin or skills misfit(turnaround: 2d / max: 5d)
  6. vendor-technical → submittedVendor assessment passedFires when: Technical bar meets vendor expectation of client threshold(turnaround: 4d / max: 10d)
  7. vendor-technical → vendor-declinedVendor assessment not metFires when: Profile does not meet vendor internal quality bar(turnaround: 3d / max: 7d)
  8. submitted → client-interviewClient approves CV submissionFires when: Client manager accepts profile and requests interview(turnaround: 5d / max: 14d)
  9. submitted → declined-by-clientClient rejects CV submissionFires when: Client manager rejects profile on CV review(turnaround: 5d / max: 14d)
  10. submitted → bench-filledVendor assigns internal bench specialistFires when: Bench consultant becomes available mid-search(turnaround: 3d / max: 10d)
  11. submitted → closed-unfundedClient cancels requisition or loses project fundingFires when: Client withdraws demand during profile review(turnaround: 7d / max: 30d)
  12. client-interview → offerClient approves interviewFires when: Client confirms candidate meets project requirements(turnaround: 4d / max: 10d)
  13. client-interview → declined-by-clientClient declines after interviewFires when: Client decides against candidate after meeting(turnaround: 3d / max: 7d)
  14. offer → verificationOffer agreed and contract draftedFires when: Candidate accepts offer parameters(turnaround: 3d / max: 7d)
  15. offer → closed-unfundedClient pulls project before signingFires when: Client cancels funding after offer extended(turnaround: 4d / max: 14d)
  16. verification → placedBackground check passed and start date confirmedFires when: Verification complete and project onboarding commences(turnaround: 5d / max: 14d)

proc.the_hiring_funnel_end_to_end · The hiring funnel, end to end

What moves through it: a requisition and the candidate moving through it

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.

The same machine as an ordered list
  1. draftedRequisition draftedHiring managerstart

    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.

    Entries at this step

  2. authorisedHeadcount authorisedEmployer 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.

    Entries at this step

  3. publishedPosting liveRecruiter

    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 it states.

    Entries at this step

  4. receivedApplication receivedATS vendor

    A record exists and is linked to the requisition. Nothing has been read.

    What the candidate sees: A confirmation, or silence.

    Entries at this step

  5. machine-screenedAutomated screenATS 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.

    Entries at this step

  6. recruiter-queueIn the recruiter queueRecruiter

    Waiting to be read by a person, in an inbound queue that usually holds more profiles than the week has hours.

    What the candidate sees: Silence of indeterminate length.

    Entries at this step

  7. recruiter-screenRecruiter screenRecruiter

    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 states.

    Entries at this step

  8. technicalTechnical assessmentHiring 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.

    Entries at this step

  9. panelManager and team panelHiring manager

    Depth, ownership and collaboration, assessed across several interviewers who may be measuring different things.

    What the candidate sees: The conversations. Rarely the scores.

    Entries at this step

  10. levellingCompensation and levellingEmployer 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.

    Entries at this step

  11. approvalOffer approvalEmployer 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".

    Entries at this step

  12. offerOffer issuedRecruiter

    A written offer exists. The requisition is still open until the countersignature lands.

    What the candidate sees: The offer document.

    Entries at this step

  13. verificationReference and background checkEmployer policy

    A third-party record is compared against what the candidate claimed.

    What the candidate sees: A request for documents, or nothing.

    Entries at this step

  14. hiredHiredEmployer policyterminal

    Contract executed both ways, start date set, onboarding triggered.

    What the candidate sees: A signed contract.

    Entries at this step

  15. rejectedRejectedRecruiterterminal

    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.

    Entries at this step

  16. frozenSearch frozen or cancelledEmployer policyterminal

    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.

    Entries at this step

  17. lapsedLapsed without a decisionATS vendorterminal

    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.

    Entries at this step

  1. drafted → authorisedbudget signed offFires when: Finance commits headcount against the requisition.(turnaround: 7d / max: 21d)
  2. authorised → publishedposting goes liveFires when: An approved requisition with a written description is published.(turnaround: 2d / max: 7d)
  3. published → receivedapplication submittedFires when: The candidate applies, or answers outbound outreach.(turnaround: 7d / max: 30d)
  4. received → machine-screenedrules evaluatedFires when: The record is complete enough for the configured rules to run.(turnaround: 1d / max: 3d)
  5. machine-screened → recruiter-queuethresholds clearedFires when: Extraction score and every knockout rule pass.(turnaround: 1d / max: 3d)
  6. machine-screened → rejectedfiltered outFires when: Any knockout rule fails, or the ranking falls below the advance threshold.(turnaround: 1d / max: 7d)
  7. recruiter-queue → recruiter-screenshort-listedFires when: A person reads the profile and puts it on the list.(turnaround: 5d / max: 14d)
  8. recruiter-queue → lapsedaged outFires when: No review happened before the expiry threshold.(turnaround: 30d / max: 60d)
  9. recruiter-screen → technicalparameters alignFires when: Expectations, timeline and location are compatible, and the profile is submitted to the team.(turnaround: 3d / max: 7d)
  10. recruiter-screen → rejectedparameters do not alignFires when: Compensation, level, location or availability rules the candidate out before any engineering is discussed.(turnaround: 2d / max: 5d)
  11. technical → panelassessment passedFires when: The score clears the rubric threshold.(turnaround: 5d / max: 12d)
  12. technical → rejectedassessment not passedFires when: The score falls short, or the review is too shallow to find what is there.(turnaround: 3d / max: 7d)
  13. panel → levellingpanel recommends hireFires when: Consensus reaches the hire threshold.(turnaround: 3d / max: 7d)
  14. panel → rejectedpanel does not reach consensusFires when: A split panel under a unanimity rule defaults to no hire.(turnaround: 3d / max: 7d)
  15. levelling → approvallevel and band reconcileFires when: The assigned level and the approved band overlap.(turnaround: 2d / max: 5d)
  16. levelling → rejectedlevel and band do not reconcileFires when: Expectation sits outside the band and neither the level nor the number moves.(turnaround: 2d / max: 5d)
  17. approval → offersign-off completeFires when: Every approver in the chain has cleared it.(turnaround: 3d / max: 7d)
  18. approval → frozenheadcount withdrawnFires when: Budget is pulled or a freeze is announced before the offer is issued.(turnaround: 3d / max: 14d)
  19. offer → verificationoffer acceptedFires when: The candidate signs and the checks begin.(turnaround: 3d / max: 7d)
  20. offer → frozenoffer retractedFires when: A freeze reaches an outstanding offer before the countersignature.(turnaround: 2d / max: 7d)
  21. verification → hiredchecks clearFires when: No unresolved discrepancy in the third-party record.(turnaround: 5d / max: 14d)
  22. verification → rejecteddiscrepancy unresolvedFires when: A record mismatch or an eligibility bar is not reconciled.(turnaround: 3d / max: 7d)
  23. published → lapsedposting outlives the searchFires when: Hiring stops but the listing is never withdrawn.(turnaround: 60d / max: 120d)
  24. rejected → publishedrequisition reopenedFires when: The search restarts, sometimes with a revised profile, sometimes as an automatic refresh.(turnaround: 14d / max: 60d)