SwimdraftPricingSign inStart free

Employee onboarding BPMN example

Employee onboarding runs from the moment an offer is accepted to the new starter being fully productive. Teams map it because it is a coordination problem more than a sequence: HR, IT, and the line manager all have work to do before day one, and a single missed handoff means a new hire sitting at a desk with no laptop and no plan. The usual failure is treating it as one long checklist owned by nobody.

This model uses a single pool with three lanes: HR, IT, and Line manager. A background check gateway guards the front of the process, so a failed check exits cleanly through its own end event. The choice worth noticing is the parallel gateway pair: account provisioning, equipment ordering, and first week planning genuinely happen at the same time, so modelling them as a sequence would misstate how the process actually runs.

Employee onboarding: BPMN 2.0 diagram
Employee onboarding process modelled as a BPMN 2.0 diagram

Standard BPMN 2.0 interchange XML: opens in Camunda Modeler, Signavio, Bizagi, and any other compliant tool.

The process at a glance

Starts when
Offer accepted
Ends with
Offer withdrawn · Employee onboarded
Lanes
HR · IT · Line manager
Decisions
Checks clear?

How to read this diagram

Everything begins at the "Offer accepted" start event in the HR lane. HR issues the contract and runs background checks, which feed the exclusive gateway "Checks clear?". The No branch, marked as the default flow, leads to withdrawing the offer and the "Offer withdrawn" end event. The Yes branch hits a parallel gateway that splits the token three ways: IT provisions accounts and orders the laptop and building pass, while the Line manager plans the first week.

A second parallel gateway joins the three branches, and the process only moves on once all of them have completed. That join is the whole point of the model: induction day cannot start until IT and the manager are both ready. HR then runs the induction and the process closes at the "Employee onboarded" end event, giving the flow one rejection outcome and one success outcome.

BPMN elements used

