Expressing complex emergent workflows is fairly straightforward given how the workflow engine recurses:
- a workflow is a series of steps
- a step is one or more tasks that can be done in parallel
- a step is complete when all of its tasks are complete
- a task can be a unit of work, or a pointer to another workflow