Service 17

Onboarding Automation

Onboarding is a sequence with owners, dependencies and deadlines, and most companies run it as a checklist someone forgets. We build it as a tracked state machine that chases itself.

On this page
  1. What onboarding automation actually is
  2. Who this is for, and who it is not for
  3. What we actually build
  4. How it works technically
  5. The five kinds of onboarding step
  6. The build process, stage by stage
  7. What you get at handover
  8. Where these projects go wrong
  9. What it costs to run once it is live
  10. How to tell whether you need this
  11. How to start

What onboarding automation actually is

The short answer

Onboarding automation turns a new customer or new employee setup from a checklist into a tracked state machine. Every step has a kind, an owner, a dependency on other steps, a due date and a defined failure behaviour. The system provisions what can be provisioned, chases the humans who owe something, verifies that each action actually took effect, and escalates on a schedule instead of when somebody remembers. It ends at an observed event, not at the bottom of a list.

The difference from a checklist is that a checklist records intent and a state machine records reality. A checklist tells you eleven of fourteen boxes are ticked. A state machine tells you the account is blocked on a tax form requested nine days ago, that two reminders were sent, that the third fires tomorrow, and that the whole thing then becomes a named person's problem.

Most of this is not a model problem. Provisioning, dependency handling, retries and nudges are ordinary software. Models earn a place in three narrow spots: reading and validating documents people upload, drafting the chase messages, and answering the newcomer's questions from your own handbook.

  • Verify stepsEvery provisioning step needs a matching verification step. Create calls report success and then quietly do nothing more often than anyone expects.
  • One state eachEach onboarding sits in exactly one named state with logged transitions. Progress bars built from checkbox counts hide the step that is stuck.
  • Chase, never decideAutomation is strong at chasing people and weak at judging. Assemble the packet for a human decision and leave the decision alone.
  • Exit criteriaOnboarding finishes at an observed event. If nobody can name that event, the sequence has no finish line and will always look complete.
  • Pin the versionA template edited mid-flight breaks running instances. Each instance pins the template version it started on.
Terms used on this page
State machine
A model of a process in which each item sits in exactly one named state and every move between states is an explicit, logged transition with a rule attached.
Exit criteria
The condition that defines onboarding as finished, expressed as an observed event rather than a completed list. Without one, onboarding ends when somebody stops looking.
Compensating action
The operation that undoes a completed step when a later step fails. Provisioning without one leaves half-created accounts behind every time something goes wrong.
Dependency edge
A declared prerequisite between two steps. Declaring dependencies is what lets independent work run at the same time instead of queueing behind the slowest item.
Nudge schedule
The timed sequence of reminders sent to whoever owes an outstanding step, counted from the due date, with a stop condition and a defined escalation point.

Who this is for, and who it is not for

This is worth building when onboarding crosses more than two teams, takes more calendar days than touch hours, and stalls in different places each time. It is not worth building when you onboard a handful of accounts a month through one person who is good at it.

What is true of your onboardingVerdictReasoning
Calendar time is many times the actual working timeGood fitThe gap is waiting and chasing, which is exactly what a sequence removes
Three or more teams touch a single onboardingGood fitHandoffs are where things stall, and handoffs are what a state machine makes visible
Provisioning involves several systems and often needs redoingGood fitIdempotent, verified provisioning is deterministic work with a clear payoff
A handful of accounts a month, one owner, no complaintsPoor fitA well-kept sheet beats a build. Revisit at volume
Every onboarding is genuinely bespokePartial fitAutomate provisioning and verification, leave the sequence human
The process itself is about to changeWaitEncoding a process you are redesigning is the fastest route to shelfware
Onboarding pays back on waiting time, not on typing time.
  • Nobody can name the finish line. If you cannot say what event means this customer is onboarded, the system will report success on incomplete work.
  • The steps are not written down anywhere true. The documented process and the real one are different documents. We map the real one, and that is a week of work by itself.
  • No owner for the sequence after launch. Templates rot faster than pipelines, because the business changes underneath them. Read who owns the automation after launch before starting.
  • You want it to replace the human welcome. It should not. The system removes chasing, not contact.
