MountainWest RubyConf 2013
Boxen: How to Manage an Army of Laptops and Live to Talk About It

Boxen: How to Manage an Army of Laptops and Live to Talk About It

by Will Farrington

In the presentation titled Boxen: How to Manage an Army of Laptops and Live to Talk About It, Will Farrington discusses GitHub's innovative approach to managing developer environments efficiently through a tool called Boxen. As GitHub experienced rapid growth, it encountered significant challenges related to onboarding new developers and ensuring consistent setup across different laptops. The traditional setup process was cumbersome and error-prone, necessitating a streamlined solution. Therefore, in response to internal struggles, Farrington and his colleague, John Barnett, redesigned GitHub's initial method known as The Setup into a modular system called Boxen. This modular design allows for easier organization-wide usage. Key points addressed in the video include:

  • Challenges with Traditional Setup: New developers faced confusion due to complex installations that involved multiple components like Xcode, Ruby version managers, and databases. Many struggled with system failures, leading to prolonged onboarding.
  • Introduction to Boxen: Boxen simplifies the setup process by allowing new developers to follow a straightforward installation guide that requires minimal input, making the experience enjoyable and efficient. It relies heavily on Puppet modules to automate the configuration of development environments.
  • Empowering All Employees: Boxen not only assists developers but is also accessible for designers and support staff, enabling a wide array of personnel to manage their setups effectively. Boxen automates troubleshooting, providing logs and GitHub issues for easy resolution of errors.
  • Flexible Design and Security: The presentation emphasizes starting with simple abstractions and progressively enhancing them based on organizational needs. Farrington discusses the importance of integrating security updates seamlessly to encourage user compliance rather than resistance.
  • Community and Support: Users can access comprehensive resources, including GitHub repositories for each module and an IRC channel for community support.

In conclusion, Boxen embodies a philosophy of user autonomy while promoting organizational efficiency. It empowers teams to focus on productive work without the distractions of environment configuration issues. Additionally, Farrington encourages embracing criticism constructively to foster innovation in software development.

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!