To properly deploy a single Lambda function with CloudFormation, you need more than you'd expect. It's not just AWS::Lambda::Function — you need permission to invoke it (AWS::Lambda::Permission), an execution role (AWS::IAM::Role), and if API Gateway, you get RestApi, Resource, Method, Deployment, Stage all trailing along. You end up with 50-100 lines of boilerplate just for one function. Serverless's core is "small functions fast," yet the overhead of declaring that function is huge. AWS SAM (Serverless Application Model) directly addresses this — providing shorthand syntax specialized for serverless, then "expanding" it into complete CloudFormation at deploy time.