This is kinda elegant. Here, even the Submit button is just another step that depends on the outputs of all the other steps, so it unlocks itself once all other steps have run. I also added indicators to show how you can partially complete inputs for different steps until requirements are met.
Video
Ismael Celis
Playing with dataflow programming. Steps in a workflow are run asynchronously as soon as their inputs become available, in whatever order (or concurrently). Linear/concurrent execution is driven by dependencies, not pre-defined order.