Serverless functions (AWS Lambda, Azure Functions, Cloudflare Workers) run your code without you managing any server at all — genuinely useful for the right workload shape, genuinely wrong for others.
def handler(event, context):
order_id = event['order_id']
process_order(order_id)
return {"statusCode": 200, "body": "Processed"}
# You never provision a server, manage an OS, or handle scaling manually -
# the platform runs this function on demand, in response to a trigger,
# and scales the number of concurrent invocations automatically
Where Serverless Genuinely Fits
- Spiky, unpredictable traffic — you pay only for actual invocations, not idle server time waiting for the next request
- Event-driven processing — reacting to a file upload, a queue message, a scheduled trigger
- Genuinely stateless, short-lived tasks (most platforms cap execution time at minutes, not hours)
Where It Genuinely Doesn’t Fit
- Consistently high, predictable traffic — a traditional server or container is frequently cheaper at sustained volume
- Cold starts — a function that hasn’t run recently can take a noticeable moment to “wake up,” a real latency cost for user-facing, latency-sensitive requests
- Long-running or stateful processes that don’t fit the short-execution, stateless model serverless platforms are built around