00:00:20.519
All right, how's everybody doing? We good? Lunch? Yeah, these guys get it! I'm here today to talk to you about Boxen. So first, who am I? I'm Dubar on Twitter.
00:00:32.239
In regards to GitHub, we're feeling the pain of trying to teach everyone—developers and designers alike—how to get GitHub and all our other projects running on their laptops. The process was failure-prone, complex, and time-consuming. So last summer, we created the first iteration of The Setup, GitHub's method of managing laptops without getting all authoritarian about it. We quickly realized that other organizations needed and wanted this environment, so we started back with the basics and re-architected The Setup into Boxen.
00:00:44.680
The same tool, the same method, but written for modularity and general consumption. We've since released Boxen, as of January 2013, and other organizations are using it to great success. This talk explores our design choices with Boxen, how we use Boxen internally, our recommended design patterns for managing Boxen-driven automation, and some new goodies coming down the pipeline for Boxen.
00:01:10.840
So, why should you care? It's a project someone open-sourced, and it was on Hacker News for about a day. But what does that mean for you? Like most things, it starts with a little bit of a story. Imagine we have a brand-new developer. It's their first day, and they've got a pretty cool laptop, a cup of coffee, and some swag. They say, 'You know what? I really want to get hacking on stuff. Maybe I’m going to be working on making Gist faster. I want to write code and get that done.' The process, however, looks something like this.
00:01:39.760
Maybe they start with installing Xcode, then a Ruby version manager, followed by a whole bunch of Ruby versions. Then maybe they'll install Node.js, followed by Bower to get jQuery installed and Bundler for managing gems. Next, they might go ahead and install MySQL or PostgreSQL, skip MongoDB, and move straight on to Elasticsearch. Suddenly, they're hitting problems. Ruby is segfaulting. What’s going on? Their environment no longer works. They are confused and feel like they’re just banging on the keyboard, copy-pasting instructions from some script that worked once a long time ago, but isn’t functioning now.
00:02:01.280
They don’t understand why it’s failing, and this ruins their experience. The person tasked with ops in the company feels like, 'Oh god, it broke again,' suffering from PTSD as this happens every time a new hire comes in. The new developer just wants to ship cool stuff, and this chaos ruins that experience. What we decided was to create a solution to manage this chaos.
00:02:31.920
So I teamed up with John Barnett. We sat down and said, 'Let's write some code to tackle these issues.' We used what we called the "power of the neckbeard" and arrived at something we think is at least a little bit better. Our new employees come in, and they’re excited to set up their environment. The guide says, 'Open up a website, install Xcode, and paste a line in the terminal,' and they think, 'Holy crap, it’s done! That's it!' The entire process goes smoothly.
00:03:07.040
They don't have to deal with one-off scripts that are outdated. It is idempotent—managed and versioned—to make it easy to understand. They end up with a fully working machine. So, what is Boxen actually like when used in your organization? It’s primarily designed for Mac, though there’s no reason it can’t support Linux; we focused on what most GitHub users needed. Some people in the community are already working on making our modules support Linux.
00:03:41.120
It’s a standard library of mostly Puppet modules, with a little Ruby mixed in. Boxen aims to make things easier for your organization so that people can work faster, smarter, and do not have to worry about which component in the stack is going to break today. It’s fundamentally a philosophy about how to manage laptops locally, designed for teams that are autonomous by nature. For end users, they open up a website, and someone on their autonomous team instructs them on what to run to get an awesome development environment.
00:04:28.800
Boxen comes with a template repository that outlines how an organization can set it up. It includes everything you need to run a modern web development stack and can also facilitate native development. Our GitHub for Mac employees use this just like everyone else. What do you do with Boxen once it’s in your organization? One of the first things we learned was that it can also manage projects—not just services but actual projects at a higher level.
00:05:16.760
For instance, a developer might want to hack on GitHub.com, and the README instructs them to set it up by running Boxen in GitHub. Puppet spins out some logs, and they realize a lot of work is being done without needing to think about it. Developers should not have to worry about what version of Solar is installed—those concerns should be managed by operations so that the version in production is the same as the one in the development environment.
00:06:10.919
Many developers, designers, and support staff have created personal manifests or project manifests with Boxen. A significant number of non-developers have done the same. Our experience shows it is possible to empower all employees from various teams to contribute positively when given proper documentation and a supportive environment.
00:06:39.120
We also focus on making it easy to encounter and recover from failures. If a developer runs into an error while using Puppet, a GitHub issue is automatically created indicating who failed, when they ran Boxen last, and information about their environment. This gives developers all the details they need to identify and fix issues.
00:07:06.480
When talking about the day-to-day use of Boxen within an organization, it's important to have robust abstractions. We started with straightforward modules that we updated in our shared repository as the need arose. Instead of introducing complexity from the outset, we focused on improving the design as we saw fit.
00:07:51.440
In practice, we updated modules in our internal repositories and later extracted them as necessary. It’s also essential to start with Puppet DSL as it’s straightforward, and only refactor into Ruby for performance reasons when necessary.
00:08:06.720
This approach allows for more manageable design decisions and greater flexibility in meeting necessary performance demands. The key principle here is that we prioritize practicality over purity—whatever works best in practice is what we should strive for.
00:08:45.440
Some concerns have arisen about security updates and the way we implement them. Security personnel might come across as the adversary, but that’s not the case. We believe in integrating security measures seamlessly and automating as much as possible to prevent vulnerabilities, ultimately motivating employees to adopt necessary updates.
00:09:34.640
So what if you encounter issues while using Boxen in your environment? Don’t hesitate to file issues on GitHub. There’s a complete set of repositories—one for each module, as well as some others for templates. We have an IRC room where users can interact and get help.
00:10:36.080
To wrap things up, I’d like to share a story. Just last week in Boston, while attending a conference, I was walking with some colleagues and someone yelled out of a passing car, 'Yo, GitHub sucks!' We were taken aback; the unexpected attention was surprising regardless of the negativity.
00:11:13.680
What this really highlights is that we need to focus on creating cool software and not get bogged down by the criticism. There will always be naysayers, but it’s your job to channel that energy into building positive tools that help others, much like how Neil Patrick Harris has continued to inspire with positivity in the face of criticism.
00:12:01.440
I’m Will Farrington, and the slides from this presentation are available on Speaker Deck. There’s a gathering at Little America Sports Bar at 8:30 this evening, and you are all invited to join for drinks. Thank you very much for your attention!