<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Crismo Team</title>
    <description>The latest articles on Forem by Crismo Team (@crismoteam).</description>
    <link>https://forem.com/crismoteam</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3823025%2F86471756-ab62-49ee-b66c-2e9b3be25f19.png</url>
      <title>Forem: Crismo Team</title>
      <link>https://forem.com/crismoteam</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/crismoteam"/>
    <language>en</language>
    <item>
      <title>Lionis: Loops and Ad-Hoc Sub-Processes in BPMN</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:18:12 +0000</pubDate>
      <link>https://forem.com/crismoteam/lionis-loops-and-ad-hoc-sub-processes-in-bpmn-2lpd</link>
      <guid>https://forem.com/crismoteam/lionis-loops-and-ad-hoc-sub-processes-in-bpmn-2lpd</guid>
      <description>&lt;h2&gt;
  
  
  Meet Lea
&lt;/h2&gt;

&lt;p&gt;Lea owns &lt;strong&gt;Lionis&lt;/strong&gt;, a small but fast-growing tofu company. She spotted the&lt;br&gt;
        plant-based trend early, built a loyal customer base, and now she's ready to scale.&lt;br&gt;
        The plan: hire five new sales representatives and turn leads into loyal customers,&lt;br&gt;
        week after week.&lt;/p&gt;

&lt;p&gt;There's just one problem. Lea can't personally train every new hire. She needs a&lt;br&gt;
        process that's clear enough for someone like Jen - her first sales rep - to pick up&lt;br&gt;
        on day one and run with it. No handholding required.&lt;/p&gt;

&lt;p&gt;The sales process she sketches out will teach us two powerful BPMN concepts:&lt;br&gt;
        ** expanded sub-processes** (showing nested work inside the parent flow) and&lt;br&gt;
        ** loop markers** (repeating work until a condition is met).&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Collapsed vs. Expanded: Same Process, Different View
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You already know sub-processes from the Travel Agency chapter - a rounded rectangle with a&lt;br&gt;
        small plus sign that hides the detail inside. That's a &lt;strong&gt;collapsed sub-process&lt;/strong&gt;.&lt;br&gt;
        Clean and compact. Click into it to see what's inside.&lt;/p&gt;

&lt;p&gt;But sometimes you &lt;em&gt;want&lt;/em&gt; to see the inside. Lea's sales process has a lead-processing&lt;br&gt;
        sub-process where events from the parent flow directly affect what happens inside. Hiding&lt;br&gt;
        that detail would hide the dependencies.&lt;/p&gt;

&lt;p&gt;An &lt;strong&gt;expanded sub-process&lt;/strong&gt; solves this. Instead of collapsing the inner process&lt;br&gt;
        behind a plus sign, it draws the entire sub-process right inside the parent diagram. Same&lt;br&gt;
        behavior, same token flow - just visible. The sub-process always starts with a plain&lt;br&gt;
        start event inside its border.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;When to use which?&lt;/strong&gt; Use collapsed sub-processes by default - they keep&lt;br&gt;
        your diagram clean. Switch to expanded when you need to show dependencies between the&lt;br&gt;
        parent and sub-process, or when you want to attach events or loop markers to a group&lt;br&gt;
        of activities.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Lea&amp;amp;apos;s Sales Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here's the full picture. Jen's week starts when all sales leads have been qualified.&lt;br&gt;
        She runs through two preparation steps:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Score the leads** - using predefined business rules (a business rule task),
      she ranks them by potential and stores the list in the CRM.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Send the first email&lt;/strong&gt; - a templated introduction goes out to every lead
      she selected.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then the real work begins: processing each lead, one by one, inside a&lt;br&gt;
        ** sequential multi-instance sub-process**. The sub-process runs once per lead.&lt;br&gt;
        When the last lead is processed, the sub-process completes, and Jen creates her weekly&lt;br&gt;
        opportunity report.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Inside the Lead Processing Loop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Each lead follows the same flow, but the path through it depends on how the lead responds.&lt;br&gt;
        After the first email goes out, an &lt;strong&gt;event-based gateway&lt;/strong&gt; waits for one of&lt;br&gt;
        three things:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Positive response** - the lead replies with interest.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Negative response&lt;/strong&gt; - the lead replies with a clear "no."&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No response after 3 days&lt;/strong&gt; - silence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whichever event arrives first determines the path. A positive lead gets a cold call using&lt;br&gt;
        a predefined sales script. The call itself has three possible outcomes: the prospect&lt;br&gt;
        wants to buy immediately, wants a sample first, or isn't interested.&lt;/p&gt;

&lt;p&gt;If they buy, Jen creates the order, triggers shipment, marks the deal as "won" in the CRM,&lt;br&gt;
        waits three days, does a follow-up call, and - if the customer is happy - hands them over&lt;br&gt;
        to account management. That's the &lt;strong&gt;happy path&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;If they want a sample, Jen sends it, waits three days, follows up with info material and&lt;br&gt;
        a price list, updates the CRM, waits one more day, and does the follow-up call. From there&lt;br&gt;
        it's either a handover to account management or marking the deal as lost.&lt;/p&gt;

&lt;p&gt;If the lead responded negatively or stayed silent, Jen adapts her sales script accordingly,&lt;br&gt;
        makes the cold call, and branches from there. A completely uninterested prospect gets a&lt;br&gt;
        polite info email and a "lost" tag in the CRM.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## When Something Unexpected Happens
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Lead number four is going well - interested from the start, positive cold call, sample&lt;br&gt;
        requested. But mid-process, the prospect calls Jen with a special request:&lt;br&gt;
        &lt;em&gt;"Can you tweak the tofu recipe for us?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This triggers a &lt;strong&gt;non-interrupting conditional event&lt;/strong&gt; attached to the&lt;br&gt;
        sub-process. The keyword is &lt;em&gt;non-interrupting&lt;/em&gt; - drawn with a dashed border. The&lt;br&gt;
        original lead processing continues as normal. In parallel, a second path opens up:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - Lea (Jen&amp;amp;apos;s manager) reaches out to the customer to clarify the custom product details.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Lea checks with the production team whether it's feasible.&lt;/li&gt;
&lt;li&gt;If yes, Lea shares the good news and works on a custom deal.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Meanwhile, Jen keeps updating the CRM, doing the follow-up call, and handing the customer&lt;br&gt;
        over to account management. Two paths running in parallel, neither blocking the other.&lt;br&gt;
        That's the power of &lt;strong&gt;non-interrupting events&lt;/strong&gt; on sub-processes.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Loop Markers: Repeat Until Done
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Let's step back from Lea's story and look at the concept behind the repetition.&lt;br&gt;
        Imagine a factory producing heat panels. Each panel goes through the same production step.&lt;br&gt;
        You could model this with an exclusive gateway that loops back:&lt;br&gt;
        &lt;em&gt;"All panels produced? No → go back. Yes → continue."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That works, but it's clunky - two extra gateways just to say "repeat." BPMN offers a&lt;br&gt;
        cleaner solution: the &lt;strong&gt;loop marker&lt;/strong&gt;. A small circular arrow at the bottom&lt;br&gt;
        of a task or sub-process. It means: &lt;em&gt;"this activity repeats until a condition is met."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The token enters the task, executes it, checks the condition, and either loops back or&lt;br&gt;
        moves on. Same behavior as the gateway construct, but the diagram stays clean.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Loop markers** (circular arrow at the bottom of a task) mean "repeat until done."
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Three types: simple loop (one at a time), sequential multi-instance (one at a time, fixed count),&lt;br&gt;
parallel multi-instance (all at once).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Three Flavors of Repetition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;BPMN gives you three loop types, each for a different situation:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Loop marker** (circular arrow) - the task repeats with the *same input* each
      time. Think of a machine stamping out identical parts. It runs until a count or condition
      is satisfied.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Sequential multi-instance&lt;/strong&gt; (three vertical lines) - the task repeats with
      &lt;em&gt;different inputs&lt;/em&gt;, one after another. Think of processing payroll: each employee
      gets a different salary, but they're handled one by one. Jen's lead processing is
      exactly this - each lead is different, but she works through them sequentially.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Parallel multi-instance&lt;/strong&gt; (three horizontal lines) - the task repeats with
      different inputs, all &lt;em&gt;at the same time&lt;/em&gt;. Think of a quality assurance team with
      multiple microscopes checking all samples simultaneously.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The rule of thumb: same input → loop. Different inputs, one at a time → sequential&lt;br&gt;
        multi-instance. Different inputs, all at once → parallel multi-instance.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Event Sub-Processes: Handling Exceptions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;There's one more sub-process type Lea uses: the &lt;strong&gt;event sub-process&lt;/strong&gt;. Unlike&lt;br&gt;
        a regular sub-process that sits in the normal flow, an event sub-process lives &lt;em&gt;inside&lt;/em&gt; a&lt;br&gt;
        parent sub-process and is triggered by an event - not by a sequence flow.&lt;/p&gt;

&lt;p&gt;It comes in two flavors:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Non-interrupting** (dashed start event border) - the parent sub-process keeps
      running. Example: a customer asks about their order status. You handle the inquiry in
      parallel without stopping the shipment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Interrupting&lt;/strong&gt; (solid start event border) - the parent sub-process is cancelled.
      Example: a customer cancels their order. The shipment stops, and the cancellation
      flow takes over.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key insight: event sub-processes handle exceptions &lt;em&gt;within the scope&lt;/em&gt; of their&lt;br&gt;
        parent. They're not part of the normal flow - they're contingency plans, sitting&lt;br&gt;
        quietly until an event triggers them.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Event sub-processes** are contingency plans inside a parent sub-process.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Interrupting (solid border) cancels the parent. Non-interrupting (dashed border) runs&lt;br&gt;
in parallel. They're triggered by events, not by sequence flows.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Naming Your Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;One last thing Lea teaches us. When you create many process diagrams, naming them well&lt;br&gt;
        matters. Two approaches:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Start-to-end naming:** Look at your ideal start and end events.
      Lea&amp;amp;apos;s process starts with &amp;amp;quot;Leads qualified&amp;amp;quot; and ideally ends with &amp;amp;quot;Loyal customer won.&amp;amp;quot;
      Connect them: *Lead to Loyal Customer*.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Job-to-be-done naming:&lt;/strong&gt; Simply describe the work:
      &lt;em&gt;Process Leads&lt;/em&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both work. Pick the style that makes your process library scannable. The goal is that&lt;br&gt;
        someone browsing a list of fifty diagrams can find the right one in seconds.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Big Picture
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Lea's sales process uses almost every concept we've covered:&lt;br&gt;
        ** expanded sub-processes** to show the lead processing detail inline,&lt;br&gt;
        ** sequential multi-instance markers** to repeat it per lead,&lt;br&gt;
        ** event-based gateways** to wait for the lead's response,&lt;br&gt;
        ** non-interrupting events** to handle ad-hoc requests in parallel, and&lt;br&gt;
        ** loop markers** to express repetition cleanly.&lt;/p&gt;

&lt;p&gt;These aren't academic concepts. They're tools that let Jen - a brand-new hire -&lt;br&gt;
        pick up a tablet, read the process, and know exactly what to do with every lead,&lt;br&gt;
        every scenario, every exception. No questions, no guessing. That's what a well-modeled&lt;br&gt;
        process gives you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>Fastfore: All 7 BPMN Task Types Explained</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:17:36 +0000</pubDate>
      <link>https://forem.com/crismoteam/fastfore-all-7-bpmn-task-types-explained-4dh1</link>
      <guid>https://forem.com/crismoteam/fastfore-all-7-bpmn-task-types-explained-4dh1</guid>
      <description>&lt;h2&gt;
  
  
  Meet Jessica
&lt;/h2&gt;

&lt;p&gt;Fastfore is a fast-growing consulting company, and growth means one thing above all&lt;br&gt;
        else: &lt;strong&gt;hiring&lt;/strong&gt;. Applications are flooding in - dozens every week - and&lt;br&gt;
        the process to handle them is pure chaos. CVs get lost in inboxes, interviews are&lt;br&gt;
        scheduled over each other, and rejection emails go out three weeks too late.&lt;/p&gt;

&lt;p&gt;Jessica, the head of HR, has had enough. She wants an &lt;strong&gt;automated workflow&lt;/strong&gt; that&lt;br&gt;
        handles applications from start to finish. But before anyone writes a line of code,&lt;br&gt;
        she needs to understand the process - and communicate it clearly to the engineering&lt;br&gt;
        team who will build it.&lt;/p&gt;

&lt;p&gt;So Jessica draws a BPMN diagram. And because she's designing a process that will&lt;br&gt;
        be automated, she uses something beyond the generic task boxes you've seen so far.&lt;br&gt;
        She uses &lt;strong&gt;task types&lt;/strong&gt; - seven specific variants that tell you not just&lt;br&gt;
        &lt;em&gt;what&lt;/em&gt; needs to happen, but &lt;em&gt;how&lt;/em&gt; it happens.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Beyond the Generic Task
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Every task you've drawn until now has been a plain rounded rectangle - the generic&lt;br&gt;
        task. It works for any job. But when you're preparing a process for automation,&lt;br&gt;
        "any job" isn't specific enough. The engineering team needs to know: Is this&lt;br&gt;
        done by a person in software? By a person with their hands? By a machine? By a script?&lt;/p&gt;

&lt;p&gt;BPMN solves this with a small icon in the &lt;strong&gt;upper-left corner&lt;/strong&gt; of the task.&lt;br&gt;
        That icon identifies the task type. Seven types, seven icons, seven ways work gets done.&lt;br&gt;
        Let's meet them all through Jessica's hiring process - and then see them again&lt;br&gt;
        on the factory floor.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Hiring Process: Happy Path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;An application arrives. The first thing HR does is screen the CV and the cover letter.&lt;br&gt;
        Jessica's team does this in their HR software - they open a form, review the&lt;br&gt;
        documents, and click Accept or Reject.&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;user task&lt;/strong&gt;. A person performs the work inside an IT system,&lt;br&gt;
        typically by filling out or submitting a form. The icon is a small person with a&lt;br&gt;
        monitor. Whenever you see someone working &lt;em&gt;in software&lt;/em&gt; - entering data in SAP,&lt;br&gt;
        reviewing a case in a CRM, approving a request in a portal - that's a user task.&lt;/p&gt;

&lt;p&gt;If the applicant looks promising, the department manager gets notified to review the&lt;br&gt;
        profile. That notification is an automated email - no human writes it, no human clicks&lt;br&gt;
        Send. The system fires it automatically.&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;service task&lt;/strong&gt;. It represents work done entirely by a machine -&lt;br&gt;
        calling a web service, triggering an API, executing an automated operation. The icon is&lt;br&gt;
        a small gear. No human involvement, pure automation.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Scheduling and Interviewing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The department manager reviews the profile (another &lt;strong&gt;user task&lt;/strong&gt; - same&lt;br&gt;
        pattern: person in software, form, decision buttons). If they approve, HR needs to&lt;br&gt;
        schedule an interview.&lt;/p&gt;

&lt;p&gt;Now here's a question: how does the interview get scheduled? In Jessica's&lt;br&gt;
        current process, someone manually scrolls through calendars trying to find a free&lt;br&gt;
        slot for both the HR manager and the department manager. That's tedious - but&lt;br&gt;
        it's the reality &lt;em&gt;right now&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Once the interview is scheduled, HR sends the invite to the candidate. This is an&lt;br&gt;
        explicit act of communication - a person prepares a message and dispatches it. That's&lt;br&gt;
        a &lt;strong&gt;send task&lt;/strong&gt;. The icon is a filled envelope. It represents someone (or&lt;br&gt;
        something) actively transmitting a message, a document, or a package to a defined recipient.&lt;/p&gt;

