My current toolset includes the following in order of importance:
Having a VPN into the corporate network is an obvious must.
2. Microsoft Remote Desktop
We are a Windows shop so Remote Desktop is a given. Some people like to fool around with VNC, but honestly that is only useful if you are dealing with Linux. In Windows, Remote Desktop is really the only way to go for the simple reason of speed. All of the VNC variants out there suffer from the same fundamental weakness. They are all essentially "screen scrapers" that sample pixels from the screen buffer and transmit compressed images. Remote Desktop is hooked into the Windows interface at a lower level and instead transmits GDI type calls like FillRect and DrawText which are orders of magnitude smaller and more efficient than transmission of image data. VNC can never equal the speed and responsiveness of Remote Desktop. I really don't even notice the difference between remotely controlling computers from the office or from home. I can remotely manage our entire server room with virtually zero loss of efficiency.
3. Telepresence Robot
My robot is the most recent addition and has had an enormous impact on the quality of my interactions at work. I used to spend a lot of time drafting emails or on the phone with my coworkers, but both of those methods tend to infuse conversations with a bit of distance and formality. They are nothing like the casual conversations and informal pow-wows that occur in person where so much crucial information is created and shared. In my company you will often stumble upon small hallway meetings that evolve into design discussions where important decisions are made. Communication by email, IM, phone, video-conferencing all miss out on these impromptu events. You only get the summary of the discussion afterwards once everything has already been decided.
My robot changed all that. Now I can cruise around just as I would at the office and engage people casually. I can feel the daily "pulse" of the office. It really makes me feel much more involved. Even if I just have a quick question that would take me 30 seconds to send via email, I will often take the extra 5 minutes to do it with the robot because the quality of communication is so much better. It also has a psychological effect on coworkers (and bosses) because it gives the impression that you are more available. Even if you spend 10 minutes everyday just buzzing around to say hi, doing nothing but wasting time - the perception is that you are actually doing more work because people notice your presence.
Stay tuned, because I will soon begin a series of posts that will give detailed instructions on how to build this telepresence robot.
Of course for detailed or formal communications, there is no substitute for email.
5. Custom "Screen Sharing" Software
The one major weakness of Remote Desktop is that it does not allow the sharing of a desktop between users so you can't do joint development and trouble shooting, code reviews, etc. which is crucial for a software team. Of course Remote Assistance is Microsoft's answer to this and it works really well once you have established a session. It uses the same API as Remote Desktop so responsiveness and fidelity are fantastic. Unfortunately the process of establishing a session is so cumbersome that it is burdensome to use. So instead, I wrote my own desktop sharing application that uses the Remote Assistance API but bypasses or streamlines the process of creating a session. The goal is to be able to come into someone's office (via robot) and then take a look over their shoulder at their computer to discuss what they are working on - just as you would in person. My app comes close to achieving this. At some point I will be sharing the code for that software on this blog.
6. Skype Voice and Video Conferencing
I still rely on Skype for some communication - particularly if I am going to be engaged in long debugging or code review sessions. In those situations, the robot can be a bit of a distraction and simple hands-free voice is more appropriate.
With these 6 tools, I can do just about everything that I would normally do in person. The only thing that is really missing is white-boarding. So far I have not found an adequate substitute for standing in front of a whiteboard with a few people and sketching out designs and exploring concepts -- but I'm still working on it.