The Rust engine strings together executions of these rules based on data dependencies and the data dependencies use type annotations. Every node in this graph knows exactly which inputs it needs and the work is done in the right sequence so if you have two pieces of work that neither of which depend on each other they are independent but can run concurrently. If a little work unit needs the output of some other work unit to be its input then it will wait for those.