As mentioned earlier, the way that brackets work in a mathematical expression is a close analogy for how "blocks" work in a workflow. Recall - there are several types of blocks: Choice, Parallel and Loop. In Cúram workflow:
In the case of Splits and Joins - all paths outbound from a split must converge at the corresponding Join.
If they were not required to match, it would be possible (easy!) to model processes that would be guaranteed to stall, or ones in which the end of the process could be reached before some activities had finished executing.
This helps avoid situations that are difficult for the engine to process and are very unintuitive for workflow developers.
Consider a Loop that contains a Join, where the Join has two inbound transitions: one from an activity inside the loop, the other from an activity outside the loop.
It is very difficult in this situation to decide how the join synchronization should work. One inbound transition can only fire once, the other can fire multiple times. Any rules for handling such a situation in the would be arbitrary and hence unintuitive.
Workflows defined using Choice, Parallel and Loop blocks have a clear, simple structure whose meaning can be understood at a glance.