In software deployment, the ability to know "exactly what is running right now" matters more than you'd think. With an EC2 server, you can SSH in and check the package versions. With a Lambda function? Every time you upload code, $LATEST changes, and it's hard to trace what "the version deployed three weeks ago" was. The Version and Alias systems were designed to solve this problem. At the same time, Layers solve the duplication problem of "do I have to include common libraries in every function ZIP every time?"