Riffing on Bruno’s post, “It’s a Global Market, why are you cornering yourself?”, I’m going to follow-up and give a detailed explanation of the tools we use at Todobebé to collaborate with our distributed agile team. I’m going to assume you have a working knowledge of an agile methodology. We adopted Extreme Programming as our development methodology about a year and a half ago, coming from the typical, let’s have some meetings, build it and pray that it works methodology that most small businesses practice. If XP isn’t your flavor of software religion, most of the software should still be applicable to Scrum or other agile development methodologies. If you need a quick overview of XP, check out Extreme Programming: A Gentle Introduction first and then pop back over here.
The software we use isn’t going to surprise anybody, but the combination of which work really well for us:
I told you it wasn’t going to be a surprise. We reviewed, tried and waffled back and forth on quite a number tools over the past year to arrive at this list, both free and paid and some of them quite expensive. We’ve found that the simplest tools work best. At one point we moved from Pivotal Tracker, which we enjoyed logging into every day, to a very expensive tool which took us 2 weeks to configure. After several weeks, we realized that flexibility is a synonym for “crappy usability”, and switched back to Pivotal Tracker.
The Standup
The standup is our daily therapy session that we hold in Campfire; “What did you accomplish yesterday?”, “What are you working on today?”, and the question that really matters, “Is anything preventing you from completing your stories?” We use a script that posts a reminder message into campfire every day.
A cron job on our staging server kicks off the standup script. (Niñera is our helpful campfire bot.) There are alternatives to Campfire, including IRC, but Campfire’s dinstinct advantages include ease of use for non-techie users, searchable and persistent history, inline code pasting and inline image sharing.
Iteration Meeting & Demo
Until recently, our iteration meetings were in person. However, we’ve now moved to holding them virtually, allowing everyone to join, even if they can’t physically be at the office. Skype allows us to conference for free, including our developers in Brazil, and still works great on poor internet connections. Everyone logs into Campfire in case they need to share links, screenshots, etc. Webex is used to screenshare a demo of the work completed and the next iteration’s work is planned in Pivotal Tracker.
Retrospective
After the iteration meeting, we hold a retrospective in Campfire with each person typing in their positives and negatives of the process and everyone revealing them all at once. The results are aggregated and stored in a Basecamp message, to be reviewed the next week for improvements. This is a key aspect of XP and keeping an easy to access history is important to the health of the process.
Release Planning Meeting
The release planning meeting has been our one exception. It’s infrequent and important enough to fly everyone in to meet in person. Potential stories are written on 3x5 cards. Developers discuss the stories with the business team and estimate a cost on the cards. The business team chooses the most important stories for the release. The stories are then entered into Pivotal Tracker and become part of our virtual process.
We are going to hold our next release planning meeting virtually though. If it differs greatly from the iteration meeting, I’ll update this post.
Engineering Meeting
After the iteration meeting, we roll directly into the engineering meeting with the developers to flesh out the tasks for each story.
Bug Tracking
We go old school with this one. Issues are reported via email to our QA person and consolidated to bugs in Pivotal Tracker. This allows our small team of developers to work from one tool and also makes it easier to plan all the work for the iteration. Any bug tracking tool can act as your bug inbox, but I still highly recommend having someone consolidate, verify and filter before it reaches the developer.
We deviate slightly from XP as our team isn’t quite big enough to have a dedicated batman to handle unplanned issues. If your team does utilize a batman, they can work directly from the separate bug tracking tool.
Pair Programming
Our team uses Macs and the built-in screen sharing works great. The audio in iChat tends to be a bit flaky so that gets turned off and we use Skype instead. Remote desktop is also built into Windows, but don’t bother asking me for help.
Stories
As I’ve already mentioned, we keep our stories in Pivotal Tracker. It’s built using generic agile principles and not one specific dogma in mind. I have not found this to be an issue. When it’s time for a developer to work on a story, collaboration with the business owner happens with screen sharing for one-on-one sessions and Webex if multiple people are involved.
SCM, Continuous Integration & Testing
All of our source is stored at Github, which provides an easy hook system for notification to other systems. Commits get posted to our private Twitter account and Campfire. Integrity gets notified and the build status gets posted to Twitter and Campfire as well. When someone breaks the build, then entire team knows right away and you are shamed into fixing it. ;-)
I’m not going to lie to you, remotely collaborating requires much more effort than working in a classic XP room. But it can be done, and done well. Eliminating your geographic borders for hiring means you can tap into the best programmers in the world. A not-so-obvious advantage of keeping the entire process online is greater visibility into the project by management, which translates to less meetings for us developers. And that makes me very, very happy.
If your team is doing remote collaboration, I would love to hear which tools you use in the comments.