&lt;p&gt;Quick note: you can model the exact same thing with a generic task followed by a&lt;br&gt;
        throwing message event. Both mean the same thing in BPMN. Use the send task when&lt;br&gt;
        you're already using task types throughout your process - it keeps things consistent.&lt;/p&gt;

&lt;p&gt;After the invite goes out, the process waits. It can't proceed until the candidate&lt;br&gt;
        responds. That waiting - actively receiving something from the outside - is a receive&lt;br&gt;
        task. The icon is an empty envelope. The key difference from a catching message&lt;br&gt;
        event: the receive task implies someone &lt;em&gt;actively receives&lt;/em&gt; the response (think&lt;br&gt;
        of someone walking to the mailroom and picking up a package), while a catching event&lt;br&gt;
        is more passive (an invoice lands in your inbox without you doing anything).&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Interview Itself
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The candidate shows up. The HR manager and the department manager sit across the table,&lt;br&gt;
        ask questions, evaluate body language, take notes on paper. No software involved. No&lt;br&gt;
        screens. Just people talking.&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;manual task&lt;/strong&gt;. The icon is a small hand. It represents work&lt;br&gt;
        done entirely without IT system interaction - packaging a shipment, conducting a&lt;br&gt;
        physical inspection, having a face-to-face meeting.&lt;/p&gt;

&lt;p&gt;After the interview, the team evaluates the candidate. They decide: hire or reject.&lt;br&gt;
        This evaluation follows strict criteria - minimum years of experience, required&lt;br&gt;
        certifications, salary band rules. These aren't gut feelings; they're&lt;br&gt;
        documented business rules.&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;business rule task&lt;/strong&gt;. The icon is a small table. This task&lt;br&gt;
        applies pre-defined rules to reach a decision - a bank checking your creditworthiness&lt;br&gt;
        against income thresholds, a quality team verifying samples against compliance norms,&lt;br&gt;
        or HR matching a candidate against hiring criteria. Business rule tasks can even be&lt;br&gt;
        linked to a formal decision model (DMN - Decision Model and Notation), where the&lt;br&gt;
        rules are executed automatically.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Offer or the Rejection
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;If the candidate passes, HR sends the offer - a &lt;strong&gt;send task&lt;/strong&gt;. If they&lt;br&gt;
        don't pass, HR sends a rejection email - a &lt;strong&gt;service task&lt;/strong&gt; (automated,&lt;br&gt;
        no human writes it). Three different outcomes in the process, three different paths,&lt;br&gt;
        but every task is now explicitly typed.&lt;/p&gt;

&lt;p&gt;And that's Jessica's hiring process. But there's one task type we&lt;br&gt;
        haven't seen yet.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Missing Type: Script Task
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Fastfore's hiring process includes a custom assessment: a coding challenge for&lt;br&gt;
        engineering candidates. The challenge is evaluated by a script - a small program that&lt;br&gt;
        runs the candidate's code against test cases and produces a score.&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;script task&lt;/strong&gt;. The icon is a small scroll. Unlike the&lt;br&gt;
        service task (which &lt;em&gt;calls&lt;/em&gt; an existing external service), the script task&lt;br&gt;
        &lt;em&gt;executes&lt;/em&gt; a custom script directly in a runtime environment. You wrote the&lt;br&gt;
        logic yourself, and it runs right there.&lt;/p&gt;

&lt;p&gt;The distinction matters for engineers:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Service task:** You call something that already exists - a Google
      Calendar API, a payment gateway, an email service. You leverage an external capability.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Script task:&lt;/strong&gt; You wrote the code yourself and execute it directly.&lt;br&gt;
      A Python script that calculates salary bands based on experience, a scoring algorithm,&lt;br&gt;
      a data transformation.&lt;/p&gt;

&lt;p&gt;## On the Factory Floor&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Fastfore isn't just a consulting firm. One of their largest clients is Space&lt;br&gt;
        Z, a spacecraft manufacturer. Let's see the same seven task types in action&lt;br&gt;
        on their production line - because task types really shine when physical and digital&lt;br&gt;
        work coexist.&lt;/p&gt;

&lt;p&gt;The process starts with checking material availability. The planning team looks this up&lt;br&gt;
        in their ERP system - a &lt;strong&gt;user task&lt;/strong&gt;. They're in software, querying&lt;br&gt;
        a database, reading results on screen.&lt;/p&gt;

&lt;p&gt;If parts are missing, they send a purchase order to the supplier - a &lt;strong&gt;send task&lt;/strong&gt;.&lt;br&gt;
        When the goods arrive, a warehouse worker physically receives them - a receive&lt;br&gt;
        task (someone actively takes delivery, not a passive inbox event).&lt;/p&gt;

&lt;p&gt;But what if the supplier doesn't deliver within three days? Someone gets in a car,&lt;br&gt;
        drives to the supplier, and picks up the parts manually. That's a manual&lt;br&gt;
        task - no IT system involved, just a person and a vehicle.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Planning and Production
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Once materials are ready, the planning team creates the production plan in their planning&lt;br&gt;
        software - a &lt;strong&gt;user task&lt;/strong&gt;. But the software doesn't cover everything.&lt;br&gt;
        The team has built their own script to calculate sample sizes outside the official tool.&lt;br&gt;
        That calculation is a &lt;strong&gt;script task&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The quality assurance team reviews the plan against pre-defined norms. If the sample&lt;br&gt;
        size is below 5% of the production batch, they reject the plan. These are strict,&lt;br&gt;
        documented rules - a &lt;strong&gt;business rule task&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;With the plan approved, the production team adjusts the machines. Workers turn dials,&lt;br&gt;
        swap tooling, calibrate equipment. Some machines have interfaces, but the bulk of&lt;br&gt;
        the work is physical - a &lt;strong&gt;manual task&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then the machines run. They produce the samples automatically - a service&lt;br&gt;
        task. The machines are the service. They were configured, started, and now&lt;br&gt;
        they do the work without human intervention.&lt;/p&gt;

&lt;p&gt;Finally, quality assurance inspects the samples against compliance norms - another&lt;br&gt;
        &lt;strong&gt;business rule task&lt;/strong&gt;. Clear criteria, documented thresholds, pass or fail.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Golden Rule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here's the most important principle for choosing task types: when in doubt,&lt;br&gt;
        pick the less automated option.&lt;/p&gt;

&lt;p&gt;Why? Because when you model a process with task types, you're usually documenting&lt;br&gt;
        the &lt;strong&gt;as-is process&lt;/strong&gt; - how things work &lt;em&gt;today&lt;/em&gt;. The whole point&lt;br&gt;
        is to highlight where automation potential exists. If you label a partially manual task&lt;br&gt;
        as a service task, you hide the very inefficiency you're trying to find.&lt;/p&gt;

&lt;p&gt;At Space Z, adjusting the machines is a hybrid job - some settings are digital, some&lt;br&gt;
        are physical. By marking it as a &lt;strong&gt;manual task&lt;/strong&gt;, you signal to the&lt;br&gt;
        engineering team: "This is a candidate for automation." That's far more valuable&lt;br&gt;
        than pretending it's already automated.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **The golden rule:** When in doubt, pick the less automated task type.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;You're documenting the as-is process to highlight automation potential. Don't hide&lt;br&gt;
inefficiencies by labeling manual work as automated.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Why Task Types Matter
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Jessica's hiring process, enriched with task types, tells the engineering team&lt;br&gt;
        everything they need to build the automation:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - Three **user tasks** = three input forms needed in the workflow system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Four &lt;strong&gt;service tasks&lt;/strong&gt; = four automated emails to configure&lt;/li&gt;
&lt;li&gt;Two &lt;strong&gt;manual tasks&lt;/strong&gt; = two steps the system can't automate (yet)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A trained engineer can look at the diagram and immediately derive system requirements.&lt;br&gt;
        The user tasks tell them exactly how many forms to build and what fields they need.&lt;br&gt;
        The service tasks tell them which integrations to set up. The manual tasks highlight&lt;br&gt;
        where human intervention is unavoidable - or where future automation could save time.&lt;/p&gt;

&lt;p&gt;That's the real power of task types: they bridge the gap between business&lt;br&gt;
        people and engineers. Jessica describes the process she needs. The engineering&lt;br&gt;
        team reads it and knows exactly what to build. No lost-in-translation meetings, no&lt;br&gt;
        ambiguous requirements documents. One diagram, shared understanding.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Seven Types at a Glance
  - **User task** - A person works in software (filling a form, reviewing a record)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Service task&lt;/strong&gt; - A machine does the work (API call, automated operation)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Send task&lt;/strong&gt; - A message or package is dispatched to a recipient&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Receive task&lt;/strong&gt; - A message or package is actively received by a performer&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Manual task&lt;/strong&gt; - Work done without any IT system (hands-on, physical)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Script task&lt;/strong&gt; - A custom script is executed in a runtime environment&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Business rule task&lt;/strong&gt; - Pre-defined rules are applied to make a decision&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For non-technical processes, generic tasks are perfectly fine. But the moment automation&lt;br&gt;
        enters the picture, task types become indispensable. They don't just document what&lt;br&gt;
        happens - they document &lt;em&gt;how&lt;/em&gt; it happens, and that's what makes a process&lt;br&gt;
        diagram actionable.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Seven task types:** User (person in software), Service (machine/API),
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Send (dispatch), Receive (accept delivery), Manual (hands-on), Script (custom code),&lt;br&gt;
Business Rule (apply pre-defined rules). Each has a unique icon in the upper-left corner.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>The Travel Agency: Sub-Processes, Call Activities &amp; Data in BPMN</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:17:00 +0000</pubDate>
      <link>https://forem.com/crismoteam/the-travel-agency-sub-processes-call-activities-data-in-bpmn-4mm6</link>
      <guid>https://forem.com/crismoteam/the-travel-agency-sub-processes-call-activities-data-in-bpmn-4mm6</guid>
      <description>&lt;h2&gt;
  
  
  You Deserve a Holiday
&lt;/h2&gt;

&lt;p&gt;After mastering events, gateways, and parallel work, you've earned a break. So let's&lt;br&gt;
        take a trip to &lt;strong&gt;Paradise Island&lt;/strong&gt; - white sand, turquoise water, zero&lt;br&gt;
        exclusive gateways.&lt;/p&gt;

&lt;p&gt;There's just one problem. You applied for your visa four weeks ago, and it still&lt;br&gt;
        hasn't arrived. Your luggage is packed. Your flight is booked. But the embassy?&lt;br&gt;
        Radio silence.&lt;/p&gt;

&lt;p&gt;You pick up the phone and call. Turns out the &lt;strong&gt;Embassy of Paradise Island&lt;/strong&gt; is&lt;br&gt;
        famously old-fashioned - every process is paper-based, nothing is digitalized. The officer&lt;br&gt;
        apologizes and walks you through what's been happening behind the scenes. As you&lt;br&gt;
        listen, you sketch the process in BPMN. Suddenly you can see exactly where your&lt;br&gt;
        application is stuck - and &lt;em&gt;why&lt;/em&gt; it takes so long.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Documents
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The visa process starts the moment you send your documents to the embassy. From a BPMN&lt;br&gt;
        perspective, that's a &lt;strong&gt;message start event&lt;/strong&gt; - something arrives from&lt;br&gt;
        outside. But this time, we want to make the documents themselves visible in the diagram.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;data object&lt;/strong&gt; represents any piece of data flowing through a process -&lt;br&gt;
        a business document, an email, a form, a letter. It's drawn as a page with a folded&lt;br&gt;
        corner, and it connects to tasks with a dashed arrow. The arrow direction tells you&lt;br&gt;
        whether the task &lt;em&gt;reads&lt;/em&gt; the data (arrow pointing to the task) or &lt;em&gt;writes&lt;/em&gt; it&lt;br&gt;
        (arrow pointing away from the task).&lt;/p&gt;

&lt;p&gt;In the visa process, the first data object is the &lt;strong&gt;visa application form&lt;/strong&gt; you&lt;br&gt;
        filled out. The back office reads it to check whether your documents are complete. A second&lt;br&gt;
        data object - your &lt;strong&gt;supporting documents&lt;/strong&gt; (passport copies, photos, proof of&lt;br&gt;
        accommodation) - flows alongside it.&lt;/p&gt;

&lt;p&gt;Data objects are always &lt;strong&gt;optional&lt;/strong&gt;. You don't need to attach one to every&lt;br&gt;
        task that touches data. But when you want to highlight which documents matter - for&lt;br&gt;
        instance, when designing a document management system - they make the process far&lt;br&gt;
        more expressive.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Data objects** (page icon with folded corner) represent documents flowing through
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;the process. &lt;strong&gt;Data stores&lt;/strong&gt; (cylinder) represent persistent storage. Both are&lt;br&gt;
optional - use them when you want to highlight which data matters.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Applicant Database
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;After the back office checks your documents, they create an entry in the embassy's&lt;br&gt;
        applicant tracking system. This isn't a document that flows with the process and&lt;br&gt;
        disappears - it's a persistent record that outlives your individual application.&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;data store&lt;/strong&gt;. Unlike a data object, which exists only during&lt;br&gt;
        the process, a data store persists &lt;em&gt;beyond the lifetime of any single process instance&lt;/em&gt;.&lt;br&gt;
        Think of it as a database, a CRM, a filing cabinet - something that was there before your&lt;br&gt;
        application arrived and will be there after it's processed.&lt;/p&gt;

&lt;p&gt;The data store is drawn as an open cylinder. When a task writes to it, the arrow points&lt;br&gt;
        from the task to the store. When a task reads from it, the arrow goes the other direction.&lt;br&gt;
        In the visa process, the back office &lt;em&gt;writes&lt;/em&gt; your record to the applicant&lt;br&gt;
        database, and later the visa officer &lt;em&gt;reads&lt;/em&gt; it when making the final decision.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Three Departments, One Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Your application doesn't stay in one department. The &lt;strong&gt;back office&lt;/strong&gt; checks&lt;br&gt;
        whether documents are complete. The &lt;strong&gt;compliance department&lt;/strong&gt; runs background&lt;br&gt;
        checks and verifies document authenticity. The &lt;strong&gt;visa officer&lt;/strong&gt; makes the&lt;br&gt;
        final decision.&lt;/p&gt;

&lt;p&gt;That's three lanes inside the embassy pool. Each department handles its part, and&lt;br&gt;
        the sequence flow crosses lane boundaries to move responsibility from one team to the&lt;br&gt;
        next - no extra handover tasks needed.&lt;/p&gt;

&lt;p&gt;But here's where it gets interesting. The compliance department's document&lt;br&gt;
        verification involves several steps: checking watermarks, validating stamps, cross-referencing&lt;br&gt;
        with issuing authorities. It's a process within the process.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Nesting Processes: The Sub-Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;A &lt;strong&gt;sub-process&lt;/strong&gt; lets you take a group of related tasks and collapse them&lt;br&gt;
        into a single activity with a small plus sign. Click the plus, and the detail expands.&lt;br&gt;
        Close it, and you're back to the high-level view.&lt;/p&gt;

&lt;p&gt;When the token reaches a sub-process, it enters the underlying detail and works through&lt;br&gt;
        it like any other process - start event, tasks, gateways, end event. Meanwhile, the&lt;br&gt;
        token in the parent process &lt;em&gt;waits&lt;/em&gt;. Only when the sub-process token reaches&lt;br&gt;
        its end event does the parent token get released to continue.&lt;/p&gt;

&lt;p&gt;This introduces &lt;strong&gt;hierarchy levels&lt;/strong&gt; in BPMN. The parent process is Level 1 -&lt;br&gt;
        a high-level overview. The sub-process is Level 2 - the detailed breakdown. You can&lt;br&gt;
        abstract information at Level 1 and provide all the granularity at Level 2.&lt;/p&gt;