ElementCountIn this diagram
Start event1Offer accepted
End event2Offer withdrawn, Employee onboarded
Task2Withdraw offer, Order laptop and pass
User task3Issue contract, Plan first week, Run induction day
Service task2Run background checks, Provision IT accounts
Exclusive gateway1Checks clear?
Parallel gateway2
View the BPMN 2.0 XML for this diagram
<?xml version="1.0" encoding="UTF-8"?>
<bpmn2:definitions xmlns:bpmn2="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1" targetNamespace="http://bpmn.io/schema/bpmn" exporter="swimdraft" exporterVersion="1.0">
  <bpmn2:collaboration id="Collaboration_1">
    <bpmn2:participant id="pool_onb" name="Employee onboarding" processRef="Process_pool_onb" />
  </bpmn2:collaboration>
  <bpmn2:process id="Process_pool_onb" isExecutable="false">
    <bpmn2:laneSet id="LaneSet_pool_onb">
      <bpmn2:lane id="lane_onb_hr" name="HR">
        <bpmn2:flowNodeRef>start_onb</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_onb_contract</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_onb_checks</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_onb_checks</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_onb_withdraw</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_onb_withdrawn</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_onb_split</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_onb_join</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_onb_induct</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_onb_done</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_onb_it" name="IT">
        <bpmn2:flowNodeRef>t_onb_accounts</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_onb_kit</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_onb_mgr" name="Line manager">
        <bpmn2:flowNodeRef>t_onb_plan</bpmn2:flowNodeRef>
      </bpmn2:lane>
    </bpmn2:laneSet>
    <bpmn2:startEvent id="start_onb" name="Offer accepted">
      <bpmn2:outgoing>fonb1</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:userTask id="t_onb_contract" name="Issue contract">
      <bpmn2:incoming>fonb1</bpmn2:incoming>
      <bpmn2:outgoing>fonb2</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:serviceTask id="t_onb_checks" name="Run background checks">
      <bpmn2:incoming>fonb2</bpmn2:incoming>
      <bpmn2:outgoing>fonb3</bpmn2:outgoing>
    </bpmn2:serviceTask>
    <bpmn2:exclusiveGateway id="g_onb_checks" name="Checks clear?" default="fonb5">
      <bpmn2:incoming>fonb3</bpmn2:incoming>
      <bpmn2:outgoing>fonb4</bpmn2:outgoing>
      <bpmn2:outgoing>fonb5</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:task id="t_onb_withdraw" name="Withdraw offer">
      <bpmn2:incoming>fonb5</bpmn2:incoming>
      <bpmn2:outgoing>fonb6</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:endEvent id="end_onb_withdrawn" name="Offer withdrawn">
      <bpmn2:incoming>fonb6</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:parallelGateway id="g_onb_split">
      <bpmn2:incoming>fonb4</bpmn2:incoming>
      <bpmn2:outgoing>fonb7</bpmn2:outgoing>
      <bpmn2:outgoing>fonb8</bpmn2:outgoing>
      <bpmn2:outgoing>fonb9</bpmn2:outgoing>
    </bpmn2:parallelGateway>
    <bpmn2:serviceTask id="t_onb_accounts" name="Provision IT accounts">
      <bpmn2:incoming>fonb7</bpmn2:incoming>
      <bpmn2:outgoing>fonb10</bpmn2:outgoing>
    </bpmn2:serviceTask>
    <bpmn2:task id="t_onb_kit" name="Order laptop and pass">
      <bpmn2:incoming>fonb8</bpmn2:incoming>
      <bpmn2:outgoing>fonb11</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:userTask id="t_onb_plan" name="Plan first week">
      <bpmn2:incoming>fonb9</bpmn2:incoming>
      <bpmn2:outgoing>fonb12</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:parallelGateway id="g_onb_join">
      <bpmn2:incoming>fonb10</bpmn2:incoming>
      <bpmn2:incoming>fonb11</bpmn2:incoming>
      <bpmn2:incoming>fonb12</bpmn2:incoming>
      <bpmn2:outgoing>fonb13</bpmn2:outgoing>
    </bpmn2:parallelGateway>
    <bpmn2:userTask id="t_onb_induct" name="Run induction day">
      <bpmn2:incoming>fonb13</bpmn2:incoming>
      <bpmn2:outgoing>fonb14</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:endEvent id="end_onb_done" name="Employee onboarded">
      <bpmn2:incoming>fonb14</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="fonb1" sourceRef="start_onb" targetRef="t_onb_contract" />
    <bpmn2:sequenceFlow id="fonb2" sourceRef="t_onb_contract" targetRef="t_onb_checks" />
    <bpmn2:sequenceFlow id="fonb3" sourceRef="t_onb_checks" targetRef="g_onb_checks" />
    <bpmn2:sequenceFlow id="fonb4" name="Yes" sourceRef="g_onb_checks" targetRef="g_onb_split">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="fonb5" name="No" sourceRef="g_onb_checks" targetRef="t_onb_withdraw" />
    <bpmn2:sequenceFlow id="fonb6" sourceRef="t_onb_withdraw" targetRef="end_onb_withdrawn" />
    <bpmn2:sequenceFlow id="fonb7" sourceRef="g_onb_split" targetRef="t_onb_accounts" />
    <bpmn2:sequenceFlow id="fonb8" sourceRef="g_onb_split" targetRef="t_onb_kit" />
    <bpmn2:sequenceFlow id="fonb9" sourceRef="g_onb_split" targetRef="t_onb_plan" />
    <bpmn2:sequenceFlow id="fonb10" sourceRef="t_onb_accounts" targetRef="g_onb_join" />
    <bpmn2:sequenceFlow id="fonb11" sourceRef="t_onb_kit" targetRef="g_onb_join" />
    <bpmn2:sequenceFlow id="fonb12" sourceRef="t_onb_plan" targetRef="g_onb_join" />
    <bpmn2:sequenceFlow id="fonb13" sourceRef="g_onb_join" targetRef="t_onb_induct" />
    <bpmn2:sequenceFlow id="fonb14" sourceRef="t_onb_induct" targetRef="end_onb_done" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">
      <bpmndi:BPMNShape id="pool_onb_di" bpmnElement="pool_onb" isHorizontal="true">
        <dc:Bounds x="20" y="20" width="1420" height="610" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_onb_hr_di" bpmnElement="lane_onb_hr" isHorizontal="true">
        <dc:Bounds x="50" y="20" width="1390" height="240" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_onb_it_di" bpmnElement="lane_onb_it" isHorizontal="true">
        <dc:Bounds x="50" y="260" width="1390" height="240" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_onb_mgr_di" bpmnElement="lane_onb_mgr" isHorizontal="true">
        <dc:Bounds x="50" y="500" width="1390" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="start_onb_di" bpmnElement="start_onb">
        <dc:Bounds x="112" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="93" y="101" width="75" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_onb_contract_di" bpmnElement="t_onb_contract">
        <dc:Bounds x="230" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_onb_checks_di" bpmnElement="t_onb_checks">
        <dc:Bounds x="380" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_onb_checks_di" bpmnElement="g_onb_checks">
        <dc:Bounds x="555" y="52" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="544" y="32" width="72" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_onb_withdraw_di" bpmnElement="t_onb_withdraw">
        <dc:Bounds x="680" y="147" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_onb_withdrawn_di" bpmnElement="end_onb_withdrawn">
        <dc:Bounds x="862" y="169" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="840" y="211" width="80" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_onb_split_di" bpmnElement="g_onb_split">
        <dc:Bounds x="705" y="52" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_onb_accounts_di" bpmnElement="t_onb_accounts">
        <dc:Bounds x="830" y="277" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_onb_kit_di" bpmnElement="t_onb_kit">
        <dc:Bounds x="830" y="387" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_onb_plan_di" bpmnElement="t_onb_plan">
        <dc:Bounds x="830" y="517" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_onb_join_di" bpmnElement="g_onb_join">
        <dc:Bounds x="1005" y="52" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_onb_induct_di" bpmnElement="t_onb_induct">
        <dc:Bounds x="1130" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_onb_done_di" bpmnElement="end_onb_done">
        <dc:Bounds x="1312" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1277" y="101" width="107" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="fonb1_di" bpmnElement="fonb1">
        <di:waypoint x="148" y="77" />
        <di:waypoint x="230" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb2_di" bpmnElement="fonb2">
        <di:waypoint x="330" y="77" />
        <di:waypoint x="380" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb3_di" bpmnElement="fonb3">
        <di:waypoint x="480" y="77" />
        <di:waypoint x="555" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb4_di" bpmnElement="fonb4">
        <di:waypoint x="605" y="77" />
        <di:waypoint x="705" y="77" />
        <bpmndi:BPMNLabel><dc:Bounds x="611" y="57" width="21" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb5_di" bpmnElement="fonb5">
        <di:waypoint x="605" y="77" />
        <di:waypoint x="660" y="77" />
        <di:waypoint x="660" y="187" />
        <di:waypoint x="680" y="187" />
        <bpmndi:BPMNLabel><dc:Bounds x="611" y="83" width="17" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb6_di" bpmnElement="fonb6">
        <di:waypoint x="780" y="187" />
        <di:waypoint x="862" y="187" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb7_di" bpmnElement="fonb7">
        <di:waypoint x="755" y="77" />
        <di:waypoint x="810" y="77" />
        <di:waypoint x="810" y="317" />
        <di:waypoint x="830" y="317" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb8_di" bpmnElement="fonb8">
        <di:waypoint x="755" y="77" />
        <di:waypoint x="810" y="77" />
        <di:waypoint x="810" y="427" />
        <di:waypoint x="830" y="427" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb9_di" bpmnElement="fonb9">
        <di:waypoint x="755" y="77" />
        <di:waypoint x="810" y="77" />
        <di:waypoint x="810" y="557" />
        <di:waypoint x="830" y="557" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb10_di" bpmnElement="fonb10">
        <di:waypoint x="930" y="317" />
        <di:waypoint x="960" y="317" />
        <di:waypoint x="960" y="77" />
        <di:waypoint x="1005" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb11_di" bpmnElement="fonb11">
        <di:waypoint x="930" y="427" />
        <di:waypoint x="960" y="427" />
        <di:waypoint x="960" y="77" />
        <di:waypoint x="1005" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb12_di" bpmnElement="fonb12">
        <di:waypoint x="930" y="557" />
        <di:waypoint x="960" y="557" />
        <di:waypoint x="960" y="77" />
        <di:waypoint x="1005" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb13_di" bpmnElement="fonb13">
        <di:waypoint x="1055" y="77" />
        <di:waypoint x="1130" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="fonb14_di" bpmnElement="fonb14">
        <di:waypoint x="1230" y="77" />
        <di:waypoint x="1312" y="77" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

