Gateways

Complex Gateway

A gateway for synchronization rules the other gateways can't express — e.g. “continue when 2 of 3 branches complete”. Diamond with an asterisk.

The Complex Gateway carries a free-form activation condition over its incoming/outgoing flows: *n-of-m* joins, weighted quorums, cancel-the-rest semantics. Powerful — and opaque: the rule lives in an expression the diagram reader can't see, so use it only when nothing simpler fits.

When to use and avoid

When to use

  • For n-of-m synchronization: proceed when 2 of 3 reviews are in, discard the third.

  • Quorum decisions: majority of approvers reached.

  • When decomposition into standard gateways would be far more convoluted than one clear rule.

When NOT to use

  • Whenever Exclusive / Parallel / Inclusive express the logic — they are self-explanatory; the complex isn't.

  • If the activation rule can't be written precisely — an undefined complex gateway is a modeling black hole.

  • In models for casual readers — expect the asterisk to raise questions.

Business example

Proceeding with 2 of 3 reviews

Diagrama BPMN: Proceeding with 2 of 3 reviews
Proceeding with 2 of 3 reviews

Open this example in the HEFLO process editor and explore the diagram from the inside.

Open in the HEFLO editor →

Step by step

  1. Three reviews — legal, financial, technical — run in parallel.
  2. The Complex Gateway (highlighted, asterisk) implements “continue when any 2 have finished”; the third is no longer awaited.
  3. Consolidate decision proceeds with the two available opinions.

Differences

Complex Gateway vs Parallel MI with completion condition

“2 of 3” can also be modeled as a parallel multi-instance activity with completionCondition — often clearer and better supported by engines. Consider MI first; keep the complex gateway for genuinely structural cases.

FAQ

Where is the activation rule defined?

In the gateway's activationCondition expression — visible in properties, not on the diagram. Document it in a text annotation for readers.

Do engines support it?

Support is the weakest of all gateways; many engines omit it entirely. Verify before designing around it.

Related elements