&lt;p&gt;In the visa process, &lt;em&gt;"Verify documents"&lt;/em&gt; is a sub-process. At Level 1, it looks&lt;br&gt;
        like a single task. At Level 2, it expands into checking watermarks, validating stamps,&lt;br&gt;
        cross-referencing authorities, and recording results. The visa officer doesn't need&lt;br&gt;
        to see those details - they just need to know: documents verified, yes or no.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Sub-processes** group related tasks into a collapsible container (marked with a +).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;The parent process waits while the sub-process runs. This creates hierarchy: Level 1 is the&lt;br&gt;
overview, Level 2 is the detail.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Reuse: The Call Activity
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now here's the thing. The embassy doesn't just process tourist visas. They&lt;br&gt;
        handle &lt;strong&gt;business visas&lt;/strong&gt;, &lt;strong&gt;work visas&lt;/strong&gt;, student&lt;br&gt;
        visas, and &lt;strong&gt;transit visas&lt;/strong&gt;. Each visa type has its own process.&lt;br&gt;
        But every single one of them needs document verification.&lt;/p&gt;

&lt;p&gt;If document verification were a regular sub-process, you'd have five copies of the&lt;br&gt;
        same verification steps - one embedded in each visa process. Change one step (say,&lt;br&gt;
        add a new security check), and you'd have to update it five times. That's&lt;br&gt;
        a maintenance nightmare.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;call activity&lt;/strong&gt; solves this. It looks like a sub-process - a task with&lt;br&gt;
        a plus sign - but with a &lt;strong&gt;bold border&lt;/strong&gt;. That bold border signals: the&lt;br&gt;
        underlying process is &lt;em&gt;globally defined&lt;/em&gt;. It exists independently and can be&lt;br&gt;
        invoked by any process that needs it.&lt;/p&gt;

&lt;p&gt;All five visa processes call the same globally defined document verification process.&lt;br&gt;
        Update it once, and every visa type benefits. The call activity is BPMN's answer&lt;br&gt;
        to reusable components - define once, use everywhere.&lt;/p&gt;

&lt;p&gt;The difference is subtle but important:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Sub-process:** The detail belongs to *this* process. It&amp;amp;apos;s embedded.
      One parent, one child.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Call activity:&lt;/strong&gt; The detail is globally defined. Many parents can call the&lt;br&gt;
      same child. Bold border = shared.&lt;/p&gt;

&lt;p&gt;## When the Diagram Gets Too Big&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The embassy's full visa process - all three departments, all the checks, the&lt;br&gt;
        decision tree - is massive. Printed out, it covers an entire wall. Business users&lt;br&gt;
        lose track halfway through. That's not useful.&lt;/p&gt;

&lt;p&gt;You already know how to use sub-processes to create hierarchy. But sometimes the&lt;br&gt;
        process is huge even at one level - too many paths crossing each other, arrows&lt;br&gt;
        weaving left and right and looping back.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Link events&lt;/strong&gt; solve this. They always come in pairs: a throwing&lt;br&gt;
        link event and a &lt;strong&gt;catching link event&lt;/strong&gt;. Together, they replace&lt;br&gt;
        a sequence flow. The throwing event sends the token, and the catching event receives&lt;br&gt;
        it - both carry the &lt;em&gt;same name&lt;/em&gt; so you know they belong together.&lt;/p&gt;

&lt;p&gt;Link events are useful in two situations:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Avoiding crossing flows:** When a sequence flow would have to cross over
      other flows (reducing readability), replace it with a pair of link events. The throwing
      event sends the token; the catching event receives it on the other side - no crossing
      needed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Slicing large processes:&lt;/strong&gt; Cut an oversized process into two or three&lt;br&gt;
      manageable sections. For every sequence flow you cut, add one pair of link events to&lt;br&gt;
      reconnect. Three cuts = three pairs = six link events. Each section can be read independently.&lt;/p&gt;

&lt;p&gt;## Rules for Link Events&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Two rules to remember:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - Only **intermediate** link events exist. There are no link start events
      or link end events.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Link events are for slicing a &lt;em&gt;single&lt;/em&gt; process into parts - not for connecting
      separate follow-up processes. For that, use normal start and end events.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;How do you know whether something is a "second part of the same process" or a&lt;br&gt;
        "follow-up process"? Ask yourself: &lt;em&gt;What is the goal of this process?&lt;/em&gt; In the&lt;br&gt;
        shoe shop, the goal was selling shoes. Cleaning them afterward is a different goal - a&lt;br&gt;
        follow-up process. But the back office check and the visa officer's decision share&lt;br&gt;
        the same goal: processing the visa application. That's one process, potentially&lt;br&gt;
        sliced with link events.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Full Picture
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here's how all these elements come together in the visa process:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Data objects** make the visa application form and supporting documents
      visible as they flow between departments.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;A data store&lt;/strong&gt; represents the applicant database - persistent, shared,
      outliving any single application.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A sub-process&lt;/strong&gt; hides the detailed verification steps behind a clean
      "Verify documents" label at Level 1.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;A call activity&lt;/strong&gt; makes that verification reusable across tourist, business,
      work, student, and transit visa processes.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Link events&lt;/strong&gt; slice the overall process into readable sections so no one
      has to follow arrows across a wall-sized diagram.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your visa application? It was stuck in the compliance department - the document verification&lt;br&gt;
        sub-process was waiting on a response from the issuing authority. Now that you can read&lt;br&gt;
        the process, you know exactly where to follow up. And when you finally land on Paradise&lt;br&gt;
        Island, you'll appreciate the process that got you there - even if it took a few&lt;br&gt;
        extra weeks.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>BPMN Best Practices: Modeling Rules That Actually Matter</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:16:24 +0000</pubDate>
      <link>https://forem.com/crismoteam/bpmn-best-practices-modeling-rules-that-actually-matter-1jjb</link>
      <guid>https://forem.com/crismoteam/bpmn-best-practices-modeling-rules-that-actually-matter-1jjb</guid>
      <description>&lt;h2&gt;
  
  
  No New Elements This Time
&lt;/h2&gt;

&lt;p&gt;This chapter is different. There are no new shapes to learn. Instead, you're getting&lt;br&gt;
        a set of &lt;strong&gt;modeling rules&lt;/strong&gt; - the kind of rules that separate clean,&lt;br&gt;
        professional process diagrams from expensive wallpaper that nobody reads.&lt;/p&gt;

&lt;p&gt;These aren't obscure academic guidelines. They're practical conventions that&lt;br&gt;
        immediately improve the &lt;strong&gt;correctness&lt;/strong&gt;, &lt;strong&gt;readability&lt;/strong&gt;,&lt;br&gt;
        and &lt;strong&gt;expressiveness&lt;/strong&gt; of every diagram you build.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The 15-Task Rule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;For your process to be valuable, other people need to understand it. A process that&lt;br&gt;
        only you can read doesn't matter to your organization. Your diagrams need to be&lt;br&gt;
        ** accessible** - clear enough that a reader can grasp them without&lt;br&gt;
        feeling overwhelmed - and &lt;strong&gt;expressive&lt;/strong&gt; - meaningful enough to help&lt;br&gt;
        users tackle real business challenges.&lt;/p&gt;

&lt;p&gt;The simplest way to achieve both? Ask yourself one question before you start&lt;br&gt;
        modeling: &lt;em&gt;how complex does this process actually need to be?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The rule of thumb: &lt;strong&gt;don't use more than 15 tasks in one process&lt;/strong&gt;.&lt;br&gt;
        The SpaceZ heat panel process from the previous chapter had 10 tasks - a considerable&lt;br&gt;
        size, but still manageable. Once you push past 15 tasks, users start to struggle.&lt;br&gt;
        The diagram stops being a tool and starts being a wall of shapes.&lt;/p&gt;

&lt;p&gt;Remember Max, the shop assistant from the very first chapter? Max needs instant&lt;br&gt;
        information. He doesn't have the time or patience to trace 47 tasks and 12&lt;br&gt;
        gateways across a screen-wide diagram. If your process can't be read in a minute&lt;br&gt;
        or two, Max will ignore it - and so will everyone else in your organization.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **The 15-task rule:** Keep processes under 15 tasks. If it's bigger, split it
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;into sub-processes. A diagram that can't be read in two minutes won't be read at all.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## When to Break the Rule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;There is one exception. If your process is designed for technical&lt;br&gt;
        users - for example, defining the requirements of an SAP system - it's&lt;br&gt;
        fine to exceed 15 tasks. But only if every stakeholder who reads the diagram is&lt;br&gt;
        skilled and confident in BPMN.&lt;/p&gt;

&lt;p&gt;The key question is always: &lt;em&gt;what is the purpose of my process model?&lt;/em&gt;&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - Are you expressing valuable business information for end users?
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Are you defining the behavior of a complex IT system?&lt;/li&gt;
&lt;li&gt;Are you creating a process for regulatory audits?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each purpose demands a different scope. A process for Max and a process for a&lt;br&gt;
        systems architect are fundamentally different documents, even if they describe the&lt;br&gt;
        same workflow.&lt;/p&gt;

&lt;p&gt;And if your business process genuinely needs more than 15 tasks? Don't just delete&lt;br&gt;
        random tasks to fit the number. In later chapters, you'll learn how to break&lt;br&gt;
        complex processes into &lt;strong&gt;sub-processes&lt;/strong&gt; - structured containers that&lt;br&gt;
        keep the top-level diagram clean while preserving all the detail underneath.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Naming: Pools and Lanes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Pools and lanes represent responsibilities. It's tempting to label a lane with a&lt;br&gt;
        person's name - "Max" - but this is a mistake.&lt;/p&gt;

&lt;p&gt;Max may not be the only shop assistant. You don't want a separate process for every&lt;br&gt;
        employee. And when Max leaves or a new assistant is hired, the model breaks. Instead,&lt;br&gt;
        always label lanes with &lt;strong&gt;general roles&lt;/strong&gt;: a department, a job function,&lt;br&gt;
        a team. &lt;em&gt;"Shop Assistant"&lt;/em&gt;, not &lt;em&gt;"Max."&lt;/em&gt; The role should describe who&lt;br&gt;
        is responsible for the tasks in that lane, regardless of which specific person fills&lt;br&gt;
        the role today.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Naming: Tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Tasks represent actions - someone has to &lt;em&gt;do&lt;/em&gt; something. Your labels should&lt;br&gt;
        reflect that. Compare these two names for the same task:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - *"Shoe size check"*
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;&lt;em&gt;"Check if the shoe size is available"&lt;/em&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The second one is better. It uses an &lt;strong&gt;active verb&lt;/strong&gt; - "check" - which&lt;br&gt;
        makes it immediately clear that action is required. The first version is vague. Is&lt;br&gt;
        it a check that was done? A check that needs doing? A check that's being considered?&lt;/p&gt;

&lt;p&gt;The convention: &lt;strong&gt;verb + noun&lt;/strong&gt;. &lt;em&gt;"Prepare production plan."&lt;/em&gt;&lt;br&gt;
        &lt;em&gt;"Adjust machines."&lt;/em&gt; &lt;em&gt;"Assess panel quality."&lt;/em&gt; Every task label&lt;br&gt;
        should read like an instruction - clear enough that the reader knows exactly what&lt;br&gt;
        to do.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Naming convention:** Tasks use verb + noun ("Check inventory", not "Inventory").
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Events describe states ("Order received", not "Receive order"). Lanes name roles, not people.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Naming: Events
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Events are the opposite of tasks. They don't represent actions - they represent&lt;br&gt;
        ** states or stages**. Something has happened, or something is being&lt;br&gt;
        waited for. Your labels should reflect that distinction.&lt;/p&gt;

&lt;p&gt;Use &lt;strong&gt;passive descriptions&lt;/strong&gt;: &lt;em&gt;"Payment reminder has been sent."&lt;/em&gt;&lt;br&gt;
        &lt;em&gt;"Raw material delivered."&lt;/em&gt; &lt;em&gt;"Quarter has started."&lt;/em&gt; These make it&lt;br&gt;
        clear that the event describes a situation, not an instruction.&lt;/p&gt;

&lt;p&gt;If your event label sounds like a task - &lt;em&gt;"Send payment reminder"&lt;/em&gt; - readers&lt;br&gt;
        will get confused. Is it a task or an event? Keep the boundary sharp: tasks are&lt;br&gt;
        active, events are passive.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Collaboration: Sequence Flows vs. Message Flows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here's a mistake so common it deserves its own section. When two lanes inside&lt;br&gt;
        the same pool need to communicate - say, the Planning Department hands a production&lt;br&gt;
        plan to Quality Assurance - many modelers reach for the message&lt;br&gt;
        event. After all, they might send the plan via email.&lt;/p&gt;

&lt;p&gt;But this is &lt;strong&gt;incorrect&lt;/strong&gt;. Message events are reserved exclusively for&lt;br&gt;
        communication with &lt;strong&gt;external parties&lt;/strong&gt; - participants in a different&lt;br&gt;
        pool. For handovers within the same organization, a simple sequence&lt;br&gt;
        flow crossing the lane boundary is enough. The arrow says: the work moves&lt;br&gt;
        to this role now.&lt;/p&gt;

&lt;p&gt;Think of the Bookworm store. When the store communicates with a customer - an&lt;br&gt;
        external party in a separate pool - message events and message flows are correct.&lt;br&gt;
        But when the sales manager hands off to the warehouse manager within the same store,&lt;br&gt;
        a sequence flow across lanes is all you need.&lt;/p&gt;

&lt;p&gt;The rule:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Within one pool** → use sequence flows
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Between pools&lt;/strong&gt; → use message events&lt;/p&gt;

&lt;p&gt;## Consistent Flow Direction&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every pool must contain a &lt;strong&gt;complete process&lt;/strong&gt; - a path from start event&lt;br&gt;
        to end event that runs without interruption. The token must be able to roll from&lt;br&gt;
        beginning to end within a single pool.&lt;/p&gt;

&lt;p&gt;This matters when you model two separate organizations. Imagine expanding the&lt;br&gt;
        Bookworm store process by adding a full customer pool alongside the store pool. Both&lt;br&gt;
        pools must contain &lt;strong&gt;independent, complete processes&lt;/strong&gt;. If you removed&lt;br&gt;
        one pool entirely, the other should still make sense on its own.&lt;/p&gt;

&lt;p&gt;Use two full pools &lt;strong&gt;only when necessary&lt;/strong&gt; - when both processes are&lt;br&gt;
        highly important and you need to understand both in detail. For example, when&lt;br&gt;
        optimizing the customer journey, you need the customer's perspective modeled just&lt;br&gt;
        as thoroughly as the store's internal process.&lt;/p&gt;

&lt;p&gt;In most cases, though, a &lt;strong&gt;collapsed pool&lt;/strong&gt; - a simple black bar&lt;br&gt;
        representing the external party without showing their internal flow - is enough.&lt;br&gt;
        It keeps your diagram focused and reduces complexity.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Straight to Success
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This final rule is the one that elevates a correct process diagram into a&lt;br&gt;
        &lt;em&gt;professional&lt;/em&gt; one.&lt;/p&gt;

&lt;p&gt;Look at the shoe store process from Chapter 1. The success path - the ideal&lt;br&gt;
        scenario where everything goes right - follows a straight horizontal&lt;br&gt;
        line. When a gateway makes a decision and the answer is positive, the&lt;br&gt;
        token continues straight ahead. When the answer is negative, the token branches&lt;br&gt;
        ** downward**.&lt;/p&gt;

&lt;p&gt;You could swap the paths and the process would be semantically identical - it&lt;br&gt;
        would still be correct. But it would be harder to read. The reader would have to&lt;br&gt;
        trace branching paths to find the happy ending, instead of simply following the&lt;br&gt;
        straight line.&lt;/p&gt;

