independent tasks linked by a clear workflow • You want to be able to cancel jobs • You want to scale across threads and cores • You have a complex system that involves dependencies and shared state • You want to avoid the usage of explicit locks to protect shared state and actually make copies of that state (messages) and reacting to them locally • You want to code components that are intrinsically thread safe