In the previous lectures, we focused on moving data between systems (APIs, ESB, MOM). However, businesses do not just want to "move data"—they want to execute business processes. A process like Employee Onboarding requires HR systems, IT provisioning, Payroll, and human approvals to happen in a specific, rule-based order.
Business Process Management (BPM) is a discipline that uses various methods to discover, model, analyze, measure, improve, and optimize business strategy and processes. In IT, a BPMS (BPM Suite) is a software platform that integrates applications and human tasks into a single, cohesive workflow.
When designing how multiple microservices or applications work together to complete a business process, enterprise architects must choose between two primary paradigms: Orchestration and Choreography.
Relies on a central controller (the BPM Engine) to manage the workflow. The central engine tells Service A to run, waits for the result, evaluates a business rule, and then tells Service B to run.
No central controller exists. Service A finishes its job and emits an event (using MOM/Kafka). Service B listens for that event, does its job, and emits another event. They "dance" together autonomously.
Figure 1: Orchestration (Central Controller) vs. Choreography (Autonomous Events)
A typical enterprise BPMS (like Camunda, Pega, or IBM BPM) contains three main components:
How do business analysts and developers agree on how a process should work? They use BPMN 2.0, a global standard for business process modeling. BPMN is unique because it is visually easy for humans to understand (circles, rectangles, diamonds), but it generates strict XML code in the background that a BPM Engine can directly execute.
When an analyst draws a circle (Start Event) and connects it to a rectangle (Service Task), the tool generates XML like this. The BPM Engine reads this XML to know it must call a REST API when the process starts.
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" id="Definitions_1">
<bpmn:process id="Process_OrderFulfillment" isExecutable="true">
<!-- Start Event -->
<bpmn:startEvent id="StartEvent_1" name="Order Received">
<bpmn:outgoing>Flow_1</bpmn:outgoing>
</bpmn:startEvent>
<!-- System Integration Task (Calling a Web Service) -->
<bpmn:serviceTask id="Task_ProcessPayment" name="Process Payment"
camunda:type="external" camunda:topic="charge-credit-card">
<bpmn:incoming>Flow_1</bpmn:incoming>
<bpmn:outgoing>Flow_2</bpmn:outgoing>
</bpmn:serviceTask>
<!-- Sequence Flows (The arrows connecting the shapes) -->
<bpmn:sequenceFlow id="Flow_1" sourceRef="StartEvent_1" targetRef="Task_ProcessPayment" />
</bpmn:process>
</bpmn:definitions>