First-class DAG workflow authoring across Java, TypeScript, and Python #224
zhongkechen
started this conversation in
Ideas
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
Request
Support authoring workflows with DAG (Directed Acyclic Graph) semantics as a first-class construct in the Durable Functions SDKs for Java, TypeScript, and Python.
Context
The Durable Functions SDK currently supports parallel execution through explicit orchestration code, such as
stepAsyncand parallel branches. However, it has no native declarative DAG abstraction where developers define nodes and their dependencies and the runtime automatically schedules eligible nodes for concurrent execution.There is currently no standard AWS abstraction available for this pattern.
Why this is necessary
DAGs are a core workflow pattern
Many real-world workflows have complex dependency graphs: tasks that can run in parallel once their upstream dependencies complete. Declarative DAGs are a natural and expressive way to model these workflows.
Imperative code is error-prone for complex dependency graphs
Without a native DAG construct, developers must manually write orchestration logic to determine when tasks can run in parallel and when they must wait for dependencies. As the number of nodes and dependencies grows, this logic becomes increasingly complex, harder to maintain, and prone to scheduling bugs.
The runtime cannot optimize scheduling automatically
With a declarative DAG, the runtime has full visibility into the dependency graph and can schedule all eligible nodes as soon as their dependencies complete. In the imperative model, the developer bears this burden, which can lead to suboptimal execution ordering and underutilized parallelism.
Declarative DAGs improve operational visibility
A DAG construct makes workflow structure explicit and inspectable, enabling dependency-graph visualization, per-node progress tracking, and easier debugging. Imperative parallel logic obscures this structure.
Desired capabilities
ctx.dag(...), where nodes and their dependencies are declared and the runtime automatically schedules nodes whose dependencies are satisfiedBeta Was this translation helpful? Give feedback.
All reactions