5

I'm trying to come up with a good approach to creating a re-usable development environment such that it doesn't take a couple days to re-build a machine if it starts to sputter and to be able to onboard new developers faster. Reading about Quora's development setup made me consider alternatives to the old development environment build delay. For a .NET/Windows shop though, how are you solving this problem?

  • Local virtual machine on your desktop/laptop that you can share with the other members of the team?
  • A dedicated server (physical or virtual) that all developers remote desktop into and that can be easily backed up. (obviously requires a network connection, so there's a downside)?
  • An instance in the cloud (like Quora)?
RyanW
  • 829

3 Answers3

2

I've been using Vagrant to help me set up VMs - Vagrant helps you set up a machine based on a essentially template VM, then loads customizations, for your particular project, that you set up with Puppet or Chef.

I've used this to create a standard VM for my team, loaded with all the software our project depends on.

And Vagrant makes it easy to blow a machine completely away and start over, if something oddball happens to a machine. For example, I had Linux giving me a disk error on a virtual machine... I "solved" the problem by blowing the VM away and having Vagrant rebuild it.

RyanWilcox
  • 514
  • 4
  • 6
1

You definitely need to look at some kind of virtualization. Being able to instantly create a new copy of your default setup is amazingly powerful. And not just being able to replace the environment, but to have multiple different environments that you can run testing on, all without having to commit for physical hardware? Very very nice.

The thing with virtualization is that you can create your environment, and then ship copies all over the place. Host a "main" environment on the server, and still give everyone a copy for their desktops. It's nice. It adds a ton of redundancy, and allows you to reset to a "default" environment at any time.

Satanicpuppy
  • 6,196
1

Starting about fifteen years ago, for each project, I've developed a checklist that runs like this:

  1. Wipe the hard drive and install --- version of --- OS from the original disks.
  2. Apply ---- updates to the OS.
  3. Install ---- compiler.
  4. Apply ---- updates to the compiler.
  5. Load ---- other software, if needed.
  6. Install ---- version of ---- source control system.
  7. Pull the sources for the project from the source control server using --- parameters.
  8. Do --- to build the project.

It takes a few hours, but most of it can run unattended. Back when I had a company with employees, we did all our release builds that way.

An alternative is to ghost a disk image from step 6, and use that to skip those steps - but that assumes you're using an OS install that isn't locked to the machine.

This has worked like a champ on Windows, Mac OS 8/9/X, and Linux. One of my clients recently had one of their engineers build a deliverable to them, and he was amazed at how simple and error-free it was.

Bob Murphy
  • 16,098