Roadmap β Flowable from scratch
The single source of truth for phases and lessons. Status glyphs: β done Β· π§ in progress Β· β¬ planned.
Legend: Type is Build (from-scratch implementation) or Use (real Flowable
engine) or Concept (no code β PM/architect lesson). Ships is the artifact saved
under the lessonβs outputs/.
Phase 0 β Orientation & setup 4 lessons β
What Flowable is, where it came from (the Activiti fork), where it sits in the landscape, and getting a local engine running.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | What is a process engine, and when do you want one β | Concept | β | decision guide |
| 02 | The Flowable platform map: BPMN, CMMN, DMN, event registry β | Concept | β | platform map |
| 03 | Run Flowable locally: Docker, REST API, first ping β | Use | Python | client |
| 04 | The landscape: Flowable vs Camunda 7/8 vs Temporal vs DIY β | Concept | β | comparison table |
Phase 1 β BPMN & the token model 5 lessons β
The execution semantics under every BPMN diagram: tokens moving through a graph. Build a token engine by hand, then deploy real BPMN XML to Flowable.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | Tokens & sequence flow: a process engine in 100 lines β | Build | Python | module |
| 02 | Gateways: exclusive, parallel, inclusive β | Build | Python | module |
| 03 | BPMN 2.0 XML by hand β | Build | XML | process model |
| 04 | Use It: deploy & run on Flowable over REST β | Use | Python | client |
| 05 | User tasks vs service tasks: where humans and systems meet β | Concept | β | decision guide |
Phase 2 β The engine: state & transactions 5 lessons β
Why a process engine is really a state machine with a database: wait states, variables, transaction boundaries, and the job executor.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | Wait states & persistence: why the engine sleeps β | Build | Python | module |
| 02 | Process variables & scope β | Build | Python | module |
| 03 | Transaction boundaries & async continuations β | Concept | β | cheat sheet |
| 04 | The job executor: timers, retries, async work β | Build | Python | module |
| 05 | Use It: the embedded engine in Spring Boot β | Use | Java | starter |
Phase 3 β User tasks, identity & forms 5 lessons β
The human side: task lifecycle, assignment strategies, candidate groups, delegation, and forms.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | The task lifecycle: created β assigned β completed β | Build | Python | module |
| 02 | Assignment: assignee, candidate users, candidate groups β | Use | Python | client |
| 03 | Identity management: users, groups, and external IdPs β | Concept | β | decision guide |
| 04 | Forms: form properties, form keys, external form apps β | Use | Python | client |
| 05 | Task queries & the task inbox pattern β | Use | Python | client |
Phase 4 β Service integration & error handling 6 lessons β
The system side: service tasks, delegates, HTTP tasks, BPMN errors vs technical errors, retries, and compensation.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | Service tasks: delegates, expressions, delegate expressions β | Use | Java | module |
| 02 | The HTTP task: calling REST APIs from a process β | Use | XML | process model |
| 03 | BPMN errors vs technical errors: two failure planes β | Concept | β | cheat sheet |
| 04 | Boundary events: catching errors on an activity β | Build | Python | module |
| 05 | Retries & incident handling: what happens when a bureau call fails β | Use | Python | client |
| 06 | Compensation: undoing completed work β | Concept | β | pattern guide |
Phase 5 β DMN: decisions as tables 4 lessons β
Externalise business rules into decision tables the business can read β and change without a deploy.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | A decision engine in 80 lines: rules, inputs, outputs β | Build | Python | module |
| 02 | Hit policies: FIRST, UNIQUE, COLLECT and why they matter β | Build | Python | module |
| 03 | DMN XML & the decision task: wiring DMN into BPMN β | Use | XML | decision table |
| 04 | Who owns the rules? Decision governance for product teams β | Concept | β | decision guide |
Phase 6 β CMMN: case management 4 lessons β
When work doesnβt follow a fixed path: cases, stages, milestones, and sentries β and the honest answer on when you actually need CMMN.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | Processes vs cases: prescribed flow vs available work β | Concept | β | decision guide |
| 02 | Plan items, stages, milestones, sentries β | Use | XML | case model |
| 03 | Mixing BPMN and CMMN: process tasks inside cases β | Use | XML | case model |
| 04 | When CMMN is overkill (most of the time) β | Concept | β | decision guide |
Phase 7 β Events, timers & messaging 5 lessons β
Time and the outside world: timer events, signals, messages, and the event registry (Kafka, JMS, RabbitMQ).
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | Timer events: ISO-8601 durations, cycles, due dates β | Build | Python | module |
| 02 | Message events: correlating the outside world to an instance β | Build | Python | module |
| 03 | Signals vs messages: broadcast vs point-to-point β | Concept | β | cheat sheet |
| 04 | The event registry: Kafka in, process out β | Use | Python | client |
| 05 | Event subprocesses & interrupting vs non-interrupting starts β | Use | XML | process model |
Phase 8 β Versioning & migration 4 lessons β
Long-running instances outlive their definitions. Version tags, running-instance migration, and deployment strategy.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | Definition versions: what a redeploy actually does β | Use | Python | client |
| 02 | Instance migration: moving live tokens to a new version β | Use | Python | client |
| 03 | Blue-green for processes: strategies that survive audits β | Concept | β | pattern guide |
| 04 | Backward-compatible model changes: a checklist β | Concept | β | checklist |
Phase 9 β Operations & observability 5 lessons β
Running it for real: history levels, the database, async executor tuning, metrics, and the admin surface.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | The history tables: audit trail vs runtime state β | Concept | β | cheat sheet |
| 02 | History levels & data growth: the retention decision β | Concept | β | decision guide |
| 03 | Async executor tuning: threads, acquisition, lock times β | Use | Java | settings |
| 04 | Metrics & health: what to alert on β | Use | Python | dashboard spec |
| 05 | The database is the engine: sizing, indexes, cleanup jobs β | Concept | β | runbook |
Phase 10 β Architecture & product decisions 5 lessons β
The PM/architect capstone layer: embed vs standalone, multi-tenancy, build vs buy, and the honest competitive landscape.
| # | Lesson | Type | Lang | Ships |
|---|---|---|---|---|
| 01 | Embedded vs standalone vs Flowable Work: deployment topologies β | Concept | β | decision guide |
| 02 | Multi-tenancy: shared engine, shared tables, or neither β | Concept | β | decision guide |
| 03 | Where the process ends and the domain begins: anti-corruption β | Concept | β | pattern guide |
| 04 | Build vs buy vs open source: the workflow TCO conversation β | Concept | β | decision guide |
| 05 | Flowable open source vs Flowable Work vs Camunda 8 vs Temporal β | Concept | β | comparison table |
Phase 11 β Capstone: loan origination 4 lessons β
One end-to-end build: BPMN flow + DMN credit decision + user-task review + bureau service calls + offer-expiry timers + error handling, driven over REST.
| # | Project | Combines | Lang | Ships |
|---|---|---|---|---|
| 01 | The process model: application β decision β offer β disbursal β | 1, 4, 7 | XML | process model |
| 02 | The credit decision table β | 5 | XML | decision table |
| 03 | The driver: a REST client that runs a full application β | 2, 3, 4 | Python | client |
| 04 | Failure drill: bureau down, offer expired, manual override β | 4, 7, 9 | Python | runbook |
