When I decided to move to Costa Rica, I knew there would be some interesting changes. At the time I was the only developer working for my employer, but we had tried outsourcing some work. That didn’t work out very well…
Essentially, what I learned from that and subsequently with employees working from home can be summed up easily:
- Not everybody can do it
- Communication is critical
- You need to manage things carefully
Not everybody can work remotely
The first important point here is that very few people can do it alone – The minimum team size is 2. You need somebody else that you can bounce ideas of and that can keep you accountable, even if they happen to be on the other side of the world.
This does not work with people new to programming. Unless they are good developers and love coding, you can forget about them working remotely. It is impossible to effectively mentor somebody remotely.
One last point here is that you need self-motivated people that can operate with full autonomy. While you will have a project manager or team lead or whatever other name you want to give them, your remote team can’t ask him for direction all the time.
Communication is critical
Unless you have good communication between all your remote team members, your project is doomed to failure.
I think the following tools are critical:
- Real time chat
- Voice / Video chat
- Screen sharing tool
- Mailing list
- Collaborative writing tool
Real time chat
Real time chat is what replaces the ability to walk over to a co-workers desk and ask them a question. You need something that everybody will use, but that just works. Preferably with persistent storage. Personally, I use HipChat.
With the need for real time chat, you can also see that your employees should ideally be in the same timezone. The more of their working day actually overlap, the better.
Voice / Video chat
Sometimes text chat is just not enough. Instead of typing back and forth for an hour without agreeing on something, a 5 minute voice chat might just clear it up. I use Skype (Especially now that it has group video calling).
Screen sharing tool
This is an indispensable tool. Instead of trying to explain what problem you are having, you can just show your coworker. I use Microsoft Sharedview, or GotoMeeting. At the very least you need something that also allows you to remotely control the screen, and the ability to transfer files is also handy.
Mailing lists is nearly as old as the internet, but there is still nothing that beats it for frictionless persistent updates to the whole team. Simply send an email and it goes out to everybody and gets stored online for easy access. The idea with mailing lists is that you send any status updates, any change in the spec, etc to the list. Essentially, anything that is important in making a decision or that will affect the project, but doesn’t need to be acted on in the next 5 minutes. I use Google Groups.
Collaborative writing tool
Whatever you do, you’ll always have some documentation you need to keep updated. You have only on practical option here. Use some kind of collaborative writing tool. If you try any kind of manual scheme to try and manage different document versions, you’ll pull your hair out pretty quickly. I use Google docs, as it is simple, free and easy to manage. A free benefit is that the docs is available online as well.
Managing remote teams
There are a few critical issues when managing remote teams:
- Goals and status
- Micro management
On top of the day to day communication mentioned already, you need to make sure that you stay on top of the project. While I don’t like meetings, there are two meetings I think any remote team should have. A daily meeting and a weekly status report.
The daily meeting should be a very quick standup meeting. All you want to find out is what was done yesterday, what is planned for today and what problems were encountered. If any problem comes up that needs to be discussed, just make a note of it, and discuss it only with the relevant people. For the weekly status meeting, you want exactly the same, but obviously for the whole week.
Something else to do, is to take minutes of every single meeting you have. This doesn’t need to be long. Just a few bullet points. Who was there, what was discussed, what decisions were made, and what’s the action steps that came out of this. Any meetings should be mailed to your mailing list.
Goals and status
For remote teams to succeed, you need to have very clear goals and you need to be able to see the status of the project at a glance whenever you want. If you don’t know where you’re heading, you can’t make decisions about the state of the project, and then you end up looking back at the last month and realizing that you made no progress. Personally, I use Fogbugz to manage open cases and track bugs etc. If we find anything, we just stick it in there to be discussed with the next development meeting.
In a nutshell, there is no space for micro-management in a remote team. If somebody can’t work without being micro-managed, they’ll never succeed on a remote team. To avoid this, don’t try to evaluate goals on a daily basis, but rather look at whether people have managed to keep up with the goals after the weekly status reports.
If this sounds like a lot of work, that’s because it is. Managing remote teams are hard, but it is well worth the effort if you can pull it off. Being able to work with a remote team gives you access to a bigger pool of potential employees, and also gives you the ability to hire people with different backgrounds or cultures, which can help to bring in fresh ideas.