Headphones in, sitting around the same table, short morning scrums are all key to how we co-work out of the MapBox garage at Development Seed. But our GitHub infrastructure is as important as having the right office culture to communicate and iterate over an idea. GitHub has changed the way we build software and, most critically, changed how we collaborate.
GitHub doesn't create the workflow or define the process. Rather, it's a space where we are able to run an iterative software development cycle and work in an open and collaborative way. There are three basic methods that let us work better as a team and can be helpful to anyone who's just starting to use GitHub.
1. Branch and merge
One of the biggest challenges for us as integrated team is how we work in parallel. When we start a project, we work as integrated teams of 3-4 and we get a working version running as fast as we can. We then iterate and task out work, using a branch-and-merge workflow on GitHub. Branching and merging are just version control terms that describe the process of making edits to a primary version without breaking the code, and then bringing those changes back (i.e. merging) into the primary. By organizing tasks into branches, each person can work efficiently in their own branch and merge changes back asynchronously.
2. Code your ideas, use pull requests
We're always shipping. When we've completed changes in a branch, the new code can be merged in through a pull request -- a process to propose changes to the existing code that is visible and packaged to other team members. Sending a pull request allows for fast and focused feedback.
We aim to always have a working site, even though we're adapting and building new code as needs change. Sending pull requests reinforces the team's ability to build on existing code and test out ideas - because we can see the changes in a tangible way and give feedback, rather than just talking.
3. Review code and send actionable comments
When we work on a project, we run it like an open source project and build off of each other's ideas and code. Getting feedback immediately as we work makes a faster iterative development possible.
To do this well, we work asynchronous. We look to be doing useful stuff all the time rather than waiting. Meetings can be toxic, emails can disrupt the flow, and interruptions destroy the zone. By having everything captured in a comment or chat, we work in parallel with a documented process to which we can come back and improve.
Product enabled by the process
Leveraging our infrastructure on GitHub lets us work within a process that is a lot flatter and less traditional -- just get things done and ship.
We collaborate around an idea by doing, documenting, and getting feedback. This is the core value that makes GitHub so important to us.