Frequently asked questions

Why use a parallel gateway instead of drawing three separate arrows?

Multiple unlabelled flows out of a task are ambiguous in BPMN, and many tools read them as an implicit split with unclear semantics. A parallel gateway states explicitly that all three branches run, and the matching join guarantees induction waits for every branch. The BPMN 2.0 spec expects splits and joins to be paired this way.

Should the new starter get their own lane or pool?

Only if they perform activities in the process. In this model the new starter is passive until induction, so adding a lane would leave it nearly empty. If you extend the model with tasks like signing the contract or completing right to work forms, a black box pool for the candidate connected by message flows is the cleaner choice.

Can I open the downloaded file in my own modelling tool?

Yes. The download is standard BPMN 2.0 interchange XML, validated against 19 normative rules from the OMG 2.0.2 specification, so it opens directly in Camunda Modeler, Signavio, or Bizagi. You can also edit it in the Swimdraft browser editor first and export .bpmn, SVG, or PNG when you are done.

Related BPMN examples

Generate your own version of this diagram

Describe how the process works in your organisation: plain English, meeting notes, a transcript, or a spreadsheet. Swimdraft turns it into a spec-validated BPMN 2.0 diagram you can edit in the browser and export as .bpmn, SVG, or PNG.

Start free

No credit card required