Representing Queues with BPMN

759 views
Skip to first unread message

Phu

unread,
Aug 11, 2011, 2:08:15 AM8/11/11
to BPMN Forum
Hi,

I am uncertain how to represent queues in a process flow.

Background:
We have a process where various requests such as PO's and RFQ's are
sent to us in various ways (mail, emails, fax) which are then funneled
to an inbox and are then standardized into a Case (an object in our
CRM system that's like a folder). This Case is then assigned into a
Queue where Employees take Cases to work on based on priority rules.

Question:
I am creating a process flow for a specific order type (for example, a
new software purchase instead of a field service training class
purchase).

This process flow starts with a Message Start Event receiving a PO
message from customer and ends with a Message End Event sending an
invoice to the customer.

How do I represent the Case being assigned into the Queue? And then
being taken out of the Queue? So obviously there are at least 2 actors
involved in the queue. One assigning the Case to the Queue. And one
taking the Case from the Queue.

Should I have a separate Pool/Process for the person putting things
into the queue, a separate Pool/Process for the queue itself, and
another separate Pool/Process for the person taking item from the
queue?

Or can I simply do a sequence flow of two activities:

Activity1: Person 1 Assign Case to Queue
Activity2: Person 2 Takes Case from Queue

No where on the net has I seen a single mention about queues!

Very glad to have found this awesome community, looking forward to
hearing your advice!

Thanks,
Phu

Graham, Laura L

unread,
Aug 11, 2011, 11:11:51 AM8/11/11
to bpmn...@googlegroups.com
I have drawn this scenario as separate processes before. I think going into the level of detail for queues is helpful only when you are concerned about overall cycle time - getting quick responses to customers. In this case, it's necessary to show the detail of what really starts and ends a process, and how systems are related to each other. I have only drawn this from a business analyst perspective, rather than from an execution process, so I'm also interested in hearing comments.

One suggestion is:

You likely have two separate processes related through shared data. The process of receiving / collecting / assigning the requests has a start event with the message. You would go to an activities like "verify data" - may have gateway if not all data is there, and send request back to submitter, etc. Then go to activity of "determine priority" with a data object representing the prioritization rules, and an output of "prioritized request", and then an end event. You have a separate process for the review / resolution of cases. Start with a none start event - after all the process will not happen if everyone is sick / out of the office. I usually annotate something like "resources typically start this process 1-4 times every work day" or something of the sort. Depending on your level of detail, preference, you could say "check queue" and then go to a multi-instance subprocess of "review cases" with the details behind it, or you could just go straight from the none start event to the review activities. The activity is "review request" with the data object "prioritized request" going into it, then go onto whatever other activities you have, probably have other data objects representing other business rules for the approval piece, and then an end event (which may or may not be a message to the submitter or to someone else to trigger the actual purchase order process or whatever else happens next).

I have often drawn both of these processes in the same pool or at least on the same page, as they are so closely related and often performed by the same actors. I have two separate start events with sequence flows, and data object coming out of one process going into another. This has been helpful from an analysis perspective, because it helps communicate to the business managers where delays can occur, as well as importance of data governance and rules / process governance. I do not think having multiple processes in the same pool violates the specification, but may or may not be best practice.

The use of pools as containers of processes has been clarified somewhat in the 2.0 version of the specification:

"A Pool acts as the container for the Sequence Flows between Activities (of a contained Process). The Sequence
Flows can cross the boundaries between Lanes of a Pool (see page 305 for more details on Lanes), but cannot cross
the boundaries of a Pool. That is, a Process is fully contained within the Pool. The interaction between Pools is
shown through Message Flows."

{Again, nothing about having multiple sequence flows in a single pool}

"A Pool is the graphical representation of a Participant in a Collaboration. A Participant (see page 114) can be a
specific PartnerEntity (e.g., a company) or can be a more general PartnerRole (e.g., a buyer, seller, or
manufacturer). A Pool MAY or MAY NOT reference a Process. Modelers and modeling tools can use Pools in a flexible manner in the interest of conserving the "real estate" of a Diagram on a screen or a printed page."

I hope this helps.

Hi,

Thanks,
Phu

--
You received this message because you are subscribed to the Google
Groups "BPMN Forum" group.
Public website: http://www.bpmnforum.com
To post to this group, send email to BPMN...@googlegroups.com
To unsubscribe from this group, send email to
BPMNforum+...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/BPMNforum?hl=en_US?hl=en

Disclaimer Confidentiality Notice: This e-mail, and any attachments
and/or documents linked to this email, are intended for the
addressee and may contain information that is privileged,
confidential, proprietary, or otherwise protected by law. Any
dissemination, distribution, or copying is prohibited. This
notice serves as a confidentiality marking for the purpose of
any confidentiality or nondisclosure agreement. If you have
received this communication in error, please contact the
original sender.

Neal McWhorter

unread,
Aug 11, 2011, 4:59:01 PM8/11/11
to bpmn...@googlegroups.com
Phu,

Great question! This is certainly an area that lots of people have to address. 

The first thing to understand is that BPMN doesn't model data structures other than as internal variables in a process or payloads in an event. Queues are a kind of data structure so BPMN doesn't address them. BPMN only deals with the activities that are being performed so your final suggestion:

Activity1: Person 1 Assign Case to Queue
Activity2: Person 2 Takes Case from Queue

is actually how you would model it in BPMN. However there are still some options. BPMN provides the "Human Task" which is a special case task which is defined to get work from a queue based upon selection criteria that are specific to a particular implementation. So you could use a Human Task for the "Person 2 Takes Case from Queue".  Make sure you aren't using a "Manual Task" because that doesn't mean the same thing.  

In most cases I would suggest that the two activities be in separate processes. Whether or not to put these in separate Pools or not comes down to the level of isolation that you want to create. Once they are placed in separate pools they cannot share information except through Message Events and through data external to the process. Generally this means they each would have to get to the queue via a Service Task.  If you do this you could do as you suggested and make the Queue a separate Pool in which case you're really modeling the Service in the third Pool. This is great if your modeling at the executable level but overkill if your are modeling for analysis. 

So I would suggest that the decision comes down to whether or not understanding the details of the queue and the technical architecture for accessing it is important. If so I'd go with the three Pools, Service Tasks, and Message Events.  If you're really looking to create an analytic model I would go with the 2 activities and use a "Human Task" for the "Person 2 Takes Case from Queue" activity.

I hope this helps...

Business Vision Delivered

Neal McWhorter
Principal

neal.mc...@enterprise-agility.com
www.Enterprise-Agility.com

Enterprise Agility, Inc.
1543 N. Milwaukee Ave.
Chicago, IL 60622

Tel:   773-227-7110

 

 

Neal McWhorter

unread,
Aug 12, 2011, 8:27:31 AM8/12/11
to bpmn...@googlegroups.com
Just wanted to add a quick note to validate that multiple start events are specifically allowed in the standard. So having multiple parallel paths coming from separate start events within a single Pool is perfectly valid. In this case all the flows with None Start Events will start at the same time. The process as a whole will terminate when there are no more active paths. 

Modeling tasks that are triggered on-demand from users is a bit of an issue. Unfortunately the standard doesn't supply a "Manual Start Event" which would be ideal for indicating that a process doesn't start automatically. In an automated process the triggering would always happen as a result of some kind of event. Using Signal Events to represent this is the typical approach. This approach can also be used for analytic modeling but some people find it confusing to see a Signal Event called "User Review Initiated" or something like this. In those cases annotations like Laura suggested are the typical solution.

Hope that helps...


Business Vision Delivered

Neal McWhorter
Principal

neal.mc...@enterprise-agility.com
www.Enterprise-Agility.com

Enterprise Agility, Inc.
1543 N. Milwaukee Ave.
Chicago, IL 60622

Tel:   773-227-7110

 

 

Reply all
Reply to author
Forward
0 new messages