AWS announced Lambda Durable Functions at re:Invent this week (December 1-5, 2025), finally bringing stateful workflows directly into Lambda code. Developers can now build multi-step applications that run for up to one year without paying for idle compute time—eliminating the need for Step Functions’ complex JSON orchestration for many use cases. After seven years of watching Azure Durable Functions gain adoption, AWS is catching up with a code-first approach that Python and Node.js developers have been requesting.
How Durable Functions Eliminate the Serverless Idle Time Tax
The core innovation is simple: Lambda now checkpoints progress automatically and suspends execution during waits without charging for compute. Developers use context.step() to mark operations that should be saved and retried on failure, and context.wait() to pause execution for seconds, hours, or even months.
Consider an order processing workflow that reserves inventory, processes payment, waits two hours for warehouse confirmation, then ships. Previously, you’d either build custom state management with DynamoDB or pay Step Functions to orchestrate each transition. Now, the Lambda container terminates during waits, incurring zero compute cost while AWS manages state recovery automatically.
def lambda_handler(event, context):
# Step 1: Reserve inventory (checkpointed)
reservation = context.step("reserve_inventory",
reserve_inventory,
event['items'])
# Step 2: Process payment (checkpointed)
payment = context.step("process_payment",
process_payment,
reservation['total'])
# Step 3: Wait for warehouse (no compute cost)
context.wait(timedelta(hours=2))
# Step 4: Ship order (checkpointed)
shipment = context.step("ship_order",
ship_order,
reservation['items'])
return {"status": "completed"}
The container still hits Lambda’s 15-minute execution limit, but for workflows dominated by waiting rather than computing, the cost savings are substantial.
AWS Finally Delivers Workflows-as-Code After Seven Years
Azure launched Durable Functions in 2018, giving Microsoft a seven-year head start in this space. AWS users have been building workarounds ever since: custom checkpointing systems, Step Functions for simple workflows, or just accepting that long-running tasks don’t fit serverless. The developer frustration was palpable.
“Workflows-as-code is the way to go, and that was missing from AWS,” one Hacker News commenter noted. Moreover, another described the new capability as “considerably simpler, less magical, and cheaper than the equivalent Step Function-style implementation.” Mike Roberts, a serverless expert, was direct: “Before today’s announcement, I’d typically recommend using a Step Function”—now Durable Functions are the preferred option for many use cases.
The shift from Step Functions’ Amazon States Language (JSON definitions) to code-first workflows matters because type-safety, IDE support, and refactoring capabilities all improve. Developers debug in their preferred language instead of context-switching to JSON. Furthermore, the workflow logic lives alongside application code, not in a separate orchestration definition. For teams already writing in Python or Node.js, this eliminates architectural complexity.
However, this is also where limitations become apparent.
Limited Language Support and Regional Availability Create Adoption Barriers
Durable Functions launched with support for only Python 3.13/3.14 and Node.js 22/24, available exclusively in US East (Ohio). Teams using Go, Rust, Java, or .NET are blocked entirely. As one frustrated HN commenter put it: “If you’re only working with those languages, you can use durable functions. Otherwise, you’re SOL.”
The regional restriction to Ohio means most AWS customers can’t adopt today, even if their language stack qualifies. Developer concerns extend beyond availability—observability challenges for distributed state management topped the complaint list, along with questions about upgrading code while workflows are paused for weeks or months. Consequently, pricing at $8 per million steps plus state storage fees is reasonable but not exceptional compared to self-built alternatives.
When should you choose Durable Functions over Step Functions? Use Durable Functions for straightforward multi-step workflows with long wait periods, especially if you value type-safety and staying within your application codebase. Stick with Step Functions for complex decision trees, visual workflow requirements for non-developers, or if you need languages beyond Python and Node.js. Therefore, the choice isn’t “migrate everything”—it’s adding a tool that works better for specific patterns.
What This Means for Serverless Architecture
AWS catching up to Azure after seven years signals that code-first orchestration has won the developer experience debate for simple workflows. JSON-based state machines have their place, but forcing developers to define every business workflow in Amazon States Language was friction AWS finally acknowledged.
Expect regional expansion and additional language support in coming months—AWS can’t stay Ohio-only or Python/Node-only long-term without losing ground to Azure. Observability improvements and version management for in-progress executions will likely follow as early adopters surface pain points.
For now, Durable Functions solve a real problem for a subset of AWS users: Python and Node.js teams in us-east-2 building workflows dominated by waiting can eliminate idle compute costs and architectural complexity. That’s valuable, even if it’s seven years late.











