Developing in (but not necessarily for) the Cloud
Software development presents a variety of challenges to development teams not the least of which is the establishment and maintenance of solid development environments that allow teams to be productive. Modern development environments, by their nature, reflect the complexity of the systems that they are used to implement. The increased complexity includes multiple subsystems such as web servers, application servers, portal servers, business process servers, database servers, service buses, etc. Multiply that complexity by the number of applications with unique environment considerations that a given developer supports and the complexity and associated fragility of those environments can easily get out of hand.
Is Virtualization the Answer?
To address this complexity many leading development organizations have turned to virtualization to provide working environments dedicated to a specific application or technology stack. This virtualization could be in the form of running virtualization software such as Hyper-V, VirtualBox or VMWare on the developer’s workstation to support a clean environment for each application or technology stack. This may address the problem but in many cases results in much slower performance even when high end workstations are used.
Alternatively, some organizations use centralized virtual servers to host these environments for developers. This necessitates acquiring and maintaining server hardware and software that is often over-allocated because development VMs are quick to be set up but often slow to be decommissioned. This over-allocation means that actively used development VMs are competing for resources on your virtualization infrastructure – often with other necessary but less utilized VMs. At peak development times, the performance impact is often notable.
Is the Ultimate Solution in the Cloud?
Virtualization does address some of the issues related to provisioning and maintaining development environments but it also presents new challenges in the form of decreased performance on both workstation and server hosted virtual environments and requiring more and more server and storage infrastructure to maintain suitable environments. Moving to the cloud reduces or eliminates those challenges by leveraging the massive infrastructure maintained by cloud providers and the corresponding economies of scale that it provides. So, what are the main benefits of virtualizing development environments in the cloud?
Consistent Development Environments
When you go virtual you have the option to build out a master image for a virtual machine. In the case of a developer workstation this means that you can establish a baseline development environment with all of the prerequisite development software, server software, etc. The main benefit of establishing this baseline image that can be used by all developers is time savings. Your developers save time when they are on boarded to a project by not having to go through the same installation process as all of the other developers which can often be prone to mistakes and lead to inconsistent setups. Going hand in hand with the upfront time savings are downstream savings of not having to have your teams deal with downstream issues because of an inconsistent development environments where individual developers run into issues because of a misstep during the setup process. The baseline development environment image is set up by a lead developer, with best practices in mind and adhered to. An added benefit of this virtualized approach to establishing development environments is that you can easily add team members at points during the project when it is warranted without having to consider the impact of other team members having to support the setup process.
Too often issues discovered in a system test or production environment cannot be replicated by developers in their development environments because they are dissimilar to the production environment. In an ideal world, developers would be implementing and testing their code in an environment that is as similar as possible to the production environment. Because these environments often include multiple, resource intensive software components running on a specific version of an operating system it is unrealistic to expect that developers could support such an environment on a development workstation. Establishing a virtual machine based development environment allows for allocating appropriate system resources that can be used to host all of the software needed to have a true production-like environment available for each developer whether they use it as their main development environment or as an integration environment for debugging issues.
Reduced Developer Workstation Costs
When developers don’t have to rely on hosting resource intensive server software on their workstations the need for providing high end workstations for developers is nearly eliminated. From an IT management perspective this allows for developers to be given the “standard image” workstation and reduces the one-off nature of the developer workstation. When developer workstations aren’t treated as special entities, management of those workstations is brought back in line with workstation management for the rest of the enterprise, the longevity of those devices is increased because the majority of processing and memory needs are offloaded to remote environments and in the event of a failure the machine can be easily swapped out with standby equipment and lost productivity is minimized because all key development resources are installed on the virtual server.
Less Server Infrastructure
The preceding benefits can be seen as compelling reasons for virtualizing development environments either in a local virtual server or in an Infrastructure as a Service cloud environment. The opportunity for reducing locally managed server infrastructure is one of the true benefits of the cloud. Not only can you reduce the number of physical server instances and their associated operating system licenses but you also insure against hardware obsolescence knowing that the cloud provider is doing the work of ensuring that virtual server environments keep up with current hardware specifications and expectations.
Fast Set Up and Tear Down
The cloud has another huge advantage for development organization – an easy sandbox for experimenting with different software, configurations, etc. It takes a matter of minutes to stand up a new server and less than that to get rid of it. Since you only pay when the server is up and running you can keep them around if you’re working on something sporadically on your “free time”.
Another benefit for those organization considering broader cloud deployments of applications and services is that starting off with development and test environments in the cloud provides a good foray into understanding the cloud in general. All of the lessons learned when implementing a development environment in the cloud can be applied to setting up a production environment.
Most development workstations lack the processing power to host a complete development stack and the complex nature of most development environments necessitate some type of virtualization to keep them from being impacted by other software developers may install. This benefit, coupled with the ability to easily roll out images to developers, set up production-like environments, reduce developer workstation costs, reduce server infrastructure costs, and easier sandbox environments make the cloud a compelling location for development environments. If your organization already gives developers MSDN accounts then they already have Windows Azure credits assigned to them, so why not give it a shot.