We're solving a lot of these problems with Mint: https://rwx.com/mint
Key differentiators:
* Content-based caching eliminates duplicate execution – only run what's relevant based on the changes being made
* Filters are applied before execution, ensuring that cache keys are reliable
* Steps are defined as a DAG, with machines abstracted away, for better performance, efficiency, and composition/reuse