Skip to content

Process Model Complexity

A process model is a diagram that shows how work flows through an organization. Its job is to help people discuss and remember a process. So it must be easy to read and understand. A model can be correct and complete and still fail at this, because it is too complicated.

Where complexity comes from

Research shows that larger process models are harder to understand. Measures of a model, such as its size and structure, correlate with how well people understand it. Data objects are one example of clutter. Too many of them overload a diagram, so show only the most important data aspects.

How to reduce it

  • Decompose. Split a large model into smaller subprocess models. This makes the model easier to understand.
  • Choose participants carefully. For operational models, Camunda recommends a collaboration diagram with a separate pool for each participant, instead of lanes. See BPMN Collaboration Diagram and BPMN Swimlane (Pool and Lane).
  • Follow guidelines. The Seven Process Modeling Guidelines (7PMG) come from research on how model structure relates to errors and comprehension. They are aimed at casual modelers.
  • Limit data objects. Use them sparingly.

Imagine a collaboration with three participants: a customer, a bank, and a registration office. One diagram shows every task, every check, and every document. Nobody can follow it. The team keeps a top-level diagram with one step per phase. Each phase opens into its own smaller subprocess diagram. Only the few data objects that matter, such as a payment confirmation, appear.

Simplification must be weighed, not applied blindly. Structuredness, meaning a clean and regular model structure, is not an absolute rule for understandability. Trade-offs with other model properties exist. Splitting a model also gives you several diagrams to keep consistent.

A top-level process kept simple by moving detail into a subprocess.

Diagram source
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="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" targetNamespace="http://example.com/bpmn">
<process id="enrollment" isExecutable="false">
<startEvent id="s" name="Request received">
<outgoing>f1</outgoing>
</startEvent>
<subProcess id="pay" name="Handle payment">
<incoming>f1</incoming>
<outgoing>f2</outgoing>
<startEvent id="ps">
<outgoing>p1</outgoing>
</startEvent>
<task id="pt" name="Check payment">
<incoming>p1</incoming>
<outgoing>p2</outgoing>
</task>
<endEvent id="pe">
<incoming>p2</incoming>
</endEvent>
<sequenceFlow id="p1" sourceRef="ps" targetRef="pt" />
<sequenceFlow id="p2" sourceRef="pt" targetRef="pe" />
</subProcess>
<task id="reg" name="Register">
<incoming>f2</incoming>
<outgoing>f3</outgoing>
</task>
<endEvent id="e" name="Done">
<incoming>f3</incoming>
</endEvent>
<sequenceFlow id="f1" sourceRef="s" targetRef="pay" />
<sequenceFlow id="f2" sourceRef="pay" targetRef="reg" />
<sequenceFlow id="f3" sourceRef="reg" targetRef="e" />
</process>
<bpmndi:BPMNDiagram id="BPMNDiagram_enrollment">
<bpmndi:BPMNPlane id="BPMNPlane_enrollment" bpmnElement="enrollment">
<bpmndi:BPMNShape id="BPMNShape_s" bpmnElement="s">
<dc:Bounds x="80" y="102" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="68" y="143" width="60" height="28" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_pay" bpmnElement="pay">
<dc:Bounds x="216" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_reg" bpmnElement="reg">
<dc:Bounds x="416" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_e" bpmnElement="e">
<dc:Bounds x="616" y="102" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="617" y="143" width="34" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_f1" bpmnElement="f1">
<di:waypoint x="116" y="120" />
<di:waypoint x="216" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f2" bpmnElement="f2">
<di:waypoint x="316" y="120" />
<di:waypoint x="416" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_f3" bpmnElement="f3">
<di:waypoint x="516" y="120" />
<di:waypoint x="616" y="120" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
<bpmndi:BPMNDiagram id="BPMNDiagram_pay">
<bpmndi:BPMNPlane id="BPMNPlane_pay" bpmnElement="pay">
<bpmndi:BPMNShape id="BPMNShape_ps" bpmnElement="ps">
<dc:Bounds x="80" y="102" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_pt" bpmnElement="pt">
<dc:Bounds x="216" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="BPMNShape_pe" bpmnElement="pe">
<dc:Bounds x="416" y="102" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_p1" bpmnElement="p1">
<di:waypoint x="116" y="120" />
<di:waypoint x="216" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_p2" bpmnElement="p2">
<di:waypoint x="316" y="120" />
<di:waypoint x="416" y="120" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>
  • Large process models are split into smaller subprocess models.
  • Data objects are limited to the most important data aspects.
  • Operational models use separate pools per participant rather than lanes.
  • Modeling guidelines such as 7PMG are applied or consciously deviated from.