If BPM is part of your technology landscape then it sure can be leveraged for success with systematic reuse. Given that objective, what capabilities should the BPM layer provide? I am not talking about the BPM engine’s core capabilities. I am referring to capabilities that will enable the BPM assets be integrated with your applications, services, and even batch processes. Here is my list. It should:
- Provide a foundation for hosting business processes that are critical for both revenue generation and operational excellence
- Provide a modeling and execution environment for designing and implementing business processes. The modeling environment should facilitate easy integration of existing assets.
- Provide a reusable data structure for initializing, manipulating, and enriching business process state. This data structure should also facilitate simpler data transformation when dealing with entity services. See my earlier post for more on this recommendation.
- Provide meaningful APIs that ease developer learning curve when interacting with the business process layer. The real value add here could be to seamlessly integrate your BPM API alongside your other reusable assets. E.g. state management, metrics, logging, and other domain-relevant capabilities are all relevant here.
- Offer simple APIs to initiate business processes, create/assign tasks, check status of a long running process from a variety of applications. You can certainly service-enable your business processes so this can be accomplished.
- Provide the ability to access and orchestrate activities requiring interaction with entity services, business services, and business rules.
- Reduce application to application coupling by publishing standard set of business events from various milestones in the business process. Interested subscribers can react to the same event differently. New subscribers can be added via configuration as well.
- Ensure business processes can map back to domain entities, events, and relationships
- Reduce time to market for developing new processes as well as implementing changes to existing processes. Likewise, it should reduce learning curve for developers to identify, reuse, and orchestrate business processes from a library of processes components. This library shouldn’t be BPM-specific and needs to be integrated with the other reusable software assets.
This isn’t all encompassing by any means. What can be added or changed to this list?