====== 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//