====== Follow structured modeling rules ======
{{tag>subprocess gateway loop}}
Leverage structured blocks and subprocesses.
===== ✔ How to =====
Sequence:
Flow_1d01kn5
Flow_1d01kn5
Selection, parallel, conditionally parallel:
Flow_0z0uapg
Flow_1cgid63
Flow_0z0uapg
Flow_1h7bips
Flow_1cgid63
Flow_1eu1jw3
Flow_1h7bips
Flow_1eu1jw3
Flow_0xwiydr
Flow_0iceljk
Flow_1xqvf2b
Flow_1f4plnb
Flow_0xwiydr
Flow_1xqvf2b
Flow_0iceljk
Flow_1f4plnb
Flow_0zcscws
Flow_0857kyb
Flow_1l6e5gv
Flow_0wxidzt
Flow_0wxidzt
Flow_0857kyb
Flow_0zcscws
Flow_1l6e5gv
Cycles - explicit, loop, multi-instance:
Flow_16nc07i
Flow_1m7p7xj
Flow_1m7p7xj
Flow_0d5a1qk
Flow_0d5a1qk
Flow_16nc07i
Subprocess, call activity:
===== ✘ How NOT to =====
Process will hang out at the parallel merge:
Flow_0e02mrs
Flow_0mh672n
Flow_0e02mrs
Flow_05ddike
Flow_0mh672n
Flow_0ny7lm8
Flow_0ny7lm8
Flow_0s1uvcp
Flow_0j1b3ve
Flow_0s1uvcp
Flow_0fniklm
Flow_05ddike
Flow_0j1b3ve
Flow_0fniklm
===== Notes =====
In software development, [[wp>Structured programming]] is the fundamental set of rules
that make it easier to understand the program code, reduce the number of errors, simplify testing and subsequent modification.
Structured programming prohibits arbitrary transfer of control (goto operator),
requiring the program code to be composed of structural blocks (sequence, selection, iteration).
Structured programming also suggests top-down development with hierarchical decompositon into subroutines (procedures, functions).
A business process model is also a kind of "program" - not for a computer, but for an organization.
It existing in the form of a diagram, not the text of the program code.
But the problems of readability, ease of testing and subsequent modification are even more pressing for process models,
since they must be understandable not only to professionals (as in the case of program code), but also to business people - process owners, performers and other stakeholders.
Therefore, the principles of structured programming should be applied to process modeling with certain adjustments:
* the palette of structural blocks is wider, see [[#How to]]
* the sequence flow (if not part of a structural block) is the equivalento of goto
* as in structured programming, blocks can be nested
* as in structured programming, processes should be modeled from top to bottom using subprocesses and call activities
Unlike programming, the principles of structured modeling are rather recommendations than requirements.
There are scenarios when it's reasonable to break them to display complex logic, make the process diagram more compact and understandable, see [[#Exceptions]].
The principles of structured modeling form a kind of "safe zone": as long as a process modeler follows them -
in particular, pair each diverging gateway with a convergin one and firmly nest blocks one into another - one can be sure that the diagram is correct.
As soon as you break these rules, you accept the the responsibility for the correctness and readability of the diagram.
Such flexibility is the strength of BPMN.
In comparison, the BPEL notation imposes the principles of structured modeling rigidly, making it technically impossible to break.
For example, if a diverging gateway isn't followed by a paired converging one then such a model will be syntactically incorrect.
Because of such rigidity, BPEL lost in popularity to BPMN.
It turned out that authors and users of graphical diagrams value the BPMN ability to connect arbitrary elements on the diagram with a sequence flow.
The point is not to overuse this ability.
===== Exceptions =====
Flow_0n8m9ix
Flow_0n8m9ix
Flow_1xhg72f
Flow_17pu7ob
Flow_17pu7ob
Flow_13c21vj
Flow_0tg8ddl
Flow_13c21vj
Flow_0ehog1r
Flow_0ehog1r
Flow_1gx84dc
Flow_106bg20
Flow_1gx84dc
Flow_0tg8ddl
Flow_106bg20
Flow_1xhg72f
Flow_0lj9dyc
Flow_00jrems
Flow_0lj9dyc
Flow_071haj2
Flow_071haj2
Flow_0f5trtv
Flow_0chqe1h
Flow_0f5trtv
Flow_0enxt25
Flow_0enxt25
Flow_0k7r1mv
Flow_00jrems
Flow_1g2lqx6
Flow_1g2lqx6
Flow_0chqe1h
Flow_05h70bw
Flow_05h70bw
Flow_0k7r1mv
Flow_0lj9dyc
Flow_00jrems
Flow_0lj9dyc
Flow_071haj2
Flow_00jrems
Flow_1g2lqx6
Flow_071haj2
Flow_1dzriz5
Flow_1xcw0k4
Flow_1g2lqx6
Flow_1w4p2q1
Flow_1ppaez3
Flow_1w4p2q1
Flow_1dzriz5
Flow_1ppaez3
Flow_1xcw0k4
===== See also =====
* [[do_not_save_on_gateways]]
===== Author(s) =====
--- //[[user:bell|Anatoly Belaychuk]] 2024-08-25 19:54//