Cold starts will drive you nuts: Functions that haven’t run recently take forever to start. I’ve seen 3-second delays on first invocation. For real-time apps, this kills the user experience.
Vendor lock-in is sneaky: Each cloud provider does things differently. Moving from AWS Lambda to Azure Functions isn’t just a config change. It’s a rewrite.
Debugging becomes detective work: When you have 73 functions talking through events, finding bugs is like solving a murder mystery. “The payment failed because the user validation event never fired because the database connection timed out because…”
State management gets weird: Functions can’t remember anything between calls. Need to store data? External database. Need to cache something? External cache. More moving parts, more things to break.
Testing is an art form: Unit testing functions is easy. Integration testing 30 functions communicating through events? That’s a PhD-level problem.
Platform limits will bite you: Memory limits, execution time limits, payload size limits. You’ll hit these walls and need creative workarounds.
Monitoring becomes critical: Without proper monitoring, you’re flying blind. Function performance, error rates, costs – everything needs constant attention.