The version we sometimes recommend instead

If your onboarding is slow mainly because one team is overloaded, a sequence will surface that in week one and change nothing. Automation makes a bottleneck visible and measurable, which is useful, but the fix is staffing or scope. We would rather say that on the call than build you an expensive dashboard of the same problem.

What we actually build

Five components, and the template definition is the one that decides whether the rest ages well.

The template definition

A declarative file per onboarding type, holding every step with its kind, actor, owner, dependencies, due offset, nudge schedule, validation and failure behaviour. It lives in version control and changes go through review. Running instances pin the version they started on, so editing a template never mutates work already in flight.

The engine

A scheduler that walks the dependency graph, starts everything whose prerequisites are met, holds state per instance, and wakes on timers. Independent steps run at the same time, which is where most of the calendar time comes back. A linear checklist waits on its slowest item even when nine other things could have started on day one.

Provisioning and verification

Typed integrations with each system that has to create something, written idempotently and keyed, with timeouts, bounded retries and a compensating action. Every one is paired with a verification step that checks the thing exists and works. This is standard integration work, covered under systems integration, and it is most of the engineering hours.

The human layer

Forms and upload links for collection, a review queue for decisions, nudges on a schedule with stop conditions, and escalation to a named person after a set number of unanswered reminders. Uploaded documents are validated against a schema and read for content, which is where document processing belongs rather than a person squinting at a scan.

Observability

A stuck-step histogram, cycle time per step, chase count per step, first-time-right rate on collected documents, and time to the exit event. The stuck-step histogram is the single most useful chart we build, because it names the one step that costs you a week.

  • A versioned template file per onboarding type, editable by an operations lead
  • Idempotent provisioning integrations, each with a compensating action
  • A verify step for every provision step, with its own retry and escalation
  • Forms, upload links and schema validation for everything collected
  • A queue for the decisions humans must make, with the evidence attached

How it works technically

One instance moves through a lifecycle with timers on it. The times below are the shape, not a promise; your own dependency graph decides the real numbers.

Hour 0
Trigger and instance creation

A state transition in the source system fires, not an event. Deals move backwards and forwards, so we trigger on entering a state and guard with an idempotency key on the account, which is what stops two instances existing for one customer.

Hour 0
Template selection and pinning

Plan tier, region and segment select the template. The instance records the template version, so later edits do not rewrite work in progress.

Hour 0
Fan-out

Every step with no unmet dependency starts at once. Collection requests go out, provisioning that needs nothing else runs immediately.

Day 1 to 3
The chase

Nudges fire from the due date on the recipient's own calendar, skipping their night and their public holidays. Each stops the moment the step completes rather than on a daily poll.

Day 3
Escalation

After the configured number of unanswered nudges, the step moves to a named person with the history attached. Escalation is a state, so it is visible and countable.

Day 4
Provision and verify

Dependencies met, provisioning runs idempotently with bounded retries. A verify step then confirms the result. A failure goes to a dead letter queue a human reads, never into a silent skip.

Day 14
Exit criteria

The instance closes only when the named event is observed. Steps finishing is not the same as onboarding finishing, and conflating the two is how companies report success on accounts that never started.

Idempotency, and why it decides everything

Every write in this system will happen twice eventually. A webhook retries, a worker restarts mid-step, an operator clicks the button again. If provisioning is not keyed, you get two workspaces, two licences and a support ticket. Keys go on instance creation and on every provisioning call, derived from stable identifiers rather than timestamps. The mechanics are covered in idempotency in automation, and it is the concept that separates a sequence that survives from one that quietly corrupts your data.

Onboarding template definition, one step of each kindyaml
# onboarding/templates/customer_standard.yaml
# One file per template. Versioned in the repo and reviewed like code.

template: customer_standard
version: 11
clock: account.billing_country     # due dates in the customer's calendar

