Books on process modeling generally warn against getting bogged down in detail.  They tend to recommend a top-down methodology that starts with a big-picture end-to-end view and drills down just as far as you need for your modeling purpose.  In preparing my Process Modeling with BPMN training I stumbled across a pretty good recipe for how to do this in Worflow Modeling by Sharp and McDermott – one of the only books on the topic I can recommend.  My training overlaps slightly with the information-gathering phase that Sharp and McDermott talk about, but mainly focuses on how to put that knowledge into BPMN, so you can share it, run it through a simulation engine, or even generate an executable implementation.

Subprocesses are a very handy concept in BPMN.  Besides providing a natural way to draw a condensed top-down view with drill-down to any level of detail, BPMN subprocesses also determine the boundaries of when an event can be received – a change to an order in process, for example.  But I find that one really basic property of BPMN subprocesses gets in the way of top-down modeling, as described by Sharp and McDermott, or anyone else for that matter.  That’s the basic fact that a subprocess in BPMN has one entry point and one exit point.  Let me illustrate the problem.

subproc0.gif

Here is a familar diagram of an order handling process in BPMN – three subprocesses in a sequential flow.  But when you drill down, you typically want to say that if Check Credit fails, you terminate the order.  Something like this:

subproc1.jpg

Unfortunately the diagram above is not legal in BPMN!  A sequence flow cannot cross a subprocess boundary.  Hmmm.  Let’s look at the options.  I’m not crazy about any of them, but I’m hoping BPMS Watch readers will help me recommend one as the “best”.

subproc2.jpg

The first option, shown above, is to separate the top-level subprocesses with gateways.  But to show the semantics you have to use a task to set the end state of the subprocess that is tested in the gateway.  That means business analysts have to think like programmers.  I don’t like it.

subproc3.jpg

The second option, shown above, is to use Link events.  You’ve never heard of Link events?  They’re in the spec.  A Link End event is a GoTo to a Link Start event or Link Intermediate event with matching LinkId in another subprocess of the same parent process.  That’s what we have here.  In fact, each of the top-level subprocesses can have a Link End that jumps to the End subprocess to kill the order.  So I kind of like it, except that I heard a talk by Steve White who said OMG didn’t like it and they were going to replace it with something else in BPMN 1.1.  The other thing is that my Process Modeler tool’s simulation engine doesn’t handle it today.  But if you all like this, maybe they’ll put that in.

subproc4.jpg

The third option uses an Error event throw-and-catch.  Programmers get it, but I’m not sure business analysts would.  Besides, I don’t think of bad credit as an error, but maybe that’s just me.  So if the credit is bad, an Error Intermediate event in normal flow throws the error, and the attached Error Intermediate event catches the error, terminates the subprocess and triggers the exception flow, which terminates the order process.  So that works, but I don’t like the idea of asking analysts to deal with this throw-catch business.  Also, I’m not sure my simulation engine works with it yet, but again… they might, if this is the best way to do it.

So what do you think?  Don’t be shy, all comments welcome.