This is a topic very interesting to me, because over the years I've written a lot of call center and customer service software used by distributed teams. I also worked as a developer remotely for Linden Lab for long time, which had a highly distributed workforce, using Second Life and other things as a primary interaction platform. There are things I've observed when writing software used by distributed teams that make a huge measurable difference in productivity.<p>When working remote, it's easier to feel like it doesn't really matter if you put your nose to the grindstone, since nobody can tell. So I found it made a dramatic difference in productivity when I implemented a simple sidebar that showed what ticket each member was working on, and how long they'd been working on it. It was intended to be sort of like an office: in an office, when you see your team members working away, it's a little more emotionally difficult to take time off to surf your favorite website or something.<p>For customer service, video game mechanics help a lot: completing each ticket gets you closer to your goal. Keeping quality metrics up gives you a visible indication that you're a good person. It's not easy to implement and sell these kinds of features, but it's also not easy to keep people motivated (whether they're remote or not).<p>Scrum and frequent voice communication help a lot as well. There are downsides to distributed teams, but there are big upsides, as well. Distributed teams, while not perfect, have many benefits. The key to making it work, as with so many things, is to figure out ways to make everyone care and want to do their best. In absence of that vital culture of giving a shit, even a team that's co-located together is not going to do well. In my experience, that culture of excellence is even more important than being in the same place.