I've read a lot about how virtualization and 'cloud' computing can help you consolidate your servers, reduce your costs substantially and make your whole environment much easier to manage. It sounds like a free lunch, but of course isn't. A solution that makes better use of existing hardware capacity, or just buys it as a service when required, makes a lot of sense to accountants and managers, but the enthusiasm for virtualization, and the 'cloud', isn't always matched those within the cubicles of enterprise IT Departments, who appreciate the murky reality of keeping applications going.
There are several obvious candidates for virtualization. Simple servers, such as DNS, DHCP, or Active Directory Servers, tend to be simple beasts that require little in the way of change management or capacity planning to move or to virtualize. However, the same is certainly not true of all of the applications that keep businesses running.
In order to cleanly redeploy an application in the 'cloud', or hang it neatly on a virtualized coat-hanger, it must have no ties to the underlying hardware. In reality, this is rarely the case. It takes months of work just to redeploy from one datacenter to another, and too many applications are locked into a grisly embrace with their hardware platform. There may appear to be harmony from a distance, but the reality is one of architectural chaos.
A good IT project manager will commit crimes to get his IT project in on dates, and these crimes subsequently lurk like phantoms in data centers everywhere, detectable when one looks closely at the way that production applications are configured. The work of giving applications sufficient independence from their hardware platform, of tracking and simplifying the dependencies between applications, of making data-feeds into logical pipes, are all time-consuming activities with little management-visibility. They are the first things to go when applications start slipping their dates. Even if an elegant migration to a virtualized setting is on the cards, it takes little more than a glance, and a shudder, to sign-off a project to buy more server power instead.
Of course, virtualization, and use of the 'cloud', will be essential to the deployment of new applications, and we must be design them with clear logical interfaces that ease the process of deployment and change; but it is quite another thing to assume that existing applications will be quite so amenable.