BPMN Sub-Process Types

When a process step is too complex for a single task, you wrap it in a sub-process. BPMN gives you three types — each for a different situation.

Why sub-processes?

A diagram with 40 tasks is unreadable. Sub-processes let you group related steps behind a single element, keeping the parent diagram clean. Click into the sub-process to see the details. Think of it as folders for your process logic.

Sub-processes also enable error handling — you can attach boundary events to a sub-process that catch errors, timeouts, or escalations from any step inside it.

TypeVisualReusable?Use when
Embedded sub-processRounded rectangle with [+]NoGroup steps to reduce diagram clutter or enable boundary events
Call activityThick-bordered rounded rectangleYesReference a standalone process that is used in multiple places
Event sub-processDashed-bordered rounded rectangleNoHandle events (errors, messages, timers) that can happen anytime during the parent

Embedded sub-process

The most common type. It groups a sequence of steps into a collapsible container. The sub-process is defined inline — it exists only within its parent process.

Collapsed

Shows as a single rounded rectangle with a [+] marker. The contents are hidden. Use this in the parent diagram to keep it readable.

Expanded

Shows the full internal process with its own start event, tasks, gateways, and end event. The boundary of the sub-process is visible.

Example

In an order process, "Fulfill Order" is a sub-process containing: pick items, pack box, print label, hand to carrier. The parent diagram just shows "Fulfill Order" as one element.

Common mistake

Forgetting that an embedded sub-process needs its own start and end events inside. It is a complete mini-process, not just a visual grouping.

Full reference for Sub-Process →

Call activity

A call activity references an external, standalone processthat is defined separately. When the token reaches a call activity, it "calls" that external process, runs it to completion, then returns.

The key difference from an embedded sub-process: call activities are reusable. The same external process can be called from multiple parent processes. Change it once, and every caller gets the update.

Visual cue

A call activity looks like a task but with a thick (bold) border. This is how you distinguish it from a regular task or embedded sub-process.

Example

"Verify Customer Identity" is used in account opening, loan application, and insurance claims. Define it once as a standalone process, then reference it as a call activity in all three parent processes.

Common mistake

Using a call activity for something used only once. If the process fragment is not reused, an embedded sub-process is simpler and keeps everything in one diagram.

Full reference for Call Activity →

Event sub-process

An event sub-process sits inside a parent process or sub-process but is not connected to the normal flow. It has no incoming or outgoing sequence flows. Instead, it is triggered by a start event — typically an error, message, timer, escalation, or signal.

Think of it as an exception handler. It waits silently until its trigger event occurs, then either interrupts the parent (cancels the normal flow) or runs in parallel without interrupting.

Interrupting

Solid start event border. When triggered, the parent process is cancelled and the event sub-process takes over. Example: error handling.

Non-interrupting

Dashed start event border. When triggered, it runs alongside the parent process without stopping it. Example: sending a reminder every 24 hours while waiting.

Example

During an order process, if the customer cancels at any point, an interrupting event sub-process catches the cancellation message, refunds the payment, and ends the process — regardless of which step the order was at.

Common mistake

Connecting an event sub-process to the normal flow with sequence flows. Event sub-processes are triggered only by their start event — they must not have incoming sequence flows.

Full reference for Sub-Process →

Which sub-process type should I use?

-"I want to group steps to keep the diagram clean" → Embedded sub-process
-"I want to attach error/timer/message handling to a group of steps" → Embedded sub-process with boundary events
-"I want to reuse this process fragment in multiple diagrams" → Call activity
-"I need to handle an event that can happen at any point during the process" → Event sub-process
-"I want to send periodic reminders while the process runs" → Non-interrupting event sub-process with timer start

Related guides

Keep learning

Frequently asked questions

What is the difference between a sub-process and a call activity?

A sub-process is defined inline within its parent — it cannot be reused. A call activity references an external, standalone process that can be called from multiple parent processes.

Can I nest sub-processes?

Yes. A sub-process can contain other sub-processes. But keep nesting shallow — more than two levels deep becomes hard to follow.

Does an embedded sub-process need its own start and end events?

Yes. An embedded sub-process is a complete mini-process. It must have at least one start event and one end event inside.

When should I use an event sub-process instead of a boundary event?

Use a boundary event when the exception applies to a specific task or sub-process. Use an event sub-process when the exception can happen at any point during the entire parent scope.