Serverless sounds magical at conferences. “No servers!” Of course, servers are there — someone else just manages them. After a year with Azure Functions, we have a clearer picture of when serverless helps and when it just adds complexity.
Use case 1: Document processing ✅¶
PDF upload to blob storage → Azure Function → OCR → metadata to DB → notification. Event-driven, unpredictable workload, short execution time. Cost: ~$8/month instead of ~$120/month for VM. Textbook serverless.
Use case 2: API backend ❌¶
REST API on Azure Functions — cold start 3-5 seconds. UX disaster. Premium Plan solves cold start, but you pay for pre-warmed instances — basically VM with extra steps. For high-traffic API, classic containers are a better choice.
Use case 3: Scheduled tasks ✅¶
Timer trigger — report generation, data cleanup, health checks. Replaced 5 cron jobs. Less infrastructure, integrated monitoring, automatic retry.
Durable Functions — workflow orchestration¶
Order → validation → payment → shipping. Each step a function, orchestrator controls flow, state persists automatically. Elegant for onboarding processes with human tasks and waiting.
What doesn’t work¶
Long-running processes — timeout 5min/30min. Not enough for batch processing. Local development — debugging worse than Spring Boot. Vendor lock-in — code won’t transfer to Lambda without rewriting.
Real numbers¶
Consumption Plan: first 1M executions/month free. For our use cases ~$20/month. Equivalent VM ~$120. Real savings for the right workload.
Serverless is a tool, not architecture¶
Use it for event-driven processing, scheduled tasks, glue code. For API backends and long-running processes, stick with containers. Screwdriver — excellent for screws, bad for nails.
Need help with implementation?
Our experts can help with design, implementation, and operations. From architecture to production.
Contact us