Sunday, 11 January 2009

Working from home

As I approach the fifth anniversary of working from home, I'm starting to think about the pros and cons of working remotely. Joel Spolsky has said many times on his blog and his podcast that he thinks developers should be in the office, and not work from home. Jeff Atwood his co-conspirator on the Stack Overflow podcast meanwhile is currently working from home on, with another two developers, who are also working from home (and I don't mean his home!). He obviously thinks it's a good idea. So do I.

I get my own room, with a closing door, something I would not have at the office. I start working in the morning completely fresh, as opposed to being worn out from the hour commute. On top of all that, I'm happier than ever, because I get to see my daughter growing up. A happy developer is a contented developer is a productive developer.

Ok, so what's the catch? Well, I'm sure not everyone is cut out for working from home. It can get lonely I guess, but I have my own social life, and it never did revolve around the geeks I worked with. (no offence, I'm a geek too, just prefer the company of non-geeks to try and keep sane!) I have a fast broadband connection, with vpn access into the network at work. So I'm just in an office with a long network cable. I checkout, I commit, I do all the usual things I would do if I was in the office. Some cite communication, or lack of it as a problem. I guess it can be, but I can discuss things over the phone (for some reason, company policy prohibits Skype), I can "look over someone's shoulder" using VNC or Webex. I regularly review code with both developers and testers. It works well.

Not to be 100% biased, I would say there are two major problems, and unless you can overcome them, they might make working from home difficult. The first is motivation. Or rather lack of it. I've been doing this for so long now, that I get up in the morning, and just 'go to work'. That happens to be down the hall from the bedroom, but it's where I work. There are times when you just can't concentrate, and there are other times when you can't stop concentrating. It's the same when you're in an office, it's just that in the office, your boss is around, so you pretend to work. At home, I know that if I'm not concentrating now, I'll be productive later. So I'll do something else. The work get's done. That's the main thing. The second problem is paradoxically, the opposite of the first one. Knowing when to stop! Separating work from home life. I confess that I have more problems with this one than the first. I have no real solution for this one, except perhaps a nagging wife!


Anonymous said...

Wives are good for keeping us geeks in line. I don't know what I would do without mine.

I have found that the greatest benefit of being in the office is the greatest detriment as well: face time. Nothing is as high of bandwidth as actual face time communication. The higher the bandwidth, the more you can communicate effectively, which also means the more you can communicate instead of accomplishing your task at hand.

Sure, face time makes it easy to chat about non-work related stuff, but even chatting about work related stuff can be a distraction.

Anonymous said...

I have previously worked from home for a couple of years, and currently I'm the manager of a number of programmers.

I totally agree that it is possible to work from home, if the physical conditions are OK, the family approves it and respects it, and you get enough social life to keep that part of your needs happy.

However, the pros and cons are not fully described. I'd say that there are definitely pros: Less waste of time on transport and more flexibility can produce better code, better inventions.

The cons, however, include: Less "bandwidth" between the specs and you, and less personal development.

As a remote worker, it is more difficult to deliver specs to you than to someone in the office, simply because two people can exchange information more quickly when they meet in person. For this reason, many remote workers attend the office 0-2 days per week in average, to do meetings.

Personal development depends a lot on the company. If I would go to a customer to do something technical, I would bring one of the programmers from the office, and not the remote programmer, simply because I can discuss better with the office programmer afterwards. Learning tricks from other programmers also requires close interaction. Two programmers that sit at the same side of the same desk usually improve more quickly than two programmers that cannot see each other's screen.

There has been several instances of scientific research on the exchange of information between coworkers, and geographic distance is the key parameter. That's also why more and more companies split their teams up geographically (like, in separate office rooms), and then co-locate people from various teams. This greatly increases the cross-team information exchange, including exchange of experience etc.

I have met several people who work from home, after stopping to work from home myself, and I easily recognize a different behavior with them that office workers don't have. I cannot describe it fully, but it's not a positive aspect - however, they are usually very skilled at their own part of the project.

I guess that my advice would be: Working from home is good, for a limited time. Don't get stuck at home for too long, be sure to work with others in a team, physically in the same room, once in a while.

Anonymous said...

So true, about all you said. There are many pros to working at home and as I can see it, only one big con and that is as you already said: knowing when to stop. I have big problems with this, because I love what I do. I suppose it is that way with most commited developers. Having an office at home can lead to problems.

But my wife helps here ;) Also my son ca be very persuasive :)

Anonymous said...

Having worked from home this passed 8 years I can completely agree with your article. It works for me too (including the nagging wife) except when there are other people in the house (kids off school, wife not at work) it can get noisy.

But by far the worst problem is other people's attitude. Friends, acquaintances and, dare I say it, even spouses, treat you as "available" when you are in fact "at work".

They pop their heads into your office (between 8am and 5pm) and invariably open with "Can you just..?", and then get seriously offended when your reply starts with "No".

Anonymous said...

I just counted it up and this is the start of my 25th year working at home as a single Delphi (pascal originally) developer. What I most miss (and I do still remember working with 6 others in an office) is being able to bounce ideas off others on how to approach a problem. Also the "what's the name of that function that does xyz" interaction which is usually faster than looking it up in help. Also you can't go "home" when working at home so I still put in a lot of hours. Whether I have produced more this way than in an office I don't know but do wonder.

Anonymous said...

Two things about working from home:

1. Not being face to face with specs people is a plus! Those people then have to actually *think* about the specs and write them in an email (or doc or whatever). So, no more *unofficial* spec requests.

2. No more idiot *clock puncher managers* who want to waste your time helping them with their work.

Anonymous said...

A good programming business uses the programmer as a sparring partner, making sure that the specs are easy to implement and that the customer asks for things that can be sold expensively but are cheap to do.

The people that have customer contact are often not able to speak the language of a programmer easily, and therefore it makes a lot of sense to make these people communicate A LOT in informal and verbal ways.

Of course, this depends on the nature of the product - there is a difference between creating a Linux kernel mode driver and a system for cosmetics sales people.