In order to easily distribute a complicated piece of software, we created a virtual machine appliance. We developed an automated and modular build process.
In switching my Vagrant workflow from VirtualBox to AWS, I ran into a problem; and in solving it, I discovered a better way to integrate Vagrant with Capistrano.
Capistrano can facilitate the use of Chef Solo for configuring and managing servers. This allows us to provision and manage servers in different environments.
Puppet is a great way to manage server configuration, but the client/server model can be too complex. The standalone Puppet agent can be run with Capistrano.