SwimdraftPricingSign inStart free

Support ticket escalation BPMN example

Tiered support only works if everyone agrees what each tier owns and when a ticket moves up. Teams map the escalation path to stop the two familiar failures: tickets bounced upward the moment they look hard, which buries tier 2, and tickets held too long at tier 1 while the customer waits. A diagram also settles the awkward question of what happens when the fault turns out to be a product defect rather than a support issue.

This model is a single pool with three lanes: Tier 1 support, Tier 2 support, and Engineering. Two exclusive gateways decide whether tier 1 can solve the ticket and whether tier 2 has found a product defect. Notice the "Fix released" message catch event in the Engineering lane: the support process explicitly pauses until the defect fix ships, instead of pretending engineering work is a support task.

Support ticket escalation: BPMN 2.0 diagram
Support ticket escalation 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
Ticket submitted
Ends with
Ticket closed
Lanes
Tier 1 support · Tier 2 support · Engineering
Decisions
Solvable at tier 1? · Product defect found?

How to read this diagram

Triage sets the direction of everything that follows. When a ticket is submitted, Tier 1 support triages it and the gateway "Solvable at tier 1?" makes the first call: on the Yes branch the agent applies a known fix, confirms it with the customer, and the ticket closes. The default No branch escalates the ticket to tier 2, where a specialist diagnoses the issue in depth.

Diagnosis leads to the gateway "Product defect found?". If no defect is found, the default branch has tier 2 provide a workaround and hand back to Tier 1 support for customer confirmation. If a defect is confirmed, the flow crosses into the Engineering lane: a defect ticket is raised and the process waits at the "Fix released" message event until engineering ships the fix. All three routes meet at "Confirm fix with customer", and every ticket ends at the single "Ticket closed" end event.

BPMN elements used

