Inspired by a recent blog post from Mathias Meyer on the Travis CI blog, I want to share with you details about how we work together at DNSimple.
DNSimple does not have a central office - actually, we don't have an office of any type, central or otherwise. The core team consists of me (@aeden), Darrin (@dje) and Simone (@weppos). I live in France, Darrin lives in Portland, Oregon, and Simone lives in Italy. From the beginning we decided to build our business around the idea of working from wherever we are at the moment, whether that's from home, from a vacation rental somewhere in the world, or even from a dive shop in Indonesia (yep, it happened! See below…).
From our tools to our processes, the idea of being location independent helps define everything about how we operate.
We're a software company first and foremost. We rely on Github as the center of all of our software development. All enhancements and bug reports go into Github Issues where we can discuss them. Everyone on the team has access to Github Issues and can join any discussion. Often the next step is to create a pull-request around a bit of code that addresses a particular issue. Pull requests are a good place to give constructive feedback and work as a team to decide on certain elements of code or design of a particular implementation.
In general, every pull request is peer-reviewed by a member of the team. At the end someone owns that pull request (usually it's the person who opened it) and they make the final call on when it is ready to merge into master.
We make heavy use of HipChat as our distributed water cooler. We keep the majority of our discussions in a single, shared room. In addition to core team members we also invite contractors and part-time folks into the room as well. Anyone may come and go as they please. Heavy use of emoticons is always appreciated.
Like many distributed teams we also have a customized Hubot that hangs out in our main HipChat room - he goes by the name Steve McBots. Steve is both our command-and-control center for the operation of DNSimple as well as a tool for having fun. Anyone may trigger a deployment of the DNSimple web application at anytime using Steve or a flood of pugs.
In addition to Steve we have also hooked in a variety of external services to provide updates about the status of the site and all of the services we offer. We receive notifications from Sensu as it monitors various aspects of the DNSimple infrastructure: from Github for commits and pull requests, from our deployment system when deploys start and complete, availability notices from Pingdom and PagerDuty, and a various other notices from a number of other services.
Another element that is an important part of how DNSimple works is our customer support. Everyone in DNSimple answers support requests. A successful business is built by creating successful customers, and providing awesome customer support is a key part of that. We use Intercom.io for our shared support system and as our way of communicating with groups of customers. While we don't track our support response times we work as a team to make sure support requests are answered in a timely fashion. We also have an internal admin tool that helps us provide solutions for our customers.
Sometimes we need to communicate face-to-face. Usually this happens when the discussion needs to involve spontaneous creativity. We also will switch to face-to-face communication in times of distress, for example if we need to deal with some sort of operational issue that requires immediate attention. For this we usually use Google Hangouts, although occasionally we go to Skype as well. In any case, being able to see your teammates, hear there voices and sometimes see their screens is an important part of working together as a team. The downside is that often discussions made face-to-face end up not getting documented as well as a pull request or issue and that can lead to confusion as to why certain decisions are made. Usually we try to combat this by asking each other to open an issue in Github.
One of the things we're trying this year is to have a group get together during the year. We're going to bring together the core team for two weeks in a location where we all want to travel. Our families are coming with us as well. It's a grand experiment to see what the effect is on our productivity and happiness.
Ultimately we've set up DNSimple in a way that optimizes for our happiness. Tom Preston-Werner, one of the founders of Github, spoke about optimizing for happiness back in 2010. His talk resonated deeply with me and really helped solidify my beliefs in how a company I help run should operate. Since going full time on DNSimple in April of 2013 I can honestly say that I am the happiest I've ever been in my professional career. Even more importantly I feel like the current way we operate is also sustainable, meaning that we can keep doing this for as long as it continues to bring us joy. This ability to keep doing what you love is my definition of success.