Being a remote developer has its share of obvious benefits. There is no commute to work, none of the office distractions, and the comforts of home are just a couple of steps away. However, there are a few downsides to deal with. After five months of working remotely I wanted to take some time and go over a few of the more difficult aspects as well as how both me and the company I work for (Shutterstock) have been addressing them.
First, though, I can't understate just how awesome the perks can be. Working from home has saved me from a daily hour commute (which really added up the miles on my poor Saturn Ion). I'm a lot more productive working from an area that I have complete control over (insert quote from Rands about a nerd cave here). My lunch breaks are spent playing with my year-old son and catching up with my wife, sometimes even going for a walk to the local playground. Yes, the perks are awesome.
All of my connections with my co-workers happen over the internet. We have meetings, discuss projects, and collaborate through the tubes. So when the internet gets flaky a giant curtain descends between us and things get difficult. Luckily I have not had to experience too many full outages though we've had our share of latency issues. Which makes meetings very difficult, when you can only make out one of every three words.
One of the more ingenious things that Shutterstock does with remote developers is to have an independent, constant video stream running for each one. Most of us use iPads and Facetime for this. This helps - if we're having issues during a meeting we can always just default to Facetime. True, these things are still running off of Wi-Fi, but it helps with local issues.
Communication is one of the biggest hurdles. There is so much of conversation that is nonverbal, especially during spirited debates about the preferred approach to a given project. When you're locked away behind a screen the best you can do is wait for someone to acknowledge you or, if necessary, simply rudely interrupt the current speaker. Video conferences are a step up from phone conversations, yet they still limit how much one can contribute to a topic.
Another issue is with just passing on information, not specific to conversation. There's a lot of ways a team can pass around information: chat, email, meetings, task management interfaces, wikis, etc. Even with all these methods it is still far too easy in an office setting to just pull someone aside and explain it to them directly, leaving no record of the information in a retrievable format for others. This issue does not come up often, as we all try our best to overcommunicate (pass information along multiple channels until we receive confirmation of receipt from everyone involved), but it does crop up occassionally.
Being a programmer does not mean I spend eight or more hours a day writing code. Shutterstock enpowers its developers in a lot of ways, letting us make decisions on workload, project management, and business direction - which means we attend meetings. Not an unbearable number of meetings, just enough to make sure our voices have an impact. There's something to be said about walking from a desk to a meeting room or walled-off office that sets the context for the coming discussion, about leaving your workspace and computer behind and entering an environment that is meant for decisions. The switch of context.
Remote developers do not get that switch. We sit/stand in front of a monitor at the same desk all day long. At any moment anyone can invite us to a video meeting and we are hurled into a different mindset without any physical change. It's jarring, disruptive, and may limit our effectiveness during the meeting. And there are ways around to mitigate the shift. I try to maximize the video interface, throwing other windows to the side to decrease distraction. Other developers use a separate office or area of their office for meetings. Forcing a context shift is still difficult - you just need to find something that works for you.
This issue affects most of today's working class, the inability to leave work at work and enjoy time with yourself/family/friends. Technical people are usually targeted, with the expectation that all systems have constant uptime whether or not people are in the office, and remote workers don't have the luxury of being miles from the office during off-hours.
Work-life balance is an area that plenty of people discuss so I'll only hit on it briefly. Some remote developers only use their office for work, or separate out work/home computing with a sharp delineation, or completely power down their technical side once their day job is complete. I haven't felt the need to do this yet, not feeling the pressure to blur my off hours with work-related projects. The biggest thing that triggers what I'm working on is a particular arrangement of windows on the monitor. When they're configured like X, its time to work on Y. That's all.
Like I mentioned at the beginning I'm only five months into working as a remote developer. The overwhelming majority of the experience has been amazing, being able to hang out with my family more and having a more relaxed work environment. There are a few sticking points that I'm working with, though, still trying to find my groove with the team and as a remote, sticking points that have workable solutions. I have little doubt that once I have a full year of remote working under my belt I'll be able to look back at these points with a dismissive eye.