I have an order creation flow consisting of four steps: Validation, Reservation, Payment, and Delivery. I want to design the process flow so that it can start from any step, depending on whether earlier steps have been completed through external channels. For example, if Validation was already handled outside the process, the flow should start directly from Reservation and proceed to Payment and Delivery.
What is the best practice to design such a multi entry-point process flow in Camunda? Should I use multiple start events, conditional logic, or another approach? How can I ensure process consistency and track skipped steps?
Any advice or example models would be greatly appreciated!
I’m a little sad to say that the answer is “It depends”
The biggest driving factor is “What does the external system require?”
If the external system needs a single end-point to call regardless of how much of the work has already been done, then I would likely do conditional logic.
If the external system is highly microservice oriented, and wants to call the stage entry point directly, then I could see doing 4 independent processes, each ending in a “Send Message” event that starts the next one.
Multiple start is rarely a good solution.
If I had the option to direct the other end, I would probably say “Send me your work, no matter how much has been completed to < endpoint >” and implement branching logic (if ValidationComplete=True then SkipValidation else DoValidation).
This makes it easier to extend / update the process in the future.
First, thank you for your insightful response to my original question! It was very helpful. I’d like to explore a few related aspects:
1- When using branching logic to skip steps (e.g., starting from Reservation instead of Validation), how can this be designed to remain flexible and maintainable as the process evolves?
2- How can data validation be enforced dynamically to ensure skipped steps don’t compromise consistency (e.g., ensuring Reservation only occurs if Validation is complete)?
3- Is using a “link event” a recommended approach for skipping steps, or would you suggest alternative methods?
4- In the solution involving 4 independent processes, where subprocesses are used for modularity, how can seamless orchestration be ensured, and how would you effectively track the overall flow progress when these subprocesses execute independently?
Any tips or examples on achieving this balance are appreciated
If ValidationComplete is missing or is False, then do Validation. Only skip Validation if ValidationComplete is True. So the external system would need to pass in variables that tell the system where it got to.
With the second option, the external system would send the message that follows the stage that it completed… Note that these are INDEPENDENT processes, not subprocesses.
Option 2