Step Functions Standard Workflows cost $0.025 per 1,000 state transitions. At 10 million events per day with 5 steps each, that is $1,250 per day. Express Workflows cost $0.000001 per transition — the same workload costs $0.05 per day. Express Workflows support 100,000 executions per second, run up to 5 minutes, and replace the “glue Lambdas” most teams write to chain AWS services together. This guide focuses on Step Functions Express Workflows, with the production trade-offs senior engineers need to make sound decisions.
⚡ TL;DR: Express Workflows: 100K/sec, 5 min max, $0.000001/transition, at-least-once semantics, CloudWatch Logs only. Standard Workflows: 2K/sec, 1 year max, $0.025/1K transitions, exactly-once, full execution history. Use Express for high-volume event processing, Standard for long-running critical workflows.
Express Workflow SAM template — event processing pipeline — Step Functions Express Workflows
Resources:
EventPipeline:
Type: AWS::Serverless::StateMachine
Properties:
Type: EXPRESS
Definition:
Comment: High-volume event processing
StartAt: ValidateEvent
States:
ValidateEvent:
Type: Task
Resource: !GetAtt ValidateFn.Arn
Retry:
- ErrorEquals: [States.TaskFailed]
MaxAttempts: 2
IntervalSeconds: 1
Catch:
- ErrorEquals: [ValidationError]
Next: HandleInvalid
Next: RouteEvent
RouteEvent:
Type: Choice
Choices:
- Variable: "$.type"
StringEquals: ORDER
Next: ProcessOrder
- Variable: "$.type"
StringEquals: PAYMENT
Next: ProcessPayment
Default: ProcessGeneric
ProcessOrder:
Type: Task
Resource: !GetAtt OrderFn.Arn
End: true
ProcessPayment:
Type: Task
Resource: !GetAtt PaymentFn.Arn
End: true
HandleInvalid:
Type: Task
Resource: !GetAtt DLQFn.Arn
End: true
Logging:
Level: ERROR
IncludeExecutionData: false
Destinations:
- CloudWatchLogsLogGroup:
LogGroupArn: !GetAtt Logs.ArnTriggering Express Workflows synchronously and asynchronously
// Synchronous — wait for result
import { SFNClient, StartSyncExecutionCommand } from "@aws-sdk/client-sfn";
const sfn = new SFNClient({});
export const handler = async (event) => {
const { status, output, error } = await sfn.send(new StartSyncExecutionCommand({
stateMachineArn: process.env.STATE_MACHINE_ARN,
input: JSON.stringify(event),
}));
if (status === "FAILED") throw new Error(error);
return JSON.parse(output);
};
// Asynchronous at high volume:
// SQS → EventBridge Pipe → Express Workflow (parallel fan-out per message)Parallel state — simultaneous Lambda invocations
EnrichInParallel:
Type: Parallel
Branches:
- StartAt: FetchUser
States:
FetchUser:
Type: Task
Resource: !GetAtt UserFn.Arn
End: true
- StartAt: FetchProduct
States:
FetchProduct:
Type: Task
Resource: !GetAtt ProductFn.Arn
End: true
- StartAt: CheckInventory
States:
CheckInventory:
Type: Task
Resource: !GetAtt InventoryFn.Arn
End: true
# All 3 run simultaneously — total time = max(branch durations)
Next: MergeResults- ✅ Express for high-volume event processing, ETL, microservice orchestration under 5 min
- ✅ Standard for long-running workflows, exactly-once requirements, human approval
- ✅ Log only ERROR level for Express Workflows — full logging at volume is expensive
- ✅ Use Parallel state instead of fan-out Lambdas
- ❌ Never use Standard Workflows for high-volume event processing at scale
- ❌ Express Workflows do not appear in the Step Functions execution history console
Express Workflows pair naturally with Lambda Extensions for tracing across workflow steps. For the infrastructure connecting SQS to Express Workflows, EventBridge Pipes handle fan-out automatically. Monitor step durations using CloudWatch Insights on the Express Workflow log group. Official reference: Express Workflows documentation.
Master AWS Lambda
→ AWS Solutions Architect Course on Udemy — The most comprehensive AWS course covering Lambda, serverless patterns, and production architecture.
→ AWS Certified Solutions Architect Study Guide — Deep Lambda chapter covering cold starts, VPC, layers, and SnapStart.
Sponsored links. We may earn a commission at no extra cost to you.
Free Weekly Newsletter
🚀 Don’t Miss the Next Cheat Code
You just read something most developers never learn. Get more secrets like this delivered every week — JavaScript internals, Python optimizations, AWS architectures, system design, and AI workflows.
Join 1,000+ senior developers who actually level up. Zero fluff, pure signal.
Related: Lambda Durable Patterns: Avoid Step Functions Until Complexity Earns It · AWS Lambda Best Practices: Write Functions That Scale and Never Time Out · Step Functions: Multi-Agent Coding Pipelines With Human Approval Gates
Watch: 100 Days of AI on YouTube
Short videos from CheatCoders, one AI engineering topic per day.
Most viewed
- Python Decorators Explained: From Simple Wrappers to Production Patterns
- Claude Code vs Cursor vs GitHub Copilot: Choose by Workflow, and Set Up One Repo That Works With All Three
- AI Agent Frameworks in 2025: LangGraph vs CrewAI vs AutoGen vs Raw API
- Python String Methods: Every str Method With Real Production Examples
- REST API Design Best Practices: The Patterns That Make APIs a Joy to Use
Newly added
- AWS Systems Manager Parameter Store: Hierarchical Runtime Config for Coding Agents
- Amazon Cognito Identity Pools: Federate Coding-Agent Tool Callers Without Long-Lived Keys
- Amazon Athena for Coding Agents: Query Tool Audit Logs and Eval Traces on S3 Without a Warehouse
- AWS Batch for Coding Agents: Parallel Overnight PR Reviews and Long-Running Jobs Without Lambda Timeouts
- Amazon Bedrock Prompt Management: Version and A/B Test Coding-Agent System Prompts
Deep-dive PDF
Get the expanded guide for this post — extra diagrams-style checklists, failure modes, and a production walkthrough. Free when you subscribe to CheatCoders.
Already subscribed? or open the subscribe page.
Discover more from CheatCoders
Subscribe to get the latest posts sent to your email.
