IntroductionWhen implementing a BPM or using a BPM tool I see a lot of functionality that (in my opinion) does not belong into that layer, but within a SOA Service.
But are there some general rules or guidelines that you use to decide what to put in BPM and what to put in a Service?
This blog item is a first try.
Put in a ServiceThis is a list of items/functionality that I would put in a Service:
- Static calculations not dependant on business data (example: Fahrenheit to Celcius calculations)
- High performance / complex calculations on data (example: complex calculations over series of data)
- Technical orchestrations (example: Getting data out of several different databases)
- Sending messages (in a particular format) to another department or even another organization (B2B)
(example: ebXML messages, HL7 messages)
- Adapters (example: database-, file-, mailadapters)
These are always implementation specific in most cases and the implementation should be abstracted with a service.
However in most cases you will see these adapters used within the BPM tools.
Put in a BPMThis is a list items/functionality that I would put in a BPM:
- A step in a business process implemented in a Service operation or sub process.
- Scheduled triggers to execute a business process (example: every day execute a particular business process)
You can put the schedule in a business rule to make it flexible
- Steps / Activities that mean something to the business
Remark: Discuss in depth because even business people dive into technical details.
You are invited to increase the list !
ConclusionI think there will remain discussions where to put which functionality. With the BPM tools nowadays you can use integration software that you do not want in the BPM layer, like
a database adapter or file adapter. This should be put in a Service and abstracted. However time-to-market and ease of implementation is often a (maybe valid) argument to
do it like this. But hope you take a step back and think about it when you use a BPM tool because also with this tool you can make spaghetti !
And last but not least: Do not use a BPM tool as just another visual programming tool