How to Develop and Test Software with Azure VMs

budget piggy bank hero
In this post, I will discuss Azure DevTest Labs, a way to provide self-service for developers and testers with helpful automation but budge control for the business.


Lack of Control

When I started working with Microsoft Azure, I quickly learned that the first people to adapt the cloud in a large business were software developers and testers. Even in the most restricted environments, or should I say, probably because they were restricted environments, shadow IT grew in the cloud to work around the budget and procedural restrictions that prevented getting the work done that the business required. The self-service and measured usage traits of the cloud made services such as AWS and Azure attractive to developers and testers. Azure especially is always “right there”, thanks to the built-in integrations with Visual Studio and Visual Studio Team Services.
In the virtualization world, we have a phrase: virtual machine sprawl. Virtualization was the very long rope that many budget owners feared. Thanks to Hyper-V and vSphere, virtual machines were easy to deploy. Virtual machines popped up overnight like mushrooms on a shady lawn. Quickly, the role and importance of those machines is forgotten, but they continue to consume storage, licensing, and other costs, and the remaining length of rope inches shorter.

Then along came a cloud and promised to fix all that. On-premises administrators can breathe a sigh of relief because their SANs are drained of waste that it turns out was being rarely used. At first, things are rosy in IT budget planning meetings … until someone mentions cloud usage. It turns out that providing someone a bottomless pit of compute isn’t necessarily the best approach to solving IT budget issues. I’ve found over the years that if you challenge a developer/tester with “infinite” capacity of compute, they’ll test that claim like a dare.

Bringing Structure

The first thing I need to make clear here is that the solution I am about to describe should make devs/testers happy. That has been my experience because it dumbs down IT for them and it speeds things up. Now let’s talk more about control!
Azure DevTest Labs is a policy-driven sandbox that allows you to create an environment where devs/testers can create their own virtual machines. When you create a lab, you can put it on an isolated virtual network, or connect it to an existing virtual network (maybe connected by VPN or ExpressRoute).
You can then create policies on a per-lab or per-user basis. For example:

  • Users can have a limited number of machines.
  • A lab can have a limited number of machines.
  • Access to virtual machine sizes can be controlled.
  • You can limit which OS images are available.
  • The number of premium disks can be limited per user or per lab.
  • You can enforce auto-shutdown and auto-start policies on selected days/times.
Limiting virtual machine sizes in Azure DevTest Labs [Image Credit: Aidan Finn]
Limiting Virtual Machine Sizes in Azure DevTest Labs [Image Credit: Aidan Finn]

Faster Self-Service

The stick is all well and good for the business, but what’s in it for the dev/tester? There needs to be a carrot to go with the stick of control or else shadow IT will reappear once again.
The administrator of a DevTest Lab can:

  • Filter the massive list of available OS images to just what is needed.
  • Upload customer virtual machine images.
  • Upload artefacts – these are bits of software that are commonly installed after deploying a new machine.

We can assemble OS images and artefacts to create formulas. A formula combines and OS image with one or more artefacts. For example, one can provide users of a lab with a formula that includes:

  • Windows Server 2016
  • 7-Zip
  • Google Chrome
  • Docker
  • An automated download of a VSTS build artefact
  • An automated domain-join
  • A self-signed certificate
  • A predefined network configuration

Now if a developer wants an instance of this formula, it’s a matter of walking through a simple wizard after selecting the administrator-provided formula.

Deploying an Azure virtual machine from a DevTest Labs formula [Image Credit: Aidan Finn]
Deploying an Azure Virtual Machine from a DevTest Labs Formula [Image Credit: Aidan Finn]
I recently showed the formula feature to a developer and he loved it because of the time that he would save by not having to install all the various bits and pieces that he normally would on a new machine.


Azure DevTest Labs provides developers and testers with the self-service that they desire. The budget owners will also have some level of comfort because restrictions can be put in place. To counter this, formulas can be created to reduce the time and effort of virtual machine configuration, enabling devs/testers to get what they want quicker.