&lt;p&gt;The convention:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Successful outcome** → go straight
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Negative outcome&lt;/strong&gt; → branch downward&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Model the happy path first, as a clear horizontal flow from left to right. Then&lt;br&gt;
        add exceptions and error handling as downward branches. This gives every reader -&lt;br&gt;
        from Max the shop assistant to a senior process consultant - a consistent,&lt;br&gt;
        predictable way to read any BPMN diagram you build.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Complete Checklist
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Five rules. No new symbols. But if you apply these consistently, your process&lt;br&gt;
        diagrams will be clearer than those built by people with years more experience.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Scope** - keep processes under 15 tasks for business users. Use
      sub-processes to break up larger flows.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Naming (lanes)&lt;/strong&gt; - use roles, not people's names.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Naming (tasks)&lt;/strong&gt; - use verb + noun. Make every label an instruction.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Naming (events)&lt;/strong&gt; - use passive descriptions. Make every label a
      state.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Collaboration&lt;/strong&gt; - sequence flows within a pool, message events
      between pools. Never use message events for internal handovers.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Complete pools&lt;/strong&gt; - every pool must contain a full, independent
      process from start to end.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Straight to success&lt;/strong&gt; - the happy path goes straight, exceptions
      branch downward.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Apply these rules and your processes stop being diagrams. They become tools -&lt;br&gt;
        readable, maintainable, and useful to everyone in the organization.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>The Space Ship: Timer, Conditional &amp; Attached Events in BPMN</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:15:48 +0000</pubDate>
      <link>https://forem.com/crismoteam/the-space-ship-timer-conditional-attached-events-in-bpmn-eni</link>
      <guid>https://forem.com/crismoteam/the-space-ship-timer-conditional-attached-events-in-bpmn-eni</guid>
      <description>&lt;h2&gt;
  
  
  Welcome to SpaceZ
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;SpaceZ&lt;/strong&gt; is a private spaceship manufacturer. Their spacecraft re-enter&lt;br&gt;
        the atmosphere at thousands of degrees - and the only thing standing between the crew&lt;br&gt;
        and incineration is a set of &lt;strong&gt;heat-resistant panels&lt;/strong&gt;. The engineering&lt;br&gt;
        team has just developed a new generation of these panels. Now it's up to the production&lt;br&gt;
        team to manufacture them.&lt;/p&gt;

&lt;p&gt;The stakes are high. A faulty panel could endanger lives. The process needs to be fast,&lt;br&gt;
        precise, and crystal clear - with built-in safeguards for when things go wrong. Three&lt;br&gt;
        teams are involved: the &lt;strong&gt;Planning Department&lt;/strong&gt;, which procures raw&lt;br&gt;
        materials and creates the production plan; &lt;strong&gt;Quality Assurance&lt;/strong&gt;, which&lt;br&gt;
        checks both the plan and the finished samples; and the &lt;strong&gt;Production Team&lt;/strong&gt;,&lt;br&gt;
        which adjusts machinery and manufactures the panels.&lt;/p&gt;

&lt;p&gt;To model this process, you need elements you haven't seen before - events that react&lt;br&gt;
        to &lt;em&gt;time&lt;/em&gt;, events that react to &lt;em&gt;conditions&lt;/em&gt;, and events that can&lt;br&gt;
        &lt;em&gt;interrupt a task that's already running&lt;/em&gt;.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## When Time Is the Trigger
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;SpaceZ's development department hands over new products on a quarterly schedule. The&lt;br&gt;
        production process doesn't start when someone presses a button - it starts when&lt;br&gt;
        a new quarter begins. That's a &lt;strong&gt;timer start event&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In BPMN, timer events are drawn with a small clock symbol inside the circle. They&lt;br&gt;
        represent specific dates, deadlines, or durations. Think of an audit triggered at&lt;br&gt;
        the start of every quarter, or a warehouse check that takes exactly one week.&lt;/p&gt;

