One of the challenges we face when developing new websites and tools here at Envisage is creating a secure, stable and inexpensive method for testing the work of multiple developers. We have designed a process that allows each developer to fully QA their own code on a “virtual” clone of our production web servers.
Virtualization is the ability to create multiple guest “virtual” computers on a single host computer. Virtualizing servers allows developers to closely mimic a production server so that less time is spent configuring and maintaining engineers’ development environment. We also reduce our operating cost by minimizing the amount of hardware needed to be purchased and maintained and we also use less energy running the machines and then cooling them down.
We use this technology when developing new website features and tools. Each developer has a clone of our production web servers and as we write our code and save it, it’s automatically copied to our personal virtual server so we can instantly see our changes without exposing our real web servers to potentially buggy code. We also use our virtual servers for running automated tests of the functionality of our websites and tools. A virtual machine can run multiple web browsers that we script to automatically test complex forms or test various user interface elements. This allows us to test a wide range of web browsers and screen resolutions and ensure that our websites and tools work as intended, without spending a lot of man hours on the process.
This extends past just writing code for new features, it includes testing new versions of database servers, application code caching strategies, framework updates and almost all possible changes that we could make on our production server. We’ve also virtualized our main production web servers so that we can deploy an exact clone in data centers spread across the globe, add ram, CPU cores, increased bandwidth or additional storage within just a few minutes.
We’ve also used virtualized machines for files servers, internal DNS, VOIP telephones servers, and backup servers. Essentially anything that could be deployed on a standard server can be put on a cloud server, giving you the full backup, cloning and testing capabilities for that server, while decreasing costs and hardware consumption.
Using virtualized environments for development also gives our developers the freedom to use their preferred operating systems, enabling each team member to use the system and editors that they are most comfortable and productive with. We do not need to create dynamic environment variables to accommodate different systems, and this helps to keep the code light and clean. VirtualBox and VMWare offer virtualization software for most, if not all, host operating systems.