Andrei Alexandrescu, a self-professed hacker and current employee at Facebook, is interviewed by Server Side Magazine and answers what software/tools they use at Facebook. It’s a Linux world, with a lot of tools developed in-house:
Each Facebook engineer gets a choice of MacBook or Windows laptop, plus the invariable 30′ monitor (yum). But development is not really happening on the laptop itself; to get any work done, engineers connect to a remote Linux machine (each engineer has one assigned) using a variety of protocols over ssh (plain terminal, nx, vnc, and probably more).
There’s freedom in choosing editors, so the usual suspects – emacs and vim – are quite popular, with some Eclipse and others here and there. I personally prefer emacs via nx, the combo works quite swimmingly even over a slow connection.
We also have a lot of cool organizational tools, many developed in house. That sounds a bit NIHish, but the history behind it is that we tried hard to make off-the-shelf tools work at the scale and quality we need them to, failed, and had to write our own.
The tools use our own technologies (talk about dog food) so they work, look, and integrate beautifully. Best part, if someone doesn’t like something, well, they can just fix it. (To wit, our email and calendar software is off-the-shelf and is the most unpleasant tool to deal with. Get this – we have a few people “specialized” in sending large meeting invites out, because there are bugs that require peculiar expertise to work around. Not to mention that such invites come with “Do not accept from an iPhone lest you corrupt the invite for everyone!”)
Anyway, back to our tool chain. Once an engineer makes a code change that passes unit tests and lint, they submit for review a so-called “diff” via our Phabricator system, which we open sourced.
The reviewers are selected partly manually, partly automatically; virtually not one line of code is committed without having been inspected by at least one (other) engineer. Phabricator is great at this flow, making diff analysis, comment exchange, and revision updates very handy. I’d recommend it.
Once the diff has been approved, the author uploads it to our central git repository. We love git; when I joined two years ago, we were just starting to migrate from svn to git, and today we virtually all use git. Some of us (including myself) wrote a few popular git scripts that integrate with our workflow.
To build C++ code we have our own build system driving a build farm. I don’t do front-end work, so I don’t know many details in that area; in broad strokes, we use the recently-released HipHop Virtual Machine (HHVM) for development, and the static HipHop compiler for the production site.
We have quite a few more browser-based tools for improving workflow, such as task management, discussions, wiki, peer review, recruiting and interviewing, analytics, systems management, and many many more. Really for pretty much any typical need “there’s an app for that”. And if there isn’t, there’s a vast infrastructure allowing you to build one quickly.