steps:
  - id: collect_tax_details
    kind: collect                  # provision | collect | decide | teach | verify
    actor: customer
    owner: role:account_manager
    depends_on: []
    due_after: P2D                 # ISO 8601 duration from template start
    nudge:
      at: [P1D, P3D, P7D]          # measured from the due date, not the start
      channel: [email, in_app]
      stop_on: step_complete
      escalate_after: 3            # then it becomes a named person's problem
    validation:
      schema: schemas/tax_details.v3.json
      on_invalid: return_to_actor_with_reason

  - id: provision_workspace
    kind: provision
    actor: system
    depends_on: [collect_tax_details, decide_plan_tier]
    idempotency_key: "{{account.id}}:workspace:v1"
    timeout: PT90S
    retry: {attempts: 3, backoff: exponential, jitter: true}
    on_fail: dead_letter           # a queue a human reads every morning
    compensate: revoke_workspace   # what undoes it if a later step fails

  - id: verify_workspace_reachable
    kind: verify                   # every provision step needs one of these
    actor: system
    depends_on: [provision_workspace]
    check: http_get {{workspace.url}}/health expect 200
    on_fail: raise_to:role:platform_oncall

exit_criteria:                     # onboarding does not end when the steps end
  - verify_workspace_reachable.passed
  - first_value_event within P14D  # name the event or there is no finish line

Three details in that file do the heavy lifting. The clock is the customer's, not the server's, so a due date does not land on a holiday somewhere. The nudge schedule counts from the due date and carries a stop condition and an escalation, so reminders end. And the compensating action is declared at the same time as the provisioning, because nobody ever goes back and adds one.

The five kinds of onboarding step

Before automating anything, label every step. The argument about which label applies is where the real design happens, and it usually exposes two or three steps that were never going to work as written.

Framework

The ChatGPTalker Onboarding Step Grid

Every step in an onboarding is one of five kinds, and each kind has exactly one correct treatment.

01
Provision

The system creates something: an account, an access grant, a licence, a key. Deterministic, idempotent, fully automatable, and it must carry a compensating action that undoes it.

02
Collect

Someone outside the system owes information or a document. This cannot be automated, only chased and validated. The automation is the nudge schedule, the schema check and the escalation.

03
Decide

A person makes a judgement: approve a limit, assign a tier, sign off an exception. Automate the packet that lands in front of them, with the evidence assembled. Never the decision.

04
Teach

A human has to learn something. Automation schedules it, delivers it and records completion, and completion is evidence of attendance rather than competence. Do not let a dashboard tell you otherwise.

05
Verify

Confirm a previous step took effect: the account exists, the payment cleared, the data landed, the access works. This kind is missing from almost every checklist we are shown, and it is the one that turns a list into a system.

Two rules make the grid useful. Every Provision step must have a matching Verify step. And no step may carry two kinds, because a step that is both a collect and a decide is two steps wearing one name, and it will be the step that stalls.

Customer onboardingEmployee onboarding
Who you are chasingSomeone outside, with no obligation to reply quicklySomeone inside, with a manager and a start date
ReversalRare, usually a deactivationGuaranteed, so the graph has to run backwards
Identity sourceThe billing or CRM recordThe HR system, and nothing else is acceptable
What failure costsA slow start, a ticket, sometimes a cancellationA person idle on day one, or access outliving the job
Compliance pressureData handling and payment rulesAccess reviews and an audit trail of who granted what
Where a model earns a placeReading uploaded documents, drafting the chaseAnswering the newcomer from the internal handbook

The build process, stage by stage

