Boxen is an automation framework which aims to automate the configuration of your development machine. To be precise (or not) is '_your team's IT robot_.' It does so by a clever use of Puppet and a set of scripts, templates and conventions.

In this post I will not write about the tech part of it just because it has been just a couple days I'm using it. But let me just mention my impressions and maybe help you out to decide it you should take the time or not (at least at first) to go 'boxen'.

Effort versus Benefit

When I mentioned that I would like to use boxen, the first question I was asked was 'Why?' Truth is, you should ask yourself the same question. First, because it might not worth your time. To give a precise example, the same colleague that asked why would you do that, brought up that once your machine is setted up (in ThoughtWorks we change machines roughly every two years) you won't do it again so soon. Taking the effort to automate everything would probably be more time than the couple of days you use when you get a new machine.

He had a point. It takes approximately a day and a half (in my case) to set the machine up and the whole automation, even with boxen providing helpers for it, could take days. Well, it also happen that I'm stubborn and keen for automating, so I didn't see this move as a sunk cost but a learning experience with the return of investment more in the long term. Therefore I waited so I could get space and time and started this small project.

Learning curve

My learning curve maybe doesn't apply to you, I'm familiar with puppet and the whole machine automation idea, therefore, although I had to get familiarized with the conventions, the technology itself wasn't strange. I can guess that if you are not familiar with the concepts and Puppet the curve might get steep.

The documentation is not baby steps one, it helps you get boxen on your machine, provides some examples for personal customization but I had to look into the bits to understand it better, you might to do it as well. So remember to set aside sometime to drive boxen at your will. As recommended by the docs, I removed my HomeBrew and rbenv installations and let boxen take over. If you are frenetically working on a project which uses these tools, again, you should consider the time it will take to set things back up.

Not a 'cannon ball to kill an ant.'

In Portuguese we have this expression 'Using a cannon ball to kill an ant' when a disproportionally force/act/comment/argument is used against its target. So the question is 'Is using boxen a cannon ball for a simple thing?' Well, it depends. Boxen wasn't created to manage a single machine, although it can, but a set of machines belonging to an organization. It will be no surprise that it looks complex just for changing the preferences of your screensaver but it makes a lot of sense when the whole organization needs to have some policies applied.

Does this sounds enterprise'ish? In some way, but do not hang on in this because boxen is not just about setting organization standards on machines it is also to provide an easy way to set the machine up for development work. Having the project and dependencies correctly defined one can add the whole environment for a project by simply boxen project-name. This would saved me lots and lots of time when changing projects. Most teams I know do not have a reliable way to set automatically a developer machine, the ones which do, have ad-hoc non-customizable scripts to do it and often require manual intervention. And when it finishes you often go 'Why my project doesn't compile?'

Final thoughts

Is a bit to early to know how my usage of boxen will turn out, my feeling is that it will take sometime before I could wipe the machine, run boxen and do not touch anything but by changing puppet manifests. On a more deep analysis it might lower the amount of customization I do, which in a sense is good because the more you customize the less portable you are (especially if you pair).

Certainly adopting it for a whole organization adds way more value, especially if there's lots of projects going on and people change projects often. If each day someone sets up a machine could be cut down to some minutes the resulting time saved might be a number worth to look at.