ElementCountIn this diagram
Start event1Ticket submitted
End event1Ticket closed
Intermediate catch event1Fix released
Task4Apply known fix, Escalate to tier 2, Raise defect ticket, Provide workaround
User task2Triage ticket, Diagnose issue
Send task1Confirm fix with customer
Exclusive gateway2Solvable at tier 1?, Product defect found?
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_se" name="Support ticket handling" processRef="Process_pool_se" />
  </bpmn2:collaboration>
  <bpmn2:process id="Process_pool_se" isExecutable="false">
    <bpmn2:laneSet id="LaneSet_pool_se">
      <bpmn2:lane id="lane_se_t1" name="Tier 1 support">
        <bpmn2:flowNodeRef>start_se</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_triage</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_se_t1</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_fix1</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_esc</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_confirm</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>end_se_closed</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_se_t2" name="Tier 2 support">
        <bpmn2:flowNodeRef>t_se_diag</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>g_se_bug</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>t_se_work</bpmn2:flowNodeRef>
      </bpmn2:lane>
      <bpmn2:lane id="lane_se_eng" name="Engineering">
        <bpmn2:flowNodeRef>t_se_defect</bpmn2:flowNodeRef>
        <bpmn2:flowNodeRef>ev_se_fix</bpmn2:flowNodeRef>
      </bpmn2:lane>
    </bpmn2:laneSet>
    <bpmn2:startEvent id="start_se" name="Ticket submitted">
      <bpmn2:outgoing>f_se1</bpmn2:outgoing>
    </bpmn2:startEvent>
    <bpmn2:userTask id="t_se_triage" name="Triage ticket">
      <bpmn2:incoming>f_se1</bpmn2:incoming>
      <bpmn2:outgoing>f_se2</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:exclusiveGateway id="g_se_t1" name="Solvable at tier 1?" default="f_se4">
      <bpmn2:incoming>f_se2</bpmn2:incoming>
      <bpmn2:outgoing>f_se3</bpmn2:outgoing>
      <bpmn2:outgoing>f_se4</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:task id="t_se_fix1" name="Apply known fix">
      <bpmn2:incoming>f_se3</bpmn2:incoming>
      <bpmn2:outgoing>f_se5</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:task id="t_se_esc" name="Escalate to tier 2">
      <bpmn2:incoming>f_se4</bpmn2:incoming>
      <bpmn2:outgoing>f_se6</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:userTask id="t_se_diag" name="Diagnose issue">
      <bpmn2:incoming>f_se6</bpmn2:incoming>
      <bpmn2:outgoing>f_se7</bpmn2:outgoing>
    </bpmn2:userTask>
    <bpmn2:exclusiveGateway id="g_se_bug" name="Product defect found?" default="f_se9">
      <bpmn2:incoming>f_se7</bpmn2:incoming>
      <bpmn2:outgoing>f_se8</bpmn2:outgoing>
      <bpmn2:outgoing>f_se9</bpmn2:outgoing>
    </bpmn2:exclusiveGateway>
    <bpmn2:task id="t_se_defect" name="Raise defect ticket">
      <bpmn2:incoming>f_se8</bpmn2:incoming>
      <bpmn2:outgoing>f_se10</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:intermediateCatchEvent id="ev_se_fix" name="Fix released">
      <bpmn2:incoming>f_se10</bpmn2:incoming>
      <bpmn2:outgoing>f_se11</bpmn2:outgoing>
      <bpmn2:messageEventDefinition id="ev_se_fix_def" />
    </bpmn2:intermediateCatchEvent>
    <bpmn2:task id="t_se_work" name="Provide workaround">
      <bpmn2:incoming>f_se9</bpmn2:incoming>
      <bpmn2:outgoing>f_se12</bpmn2:outgoing>
    </bpmn2:task>
    <bpmn2:sendTask id="t_se_confirm" name="Confirm fix with customer">
      <bpmn2:incoming>f_se5</bpmn2:incoming>
      <bpmn2:incoming>f_se11</bpmn2:incoming>
      <bpmn2:incoming>f_se12</bpmn2:incoming>
      <bpmn2:outgoing>f_se13</bpmn2:outgoing>
    </bpmn2:sendTask>
    <bpmn2:endEvent id="end_se_closed" name="Ticket closed">
      <bpmn2:incoming>f_se13</bpmn2:incoming>
    </bpmn2:endEvent>
    <bpmn2:sequenceFlow id="f_se1" sourceRef="start_se" targetRef="t_se_triage" />
    <bpmn2:sequenceFlow id="f_se2" sourceRef="t_se_triage" targetRef="g_se_t1" />
    <bpmn2:sequenceFlow id="f_se3" name="Yes" sourceRef="g_se_t1" targetRef="t_se_fix1">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="f_se4" name="No" sourceRef="g_se_t1" targetRef="t_se_esc" />
    <bpmn2:sequenceFlow id="f_se5" sourceRef="t_se_fix1" targetRef="t_se_confirm" />
    <bpmn2:sequenceFlow id="f_se6" sourceRef="t_se_esc" targetRef="t_se_diag" />
    <bpmn2:sequenceFlow id="f_se7" sourceRef="t_se_diag" targetRef="g_se_bug" />
    <bpmn2:sequenceFlow id="f_se8" name="Yes" sourceRef="g_se_bug" targetRef="t_se_defect">
      <bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
    </bpmn2:sequenceFlow>
    <bpmn2:sequenceFlow id="f_se9" name="No" sourceRef="g_se_bug" targetRef="t_se_work" />
    <bpmn2:sequenceFlow id="f_se10" sourceRef="t_se_defect" targetRef="ev_se_fix" />
    <bpmn2:sequenceFlow id="f_se11" sourceRef="ev_se_fix" targetRef="t_se_confirm" />
    <bpmn2:sequenceFlow id="f_se12" sourceRef="t_se_work" targetRef="t_se_confirm" />
    <bpmn2:sequenceFlow id="f_se13" sourceRef="t_se_confirm" targetRef="end_se_closed" />
  </bpmn2:process>
  <bpmndi:BPMNDiagram id="BPMNDiagram_1">
    <bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">
      <bpmndi:BPMNShape id="pool_se_di" bpmnElement="pool_se" isHorizontal="true">
        <dc:Bounds x="20" y="20" width="1570" height="500" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_se_t1_di" bpmnElement="lane_se_t1" isHorizontal="true">
        <dc:Bounds x="50" y="20" width="1540" height="240" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_se_t2_di" bpmnElement="lane_se_t2" isHorizontal="true">
        <dc:Bounds x="50" y="260" width="1540" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="lane_se_eng_di" bpmnElement="lane_se_eng" isHorizontal="true">
        <dc:Bounds x="50" y="390" width="1540" height="130" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="start_se_di" bpmnElement="start_se">
        <dc:Bounds x="112" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="89" y="101" width="83" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_triage_di" bpmnElement="t_se_triage">
        <dc:Bounds x="230" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_se_t1_di" bpmnElement="g_se_t1">
        <dc:Bounds x="405" y="52" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="385" y="32" width="91" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_fix1_di" bpmnElement="t_se_fix1">
        <dc:Bounds x="530" y="147" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_esc_di" bpmnElement="t_se_esc">
        <dc:Bounds x="530" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_diag_di" bpmnElement="t_se_diag">
        <dc:Bounds x="680" y="277" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="g_se_bug_di" bpmnElement="g_se_bug">
        <dc:Bounds x="855" y="292" width="50" height="50" />
        <bpmndi:BPMNLabel><dc:Bounds x="825" y="272" width="110" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_defect_di" bpmnElement="t_se_defect">
        <dc:Bounds x="980" y="407" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="ev_se_fix_di" bpmnElement="ev_se_fix">
        <dc:Bounds x="1162" y="429" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1149" y="471" width="62" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_work_di" bpmnElement="t_se_work">
        <dc:Bounds x="980" y="277" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="t_se_confirm_di" bpmnElement="t_se_confirm">
        <dc:Bounds x="1280" y="37" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="end_se_closed_di" bpmnElement="end_se_closed">
        <dc:Bounds x="1462" y="59" width="36" height="36" />
        <bpmndi:BPMNLabel><dc:Bounds x="1447" y="101" width="67" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="f_se1_di" bpmnElement="f_se1">
        <di:waypoint x="148" y="77" />
        <di:waypoint x="230" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se2_di" bpmnElement="f_se2">
        <di:waypoint x="330" y="77" />
        <di:waypoint x="405" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se3_di" bpmnElement="f_se3">
        <di:waypoint x="455" y="77" />
        <di:waypoint x="510" y="77" />
        <di:waypoint x="510" y="187" />
        <di:waypoint x="530" y="187" />
        <bpmndi:BPMNLabel><dc:Bounds x="461" y="57" width="21" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se4_di" bpmnElement="f_se4">
        <di:waypoint x="455" y="77" />
        <di:waypoint x="530" y="77" />
        <bpmndi:BPMNLabel><dc:Bounds x="461" y="83" width="17" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se5_di" bpmnElement="f_se5">
        <di:waypoint x="630" y="187" />
        <di:waypoint x="1260" y="187" />
        <di:waypoint x="1260" y="77" />
        <di:waypoint x="1280" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se6_di" bpmnElement="f_se6">
        <di:waypoint x="630" y="77" />
        <di:waypoint x="660" y="77" />
        <di:waypoint x="660" y="317" />
        <di:waypoint x="680" y="317" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se7_di" bpmnElement="f_se7">
        <di:waypoint x="780" y="317" />
        <di:waypoint x="855" y="317" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se8_di" bpmnElement="f_se8">
        <di:waypoint x="905" y="317" />
        <di:waypoint x="960" y="317" />
        <di:waypoint x="960" y="447" />
        <di:waypoint x="980" y="447" />
        <bpmndi:BPMNLabel><dc:Bounds x="911" y="297" width="21" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se9_di" bpmnElement="f_se9">
        <di:waypoint x="905" y="317" />
        <di:waypoint x="980" y="317" />
        <bpmndi:BPMNLabel><dc:Bounds x="911" y="323" width="17" height="14" /></bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se10_di" bpmnElement="f_se10">
        <di:waypoint x="1080" y="447" />
        <di:waypoint x="1162" y="447" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se11_di" bpmnElement="f_se11">
        <di:waypoint x="1198" y="447" />
        <di:waypoint x="1260" y="447" />
        <di:waypoint x="1260" y="77" />
        <di:waypoint x="1280" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se12_di" bpmnElement="f_se12">
        <di:waypoint x="1080" y="317" />
        <di:waypoint x="1260" y="317" />
        <di:waypoint x="1260" y="77" />
        <di:waypoint x="1280" y="77" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="f_se13_di" bpmnElement="f_se13">
        <di:waypoint x="1380" y="77" />
        <di:waypoint x="1462" y="77" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn2:definitions>

Frequently asked questions

Why use a message event for the fix instead of an engineering task?

Because the engineering work happens outside this process on its own backlog and timescale. From the support perspective the ticket is simply waiting, and BPMN models waiting as a catch event, not an activity. If you wanted to model the engineering release process itself, it would deserve its own pool with a message flow back.

Should each tier be a separate pool instead of a lane?

Lanes are right here because all three teams work the same ticket inside the same organisation and one process instance flows across them. Separate pools would force message flows for every handoff and imply the tiers run independent processes. Reserve pools for true externals, such as the customer or an outsourced support provider.

How would I add a service level timer to this model?

Attach a boundary timer event to "Diagnose issue" or to the wait at "Fix released", firing after your service level threshold, and route it to a task that notifies the customer or triggers management escalation. Swimdraft validates the extended diagram against 19 normative rules from the OMG BPMN 2.0.2 spec, so the added branch still has to reach an end event.

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