© 2014 Jeff Sussna, Ingineering.IT
I am a strong proponent of the viewpoint that DevOps is first and foremost about culture. When clients ask me which big, expensive enterprise tool they should use to implement DevOps, I tell them they shouldn’t buy anything until they fully understand why they want it. I’ve previously posted my belief that empathy is the true essence of DevOps.
I do, however, believe that tools can sometimes help develop culture by influencing behavior. To that end, there is one tool I tell every client they should adopt from the start. That tool is Vagrant, created and maintained by Mitchell Hashimoto.
Vagrant makes it possible to create desktop clouds by scripting the configuration and control of multi-VM systems. Imagine a multi-tier web application consisting of a web server, a database, and an email server. With Vagrant you can specify and package the entire description of that application: its tiers, their operating systems, and all the system and application configuration actions needed to provision the entire software stack. You can then share that package with your whole team in a controlled manner. Any configuration changes can be managed and disseminated consistently via a version control system.
Vagrant makes it easy for everyone involved in delivering a software service to think about it in the same way. I tell my clients to create Vagrant boxes for their applications, and put them on everyone’s desktop. By everyone I mean developers, testers, admins, and even product owners. There is no reason product owners should depend on centralized test servers any more than anyone else. They should be able to do acceptance testing right on their own desktops, at their own convenience. Vagrant’s automation capabilities let them do it this way, with confidence they’re testing the same configuration that will run in production.
Vagrant dissolves differences between perspectives across the Dev/Ops continuum. It makes it possible to treat every environment similarly, from the developer’s desktop all the way to production. It treats layers within the software stack similarly, from operating system patches to application configuration files. It presents everyone with the same view of a system, not just “infrastructure” or “application” or “database” or “app server” or “user behavior”. Most importantly, it treats every member of the software service team similarly, giving testers and admins alike the same environments and tools.
Empathy involves the ability to see things from others’ perspectives. Vagrant puts complete systems on everyone’s machines. It makes those systems part of their daily lives. Team members can run the entire software stack, architecturally identical to production, on their laptop in a coffee shop. No longer is the full system architecture something that only lives in the cold, humming data center, on the other side of the man trap. In this way, Vagrant helps cross-functional software service teams start down the path towards mutual empathy, and thus towards DevOps culture.
The title of this post is intended to be tongue-in-cheek. It’s not my intention to set up some kind of competition with other DevOps tools. As people say when asked to choose between Chef, Puppet, CFEngine, and other configuration automation tools, “using any of them is better than using none.” The point is that, when we struggle to understand how to foster something as intangible as “DevOps culture”, Vagrant can be an excellent starting point.