Six stages. The first two are archaeology, and they are the reason the rest works.

  1. Walk the last ten onboardingsWeek one

    Not the documented process, the real one. We read the actual threads, tickets and tasks for ten recent instances and build a timeline of each. The documented process is a description of an intention; the threads are what happened.

  2. Label every step with its kindWeek one to two

    The step grid applied to the real process. This is where missing verify steps appear, where two steps hiding in one name get separated, and where somebody says out loud that a step nobody performs is still on the list.

  3. Model the graphWeek two

    Dependencies, owners, due offsets, escalation targets, exit criteria. Drawing the graph almost always shows that half the sequence could have run in parallel and never did, which is where the calendar time hides.

  4. Build provisioning and verificationWeek two to five

    Idempotent integrations with compensating actions, paired verify steps, dead letter queues. Most of the hours land here, and the count of systems matters far more than the count of steps.

  5. Human layerWeek four to six

    Forms, upload validation, nudge schedules with stop conditions, decision queues, escalation routing. Also the messages themselves, which should read as though a person wrote them, because a recipient who feels processed replies more slowly.

  6. Run in parallel, then switchWeek six to eight

    The system tracks real onboardings while humans still act, so the graph is corrected against reality before it takes control. Then provisioning is handed over one step at a time, starting with the reversible ones. Rollout advice is in rolling out automation to a team.

The stage people try to skip

Walking ten real onboardings feels like a week spent not building. Every project that skipped it has encoded a process that does not exist, discovered this during rollout, and paid for the week twice. If your team says the process is already documented, ask when the document was last edited and compare it against one real thread.

What you get at handover

A running engine, templates an operations lead can edit without an engineer, and enough measurement to tell whether the process is getting better or just faster at being wrong.

  • The engine and integrations in your repository, with infrastructure as code
  • Template files per onboarding type, documented, versioned, and editable without a deploy
  • A test harness that runs a template end to end against sandbox systems before it ships
  • Dashboards: stuck steps, cycle time per step, chase counts, first-time-right rate, time to exit event
  • A runbook covering how to add a step, change a nudge schedule, reverse a provisioning action and handle a dead letter
Before you switch the old process off
0 of 7 done

Where these projects go wrong

Onboarding failures are mostly about state, ownership and reversal. Very few of them are about the model.

FailureHow it shows upWhat prevents it
No verify stepThe system reports a provisioned account that does not workA verify step paired to every provision, with its own retry and escalation
Template edited mid-flightIn-progress onboardings jump states or skip steps after a changeInstances pin the template version they started on; changes apply to new instances
Duplicate instancesTwo onboardings, two workspaces, one confused customerIdempotency key on instance creation, and triggering on state entry rather than events
No compensating actionsHalf-provisioned accounts accumulating quietly across systemsDeclare the undo beside the do, and test the reversal path once per quarter
Nudges that never stopReminders after completion, or forever, and recipients filtering you outStop conditions evaluated on state change, not a daily poll, plus a hard escalation cap
Timezone and holiday mistakesReminders at three in the morning, deadlines on a public holidayCompute every due date and nudge in the recipient's own calendar
Offboarding forgottenAccess outliving employment, discovered during an auditBuild the reverse graph in the same project, not as a later phase
The one that turns into an audit finding

Employee onboarding and offboarding are the same graph in two directions, and only one of them ever gets built. Access granted on day one outlives the job, nobody notices until an access review, and the finding lands on the person who sponsored the automation. Build the reverse path in the same project even if you launch it later.

Automating the decision instead of the packet

The most tempting mistake is letting the system approve things. It reads well in a demo: the model reviews the documents and grants the tier. Then a case arrives that needed a human to notice something nobody wrote down, and the decision is defensible to nobody. Automate the assembly instead. Pull the documents, run the checks, lay the evidence out, and put one screen in front of a person with a yes and a no on it. That removes most of the work and none of the accountability.

What it costs to run once it is live

Model spend on an onboarding system is small, because most steps never touch a model. The recurring cost is integration maintenance: systems change their APIs, permissions get revoked, and a step that worked in March fails silently in September unless something is watching.

Model spend for an onboarding pipeline

Set the price fields to your provider's current published rate per million tokens. The defaults are illustrative figures for the arithmetic, not quoted prices.

0Model spend per onboarding
0Model spend per month
0Model-calling steps per onboarding

