The question of remote working has come up a lot at work recently. We're trying to expand our development team by a huge amount over the next few months. One of the problems that we face is that we're currently only based in one location and so we're limited to those people that either live near us or are willing to move. We're of course not the only people that face this problem and a great blog post by David Fullerton over at Stackoverflow talks about how they use remote working to solve the problem. It also mentions the original post by Jeff Atwood back in 2010 when they were first embarking on their remote working journey.
We use remote working from time to time but have yet to venture down the route of having full time remote workers. The main problem, as I see it with remote working, is that it's not easy to get right. From my own personal experience having worked in a number of different teams there's quite a few challenges that you face.
The first challenge is that remote working certainly isn't for everyone. Some people thrive in a remote working environment, others go the other way. If you're hiring people with the idea of them working remotely you need to bear that in mind throughout the interview process as it requires a certain skill set that you don't necessarily need for someone in the office. The main qualities that they need are to be self motivating and proactive. They need to actively find things to do, at a basic level picking up the next ticket on the story that the team is working on or unblocking themselves if they get stuck. It's a lot harder to unblock yourself when it's more difficult than just walking a few desks down and asking someone a question and it's also a lot easier to not go pick up the next ticket from the board. There's also the little things that you miss out on by not being in the office and interacting with with people. You don't have those breaks to go play Call of Duty, table football or just impromptu conversations. Obviously if someone has trouble separating work from home life then working from home is certainly not going to help either.
The second challenge is communication. As I said before remote workers need to be proactive, both in terms of picking up work and also with communicating with the team. Your average developer tends to be an introvert, which shouldn't come as a surprise, and that doesn't always go hand in hand with working from home. I've worked on teams where if a developer was working remotely you wouldn't hear from them at all. From the other side at times when I was working from home I would ask a question and no-one would get back to me for hours. In other teams I've actually found we communicate as much as we do when we're all in the office. The most success I've had with teams working remotely has been with teams who tend to lean towards the more extrovert end of the scale. I have seen it work with more introverted individuals but it's certainly harder as it goes against their natural tendencies. Communication is a key part of any agile team and so you need to make sure that everyone on the team buys into the idea of remote working because it fundamentally changes the way you communicate. If it doesn't then it's simply not going to work. Face to face conversations are great but if someone is working remotely those conversations need to happen via another medium. For example have that meeting via Google hangouts or a chat system with persistence. Fortunately it's a lot easier (and cheaper) to communicate with someone remotely than it ever has been before.
The third challenge is how you manage people. If you work in an agile environment then this is not so much of a problem as you're already being judged on the value that the team is providing to the company. There's obviously the basic stuff of whether you can trust them to do work when they have more freedom and don't come into the office but if you're wondering that then you should probably be asking yourself whether they are the right kind of person for your team anyway. A side effect of working from home is that you're going to be judged on what you produce and not the number of hours your rear is planted on the seat in the office. As mentioned in David's post it's "good for the remote person as well: they can’t fool themselves into thinking that just because they’re in an office, surfing Reddit for an hour is work. In a perfect world we’d both already have this perspective, but it’s amazing how easy it is to delude yourself into thinking that “going to the office” = work."
The fourth challenge that we've had to deal with very recently in my team is time differences. We work with a guy who lives out in San Francisco which obviously means that there is an 8 hour time difference between our working days. Simple things like when to do the stand up you suddenly aren't as simple anymore. I read an interesting post (sorry I couldn't find it) of a developer working for a US company in France who switched his working day to US hours which meant he had mornings and lunch free and then worked in the evening which he personally loved although it's not for everyone. We tried working later hours, to increase the overlap between our working days, which works for some people but in the end reverted to normal hours. In the end we decided it was easiest for our SF friend to wake up early a few times a week which worked well for him as it meant he could get the stand up out of the way and then deal with getting kids ready for school etc.
The final challenge I'll talk about in this post is infrastructure. Suddenly the fact that you only have access to the test system when you're in the office which wasn't a problem before now is. Simple things such as getting someone to review your code before you check it in becomes harder depending on your historical infrastructure choices. With Git (and github) it's much easier to allow distributed check ins and peer reviews, unfortunately with SVN it's not as easy. Your kanban board that is on the whiteboard by your team isn't much use when one of your team members can't update it from their remote location. All these things are solvable but a allowing remote working will probably involve investing time and potentially money to allow people to work effectively and adapt all those systems that currently work fine with a co-located team.
Please don't take from this that remote working is hard and so you shouldn't do it. There are a number of advantages that come with remote working: you get access to more great developers because you're not limiting your search geographically and you also don't lose great developers whose circumstances change. You just need to bear in mind that remote working will probably require an investment of time and potentially money and the you need the right people and buy in from the team to make it successful. There are plenty of examples of companies that have made it work though. Check out StackOverflow and 37Signals to name just two.
Personally I love working remotely every now and then whether that's from home, a co-working space or a coffee shop but I think that I would miss the interactions that you just don't get when you're working remotely if I were to do it full time. I'd also probably end up spending a fortune on coffee as well!