Distributed Software Teams
At Sentry Data Systems, we have a very distributed technology organization. The majority of our technical staff does not work from our Deerfield Beach headquarters. Instead, we have our developers, implementation staff, tech support, and infrastructure personnel spread out across the country, and even a satellite office located in the midwest. Everyone is an employee, and we don’t do any offshoring, but we are most certainly not geographically close to each other.
If you’d asked me five years ago if I thought this would be a good approach to take, I would have rather emphatically told you no. In fact, I resisted it pretty strenuously for quite a while. You had to be a senior developer, having spent significant time on site (at least a year), and working remote was a reserved privilege. While we had a few guys working remotely, it wasn’t the majority you see, so Bad Things couldn’t happen, but we still had folks dialing in right from the beginning. And yet, in hindsight, it may be one of the factors that helps us squeeze more productivity out of our staff, helps them produce higher quality code, and allows us to get the leg up on competition.
For starters, it forced us extremely early on to invest in systems, processes, and a way of working that brought everything we did online. Project management, change control, bug tracking, issue tracking, source control, testing, collaboration, documentation, document management, communication, all of these things needed to be ubiquitous and consistently used by the entire staff. If things weren’t accessible online, that meant Bob in Utah wasn’t going to be able to contribute, learn, participate, or even know about it.
The second major factor that a distributed team gives us is a national recruiting footprint. We’re not just going up against Acme Software in our back yard down here in Fort Lauderdale (South Florida has its own disadvantages for hiring technology workers), we’re getting to compete for the top talent across the US in every job market. Our pool of potential applicants increases by an order of magnitude or more, which really amps up the talent level and allows us to be super picky.
Third, I recently came across this article recently which was discussing some research from Microsoft, exploring traditional myths about Software Development, and they touched on the fact that distributed teams in their experience don’t have a negative impact on team performance. They rightly point out that this flies in the face of a “one of the most cherished beliefs of software development” but they also illustrate how any worker would much rather talk to someone knowledgeable on their team 4,000 miles away than a less knowledgeable guy next door. Makes sense, and it jives with our experience as well, but I can’t say I expected this outcome at first.
Are there drawbacks? Sure. It’s nice to have everyone over for a barbeque on a long weekend, and that can’t happen. It’s fun to walk by and joke with everyone while making the rounds in the morning, and that’s harder to do, but we still manage to interact a good deal as a team. The flip side is it’s nice for the remote guys to be able to live where they want, stay in touch with family and friends, and yet still have a great job at a fun company. This really contributes to retention – we’ve had several guys move several times in the last few years, which I count as a “save” on losing an employee each time.
If you’re considering running your organization’s software teams in a distributed fashion, here’s some things you’ll want to make sure you’ve got covered:
- Excellent communication methods: cell phones, VoIP phones for extension dialing off the corporate network, private instant messaging network, email, and more.
- Organizational Discipline: People in the organization need to understand that they will often be interacting with remote individuals, and that they can’t cherry pick projects to those who are in the office. Yes, a phone call is not as nice as face-to-face, but often it’s more productive.
- Team-Based Activities are Still Key: This is an easy one for us. We play video games every Friday afternoon/evening. Combination of shooters (Team Fortress 2) and other games (DoTA and HoN) and the games are part of the employee start up paperwork.
- Everything Must be Online: Bug tracking, brainstorming, documentation, everything. A major advantage this gives you is it’s a head start on preparing for audits or other certifications (SAS70, etc.) you might need to complete as an organization as everything will be easily accessible.
- You Still Need to Be Involved: If you like to walk around and say hi to everyone each day like I do in the office, you still need to do it “online” via instant messenger or phone call.
- Figure out if a Satellite Office Makes Sense: We found that we had roughly 5 people clustered in one city, so we sprung for a satellite office. It’s a cheap thing to do and helps our recruiting in that area.
- One Timezone: We work on US Eastern time. You can live where you want, but you’re going to work that timezone. This is critical, in my opinion and while it does mean the guys in California are up at 5AM, it’s not the end of the world and really helps keep things simple from a scheduling and planning perspective, and maintains the ability for quick communication.
It probably isn’t for every organization, but it’s really worked out for us, and it’s definitely something we’ve grown organically and will continue to improve.
disbelief
on November 7th, 2009
I agree with all of this up until your One Timezone point. I suppose it depends on the nature of your product and your development methods.
I personally work with a distributed team, however we have a global scope so we’re talking more than just the 3 hours between EST and PST. Regardless I wouldn’t want to force anyone living in a different timezone to have to get up at an ungodly hour just to be in sync with the arbitrary timezone that head office is in. Isn’t the point of working remotely having the flexibility to work where and *when* you like? Maybe its just that I personally wouldn’t be a “happier” or “more productive” software developer if I had to wake up at 5am just to be in sync with a few guys on the other side of the country.
Of course my case is probably fairly different from yours. Our developers tend to work fairly independently or loosely coupled. As long as there is a 2 or 3 hour window of overlap between everyone’s work days, where developers and managers can communicate and exchange with each other, I don’t care when the actual development work actually happens.
The benefits of having a staggered-work hour day is that you actually can get more out of every day. As one developer is signing off, another one is coming online. I currently live in Europe, so I wake up in the morning with an inbox full of the past day’s progress while I was asleep, and I can get started and have plenty of progress of my own to report by the time EST is waking up. This also gives further incentive to our employees who can feel free to live literally *wherever* they want, as long as they are productive and properly reachable.
Again, this structure probably isn’t for everyone. But its worked extremely well for us.
Disclaimer: we aren’t off-shoring developers, everyone on the team is from the same two countries (US and Canada in our case), but we just happen to be somewhat scattered across the globe.
Thanks for the great post!
Stan
on November 7th, 2009
What software or processes do you use to keep project management, team communication and sync-ing working with a large distributed team? Also, how large is he development team and do they all collaborate on the same project?
PEEBS
on November 7th, 2009
We’ve got roughly 60 people on the various technology teams, divided into implementation, customer support, infrastructure, development, and QA. The development teams are generally 1-4 people per product or product segment, and so most collaboration is in groups of no more than 3-4 other devs. I should probably do a separate post on all the different software and processes we use to manage the entire effort, as it’s a long list. Thanks for the comments!
Ben Friedberg
on November 7th, 2009
Hey John! Caught this off of your facebook post. Very good thoughts. Much like Stan, I would love to see how you put stuff together to make a coherent whole in terms of collab. So often there are tools that tie in 85% of what you need and it’s tough to overcome some of the hurdles… For instance, we’re on a pretty consistent Google docs + Jabber + Trac situation but we get a lot of fragmentation with all of the different source repositories we end up on since we use SVN and GIT almost 50/50. We have a nice jabber server, but it would be great if we had a watchdog system cataloging all of our communication together and flagging things that came up along with way with a searchable framework. I guess you have something of a leg up since you can dictate your technologies but hearing what the end (and workable) result of your effort is would be great!
Looking at your breakdown (implementation, customer support, infrastructure, development, and QA) I could rattle off a bunch of nice collaboration suites, but getting those to all work together could be a real whopper of a task even ignoring the high overhead of buying / implementing / customizing that sort of tech to fit your individual work flow…
Curious Cat Management Improvement Blog » Management Improvement Carnival #81
on November 10th, 2009
[...] Distributed Software Teams by John J. Peebles – “it forced us extremely early on to invest in systems, processes, and a way of working that brought everything we did online. Project management, change control, bug tracking, issue tracking, source control, testing, collaboration, documentation, document management, communication, all of these things needed to be ubiquitous and consistently used by the entire staff.” [...]
magwa
on November 11th, 2009
On tools I’d say: Google docs, asterisk for phone conferencing, a bug tracking system (ghetto like bugzilla is sufficient), email and a company chat server and you’re pretty much done.