Creating a Windows Development Environment With Packer, Vagrant & Chocolatey.

Let's face it, spinning up a new development environment is not a pleasant experience. The lengthy journey of installing your preferred stack, software and tooling, can often last days to get to a point of productivity and weeks to fine tune.

What if this task could be reduced to a single command?

At my current job, this problem is compounded as new developers come onto a project I am leading. Responsibilities of knowledge transfer, which includes how to set up an appropriate development environment for the project in question, tends to fall in my lap. Ultimately this leads to predictable amounts of lost time that are echoed every time a new dev is inserted into the workflow.

What if this task could be reduced to a single command, of which is reproducible x-amount of times?

The performance of development environments degrades over time. It is an unfortunate fact of life. As new assets become available, old assets that are no longer needed find a way to take their toll. The task of spinning up a new environment requires you to take stock of these assets, in hopes to reproduce them verbatim on your newly provisioned machine.

What if this task could be reduced to a single command, of which is reproducible x-amount of times and can be configured for consistency?

In steps Vagrant.

Vagrant provides easy to configure, reproducible, and portable work environments built on top of industry-standard technology and controlled by a single consistent workflow to help maximize the productivity and flexibility of you and your team. https://www.vagrantup.com/docs/why-vagrant/

But wait, we are in Windows. Certainly, this can't be easy for us? As a matter of fact, it is and I will demonstrate such using the following tools.

Instead of maintaining this blog post with updates, I figured it best to create a repository and update it. That being said, head over to the Pioneer Code GitHub page and check out the Pioneer Windows Development Environment repository for further details.