It’s been six months since I switched jobs and began to work from home most of the time. It’s downright amazing, the best thing I’ve ever done. Seeing my kids grow up and being able to support my seriously overworked wife (our boys are 2 and 1, that’s quite the challenge) is great for all of us.
As a programmer, I’m in a very good position to work remotely: We tend to be quite good at communicating online (especially those with an open source background), we can improve the tools we use or build our own, and we’re in high demand right now – many of us can just leave for greener pastures when their company doesn’t let them work from home. Even if you think your company is awesome and it’s reasonable of them to ask you to be in the office every day, it’s probably not. What this really says is that your boss thinks you won’t work properly when not being watched. Do you really want to work for someone like that? I sure don’t. (Sometimes it’s really difficult: my last job for example involved programming for huge, expensive parcel machines. But that seems like a rather unusual case.)
How we do it
My company employs some people in Europe and some in the US, and most of us don’t work fixed times, so synchronous communication is not always possible. We have an IRC channel where we usually announce when we’re there and when we’re gone, and have quick technical discussions, but it’s not really enough. So a lot of our communication was happening via email, which can get messy. We have recently set up Discourse for internal asynchronous communication, and it’s working much, much better.
We use Trello to communicate what we’re working on. It’s voluntary, but most people do it. It is quite important to communicate what you’re working on when remoting. But the single most important thing we do to make remoting work is mandatory code reviews. We use Google Code Review (it’s basically Rietveld on a Google Apps account), but there are other promising options like Gerrit or GitHub pull requests. If you’re not used to doing code reviews, I really think you should try it. I’ve never seen any other process increase code quality and communication like reviews do. And it’s not really much overhead, even a review containing one or two days of work is usually done in 10 to 30 minutes. And time spent understanding the code base is not at all wasted time in my book.
Since we’re a distributed team, we need all that to work. You can get away without tools for asynchronous communication or code reviews in an office, but I’m convinced setting these things up is quite beneficial even there. What if your developers are sitting in more than one room? In my experience, there’s a lot of walking and phoning and meetings going on, that’s highly distracting. Stuffing lots of people into a single big room is a common solution, but that’s a change from bad to worse: I found it insanely distracting to work in a room with more than two other people in it.
Not all of my new colleagues work remotely, but almost all of the developers, incuding the lead developer and CTO. The remaining people usually work in the office, and everyone living close to the office is encouraged to join the weekly status meeting there. I’m almost always going, it’s really good to get together and see some people in person or do some brainstorming every now and then.
All the remotees have a call the day after the status meeting in the office, to have someone who’s been there talk a bit about what’s going on in the rest of the company, and for everyone to share their status.
How I do it
Before I started my current job, I had to leave home almost every day for about 20 years straight. So I was a bit nervous that this big change in my life would confuse me, or that I wouldn’t be motivated enough to do a good job, or that I just wouldn’t like it. Turns out none of that happened, it’s been the happiest time in my life so far. Getting to see my wife and kids whenever I want to, not missing any milestones and doing my share of parenting is brilliant beyond words. If you’re a parent, please consider trying this if you have the chance.
Even after six months, I haven’t fully gotten used to this vast new freedom yet. I just need to do about 40 hours of work per week, it doesn’t matter when or where. Yet I still usually work about 4 hours straight, have a lunch break and then work another 4 hours, just as I used to do it in an office. But when the weather is really amazing, like when it first snowed last year, I do leave for a while. Or when one of us needs to go see the doctor, that’s much less stressful now then it used to be.
I’m not really working in a fixed place anymore, I’m frequently moving from the study to the living room, from the table to the sofa, or onto the balcony when the weather is nice. I also sometimes work at a cafe close to the office when I arrive early for the status meeting (didn’t feel the need to ask for a key so far). I think if I didn’t have a family, I’d be working in a cafe on a daily basis. Even if there’s lots of people in it, it’s quite different from a crowded office. Don’t really know why, maybe because I can be sure that nothing that’s being said is relevant to me.
I also noticed changes in the way I consume information. I hardly read Twitter as thoroughly as I used to anymore, and I’m seriously behind on my RSS feeds. I’m not on a crowded train with a crappy internet connection anymore, I’m here at home where all the things I like are. Why read Twitter for 10 minutes when I can use the time to play with the boys, or play video games, or work on a private project? The same goes for procrastination – why surf aimlessly around when I need a break from work? There’s so many better things I can do.
All in all, I’m really enjoying the remoting, I’m quite determined that I won’t work in an office again, if I can help it. And given how the number of remote offers for developers seems to be rising steadily, I don’t see why.