The part of the talk that seemed to be most interesting was the toolset that we're using at the moment. I thought I'd share this list here, as well.
Remember, that tools should just support your process and not replace it. If your goals are clear to you and your team, then the tools are just implementation details.
- Internal (written) Communication - IRC
- Requirements/Tickets - Trello
- Documentation - Hackpad
- Voice communication - Mumble
- Code reviews - Github
- Continuous Integration - Jenkins
- Remote pairing - tmux
- Video calls - Google Hangouts
Internal (written) Communication - IRC
For most of the internal communication in the team, we've been using IRC. It's a kind of a old-school tool. It served us well for about 7 years now, but meanwhile we've been experimenting with alternatives, like Slack (just recently).
The tool itself is not that important, it's the goal it serves that is interesting.
We have one channel per project and several generic channels, like #lol, #arkency, #links, #coffee, #products, #blog.
The project channels are often integrated with other tools and receive notifications from Trello, Github, Jenkins. This is like the headquarters.
In some projects we also use Slack or Flowdock for the same goal.
Requirements/Tickets - Trello
This is our default project management tool. It works as a backlog. It contains many tickets/stories, prioritised and described. It helps detailing the requirements and seeing what's the status.
The tickets are also refactored - we extract new tickets, rename them, group them - whatever is needed.
In some projects we use Pivotal, Redmine or Asana for the same goal.
Documentation - Hackpad
Hackpad - this is my favourite one. If you're not familiar with it already, it works similarly to Google Docs. In my opinion, it's a bit more interactive.
It's basically a wiki on steroids. It has support for collections, it notifies about changes via email. You clearly see who wrote what. You can comment sections of code and checkboxes.
Whatever interesting happens in our company, it gets an URL on Hackpad. Do I have an idea for a bigger refactoring in one project? I create a hackpad, paste some code and describe the plan. Others can join whenever they want (async!) and add their comments.
Voice communication - Mumble
Mumble is probably unknown to you. It's a tool very popular among gamers. They use it to communicate in a team, during a game. We started using it, as it was much more reliable than Skype. It's a very minimalistic tool. It has the concept of channels, so we designed it similarly to our communication tool (IRC). It also allows recording the conversations, so that people who were not able to attend (async!) can later listen to the most important fragments.
Code reviews - Github
We use Github for hosting code and for making the micro-code reviews. I call it micro, as they only let us comment the deltas - commits or pull request. They don't let us comment the existing code base, which is a limitation many similar tools share.
If there's one place, I'd like to see improvement for remote teams it would be a proper code review tool.
Continuous Integration - Jenkins
We host the Jenkins instances to build our projects. I'm very far from liking it - it has many quirks, but overall we didn't find a good alternative to switch, yet.
Remote pairing - tmux
I blogged about remote pair programming 6 years ago. At that time, I was using screen + vim and I still think it's a good combo (together with Skype or Mumble). Nowadays, we don't pair program too often, but when people in my team do that, they often use tmux to connect to each other (terminal-based). Another tool is tmate.io, which is also tmux-based.
On a good connection you can also use Google Hangouts and their Desktop Sharing feature.
Video calls - Google Hangouts
We use video calls very rarely and mostly, when external teams are involved who prefer it. In that case, we use Google Hangouts.
It's important to understand that those are only tools. They can change. I'm pretty sure, next year, we'll use a different toolset. What's important is the process around it - how you collaborate on projects, how you split stories, how you discuss, how you collaborate on the code.
If you'd like to learn more about the techniques that we use in our remote and async collaboration (not only about the tools), then let me recommend the Robert Pankowecki book about it (I also wrote one chapter): Developer Oriented Project Management.
What tools are you using? What would you recommend?