Run that with your own numbers and the point becomes obvious quickly. Model spend on this workload is usually a rounding error against a single integration breaking for a week. Budget accordingly, and be suspicious of any proposal where token cost is the headline number.

  • Integration maintenance. The real recurring cost. Every connected system is a dependency with its own release schedule.
  • Credential rotation. Service accounts expire and get revoked during unrelated security work. Monitor the auth path, not just the happy path.
  • Template maintenance. Pricing changes, a new plan tier, a new region, and the template needs an edit. Budget an owner rather than a project.
  • Sandbox environments. Testing a provisioning change against production is how you create a real account for a customer who does not exist.
  • Infrastructure. A scheduler, a queue, a database and a log store. Small next to everything above.
The maintenance signal to watch

The number that predicts trouble is the dead letter queue depth over time. A flat line means integrations are healthy. A slow climb nobody clears means the system is degrading while every dashboard still shows green, because the failures are sitting somewhere polite and out of sight.

How to tell whether you need this

Pull the last ten onboardings and answer five questions. It takes an afternoon and it decides the whole thing.

  1. How many calendar days did each take, and how many hours of actual work went into it? A large gap is waiting, and waiting is what a sequence removes.
  2. Which step was the last one done in each case? If the same step is late in seven of ten, you have one problem rather than a process problem.
  3. How many steps had to be redone because the first attempt did not take effect? That count is your missing verification.
  4. How many chase messages did a human write by hand? Those are free to automate and nobody enjoys writing them.
  5. Can everyone in the room name the event that means onboarding finished? If two people give different answers, fix that before anything is built.

If the ten instances look similar and the gap between calendar time and touch time is wide, the build pays back on that gap alone. If they look nothing alike, automate provisioning and verification only, keep the sequence in human hands, and revisit when volume argues otherwise.

How to start

Bring artefacts, not a description. The first call goes fastest when we can look at real instances and a list of the systems that have to be touched.

  • Ten recent onboardings, with their threads and tickets, however messy
  • The list of systems something has to be created in, and who owns access to each
  • The current checklist, if one exists, plus an honest note on where it lies
  • Whoever will own the templates afterwards, on the call from the beginning

The first deliverable is a labelled graph of your real process with the missing verify steps marked. That document is useful even if you never build anything, which is the point of producing it first.

Cite this

ChatGPTalker, Onboarding Automation: state machines, the five kinds of onboarding step, idempotent provisioning and exit criteria.

Questions we get asked

How is this different from the onboarding checklist in our project tool?
A checklist records intent and a state machine records reality. The tool cannot chase on a schedule, verify that provisioning worked, run independent steps at the same time, or escalate on its own. It shows you eleven of fourteen boxes ticked without telling you which one is blocking.
Can non-engineers change the sequence after handover?
That is the design goal, and it is the difference between a system that survives and one that ossifies. Templates are readable files with reviewed changes, so an operations lead can add a step, change a due date or rewrite a nudge. Structural changes, like a new integration, still need an engineer.
Where does a language model actually get used in onboarding?
Three places. Reading and validating uploaded documents against what was requested, drafting chase messages that read as though a person wrote them, and answering a newcomer's questions from your internal handbook. Provisioning, dependencies, retries and scheduling are ordinary software with no model in them.
What happens when someone never responds to the nudges?
The step escalates after a set number of unanswered reminders and becomes a named person's problem, with the full history attached. Escalation is a state rather than an email, so it is visible on a dashboard and countable over time. Reminders stop at that point instead of continuing forever.
Does employee onboarding automation also handle offboarding?
It should, and we build the reverse graph in the same project even when it launches later. Offboarding is the same dependency graph run backwards, and it is where the compliance exposure actually sits. Access granted on day one outliving the job is the most common audit finding in this area.
How do you stop two onboardings being created for the same customer?
An idempotency key on instance creation, derived from a stable account identifier, plus triggering on entry into a state rather than on an event. Deals move backwards and forwards between stages, and a system that listens for events rather than transitions will happily start a second instance.

Tell us what is eating the hours.

Send the process, the volume and the tools it touches. You get a scoped plan with a build shape and a timeline, not a brochure.

Start a project