Change management BPMN example
Change management governs how modifications reach production systems without taking them down. Organisations map it because unrecorded changes are the leading suspect in most outages, and because auditors ask to see it. The process usually goes wrong in two places: standard low risk changes get dragged through the same approval board as risky ones, breeding resentment and workarounds, or failed changes are quietly patched forward with no rollback discipline.
The model here uses a single pool with four lanes: Requester, Change manager, Change advisory board, and Operations. Two exclusive gateways route approval (standard changes skip the CAB entirely) and one more decides between closing the change and rolling it back. Worth noticing: both the success and rollback branches converge on the same "Close change record" task, because a rolled back change still needs an honest record.
Standard BPMN 2.0 interchange XML: opens in Camunda Modeler, Signavio, Bizagi, and any other compliant tool.
The process at a glance
How to read this diagram
A change request from the Requester lane starts the flow, and the Change manager assesses its risk and impact. The gateway "Standard change?" sends pre-authorised routine work straight to scheduling on the Yes branch, while the default No branch routes the request to the Change advisory board for review. There the gateway "Change approved?" either releases the change to Operations on Yes or, on the default No branch, has the Change manager notify the requester, ending at "Change rejected".
Approved changes move through the Operations lane in sequence: schedule the change window, implement the change, then verify the outcome. The final gateway "Change successful?" sends healthy changes on the Yes branch and triggers "Roll back change" on the default No branch. Both branches merge into "Close change record" in the Change manager lane, so the process always ends at "Change closed" with the record updated, whichever way the implementation went.
BPMN elements used
| Element | Count | In this diagram |
|---|---|---|
| Start event | 1 | Change requested |
| End event | 2 | Change rejected, Change closed |
| Task | 5 | Schedule change window, Implement change, Verify change outcome, Roll back change, Close change record |
| User task | 2 | Assess risk and impact, Review change at CAB |
| Send task | 1 | Notify requester of rejection |
| Exclusive gateway | 3 | Standard change?, Change approved?, Change successful? |
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_cm" name="Change management" processRef="Process_pool_cm" />
</bpmn2:collaboration>
<bpmn2:process id="Process_pool_cm" isExecutable="false">
<bpmn2:laneSet id="LaneSet_pool_cm">
<bpmn2:lane id="lane_cm_req" name="Requester">
<bpmn2:flowNodeRef>start_cm</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="lane_cm_mgr" name="Change manager">
<bpmn2:flowNodeRef>t_cm_assess</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>g_cm_std</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cm_notify</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>end_cm_rej</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cm_close</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>end_cm_done</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="lane_cm_cab" name="Change advisory board">
<bpmn2:flowNodeRef>t_cm_cab</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>g_cm_appr</bpmn2:flowNodeRef>
</bpmn2:lane>
<bpmn2:lane id="lane_cm_ops" name="Operations">
<bpmn2:flowNodeRef>t_cm_sched</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cm_impl</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cm_verify</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>g_cm_ok</bpmn2:flowNodeRef>
<bpmn2:flowNodeRef>t_cm_roll</bpmn2:flowNodeRef>
</bpmn2:lane>
</bpmn2:laneSet>
<bpmn2:startEvent id="start_cm" name="Change requested">
<bpmn2:outgoing>fcm1</bpmn2:outgoing>
</bpmn2:startEvent>
<bpmn2:userTask id="t_cm_assess" name="Assess risk and impact">
<bpmn2:incoming>fcm1</bpmn2:incoming>
<bpmn2:outgoing>fcm2</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:exclusiveGateway id="g_cm_std" name="Standard change?" default="fcm4">
<bpmn2:incoming>fcm2</bpmn2:incoming>
<bpmn2:outgoing>fcm3</bpmn2:outgoing>
<bpmn2:outgoing>fcm4</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:userTask id="t_cm_cab" name="Review change at CAB">
<bpmn2:incoming>fcm4</bpmn2:incoming>
<bpmn2:outgoing>fcm5</bpmn2:outgoing>
</bpmn2:userTask>
<bpmn2:exclusiveGateway id="g_cm_appr" name="Change approved?" default="fcm7">
<bpmn2:incoming>fcm5</bpmn2:incoming>
<bpmn2:outgoing>fcm6</bpmn2:outgoing>
<bpmn2:outgoing>fcm7</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:sendTask id="t_cm_notify" name="Notify requester of rejection">
<bpmn2:incoming>fcm7</bpmn2:incoming>
<bpmn2:outgoing>fcm8</bpmn2:outgoing>
</bpmn2:sendTask>
<bpmn2:endEvent id="end_cm_rej" name="Change rejected">
<bpmn2:incoming>fcm8</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:task id="t_cm_sched" name="Schedule change window">
<bpmn2:incoming>fcm3</bpmn2:incoming>
<bpmn2:incoming>fcm6</bpmn2:incoming>
<bpmn2:outgoing>fcm9</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:task id="t_cm_impl" name="Implement change">
<bpmn2:incoming>fcm9</bpmn2:incoming>
<bpmn2:outgoing>fcm10</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:task id="t_cm_verify" name="Verify change outcome">
<bpmn2:incoming>fcm10</bpmn2:incoming>
<bpmn2:outgoing>fcm11</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:exclusiveGateway id="g_cm_ok" name="Change successful?" default="fcm13">
<bpmn2:incoming>fcm11</bpmn2:incoming>
<bpmn2:outgoing>fcm12</bpmn2:outgoing>
<bpmn2:outgoing>fcm13</bpmn2:outgoing>
</bpmn2:exclusiveGateway>
<bpmn2:task id="t_cm_roll" name="Roll back change">
<bpmn2:incoming>fcm13</bpmn2:incoming>
<bpmn2:outgoing>fcm14</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:task id="t_cm_close" name="Close change record">
<bpmn2:incoming>fcm12</bpmn2:incoming>
<bpmn2:incoming>fcm14</bpmn2:incoming>
<bpmn2:outgoing>fcm15</bpmn2:outgoing>
</bpmn2:task>
<bpmn2:endEvent id="end_cm_done" name="Change closed">
<bpmn2:incoming>fcm15</bpmn2:incoming>
</bpmn2:endEvent>
<bpmn2:sequenceFlow id="fcm1" sourceRef="start_cm" targetRef="t_cm_assess" />
<bpmn2:sequenceFlow id="fcm2" sourceRef="t_cm_assess" targetRef="g_cm_std" />
<bpmn2:sequenceFlow id="fcm3" name="Yes" sourceRef="g_cm_std" targetRef="t_cm_sched">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="fcm4" name="No" sourceRef="g_cm_std" targetRef="t_cm_cab" />
<bpmn2:sequenceFlow id="fcm5" sourceRef="t_cm_cab" targetRef="g_cm_appr" />
<bpmn2:sequenceFlow id="fcm6" name="Yes" sourceRef="g_cm_appr" targetRef="t_cm_sched">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="fcm7" name="No" sourceRef="g_cm_appr" targetRef="t_cm_notify" />
<bpmn2:sequenceFlow id="fcm8" sourceRef="t_cm_notify" targetRef="end_cm_rej" />
<bpmn2:sequenceFlow id="fcm9" sourceRef="t_cm_sched" targetRef="t_cm_impl" />
<bpmn2:sequenceFlow id="fcm10" sourceRef="t_cm_impl" targetRef="t_cm_verify" />
<bpmn2:sequenceFlow id="fcm11" sourceRef="t_cm_verify" targetRef="g_cm_ok" />
<bpmn2:sequenceFlow id="fcm12" name="Yes" sourceRef="g_cm_ok" targetRef="t_cm_close">
<bpmn2:conditionExpression xsi:type="bpmn2:tFormalExpression">Yes</bpmn2:conditionExpression>
</bpmn2:sequenceFlow>
<bpmn2:sequenceFlow id="fcm13" name="No" sourceRef="g_cm_ok" targetRef="t_cm_roll" />
<bpmn2:sequenceFlow id="fcm14" sourceRef="t_cm_roll" targetRef="t_cm_close" />
<bpmn2:sequenceFlow id="fcm15" sourceRef="t_cm_close" targetRef="end_cm_done" />
</bpmn2:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration_1">
<bpmndi:BPMNShape id="pool_cm_di" bpmnElement="pool_cm" isHorizontal="true">
<dc:Bounds x="20" y="20" width="1870" height="520" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="lane_cm_req_di" bpmnElement="lane_cm_req" isHorizontal="true">
<dc:Bounds x="50" y="20" width="1840" height="130" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="lane_cm_mgr_di" bpmnElement="lane_cm_mgr" isHorizontal="true">
<dc:Bounds x="50" y="150" width="1840" height="130" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="lane_cm_cab_di" bpmnElement="lane_cm_cab" isHorizontal="true">
<dc:Bounds x="50" y="280" width="1840" height="130" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="lane_cm_ops_di" bpmnElement="lane_cm_ops" isHorizontal="true">
<dc:Bounds x="50" y="410" width="1840" height="130" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="start_cm_di" bpmnElement="start_cm">
<dc:Bounds x="112" y="59" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="84" y="101" width="93" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cm_assess_di" bpmnElement="t_cm_assess">
<dc:Bounds x="230" y="167" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="g_cm_std_di" bpmnElement="g_cm_std">
<dc:Bounds x="405" y="182" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="384" y="162" width="92" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cm_cab_di" bpmnElement="t_cm_cab">
<dc:Bounds x="530" y="297" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="g_cm_appr_di" bpmnElement="g_cm_appr">
<dc:Bounds x="705" y="312" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="682" y="292" width="96" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cm_notify_di" bpmnElement="t_cm_notify">
<dc:Bounds x="830" y="167" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="end_cm_rej_di" bpmnElement="end_cm_rej">
<dc:Bounds x="1012" y="189" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="989" y="231" width="83" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cm_sched_di" bpmnElement="t_cm_sched">
<dc:Bounds x="830" y="427" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cm_impl_di" bpmnElement="t_cm_impl">
<dc:Bounds x="980" y="427" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cm_verify_di" bpmnElement="t_cm_verify">
<dc:Bounds x="1130" y="427" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="g_cm_ok_di" bpmnElement="g_cm_ok">
<dc:Bounds x="1305" y="442" width="50" height="50" />
<bpmndi:BPMNLabel><dc:Bounds x="1279" y="422" width="102" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cm_roll_di" bpmnElement="t_cm_roll">
<dc:Bounds x="1430" y="427" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="t_cm_close_di" bpmnElement="t_cm_close">
<dc:Bounds x="1580" y="167" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="end_cm_done_di" bpmnElement="end_cm_done">
<dc:Bounds x="1762" y="189" width="36" height="36" />
<bpmndi:BPMNLabel><dc:Bounds x="1742" y="231" width="76" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="fcm1_di" bpmnElement="fcm1">
<di:waypoint x="148" y="77" />
<di:waypoint x="210" y="77" />
<di:waypoint x="210" y="207" />
<di:waypoint x="230" y="207" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm2_di" bpmnElement="fcm2">
<di:waypoint x="330" y="207" />
<di:waypoint x="405" y="207" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm3_di" bpmnElement="fcm3">
<di:waypoint x="455" y="207" />
<di:waypoint x="810" y="207" />
<di:waypoint x="810" y="467" />
<di:waypoint x="830" y="467" />
<bpmndi:BPMNLabel><dc:Bounds x="461" y="187" width="21" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm4_di" bpmnElement="fcm4">
<di:waypoint x="455" y="207" />
<di:waypoint x="510" y="207" />
<di:waypoint x="510" y="337" />
<di:waypoint x="530" y="337" />
<bpmndi:BPMNLabel><dc:Bounds x="461" y="213" width="17" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm5_di" bpmnElement="fcm5">
<di:waypoint x="630" y="337" />
<di:waypoint x="705" y="337" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm6_di" bpmnElement="fcm6">
<di:waypoint x="755" y="337" />
<di:waypoint x="810" y="337" />
<di:waypoint x="810" y="467" />
<di:waypoint x="830" y="467" />
<bpmndi:BPMNLabel><dc:Bounds x="761" y="317" width="21" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm7_di" bpmnElement="fcm7">
<di:waypoint x="755" y="337" />
<di:waypoint x="810" y="337" />
<di:waypoint x="810" y="207" />
<di:waypoint x="830" y="207" />
<bpmndi:BPMNLabel><dc:Bounds x="761" y="343" width="17" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm8_di" bpmnElement="fcm8">
<di:waypoint x="930" y="207" />
<di:waypoint x="1012" y="207" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm9_di" bpmnElement="fcm9">
<di:waypoint x="930" y="467" />
<di:waypoint x="980" y="467" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm10_di" bpmnElement="fcm10">
<di:waypoint x="1080" y="467" />
<di:waypoint x="1130" y="467" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm11_di" bpmnElement="fcm11">
<di:waypoint x="1230" y="467" />
<di:waypoint x="1305" y="467" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm12_di" bpmnElement="fcm12">
<di:waypoint x="1355" y="467" />
<di:waypoint x="1410" y="467" />
<di:waypoint x="1410" y="416" />
<di:waypoint x="1560" y="416" />
<di:waypoint x="1560" y="207" />
<di:waypoint x="1580" y="207" />
<bpmndi:BPMNLabel><dc:Bounds x="1361" y="447" width="21" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm13_di" bpmnElement="fcm13">
<di:waypoint x="1355" y="467" />
<di:waypoint x="1430" y="467" />
<bpmndi:BPMNLabel><dc:Bounds x="1361" y="473" width="17" height="14" /></bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm14_di" bpmnElement="fcm14">
<di:waypoint x="1530" y="467" />
<di:waypoint x="1560" y="467" />
<di:waypoint x="1560" y="207" />
<di:waypoint x="1580" y="207" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="fcm15_di" bpmnElement="fcm15">
<di:waypoint x="1680" y="207" />
<di:waypoint x="1762" y="207" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn2:definitions>Frequently asked questions
Why does the standard change branch bypass the CAB gateway?
Standard changes are pre-authorised by definition, so modelling them through the board would misstate the process and inflate CAB workload on paper. The exclusive gateway makes the bypass explicit and auditable. If your organisation reviews even standard changes, delete the Yes branch and let every request flow through the board.
Should rollback lead to its own end event instead of the close task?
Either is valid BPMN. Merging into "Close change record" was chosen because both outcomes require the same closing activity, and a single end event keeps the token semantics simple. Use separate end events when downstream reporting needs to distinguish outcomes at a glance, for example "Change closed" versus "Change rolled back".
How would I add an emergency change path to this model?
Add a third branch to the "Standard change?" gateway labelled "Emergency", flowing to an expedited approval task owned by the change manager, then rejoining before scheduling. Keep the default flow on the CAB branch. An exclusive gateway supports any number of outgoing flows, provided each non-default flow carries a condition label.
Related BPMN examples
Incident management
An ITIL-style incident management process as a BPMN 2.0 diagram: triage, major incident handling, escalation, and review. Download the .bpmn file free.
User access request
A user access request process as a BPMN 2.0 diagram: manager approval, parallel provisioning, and an access register update. Download the .bpmn file free.
Password reset
A password reset process as a BPMN 2.0 diagram: MFA self-service, manual verification fallback, and a message wait state. Free .bpmn file download included.
Software release
A software release process as a BPMN 2.0 diagram: build, regression testing, approval, parallel deployment, and rollback. Download the free .bpmn file.
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 freeNo credit card required