Virtualization has really taken off over the last couple of years. One of the sites I work on is hosted on a virtual machine over at SliceHost (they’re excellent BTW).
A company I was with a few years back has switched their whole development environment to be fully automated VMs. They can create a new clone of a VM and fire up a clean copy in a matter of minutes.
In my consulting work I’ve stumbled onto a problem that virtualization solves wonderfully. The problem is this: small clients never have a development server for me to work on. Many clients would prefer that I just develop directly on their production machine. My position, however, is that I will never write/debug code on a production server, even if your site gets practically zero traffic. It’s just a matter of priniciple. What’s more, if you ever want to be a big site, you should make sure that your site isn’t down with errors all day long while people are coding up the next version.
What I did when I first started consulting was grab an old PC that I had snatched up at a surplus sale for $10 and loaded Linux on it. When I started work with a new client I could usually configure a LAMP stack in less than an hour for the peculiarities of that client and then I’d be in business. Of course, if I wanted to juggle multiple clients I had to use shell scripts to swap out the apache/php configs.
Then one day I decided to give virtualization a try. It is absolutely fabulous! I upgraded my little $10 machine with a 300 Gig hard drive, and set up a VM for each client on it. Each client can have 10-20 gigs. If I ever outgrow my 300 Gig drive it will be a no brainer to go grab a terabyte drive for whatever ridiculously cheap price they’re selling for and I’ll have plenty of room to grow.
xm shutdown vr -w;xm create hshq -c
Back on my desktop machine I just switch eclipse from one workspace to another and within about a minute I’m ready to work on an entirely different platform. How cool is that!