&lt;p&gt;Here's a crucial detail: &lt;strong&gt;timer events are always catching events&lt;/strong&gt;.&lt;br&gt;
        Why? Because time isn't something you can trigger - it simply happens. You can send&lt;br&gt;
        a message (that's a throwing event), but you can't &lt;em&gt;send&lt;/em&gt; time. You can only&lt;br&gt;
        wait for it. That's why BPMN has no throwing timer events.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Timer events** use a clock symbol. They represent dates, deadlines, or durations.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Timer events are always &lt;em&gt;catching&lt;/em&gt; - you can't send time, only wait for it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Waiting for a Condition
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Timer events wait for a point in time. &lt;strong&gt;Conditional events&lt;/strong&gt; wait for&lt;br&gt;
        a situation to become true.&lt;/p&gt;

&lt;p&gt;Imagine a warehouse where stock is running low. The condition &lt;em&gt;"only one unit left&lt;br&gt;
        in stock"&lt;/em&gt; is either true or false. A conditional event holds the token in place&lt;br&gt;
        until the condition flips to true - then the process continues.&lt;/p&gt;

&lt;p&gt;Like timer events, conditional events are &lt;strong&gt;always catching&lt;/strong&gt;. Whether a&lt;br&gt;
        condition becomes true or not cannot be directly controlled - it depends on the state&lt;br&gt;
        of the world. So in BPMN, conditional events simply happen, just like time does.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## A Quick Detour: The Bakery
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Before we return to SpaceZ, here's a simple example that shows both event types&lt;br&gt;
        working together - a &lt;strong&gt;bakery process&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - The process starts with a **timer start event** - triggered every day.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;The staff prepares the dough.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;timer intermediate event&lt;/strong&gt; pauses the process for 25 minutes while the dough rises.&lt;/li&gt;
&lt;li&gt;The dough goes into the oven.&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;conditional intermediate event&lt;/strong&gt; holds the token until the condition &lt;em&gt;"the bread is brown"&lt;/em&gt; becomes true.&lt;/li&gt;
&lt;li&gt;The staff takes the bread out. Process complete - freshly baked bread.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple, but it shows the concept: timers wait for a &lt;em&gt;moment&lt;/em&gt;, conditionals&lt;br&gt;
        wait for a &lt;em&gt;state&lt;/em&gt;. Now let's apply these ideas somewhere the stakes are much higher.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Events Attached to Tasks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;So far, you've only seen events &lt;em&gt;between&lt;/em&gt; tasks - one task ends, the event&lt;br&gt;
        fires, the next task begins. But BPMN has a more powerful trick: events can be&lt;br&gt;
        ** attached directly to a task**.&lt;/p&gt;

&lt;p&gt;An attached event sits on the boundary of a task - literally drawn on its edge. While&lt;br&gt;
        the task is being worked on, the event listens. If the event triggers while the task&lt;br&gt;
        is still running, it &lt;strong&gt;interrupts the task&lt;/strong&gt; and redirects the token to&lt;br&gt;
        an alternative path.&lt;/p&gt;

&lt;p&gt;Think of a task with a deadline. If the deadline expires while the work is still in&lt;br&gt;
        progress, the attached timer event fires, the task is cancelled, and the process&lt;br&gt;
        takes a different route - perhaps delegating the work to someone else.&lt;/p&gt;

&lt;p&gt;Only &lt;strong&gt;catching events&lt;/strong&gt; can be attached to tasks. This makes sense -&lt;br&gt;
        attached events are &lt;em&gt;waiting&lt;/em&gt; for something to happen while the task runs.&lt;br&gt;
        You can attach timer events, conditional events, message events, and more.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Attached events** sit on the boundary of a task. If triggered while the task
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;is running, they interrupt it and redirect the token to an alternative path. Only&lt;br&gt;
catching events can be attached.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## An Example: The Bookworm Store
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here's a quick illustration. In the &lt;strong&gt;Bookworm store&lt;/strong&gt;, when a book is&lt;br&gt;
        out of stock, the sales manager must procure it. But the store has a policy:&lt;br&gt;
        customers can cancel their order at any time during procurement.&lt;/p&gt;

&lt;p&gt;While the sales manager is working on procurement, the token stays inside the task.&lt;br&gt;
        If the customer cancels, a &lt;strong&gt;conditional event attached to the task&lt;/strong&gt;&lt;br&gt;
        fires. The procurement stops immediately, and the token takes the alternative path&lt;br&gt;
        to handle the cancellation.&lt;/p&gt;

&lt;p&gt;The key insight: the sales manager &lt;em&gt;stops the current task&lt;/em&gt; and continues&lt;br&gt;
        with whatever the alternative flow requires. The attached event doesn't wait for the&lt;br&gt;
        task to finish - it interrupts it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Heat Panel Process: Success Path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Back to SpaceZ. Here's how the serial production of new heat panels unfolds when&lt;br&gt;
        everything goes right - the &lt;strong&gt;success path&lt;/strong&gt;:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - A **timer start event** triggers the process at the beginning of each
      quarter, aligning with the development department's handover schedule.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;The Planning Department checks if enough raw material is available. If yes, the
      token passes through an &lt;strong&gt;exclusive gateway&lt;/strong&gt; and moves forward.&lt;/li&gt;
&lt;li&gt;The Planning Department creates the production plan. The token then passes a
      ** plain intermediate event** - a milestone marker that doesn't
      influence the flow. It simply says: "we've reached an important point."&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;parallel gateway&lt;/strong&gt; splits the token: Quality Assurance assesses
      the plan while the Production Team informs staff about the upcoming work.&lt;/li&gt;
&lt;li&gt;Both tokens merge at a &lt;strong&gt;closing parallel gateway&lt;/strong&gt;. An exclusive
      gateway checks whether Quality Assurance approved the plan.&lt;/li&gt;
&lt;li&gt;If approved, the Production Team adjusts the machines and produces the first
      samples. Note the &lt;strong&gt;attached conditional event&lt;/strong&gt; on this task - if
      visual defects appear during production, the event fires and stops the task
      immediately.&lt;/li&gt;
&lt;li&gt;Assuming no defects, Quality Assurance inspects the samples. If they pass all
      material tests, the panels are approved and the process ends successfully.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ten tasks, three teams, one clean path from start to finish. That's the ideal&lt;br&gt;
        scenario. But SpaceZ doesn't live in an ideal world.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## When the Material Isn't There
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;What happens when the raw material check fails? The token takes the downward path.&lt;br&gt;
        The Planning Department records the missing components, and the token reaches an&lt;br&gt;
        &lt;strong&gt;event-based gateway&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The event-based gateway is the fourth and final gateway in BPMN. Unlike the others,&lt;br&gt;
        it doesn't make a decision - it &lt;em&gt;waits&lt;/em&gt; for external events. The process&lt;br&gt;
        pauses until one of several possible events occurs. Like the exclusive gateway, only&lt;br&gt;
        one path activates - but the choice is made by &lt;em&gt;which event happens first&lt;/em&gt;,&lt;br&gt;
        not by a condition.&lt;/p&gt;

&lt;p&gt;At SpaceZ, two events are possible:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - The components arrive - a **catching message event** fires, and the
      process continues with production planning.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;Three days pass with no delivery - a &lt;strong&gt;timer event&lt;/strong&gt; fires, and the
      Production Team sources the components directly from the supplier.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Only one of these events can occur. Even if the components arrive at the &lt;em&gt;exact&lt;/em&gt; same&lt;br&gt;
        millisecond the timer expires, BPMN assumes one happens slightly before the other.&lt;br&gt;
        No ambiguity.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## When the Plan Gets Rejected
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Quality Assurance reviews the production plan and finds issues. The token is sent&lt;br&gt;
        back to the Planning Department for adjustments. Once updated, the revised plan&lt;br&gt;
        returns to Quality Assurance for re-assessment while the Production Team informs&lt;br&gt;
        staff about the changes.&lt;/p&gt;

&lt;p&gt;This time Quality Assurance is satisfied. The plan is approved, and the Production&lt;br&gt;
        Team can begin adjusting the machines.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## When the Samples Fail
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;During production, the attached conditional event detects visual defects in the&lt;br&gt;
        samples - a cut in the panel surface. The event fires immediately. Production stops.&lt;br&gt;
        The token takes the alternative path back to the machine adjustment step.&lt;/p&gt;

&lt;p&gt;The Production Team readjusts the machines and produces a second batch. This time&lt;br&gt;
        no visual defects appear, but Quality Assurance still isn't satisfied with the&lt;br&gt;
        material test results. The samples are rejected, and the cycle repeats - a third&lt;br&gt;
        round of machine adjustment and sampling.&lt;/p&gt;

&lt;p&gt;Finally, the third batch passes all inspections. Quality Assurance approves the&lt;br&gt;
        samples, and the process terminates successfully.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## What You've Learned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;With the elements from this chapter, you can now model about 90% of the&lt;br&gt;
        processes you'll encounter in the real world. Here's what you've added to&lt;br&gt;
        your toolkit:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Timer events** - represent specific dates, deadlines, and durations.
      Always catching, because time simply happens.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Conditional events&lt;/strong&gt; - represent conditions that are either true or
      false. Always catching, because conditions can't be directly controlled.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Attached (boundary) events&lt;/strong&gt; - sit on a task's edge and interrupt
      it when they fire. Only catching events can be attached.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Event-based gateway&lt;/strong&gt; - waits for one of several events to occur,
      then takes that path. Closed with an exclusive gateway, since only one path
      activates.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The SpaceZ process combined all of these: a timer that starts the quarterly cycle,&lt;br&gt;
        conditions that halt production when defects appear, attached events that interrupt&lt;br&gt;
        tasks mid-execution, and an event-based gateway that waits for materials or a&lt;br&gt;
        deadline. These are the tools for processes where timing, exceptions, and external&lt;br&gt;
        triggers matter.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>BPM Traps: Deadlock &amp; Multimerge in BPMN</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:15:12 +0000</pubDate>
      <link>https://forem.com/crismoteam/bpm-traps-deadlock-multimerge-in-bpmn-p98</link>
      <guid>https://forem.com/crismoteam/bpm-traps-deadlock-multimerge-in-bpmn-p98</guid>
      <description>&lt;h2&gt;
  
  
  No New Elements This Time
&lt;/h2&gt;

&lt;p&gt;This chapter is different. There are no new shapes to learn, no new symbols to memorize.&lt;br&gt;
        Instead, we're going to break things - on purpose. Because two of the most common&lt;br&gt;
        mistakes in BPMN come from mixing up gateways you already know, and the consequences&lt;br&gt;
        are brutal.&lt;/p&gt;

&lt;p&gt;Both traps are so common they have their own names: the &lt;strong&gt;deadlock&lt;/strong&gt; and&lt;br&gt;
        the &lt;strong&gt;multimerge&lt;/strong&gt;. Both are caused by pairing the wrong opening gateway&lt;br&gt;
        with the wrong closing gateway. Before you go any further, make sure you can tell the&lt;br&gt;
        exclusive gateway (X) from the parallel gateway (+) at a glance.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Trap 1: The Deadlock
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The deadlock is the trap of getting stuck forever. It happens when you open with an&lt;br&gt;
        ** exclusive gateway** but close with a &lt;strong&gt;parallel gateway&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Remember how these gateways work: the exclusive gateway sends the token down exactly&lt;br&gt;
        &lt;em&gt;one&lt;/em&gt; path. The parallel gateway, when used as a closing gateway, waits for&lt;br&gt;
        tokens from &lt;em&gt;all&lt;/em&gt; incoming paths before releasing anything. See the problem?&lt;/p&gt;

&lt;p&gt;The exclusive gateway creates one token. The closing parallel gateway sees two incoming&lt;br&gt;
        paths and waits for two tokens. The second token was never created. The process waits.&lt;br&gt;
        And waits. And waits. Forever.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Gonzalez Is Still Waiting
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Let's go back to the race track. You remember Gonzalez - the impatient Formula One&lt;br&gt;
        driver from the previous chapter. His pit stop process originally used a parallel&lt;br&gt;
        gateway to split work between the fuel team and the wheel team. Both teams work&lt;br&gt;
        simultaneously, tokens merge at the closing parallel gateway, and Gonzalez rockets&lt;br&gt;
        back onto the track.&lt;/p&gt;

&lt;p&gt;Now imagine someone accidentally replaces the &lt;em&gt;opening&lt;/em&gt; parallel gateway with&lt;br&gt;
        an exclusive gateway. Everything else stays the same.&lt;/p&gt;

&lt;p&gt;The process starts. The exclusive gateway decides: fuel team &lt;em&gt;or&lt;/em&gt; wheel team.&lt;br&gt;
        Let's say it picks the fuel team. They open the gas cap, refuel the tank, close the&lt;br&gt;
        gas cap. Their token rolls to the closing parallel gateway.&lt;/p&gt;

&lt;p&gt;And there it stops. The closing parallel gateway sees two incoming paths. It has one&lt;br&gt;
        token. It needs two. The wheel team was never activated - their token was never created.&lt;br&gt;
        Gonzalez sits in the pit box, engine running, getting angrier by the second.&lt;/p&gt;

&lt;p&gt;He will sit there forever. The second token will never arrive because it was never born.&lt;br&gt;
        That's a deadlock.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Deadlock:** Opening exclusive + closing parallel = process stuck forever. The
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;exclusive gateway creates one token, but the closing parallel waits for tokens from all paths.&lt;br&gt;
The missing token never arrives.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Trap 2: The Multimerge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The second trap is the mirror image of the first. Instead of an exclusive gateway opened&lt;br&gt;
        and a parallel gateway closed, it's the other way around: you open with a&lt;br&gt;
        ** parallel gateway** and close with an &lt;strong&gt;exclusive gateway&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The parallel gateway does its job - it clones the token and sends copies down every&lt;br&gt;
        path. Two paths, two tokens. So far, so good. But the closing exclusive gateway doesn't&lt;br&gt;
        merge anything. It simply &lt;em&gt;forwards&lt;/em&gt; every token that arrives, independently.&lt;/p&gt;

&lt;p&gt;The result? Every task after the closing gateway executes &lt;em&gt;multiple times&lt;/em&gt;.&lt;br&gt;
        Once for each token that passes through. These are ghost tasks - duplicates that&lt;br&gt;
        shouldn't exist but do, because the tokens were never merged back into one.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Ghost Tasks at the Bookworm Store
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Picture a bookstore's order process. A parallel gateway splits the work: one path&lt;br&gt;
        prepares the package, another generates the invoice. Both happen at the same time -&lt;br&gt;
        that's correct.&lt;/p&gt;

&lt;p&gt;But instead of merging the tokens with a parallel gateway, someone places an exclusive&lt;br&gt;
        gateway at the merge point. Both tokens arrive at the exclusive gateway. It doesn't&lt;br&gt;
        wait for the second one. It doesn't merge them. It just passes each one through.&lt;/p&gt;

&lt;p&gt;Now the "ship item" task executes twice. The first token triggers a shipment. The&lt;br&gt;
        second token triggers another shipment. Two packages for one order. Two tracking&lt;br&gt;
        numbers. Two charges to the shipping company.&lt;/p&gt;

&lt;p&gt;You might argue it &lt;em&gt;kind of&lt;/em&gt; makes sense - the package and the invoice both&lt;br&gt;
        need shipping. But this is a trap, not a feature. Anyone reading the diagram will&lt;br&gt;
        almost certainly miss the second token. They'll see "ship item" once and assume it&lt;br&gt;
        runs once. The process is technically executable, but its intention is unclear and&lt;br&gt;
        misleading.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Multimerge:** Opening parallel + closing exclusive = ghost tasks. The parallel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;creates multiple tokens, but the closing exclusive forwards each one independently.&lt;br&gt;
Downstream tasks execute multiple times.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Deadlock vs. Multimerge
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Both traps come from the same root cause - mismatched gateways. But their consequences&lt;br&gt;
        are very different:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Deadlock** is a *technical error*. The process gets stuck and
      cannot complete. It must be fixed - there's no working around it. The token is trapped
      forever.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multimerge&lt;/strong&gt; is &lt;em&gt;technically correct&lt;/em&gt; but &lt;em&gt;practically
      dangerous&lt;/em&gt;. The process runs, but tasks execute more times than intended. It
      compromises the clarity and expressiveness of your model.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In practice, the multimerge is more insidious. A deadlock is obvious - the process&lt;br&gt;
        stops. A multimerge silently creates duplicates that might not be caught until the&lt;br&gt;
        process is already running in production, causing real-world damage.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Rule
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The fix is simple: &lt;strong&gt;always pair matching gateways&lt;/strong&gt;. If you open with an&lt;br&gt;
        exclusive gateway, close with an exclusive gateway. If you open with a parallel gateway,&lt;br&gt;
        close with a parallel gateway. If you open with an inclusive gateway, close with an&lt;br&gt;
        inclusive gateway.&lt;/p&gt;

&lt;p&gt;Every time you draw a closing gateway, pause and check: does it match its opening&lt;br&gt;
        counterpart? If not, you're setting a trap - either for the process itself, or for&lt;br&gt;
        the people who have to read it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **The rule:** Always pair matching gateways. Exclusive opens, exclusive closes.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Parallel opens, parallel closes. Inclusive opens, inclusive closes. No mixing.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Remember Gonzalez stuck in the pit box. Remember the ghost shipments at the bookstore.&lt;br&gt;
        These are the mistakes that separate careful modelers from everyone else.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>Beauty Paradise: Inclusive Gateways &amp; Message Events in BPMN</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:14:36 +0000</pubDate>
      <link>https://forem.com/crismoteam/beauty-paradise-inclusive-gateways-message-events-in-bpmn-52do</link>
      <guid>https://forem.com/crismoteam/beauty-paradise-inclusive-gateways-message-events-in-bpmn-52do</guid>
      <description>&lt;h2&gt;
  
  
  Meet Susan
&lt;/h2&gt;

&lt;p&gt;Susan works at &lt;strong&gt;Beauty Paradise&lt;/strong&gt;, a large cosmetics manufacturer. Her job&lt;br&gt;
        is customer satisfaction - specifically, she handles requests from customers who want&lt;br&gt;
        product samples. A customer calls or emails, Susan checks their loyalty status, picks&lt;br&gt;
        the right giveaways, and ships them out.&lt;/p&gt;

&lt;p&gt;The problem? It's incredibly repetitive. Every day, the same steps, the same decisions,&lt;br&gt;
        the same packaging routine. Susan wants to automate parts of it - but first, she needs to&lt;br&gt;
        document exactly how it works. And for that, she needs new BPMN elements you haven't&lt;br&gt;
        seen yet.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## When One Choice Doesn't Exclude Another
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In the Shoe Shop, Max faced exclusive decisions: the shoes are in stock &lt;em&gt;or&lt;/em&gt; they're&lt;br&gt;
        not. One path, never both. But Susan's world is different. When she picks giveaways for&lt;br&gt;
        a customer, she might send &lt;em&gt;just&lt;/em&gt; an eyeliner, &lt;em&gt;just&lt;/em&gt; a shower gel,&lt;br&gt;
        &lt;em&gt;just&lt;/em&gt; a voucher - or any combination of the three.&lt;/p&gt;

&lt;p&gt;The exclusive gateway can't handle this. It crosses out all paths except one. What Susan&lt;br&gt;
        needs is a gateway that says: &lt;em&gt;"pick any combination."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That's the &lt;strong&gt;inclusive gateway&lt;/strong&gt;. It looks like a diamond with a large&lt;br&gt;
        ** circle** (or "O") inside. The "O" stands for "or" - not the&lt;br&gt;
        exclusive "either/or," but the inclusive kind: this, that, or both, or all three.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Inclusive gateway** = diamond with an "O". Unlike the exclusive gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;(exactly one path), the inclusive gateway activates any combination of paths. The closing&lt;br&gt;
inclusive gateway knows exactly which paths were activated and waits only for those tokens.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## How the Inclusive Gateway Works
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When the token hits an inclusive gateway, it can be forwarded down one path, split into&lt;br&gt;
        two, or even tripled - depending on which options are selected. Susan checks the&lt;br&gt;
        customer's loyalty status (gold, silver, or normal) and decides which giveaways to&lt;br&gt;
        include.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;closing inclusive gateway&lt;/strong&gt; is the smart part. Unlike the parallel&lt;br&gt;
        gateway - which always waits for a fixed number of tokens - the closing inclusive gateway&lt;br&gt;
        is &lt;em&gt;fully informed&lt;/em&gt; about which paths were actually activated. It knows exactly&lt;br&gt;
        how many tokens to expect.&lt;/p&gt;

&lt;p&gt;Let's walk through a few scenarios:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Just the eyeliner:** The opening gateway sends one token down the
      eyeliner path. The closing gateway expects exactly one token from that path. It arrives,
      and Susan moves on to prepare the package.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Shower gel and eyeliner:&lt;/strong&gt; Two tokens are created - one for each path.
      The closing gateway waits for both before allowing the process to continue.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;All three giveaways:&lt;/strong&gt; Three tokens are issued. The closing gateway&lt;br&gt;
      expects all three before merging them and passing control forward.&lt;/p&gt;

&lt;p&gt;## When Expectations Change Mid-Process&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here's where it gets interesting. People often assume the closing inclusive gateway only&lt;br&gt;
        receives information from its opening counterpart. That's wrong. The number of expected&lt;br&gt;
        tokens can change &lt;em&gt;after&lt;/em&gt; the opening gateway has already made its decision.&lt;/p&gt;

&lt;p&gt;Consider this: Susan selects only the voucher path. One token is created. But the&lt;br&gt;
        voucher branch contains another decision - an &lt;strong&gt;exclusive gateway&lt;/strong&gt; asking&lt;br&gt;
        whether to send a physical or digital voucher.&lt;/p&gt;

&lt;p&gt;If Susan picks the digital voucher, the token goes to a "send email" task and never&lt;br&gt;
        reaches the closing inclusive gateway. The exclusive gateway informs the closing&lt;br&gt;
        inclusive gateway: &lt;em&gt;"no token is coming from this direction."&lt;/em&gt; The closing gateway&lt;br&gt;
        adjusts and doesn't wait for something that will never arrive.&lt;/p&gt;

&lt;p&gt;If Susan picks the physical voucher, the token continues as expected, and the closing&lt;br&gt;
        inclusive gateway processes it normally.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Two End Events, Two Outcomes
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;In Susan's most complex scenario - a gold-status customer getting all three giveaways&lt;br&gt;
        with a digital voucher - the process splits into paths that don't all converge. After&lt;br&gt;
        the closing inclusive gateway merges the shower gel and eyeliner tokens, two tokens are&lt;br&gt;
        still circulating: one heading toward "ship package" and one toward "send email."&lt;/p&gt;

&lt;p&gt;This raises a question students always ask: &lt;em&gt;can a process have two end events?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Yes. And here's the important rule: the process doesn't end when the first end&lt;br&gt;
        event is reached. It's not a race. Both tokens must arrive at their respective&lt;br&gt;
        end events for the process to complete. The customer gets a package &lt;em&gt;and&lt;/em&gt; an email.&lt;/p&gt;

&lt;p&gt;Why two separate end events instead of one? Because each triggers very different&lt;br&gt;
        follow-up activities. Shipping a package involves paying the shipping company and&lt;br&gt;
        tracking the delivery. Sending an email does not. The end events make this distinction&lt;br&gt;
        explicit.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Talking to the Outside World
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Susan's process doesn't exist in a vacuum. Customers send requests. Susan sends&lt;br&gt;
        confirmations. Packages are shipped to real people. These are interactions with&lt;br&gt;
        ** external parties** - and BPMN has a dedicated element for them:&lt;br&gt;
        the &lt;strong&gt;message event&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Message events come in four types, each for a different stage and direction:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Start message event:** The process begins when a message is received.
      Susan's process starts when a customer request arrives via phone or email.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Throwing intermediate message event:&lt;/strong&gt; An outgoing message sent during
      the process - like Susan sending the book and invoice to a customer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Catching intermediate message event:&lt;/strong&gt; A waiting point. The process
      pauses until a message arrives - like waiting for a customer's payment.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;End message event:&lt;/strong&gt; The process ends with an outgoing message, like
      sending a shipping confirmation or payment receipt.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key distinction: a &lt;strong&gt;task&lt;/strong&gt; describes the &lt;em&gt;action&lt;/em&gt; of sending&lt;br&gt;
        something. A &lt;strong&gt;message event&lt;/strong&gt; simply states that the message &lt;em&gt;has been&lt;br&gt;
        sent&lt;/em&gt; - no one is taking action at that moment. Tasks require effort; events mark&lt;br&gt;
        that something happened.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Message events** mark communication with external parties. They come in four
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;types: start (process begins on message), catching intermediate (wait for message),&lt;br&gt;
throwing intermediate (send message), and end (process ends with message).&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Black Box Across the Street
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;When Susan ships a package, she interacts with a shipping company. When a customer sends&lt;br&gt;
        a request, the customer is an external party. We know these interactions happen, but we&lt;br&gt;
        don't know - or don't need to know - what the other party does internally.&lt;/p&gt;

&lt;p&gt;That's what a &lt;strong&gt;collapsed pool&lt;/strong&gt; represents. It's a pool with no visible&lt;br&gt;
        process inside - a black box. You can see &lt;em&gt;that&lt;/em&gt; communication happens (via&lt;br&gt;
        message flows connecting to the collapsed pool), but not &lt;em&gt;how&lt;/em&gt; the external party&lt;br&gt;
        processes it.&lt;/p&gt;

&lt;p&gt;One important rule: collapsed pools are strictly for &lt;strong&gt;external parties&lt;/strong&gt;.&lt;br&gt;
        If you're modeling another department within your own organization, use additional lanes&lt;br&gt;
        within the same pool. Using a collapsed pool just because you're unsure what another&lt;br&gt;
        department does is not valid BPMN.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Collapsed pools** are black boxes for external parties. You see *that* communication
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;happens, but not &lt;em&gt;how&lt;/em&gt;. Use lanes (not collapsed pools) for internal departments.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Marking Milestones
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;There's one more element in Susan's toolkit: the &lt;strong&gt;plain intermediate event&lt;/strong&gt;.&lt;br&gt;
        You already know the plain start event and the plain end event. The intermediate version&lt;br&gt;
        works the same way - a thin double-bordered circle - but it sits in the middle of&lt;br&gt;
        your process.&lt;/p&gt;

&lt;p&gt;It doesn't influence the process flow at all. The token rolls straight through it. Its&lt;br&gt;
        only purpose is to mark a &lt;strong&gt;milestone&lt;/strong&gt; - a significant point in the process&lt;br&gt;
        worth highlighting. For example, "Customer Order Fulfilled" marks the moment the order&lt;br&gt;
        is considered complete, even though the process continues with shipping and confirmation.&lt;/p&gt;

&lt;p&gt;Think of it as a signpost: it doesn't change the road, but it tells you where you are.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Susan's Upgrade
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;With her process documented, Susan takes it to the IT department. The diagram speaks&lt;br&gt;
        for itself - developers can see exactly what needs automating. The result? Customers&lt;br&gt;
        can now select their own free samples through a digital interface. Susan's workload&lt;br&gt;
        drops. Customer satisfaction goes up.&lt;/p&gt;

&lt;p&gt;That's the power of precise process modeling. The inclusive gateway handles flexible&lt;br&gt;
        choices. Message events capture communication with the outside world. Collapsed pools&lt;br&gt;
        acknowledge external parties without overcomplicating the diagram. And intermediate&lt;br&gt;
        events mark the milestones that matter.&lt;/p&gt;

&lt;p&gt;Susan's Beauty Paradise process uses all of these - and now, so can you.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>Bankovia: Event-Based Gateways, Compensation &amp; Cancel Events in BPMN</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:14:06 +0000</pubDate>
      <link>https://forem.com/crismoteam/bankovia-event-based-gateways-compensation-cancel-events-in-bpmn-1g24</link>
      <guid>https://forem.com/crismoteam/bankovia-event-based-gateways-compensation-cancel-events-in-bpmn-1g24</guid>
      <description>&lt;h2&gt;
  
  
  A Bank Joins the 21st Century
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Bankovia&lt;/strong&gt; is the kind of bank where the loudest sound is a rubber stamp&lt;br&gt;
        hitting paper. Old-fashioned, reliable, and deeply allergic to change. But even their&lt;br&gt;
        most loyal customers have started demanding digital services. So Bankovia's management&lt;br&gt;
        makes a bold decision: build an app that lets customers transfer money.&lt;/p&gt;

&lt;p&gt;Simple, right? Except that a money transfer touches multiple systems, waits for external&lt;br&gt;
        confirmations, and needs to handle fraud, timeouts, and cancellations - all gracefully.&lt;br&gt;
        The process behind that "Send Money" button will teach us the remaining BPMN events:&lt;br&gt;
        ** event-based gateways*&lt;em&gt;, **compensation events&lt;/em&gt;&lt;em&gt;, and&lt;br&gt;
        *&lt;/em&gt; cancel events**.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Event-Based Gateway: A Race Between Events
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;You already know the exclusive gateway - a diamond with an X that makes a decision based&lt;br&gt;
        on data. &lt;em&gt;"Is the shoe in stock? Yes or No."&lt;/em&gt; The answer is known at the moment&lt;br&gt;
        the token arrives.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;event-based gateway&lt;/strong&gt; is different. It doesn't evaluate data - it&lt;br&gt;
        &lt;em&gt;waits&lt;/em&gt;. The token arrives at the gateway and pauses. Multiple events are defined&lt;br&gt;
        as possible next steps - a message, a timer, a signal - and whichever event occurs&lt;br&gt;
        &lt;em&gt;first&lt;/em&gt; wins. The other paths are discarded.&lt;/p&gt;

&lt;p&gt;Think of it as a race. The gateway fires a starting pistol, and three runners take off:&lt;br&gt;
        "confirmation received," "24 hours elapsed," "user cancelled." The first one across the&lt;br&gt;
        finish line determines what happens. The other two stop running.&lt;/p&gt;

&lt;p&gt;In Bankovia's transfer process, after the money is sent to the recipient bank, the&lt;br&gt;
        event-based gateway waits. Will the other bank confirm the transfer? Will 24 hours pass&lt;br&gt;
        without a response? The outcome determines whether the transfer succeeds or gets rolled back.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Event-based gateway:** The token waits. Multiple events race. Whichever
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;happens first wins - the other paths are discarded. It evaluates events, not data.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Compensation Event: Rewinding the Tape
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Sometimes work gets completed - fully, successfully completed - and then something&lt;br&gt;
        happens that means it needs to be &lt;em&gt;undone&lt;/em&gt;. The money was deducted from the&lt;br&gt;
        sender's account. The transfer failed. Now you need to put that money back.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;compensation event&lt;/strong&gt; handles this. Its symbol is a rewind icon - two&lt;br&gt;
        triangles pointing backward - because that's exactly what it does: reverses completed work.&lt;/p&gt;

&lt;p&gt;The notation has a specific pattern:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - A **compensation boundary event** is attached to the task that might need
      undoing. It&amp;amp;apos;s connected by a dashed association line to a compensation
      task that describes *how* to undo the work.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;throwing compensation event&lt;/strong&gt; (intermediate or end) triggers the
      compensation. When the token reaches it, the attached compensation boundary event
      fires, and the compensation task executes.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key rule: the original task &lt;em&gt;must already be completed&lt;/em&gt; before it can be&lt;br&gt;
        compensated. You can't undo work that hasn't been done. The boundary event doesn't&lt;br&gt;
        interrupt the task - it waits until after completion, then activates if triggered.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Compensation** undoes completed work. Three parts: a boundary event on the
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;original task, a compensation task describing the undo, and a throwing event that triggers it.&lt;br&gt;
You can only compensate work that's already done.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Cancel Event: Ending a Transaction
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;strong&gt;cancel event&lt;/strong&gt; has one purpose: cancelling a&lt;br&gt;
        ** transaction sub-process**. Remember that a transaction represents a logical&lt;br&gt;
        unit of work that either succeeds, gets cancelled, or ends in a hazard (critical failure).&lt;/p&gt;

&lt;p&gt;Cancel events come in two forms:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Cancel end event** - placed *inside* the transaction sub-process.
      When the token reaches it, the transaction is cancelled.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cancel boundary event&lt;/strong&gt; - attached to the &lt;em&gt;outside&lt;/em&gt; of the
      transaction sub-process. It catches the cancellation and routes the token to an
      alternative path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You can only use cancel events with transaction sub-processes - never with regular&lt;br&gt;
        sub-processes or tasks. They exist solely for this purpose.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Bankovia&amp;amp;apos;s Money Transfer: The Setup
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The transfer process starts when a customer opens the app and provides the transaction&lt;br&gt;
        details: recipient name, IBAN, amount. The app validates that all mandatory fields are&lt;br&gt;
        filled, then the &lt;strong&gt;Transaction Management System&lt;/strong&gt; takes over.&lt;/p&gt;

&lt;p&gt;First, it verifies the IBAN. Then two things happen in parallel (a parallel gateway):&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **SMS TAN authentication** - a one-time code is sent to the customer&amp;amp;apos;s
      phone. They enter it, the system verifies it.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fraud check sub-process&lt;/strong&gt; - three automated checks run in sequence:
      checking user metadata for irregularities (script task, internal data), verifying
      recipient account credibility (service task, external APIs), and comparing the
      transaction against known fraudulent patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the fraud check passes, both tokens meet at the closing parallel gateway, and the&lt;br&gt;
        process moves on to the actual transfer. If it doesn't - things get serious.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Scenario 1: Fraud Detected
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The fraud check fails. One or more of the three tests flags the transaction. The&lt;br&gt;
        sub-process ends with an &lt;strong&gt;escalation end event&lt;/strong&gt;, which triggers an&lt;br&gt;
        attached escalation event on the sub-process boundary.&lt;/p&gt;

&lt;p&gt;The alternative path kicks in: the compliance and IT security team is notified, the&lt;br&gt;
        customer's account is temporarily blocked, and the customer is informed.&lt;/p&gt;

&lt;p&gt;But there's a problem. The SMS TAN path already completed - that token is sitting at&lt;br&gt;
        the parallel gateway, waiting for the fraud check token that will never arrive through&lt;br&gt;
        the normal path. If we end with a regular end event, that waiting token stays forever.&lt;br&gt;
        The process never finishes.&lt;/p&gt;

&lt;p&gt;This is exactly where the &lt;strong&gt;terminate event&lt;/strong&gt; earns its keep. At the end of&lt;br&gt;
        the fraud-handling path, a terminate end event kills every remaining token in the process&lt;br&gt;
        instance - including the one stranded at the parallel gateway. Clean shutdown.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Scenario 2: Bank Not Reachable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The fraud check passes. Both tokens synchronize. The&lt;br&gt;
        ** transaction sub-process** begins.&lt;/p&gt;

&lt;p&gt;First, the transfer amount is deducted from the sender's account (a script task -&lt;br&gt;
        purely internal). Then the money is sent to the recipient bank (a service task -&lt;br&gt;
        external API calls to the other bank's systems).&lt;/p&gt;

&lt;p&gt;Now the process reaches the &lt;strong&gt;event-based gateway&lt;/strong&gt;. It waits for one of&lt;br&gt;
        two events:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - A **confirmation message** from the recipient bank.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;strong&gt;24-hour timer&lt;/strong&gt; - if no confirmation arrives in time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this scenario, the timer wins the race. No confirmation after 24 hours. The transfer&lt;br&gt;
        failed.&lt;/p&gt;

&lt;p&gt;The token moves through the timer event to a &lt;strong&gt;throwing compensation event&lt;/strong&gt;.&lt;br&gt;
        This triggers the &lt;strong&gt;compensation boundary event&lt;/strong&gt; attached to the "deduct&lt;br&gt;
        amount" task. The compensation task executes: the deducted amount is refunded to the&lt;br&gt;
        sender's account.&lt;/p&gt;

&lt;p&gt;Simultaneously, the token reaches a &lt;strong&gt;cancel end event&lt;/strong&gt; inside the&lt;br&gt;
        transaction. This triggers the &lt;strong&gt;cancel boundary event&lt;/strong&gt; on the transaction&lt;br&gt;
        sub-process, routing to the cancellation path: an email is sent to the customer asking&lt;br&gt;
        them to retry the transfer later.&lt;/p&gt;

&lt;p&gt;Two mechanisms working together: compensation undoes the completed work (the deduction),&lt;br&gt;
        and the cancel event handles the transaction-level outcome (the cancellation flow).&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Scenario 3: System Failure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The transaction starts normally. The amount is deducted, the money is sent. But during&lt;br&gt;
        the transfer, the entire Transaction Management System crashes. This triggers an&lt;br&gt;
        ** attached error event** on the transaction sub-process.&lt;/p&gt;

&lt;p&gt;The error event is always interrupting - the transaction stops immediately. The&lt;br&gt;
        alternative path investigates the error and performs mitigation actions. This is the&lt;br&gt;
        &lt;strong&gt;hazard&lt;/strong&gt; state of the transaction: neither a clean success nor a&lt;br&gt;
        controlled cancellation, but an unexpected failure.&lt;/p&gt;

&lt;p&gt;Remember the three outcomes of a transaction sub-process: success, cancellation, or&lt;br&gt;
        hazard. The error event handles the hazard case.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Scenario 4: The Happy Path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Finally, the scenario Bankovia hopes for. The amount is deducted, the money is sent,&lt;br&gt;
        and the event-based gateway waits. This time, the &lt;strong&gt;confirmation message&lt;/strong&gt;&lt;br&gt;
        arrives before the 24-hour timer fires.&lt;/p&gt;

&lt;p&gt;The token follows the confirmation path, the transaction completes successfully, and&lt;br&gt;
        the parent process ends. The customer sees a green checkmark in the app. Done.&lt;/p&gt;

&lt;p&gt;This is the &lt;strong&gt;success&lt;/strong&gt; state of the transaction - the logical unit of work&lt;br&gt;
        completed without cancellation or failure.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## How the Pieces Fit Together
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Bankovia's process is a masterclass in combining BPMN events:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Event-based gateway** - waits for whichever event arrives first
      (confirmation vs. timeout). Use when the next step depends on external events
      outside your control.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Compensation&lt;/strong&gt; - undoes completed work (refunds the deducted amount).
      Use when a later failure means earlier successful work needs to be reversed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cancel event&lt;/strong&gt; - ends a transaction sub-process and triggers a
      cancellation flow. Use with transaction sub-processes to handle controlled
      cancellations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Error event&lt;/strong&gt; - handles system failures (the hazard state). Use for
      unrecoverable technical failures.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalation event&lt;/strong&gt; - routes fraud detection to the compliance team
      without crashing the process. Use when a problem needs attention but the response
      is a defined alternative path.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminate event&lt;/strong&gt; - kills orphaned tokens (the one stuck at the
      parallel gateway after fraud detection). Use when other tokens would be stranded
      without it.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Each event has a specific job. Compensation rewinds. Cancel ends transactions. Error&lt;br&gt;
        handles crashes. Escalation bumps up. Terminate wipes the board. Knowing which one to&lt;br&gt;
        reach for - that's what separates someone who knows BPMN notation from someone who&lt;br&gt;
        can actually model a real process.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>Nilla Care: Signals, Errors, Escalation &amp; Termination in BPMN</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:14:02 +0000</pubDate>
      <link>https://forem.com/crismoteam/nilla-care-signals-errors-escalation-termination-in-bpmn-2h80</link>
      <guid>https://forem.com/crismoteam/nilla-care-signals-errors-escalation-termination-in-bpmn-2h80</guid>
      <description>&lt;h2&gt;
  
  
  Where Safety Is the Product
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Nilla Care&lt;/strong&gt; is a small hospital where risk management isn't a department -&lt;br&gt;
        it's a culture. Energy blackouts, equipment failures, medication errors - any of these&lt;br&gt;
        could endanger patients and staff. To keep risks in check, Nilla Care maintains a set of&lt;br&gt;
        controls: fire extinguishers in the right locations, backup generators that actually start,&lt;br&gt;
        medication protocols that nurses actually follow.&lt;/p&gt;

&lt;p&gt;But having controls isn't enough. You have to &lt;em&gt;test&lt;/em&gt; them. Regularly. Rigorously.&lt;br&gt;
        This quarter, Nilla Care needs to test 10 controls. The process for doing so will teach&lt;br&gt;
        us four advanced BPMN events: &lt;strong&gt;signals&lt;/strong&gt;, &lt;strong&gt;errors&lt;/strong&gt;,&lt;br&gt;
        ** escalations*&lt;em&gt;, and **termination&lt;/em&gt;*.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Signal Event: Broadcasting to Anyone Listening
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Before we step inside the hospital, let's understand signals with a simpler example.&lt;br&gt;
        Imagine a tofu company wins a major reference customer. They want to announce it - not to&lt;br&gt;
        a specific person, but to the world. A blog post, a logo on the website, maybe a webinar.&lt;/p&gt;

&lt;p&gt;In BPMN, this undirected broadcast is a &lt;strong&gt;signal event&lt;/strong&gt;. Unlike a message event&lt;br&gt;
        (which is sent &lt;em&gt;to&lt;/em&gt; a specific recipient), a signal event broadcasts information&lt;br&gt;
        that isn't addressed to anyone in particular. Think of it like a radio station - it&lt;br&gt;
        transmits, and anyone tuned to the right frequency picks it up.&lt;/p&gt;

&lt;p&gt;On the sending side, a &lt;strong&gt;signal end event&lt;/strong&gt; (or throwing intermediate signal)&lt;br&gt;
        broadcasts the information. On the receiving side, a &lt;strong&gt;signal start event&lt;/strong&gt; (or&lt;br&gt;
        catching intermediate signal) listens and triggers a process when the signal arrives.&lt;br&gt;
        The sender doesn't know - or care - who's listening. That's what makes it different&lt;br&gt;
        from a message.&lt;/p&gt;

&lt;p&gt;Signals are versatile. They can be used as start events, intermediate events (both catching&lt;br&gt;
        and throwing), boundary events (interrupting and non-interrupting), and end events. They&lt;br&gt;
        can even trigger event sub-processes. Of all the advanced events, signals have the widest&lt;br&gt;
        range of uses.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Error Event: When Something Breaks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;An &lt;strong&gt;error event&lt;/strong&gt; represents a technical failure - something went wrong that&lt;br&gt;
        shouldn't have. In BPMN, errors are always exceptional and always interrupting. There's&lt;br&gt;
        no "non-interrupting error" because when a system fails, you can't just keep going as if&lt;br&gt;
        nothing happened.&lt;/p&gt;

&lt;p&gt;Error events have three forms:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Error end event** - placed inside a sub-process to signal that something
      failed. It terminates the sub-process immediately.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Attached error event&lt;/strong&gt; - a catching boundary event on a sub-process.
      When the error end event fires inside, this boundary event catches it and routes the
      token to an alternative "error handling" path.&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Error start event&lt;/strong&gt; - used only to trigger an interrupting event sub-process.&lt;br&gt;
      BPMN assumes errors are exceptions, so they only start event sub-processes, never&lt;br&gt;
      normal processes.&lt;/p&gt;

&lt;p&gt;## The Escalation Event: Bumping It Up&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Not every problem is a catastrophic failure. Sometimes things just need to be&lt;br&gt;
        &lt;em&gt;bumped up&lt;/em&gt; to a higher authority. A delivery is five days late - that's not&lt;br&gt;
        an error (the system didn't crash), but it's a problem that someone more senior should&lt;br&gt;
        know about.&lt;/p&gt;

&lt;p&gt;The &lt;strong&gt;escalation event&lt;/strong&gt; handles this. Unlike errors, escalations can be&lt;br&gt;
        &lt;em&gt;non-interrupting&lt;/em&gt;. The original work can continue while the escalation triggers&lt;br&gt;
        a parallel path. The late delivery keeps being tracked, &lt;em&gt;and&lt;/em&gt; the customer gets&lt;br&gt;
        notified about the delay.&lt;/p&gt;

&lt;p&gt;Escalation events are especially useful for communication between parent processes and&lt;br&gt;
        sub-processes. A throwing escalation event inside a sub-process can trigger a catching&lt;br&gt;
        escalation event in the parent scope - connecting the two levels without stopping either.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Terminate Event: The Nuclear Option
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The &lt;strong&gt;terminate event&lt;/strong&gt; is the most drastic end event in BPMN. When a token&lt;br&gt;
        reaches a terminate end event, it doesn't just end its own path - it kills &lt;em&gt;every&lt;/em&gt; token&lt;br&gt;
        in the current process instance, including tokens in sub-processes. Everything stops.&lt;br&gt;
        Immediately.&lt;/p&gt;

&lt;p&gt;This only exists as an end event - which makes sense. Its entire purpose is to end&lt;br&gt;
        everything, right now. You use it when a situation is so severe that no other work in&lt;br&gt;
        the process should continue. A fraudulent transaction detected? Terminate. Kill the&lt;br&gt;
        token that's still waiting at the parallel gateway, kill the token in the verification&lt;br&gt;
        sub-process, kill everything.&lt;/p&gt;

&lt;p&gt;Use it sparingly. In most cases, you can achieve the same result with cancelling event&lt;br&gt;
        sub-processes or attached interrupting events. But when you need a clean, unmistakable&lt;br&gt;
        "stop everything" - the terminate event is your tool.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Nilla Care&amp;amp;apos;s Control Testing Process
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Now let's see all four events in action. The process begins with defining the scope and&lt;br&gt;
        parameters for the quarterly control assessment. Last year's control report is pulled&lt;br&gt;
        in as a reference - controls that failed before get extra scrutiny this time.&lt;/p&gt;

&lt;p&gt;The actual testing lives inside a &lt;strong&gt;sequential multi-instance sub-process&lt;/strong&gt;.&lt;br&gt;
        Each of the 10 controls goes through the same flow, one by one. For each control, two&lt;br&gt;
        tests run in sequence:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Assess control design** - is the control designed correctly for the risk
      it&amp;amp;apos;s supposed to mitigate? A fire extinguisher rated for electrical fires in a kitchen
      with grease fires would fail this test.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Check operational performance&lt;/strong&gt; - does the control actually work? Is the
      fire extinguisher charged, accessible, and in the right location?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If both tests pass, the control is marked as passed, and the sub-process moves to the&lt;br&gt;
        next instance. Controls 1 through 6 sail through without issues.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Control 7: The Escalation
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Control number 7 doesn't pass. One or both tests reveal a problem. Now the team&lt;br&gt;
        needs to define &lt;strong&gt;remediation measures&lt;/strong&gt; - specific actions to fix the&lt;br&gt;
        control so it actually works.&lt;/p&gt;

&lt;p&gt;After documenting the remediation plan, a &lt;strong&gt;throwing escalation event&lt;/strong&gt; fires.&lt;br&gt;
        This triggers an &lt;strong&gt;event sub-process&lt;/strong&gt; that implements the remediation in&lt;br&gt;
        parallel: the fix is applied, then documented.&lt;/p&gt;

&lt;p&gt;Meanwhile, the main sub-process flow continues - compiling a dedicated control testing&lt;br&gt;
        report for this specific control. Two paths running simultaneously: one fixing the&lt;br&gt;
        problem, one documenting the test results. Neither blocks the other.&lt;/p&gt;

&lt;p&gt;When both paths complete - no more active tokens - the sub-process instance for&lt;br&gt;
        control 7 finishes, and the sequential multi-instance moves to control 8.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Control 8: The Deadline
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Control 8 has a different problem. During the design assessment, it turns out that everyone&lt;br&gt;
        qualified to perform the test is on sick leave or vacation. The task stalls.&lt;/p&gt;

&lt;p&gt;Each control test has a deadline. When that deadline passes, a cancelling timer&lt;br&gt;
        event sub-process fires - note the solid (not dashed) border on the start event.&lt;br&gt;
        This is &lt;em&gt;interrupting&lt;/em&gt;: the token in the design assessment task gets killed.&lt;/p&gt;

&lt;p&gt;The team provides a justification for the missed deadline and flags the control for the&lt;br&gt;
        next testing round. The current instance of the sub-process completes - but only this&lt;br&gt;
        instance. The sequential multi-instance continues with control 9.&lt;/p&gt;

&lt;p&gt;This is a crucial distinction: an &lt;strong&gt;interrupting event sub-process&lt;/strong&gt; cancels&lt;br&gt;
        the &lt;em&gt;current instance&lt;/em&gt; of the multi-instance sub-process, not the entire&lt;br&gt;
        multi-instance. The loop continues.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Controls 9 and 10: The System Failure
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Control 9's design assessment passes. But during the operational performance check, the&lt;br&gt;
        IT system used to document testing results crashes completely. This triggers an&lt;br&gt;
        ** attached error event** on the sub-process boundary.&lt;/p&gt;

&lt;p&gt;Here's where it gets critical. Unlike the event sub-process from control 8 (which only&lt;br&gt;
        cancelled the current instance), an attached boundary event cancels the entire&lt;br&gt;
        multi-instance sub-process - all remaining instances, not just the current one.&lt;br&gt;
        Control 10 never gets tested through this path.&lt;/p&gt;

&lt;p&gt;This makes perfect sense: the IT system is down. It's not a problem with one control -&lt;br&gt;
        it's a systemic failure. Every remaining control would face the same issue.&lt;/p&gt;

&lt;p&gt;The token exits the sub-process and takes the alternative path: manual control&lt;br&gt;
        testing for the remaining controls (9 and 10). When that's done, the central&lt;br&gt;
        compliance team compiles the &lt;strong&gt;global control report&lt;/strong&gt;, aggregating results&lt;br&gt;
        from all 10 controls - the six that passed, the one that needed remediation, the one&lt;br&gt;
        that missed its deadline, and the two that required manual testing.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Choosing the Right Event
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Nilla Care's process demonstrates when to use each event type:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Signal** - broadcast information without a specific recipient. Use when
      the sender doesn&amp;amp;apos;t know (or care) who&amp;amp;apos;s listening.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Error&lt;/strong&gt; - a critical failure that must stop the current scope. Always
      interrupting. Use for system crashes, data corruption, or anything that makes
      continuing impossible.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalation&lt;/strong&gt; - a problem that needs attention from a higher level, but
      doesn't necessarily stop the current work. Can be interrupting or non-interrupting.
      Use for delays, quality issues, or anything that requires management awareness.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terminate&lt;/strong&gt; - kill every token in the process. Use as a last resort when
      the entire process instance must stop immediately.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key insight: BPMN gives you a spectrum of severity. Escalation is a yellow flag.&lt;br&gt;
        Error is a red flag that stops the sub-process. Terminate is pulling the emergency brake&lt;br&gt;
        on the entire train.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Spectrum of severity:** Signal = broadcast (anyone listening).
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Escalation = yellow flag (bump it up). Error = red flag (stop this scope).&lt;br&gt;
Terminate = emergency brake (kill everything).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>The Race Track: Parallel Work in BPMN</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:13:34 +0000</pubDate>
      <link>https://forem.com/crismoteam/the-race-track-parallel-work-in-bpmn-3f8h</link>
      <guid>https://forem.com/crismoteam/the-race-track-parallel-work-in-bpmn-3f8h</guid>
      <description>&lt;h2&gt;
  
  
  The Token
&lt;/h2&gt;

&lt;p&gt;Before we hit the racetrack, you need to understand one concept that makes BPMN click:&lt;br&gt;
        the &lt;strong&gt;token&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Imagine a marble rolling through your process diagram. It starts at the start event,&lt;br&gt;
        passes through tasks one by one, and eventually reaches the end event. When a task is being&lt;br&gt;
        worked on, the marble sits there and waits. When the task is done, the marble rolls&lt;br&gt;
        forward to the next element.&lt;/p&gt;

&lt;p&gt;At an exclusive gateway (which you learned in the Shoe Shop), the marble takes one path.&lt;br&gt;
        Simple. But what happens when work needs to happen &lt;em&gt;at the same time&lt;/em&gt;?&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Token concept:** Imagine a marble rolling through your diagram. At a parallel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;gateway, the marble is cloned. At an exclusive gateway, the marble picks one path.&lt;br&gt;
At a closing gateway, the marbles merge back into one.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Meet Gonzalez
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Gonzalez is a Formula One driver. Successful, famously impatient, and leading the field&lt;br&gt;
        in the final race of the season. Ten laps in, he needs a pit stop. His team has to&lt;br&gt;
        ** change the tires** and &lt;strong&gt;refuel the car&lt;/strong&gt; - and they need to do&lt;br&gt;
        it simultaneously. Every second in the pit costs positions on the track.&lt;/p&gt;

&lt;p&gt;If the fuel team had to wait for the wheel team to finish, or vice versa, the pit stop&lt;br&gt;
        would take twice as long. Gonzalez would lose the championship. The process needs to&lt;br&gt;
        express: "these things happen at the same time."&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Parallel Gateway
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;That's what the &lt;strong&gt;parallel gateway&lt;/strong&gt; does. It looks like a diamond with a&lt;br&gt;
        ** plus sign** inside - and unlike the exclusive gateway, it has no question&lt;br&gt;
        on top. No decision is being made. It simply says: "all paths activate simultaneously."&lt;/p&gt;

&lt;p&gt;Back to the token concept: when the marble hits a parallel gateway, it gets &lt;strong&gt;cloned&lt;/strong&gt;.&lt;br&gt;
        If there are two outgoing paths, you now have two marbles. Three paths, three marbles.&lt;br&gt;
        Each one rolls independently through its branch.&lt;/p&gt;

&lt;p&gt;At the other end, a &lt;strong&gt;closing parallel gateway&lt;/strong&gt; waits. It knows how many&lt;br&gt;
        marbles to expect. It won't release a single marble until &lt;em&gt;all&lt;/em&gt; of them have arrived.&lt;br&gt;
        That's the synchronization point - the moment where parallel work comes back together.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Parallel gateways** are diamonds with a plus sign. They activate all outgoing
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;paths at once - the token is cloned. The closing gateway waits for every clone to arrive&lt;br&gt;
before releasing a single token forward.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Pit Stop
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Here's how Gonzalez's pit stop works in BPMN:&lt;/p&gt;

&lt;p&gt;The process starts when Gonzalez pulls into the pit lane. The token hits the parallel&lt;br&gt;
        gateway and splits into two:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Wheel team path:** Loosen screws → Remove tires → Mount new tires → Fasten screws
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Fuel team path:&lt;/strong&gt; Open gas cap → Refuel tank → Close gas cap&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Both teams work at the same time. The wheel team is fast - four tasks done in seconds.&lt;br&gt;
        The fuel team is slightly slower - refueling takes longer. Gonzalez is getting nervous.&lt;/p&gt;

&lt;p&gt;But the closing gateway waits patiently. It doesn't release Gonzalez until &lt;em&gt;both&lt;/em&gt; tokens&lt;br&gt;
        arrive. The fuel team closes the gas cap, the second token reaches the gateway, and&lt;br&gt;
        Gonzalez rockets back onto the track.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Why This Matters
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The parallel gateway isn't just for racing. It shows up everywhere:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - A hiring process where reference checks and background verification happen simultaneously
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;An order process where payment processing and warehouse picking happen in parallel&lt;/li&gt;
&lt;li&gt;A patient admission where insurance verification and room assignment happen at the same time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Whenever you hear "at the same time," "simultaneously," or "in parallel" - that's a&lt;br&gt;
        parallel gateway.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Don't Confuse the Gateways
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The exclusive gateway (X) and parallel gateway (+) look similar. Even experienced modelers&lt;br&gt;
        mix them up. Build a mental bridge now:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  - **Exclusive (X):** Think "cross out" - you're crossing out all paths except one
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Parallel (+):&lt;/strong&gt; Think "plus" - you're adding all paths together&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One makes a choice. The other doesn't choose - it does everything.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Exclusive (X):** Cross out all paths except one.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;** Parallel (+):** Add all paths together. Build this mental bridge now -&lt;br&gt;
it will save you from the traps in Chapter 4.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>The Shoe Shop: Your First BPMN Diagram</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:13:30 +0000</pubDate>
      <link>https://forem.com/crismoteam/the-shoe-shop-your-first-bpmn-diagram-455p</link>
      <guid>https://forem.com/crismoteam/the-shoe-shop-your-first-bpmn-diagram-455p</guid>
      <description>&lt;h2&gt;
  
  
  Meet Max
&lt;/h2&gt;

&lt;p&gt;Max has been working at &lt;strong&gt;MegaWorld Shoes&lt;/strong&gt; for exactly three weeks. He's 23, fresh&lt;br&gt;
        out of university, and this is his first real job. So far he's been doing great - friendly with&lt;br&gt;
        customers, quick on the register, always on time.&lt;/p&gt;

&lt;p&gt;But today is different. A woman walks in, picks up a pair of running shoes, and says:&lt;br&gt;
        &lt;em&gt;"Do you have these in a 38?"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Max checks the shelf. No 38. He looks around - his manager Elena is on lunch break.&lt;br&gt;
        The other assistant is helping someone else. Max is on his own, and he has no idea whether&lt;br&gt;
        he should check the warehouse, call another store, or just apologize.&lt;/p&gt;

&lt;p&gt;Then he remembers. During his onboarding, Elena mentioned something about a &lt;em&gt;process handbook&lt;/em&gt;.&lt;br&gt;
        He pulls it up on the store tablet and finds: &lt;strong&gt;"Missing Shoe Size - What To Do."&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It's a diagram. A flow chart, but more precise. It tells Max exactly what to do, step by step,&lt;br&gt;
        for every possible outcome. This diagram is written in &lt;strong&gt;BPMN&lt;/strong&gt; - and by the end of this&lt;br&gt;
        chapter, you'll be able to read it too.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## How It Starts, How It Ends
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Every process has a trigger - something that sets it in motion. For Max, it's the moment&lt;br&gt;
        a customer asks for a shoe size that isn't on the shelf. That's a &lt;strong&gt;start event&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;In BPMN, start events are drawn as thin circles. They don't ask anyone to &lt;em&gt;do&lt;/em&gt; anything -&lt;br&gt;
        they describe a situation. Something happened. The process has begun.&lt;/p&gt;

&lt;p&gt;At the other end, there's an &lt;strong&gt;end event&lt;/strong&gt; - a thick circle. The process&lt;br&gt;
        is done. Max has handled the situation, one way or another.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Events** are circles. They represent states or situations - things that happen.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;A thin circle starts the process. A thick circle ends it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Max's First Job
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;The process tells Max what to do first: &lt;strong&gt;check the local warehouse&lt;/strong&gt;.&lt;br&gt;
        Not "think about it" or "wait for Elena." A clear, concrete action.&lt;/p&gt;

&lt;p&gt;In BPMN, actions are called &lt;strong&gt;tasks&lt;/strong&gt; - rounded rectangles. Unlike events&lt;br&gt;
        (which just happen), tasks require someone to &lt;em&gt;act&lt;/em&gt;. Max has to walk to the back,&lt;br&gt;
        look through the shelves, and find out if the size 38 is hiding somewhere.&lt;/p&gt;

&lt;p&gt;The arrow connecting the start event to the task is a &lt;strong&gt;sequence flow&lt;/strong&gt;.&lt;br&gt;
        It says: "after this situation occurs, do this."&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Tasks** are rounded rectangles. They represent work that someone needs to do.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;** Sequence flows** (arrows) connect elements and show the order.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Moment of Truth
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Max comes back from the warehouse. Either he found the shoes, or he didn't.&lt;br&gt;
        What happens next depends entirely on the answer.&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;gateway&lt;/strong&gt; - a diamond shape with a question on top:&lt;br&gt;
        &lt;em&gt;"Shoe in stock?"&lt;/em&gt; It's called an &lt;strong&gt;exclusive gateway&lt;/strong&gt; because&lt;br&gt;
        exactly one path is taken. Yes or no. Never both.&lt;/p&gt;

&lt;p&gt;If yes - great. Max grabs the shoes from the rack and sells them to the customer.&lt;br&gt;
        Two quick tasks and the process ends happily.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Exclusive gateways** are diamonds. They represent decisions where exactly one path is
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;chosen. A question sits on top. The answer determines which way the process goes.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Happy Path
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Let's say Max is lucky. He walks into the warehouse, spots the box on the second shelf,&lt;br&gt;
        and pulls out a perfect size 38. Back on the shop floor, he hands them to the customer,&lt;br&gt;
        rings up the sale, and feels like a professional.&lt;/p&gt;

&lt;p&gt;In BPMN, this is called the &lt;strong&gt;happy path&lt;/strong&gt; - the ideal scenario where&lt;br&gt;
        everything goes right. Start, check warehouse, shoes found, sell, done.&lt;/p&gt;

&lt;p&gt;Notice the diamond at the end. That's a &lt;strong&gt;closing gateway&lt;/strong&gt;. It doesn't make&lt;br&gt;
        a decision - it just collects all the paths back together before the end event. Think of it as&lt;br&gt;
        a meeting point: no matter which route Max took, the process finishes here.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## When Things Don't Go as Planned
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;But today isn't Max's lucky day. The warehouse has plenty of 37s and 39s, but no 38.&lt;br&gt;
        The customer is waiting. What now?&lt;/p&gt;

&lt;p&gt;The process has an answer. The "No" branch tells Max to &lt;strong&gt;call the second store&lt;/strong&gt;&lt;br&gt;
        across town. MegaWorld has two locations - maybe they have it.&lt;/p&gt;

&lt;p&gt;Another gateway: &lt;em&gt;"Available at second store?"&lt;/em&gt; If yes, Max refers the customer there.&lt;br&gt;
        If no, there's one last option - &lt;strong&gt;call express delivery&lt;/strong&gt;, find out when the shoes can&lt;br&gt;
        arrive, and let the customer know.&lt;/p&gt;

&lt;p&gt;Three possible outcomes, three different paths, but all leading to the same end. Max always&lt;br&gt;
        knows what to do next. No guessing, no awkward "let me ask my manager." The process handles it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## Adding Roles: Who Does What
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Fast forward two months. MegaWorld is growing. Elena hires three more shop assistants. None of&lt;br&gt;
        them have dealt with missing shoe sizes before. Without the process diagram, Elena would explain&lt;br&gt;
        the same procedure four times. With it, she points new hires to the tablet on day one.&lt;/p&gt;

&lt;p&gt;Growth also brings a new role: a &lt;strong&gt;warehouse manager&lt;/strong&gt;. Pulling shoes from the rack&lt;br&gt;
        is no longer Max's job. But the diagram needs to show who does what.&lt;/p&gt;

&lt;p&gt;A &lt;strong&gt;pool&lt;/strong&gt; represents the organization - "MegaWorld Shoes" is a pool. Inside it,&lt;br&gt;
        ** lanes** divide responsibility. Adding a "Warehouse Manager" lane means the&lt;br&gt;
        "take shoes from rack" task moves to the right person.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; **Pools** represent organizations. **Lanes** divide pools into roles
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;or departments. A sequence flow crossing a lane boundary means the work moves to another role.&lt;br&gt;
No extra "handover" task needed.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A common mistake: people think you need an extra task for handovers between roles. "Tell the&lt;br&gt;
        warehouse manager" or "wait for confirmation." You don't. In BPMN, a sequence flow crossing&lt;br&gt;
        a lane boundary is enough. The arrow says: the work moves to this role now.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  ## The Power of Writing It Down
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;This is Max's complete process. Two decisions, seven tasks, three possible outcomes.&lt;br&gt;
        It fits on a single screen, and any new hire at MegaWorld can read it on day one.&lt;/p&gt;

&lt;p&gt;That's the real point. Not the shapes and arrows - those are just notation. The power is that&lt;br&gt;
        ** everyone in the organization agrees on how this works**. When Elena hires&lt;br&gt;
        three more assistants next month, she won't explain the missing shoe size procedure&lt;br&gt;
        four times. She'll point them to this diagram.&lt;/p&gt;

&lt;p&gt;And when MegaWorld eventually hires that warehouse manager, one line in the diagram&lt;br&gt;
        changes - the "take shoes from rack" task moves to a different lane. The process evolves&lt;br&gt;
        with the business.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  &amp;gt; Every BPMN diagram uses the same building blocks:
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;** events** (what happens), &lt;strong&gt;tasks&lt;/strong&gt; (what needs doing),&lt;br&gt;
** gateways** (decisions), and &lt;strong&gt;sequence flows&lt;/strong&gt; (the order).&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;&lt;em&gt;This is part of the &lt;a href="https://processcamp.io/learn/bpmn" rel="noopener noreferrer"&gt;Learn BPMN&lt;/a&gt; series on ProcessCamp - 11 real-world scenarios to master process modeling. &lt;a href="https://app.crismo.io/playground" rel="noopener noreferrer"&gt;Try modeling this yourself in Crismo&lt;/a&gt; - free, no signup needed.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>tutorial</category>
      <category>learning</category>
    </item>
    <item>
      <title>BPMN Tools Compared: 15 Process Modeling Tools for 2026</title>
      <dc:creator>Crismo Team</dc:creator>
      <pubDate>Wed, 08 Apr 2026 13:10:27 +0000</pubDate>
      <link>https://forem.com/crismoteam/bpmn-tools-compared-15-process-modeling-tools-for-2026-2io0</link>
      <guid>https://forem.com/crismoteam/bpmn-tools-compared-15-process-modeling-tools-for-2026-2io0</guid>
      <description>&lt;h1&gt;
  
  
  BPMN Tools Compared: 15 Process Modeling Tools for 2026
&lt;/h1&gt;

&lt;p&gt;Choosing the right BPMN tool can be overwhelming. There are enterprise suites, open-source editors, general-purpose diagramming apps, and everything in between. Some do real BPMN validation, others just give you shape libraries. Some cost six figures, others are free.&lt;/p&gt;

&lt;p&gt;We reviewed 15 process modeling tools and categorized them by what they're actually good at - so you can skip the marketing pages and find what fits your needs.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Not sure which tool is right for you?&lt;/strong&gt; &lt;a href="https://processcamp.io/tools/quiz" rel="noopener noreferrer"&gt;Take our free 2-minute quiz&lt;/a&gt; - answer 5 questions and get a personalized recommendation with a PDF report.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Enterprise BPM Suites
&lt;/h2&gt;

&lt;p&gt;These are the heavy hitters. Full lifecycle process management, governance, compliance, process mining - the works. They come with enterprise pricing to match.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/aris" rel="noopener noreferrer"&gt;ARIS&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The original. Software AG's ARIS practically invented the EPC notation and has been the standard in enterprise process management for decades. If your organization runs SAP and needs formal process governance, ARIS is probably already on the shortlist.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Large enterprises with formal BPM governance requirements.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/signavio" rel="noopener noreferrer"&gt;SAP Signavio&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Now part of the SAP ecosystem, Signavio combines process modeling with process mining. If you're already in SAP's world, the integration story is compelling. The process mining capabilities help you compare how processes are &lt;em&gt;designed&lt;/em&gt; vs how they &lt;em&gt;actually run&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; SAP shops that want modeling + mining in one platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/igrafx" rel="noopener noreferrer"&gt;iGrafx&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Enterprise process management with simulation capabilities. iGrafx lets you model processes and then simulate them to find bottlenecks before they happen in production. Strong in regulated industries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Organizations that need process simulation and compliance documentation.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/adonis" rel="noopener noreferrer"&gt;ADONIS&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;BOC Group's process management platform is particularly strong in the DACH region (Germany, Austria, Switzerland). Full BPMN support with a focus on process documentation and governance.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; European enterprises, especially in the DACH region.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/blueworks-live" rel="noopener noreferrer"&gt;IBM Blueworks Live&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;IBM's cloud-based process modeling tool. Built for enterprise collaboration - think workshops where business stakeholders and analysts map processes together. Less technical than some alternatives, which is the point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Enterprise teams doing collaborative process discovery workshops.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/trisotech" rel="noopener noreferrer"&gt;Trisotech&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The standards purist's choice. Trisotech supports the full OMG suite: BPMN, DMN (decision modeling), and CMMN (case management). If you need all three notations working together, Trisotech is one of the few platforms that does it properly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Organizations that need BPMN + DMN + CMMN together.&lt;/p&gt;




&lt;h2&gt;
  
  
  Process Automation Platforms
&lt;/h2&gt;

&lt;p&gt;These tools go beyond modeling - they execute your processes.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/camunda" rel="noopener noreferrer"&gt;Camunda&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The developer's process engine. Camunda lets you model BPMN processes and then actually &lt;em&gt;run&lt;/em&gt; them. It's open-source at its core, with a cloud platform for production workloads. If your team writes code and wants to orchestrate microservices with BPMN, Camunda is the go-to.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Developer teams automating workflows and orchestrating microservices.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/bizagi" rel="noopener noreferrer"&gt;Bizagi Modeler&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Bizagi offers a free desktop BPMN modeler (Windows only) that's genuinely good for learning BPMN. The modeler feeds into Bizagi's automation platform if you want to go further. It's one of the few tools where the free tier is actually useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Learning BPMN on Windows. Solid free option for documentation.&lt;/p&gt;




&lt;h2&gt;
  
  
  Process Mining
&lt;/h2&gt;

&lt;p&gt;Not a modeling tool per se, but increasingly part of the BPM conversation.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/celonis" rel="noopener noreferrer"&gt;Celonis&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The market leader in process mining. Celonis connects to your ERP/CRM systems and shows you how processes &lt;em&gt;actually&lt;/em&gt; run based on event logs. It doesn't replace your modeling tool - it tells you whether your models match reality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Enterprises that want data-driven process optimization.&lt;/p&gt;




&lt;h2&gt;
  
  
  General-Purpose Diagramming
&lt;/h2&gt;

&lt;p&gt;These aren't BPMN tools. They're diagramming tools that happen to include BPMN shapes. Important distinction: they won't validate your BPMN, enforce notation rules, or help you build correct models.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/draw-io" rel="noopener noreferrer"&gt;draw.io&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Free, browser-based, and incredibly popular. draw.io (now diagrams.net) is many people's first encounter with "BPMN." But here's the thing: draw.io gives you BPMN &lt;em&gt;shapes&lt;/em&gt; without BPMN &lt;em&gt;rules&lt;/em&gt;. You can create diagrams that look like BPMN but violate the specification in a dozen ways. Great for quick sketches, problematic for real process documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Quick, informal diagrams. Not recommended for standards-compliant BPMN.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/lucidchart" rel="noopener noreferrer"&gt;Lucidchart&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Polished diagramming with great real-time collaboration. Lucidchart includes BPMN shape libraries and templates. Like draw.io, it won't enforce BPMN rules, but the collaboration features are best-in-class for a diagramming tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Teams that prioritize collaboration and don't need strict BPMN compliance.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/visio" rel="noopener noreferrer"&gt;Microsoft Visio&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The corporate default. If your company runs Microsoft 365, Visio is probably available. It has BPMN stencils and the interface is familiar to anyone who's used Office. But it's a desktop-first tool in a cloud-first world, and BPMN support is surface-level.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Microsoft shops that need "good enough" process diagrams.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/miro" rel="noopener noreferrer"&gt;Miro&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Miro is a whiteboard, not a diagramming tool - and that's fine. It's excellent for workshops, brainstorming, and collaborative process &lt;em&gt;discovery&lt;/em&gt;. Just don't expect it to produce specification-compliant BPMN. Use Miro to explore, then move to a proper BPMN tool for documentation.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Workshops and brainstorming. Not for formal BPMN modeling.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/whimsical" rel="noopener noreferrer"&gt;Whimsical&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;Clean, minimal, and fast. Whimsical is great for flowcharts and wireframes. It has no specific BPMN support, but some teams use it for simple process flows. If your processes don't need BPMN notation, Whimsical's simplicity is a feature.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Simple flowcharts and wireframes. No BPMN support.&lt;/p&gt;




&lt;h2&gt;
  
  
  Open Source
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;a href="https://processcamp.io/tools/bpmn-io" rel="noopener noreferrer"&gt;bpmn.io&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;The open-source BPMN editor built by Camunda. bpmn.io runs in the browser, supports real BPMN 2.0, and is completely free. It's the engine behind many other BPMN tools. Great for learning, quick modeling, and embedding in your own applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Best for:&lt;/strong&gt; Learning BPMN, quick modeling, developers building custom tools.&lt;/p&gt;




&lt;h2&gt;
  
  
  Which One Should You Pick?
&lt;/h2&gt;

&lt;p&gt;It depends on what you actually need:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;If you need...&lt;/th&gt;
&lt;th&gt;Look at&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Enterprise governance &amp;amp; compliance&lt;/td&gt;
&lt;td&gt;ARIS, Signavio, iGrafx&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process automation (code)&lt;/td&gt;
&lt;td&gt;Camunda&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process mining&lt;/td&gt;
&lt;td&gt;Celonis, Signavio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Free BPMN learning&lt;/td&gt;
&lt;td&gt;Crismo, bpmn.io, Bizagi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Quick informal diagrams&lt;/td&gt;
&lt;td&gt;draw.io, Lucidchart&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Workshop collaboration&lt;/td&gt;
&lt;td&gt;Miro&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Full standards (BPMN+DMN+CMMN)&lt;/td&gt;
&lt;td&gt;Trisotech&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Still not sure? &lt;strong&gt;&lt;a href="https://processcamp.io/tools/quiz" rel="noopener noreferrer"&gt;Take our free tool finder quiz&lt;/a&gt;&lt;/strong&gt; - 5 questions, 2 minutes, and you'll get a personalized recommendation with scores and a PDF report you can share with your team.&lt;/p&gt;




&lt;h2&gt;
  
  
  One More Thing
&lt;/h2&gt;

&lt;p&gt;We're building &lt;a href="https://crismo.io" rel="noopener noreferrer"&gt;Crismo&lt;/a&gt; - an AI-native BPMN modeling tool designed for teams that want proper BPMN without the enterprise complexity. Real-time collaboration, AI-assisted modeling, and BPMN 2.0 compliance built in. If you're tired of choosing between "easy but not real BPMN" and "real BPMN but painful" - &lt;a href="https://crismo.io" rel="noopener noreferrer"&gt;check it out&lt;/a&gt;.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;All tool profiles are maintained at &lt;a href="https://processcamp.io/tools" rel="noopener noreferrer"&gt;ProcessCamp&lt;/a&gt; and updated regularly. Found something outdated? &lt;a href="https://processcamp.io/contact" rel="noopener noreferrer"&gt;Let us know&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>bpmn</category>
      <category>processmodeling</category>
      <category>bpm</category>
      <category>tools</category>
    </item>
  </channel>
</rss>
