# BPMN gateways Gateways control flow. The marker inside the diamond decides whether one path is taken, all of them are, or the process waits. A gateway does no work. If your diamond has a verb in it, it is probably a task. --- ## When it matters * Any process with a branch, which is most of them. * Parallel work that must all complete before continuing. --- ## The symbols | **Symbol** | **Means** | | ------------- | ----------------------------------------------------- | | Exclusive (X) | Exactly one outgoing path is taken. | | Parallel (+) | All paths are taken, and all must arrive to continue. | | Inclusive (O) | One or more paths, based on conditions. | | Event-based | Waits, and the first event to occur decides the path. | | Complex | Rare, and usually a sign the model needs simplifying. | --- ## A few things that catch people out * Every exclusive gateway needs a default path, or the process can get stuck with no valid route. * A parallel split must be joined by a parallel gateway. Mixing split and join types deadlocks. * Event-based gateways are how you model "whichever happens first", including timeouts. --- ## Related [BPMN sub processesCollapsing detail without losing it.](https://help.gocapable.com/diagrams/bpmn-sub-processes.html) [BPMN sequence and message flowsSolid lines stay inside; dashed lines cross.](https://help.gocapable.com/diagrams/bpmn-sequence-and-message-flows.html) [BPMN notation referenceBack to the full symbol reference.](https://help.gocapable.com/diagrams/bpmn-notation-reference.html) --- _Sequence flow stays inside the pool._