Tuesday, 21 April 2009

Coding Happy Place

Quite an interesting article on where a developer/programmer is most productive. (And the relevant slashdot discussion)

It is something I think is very relevant for the productivity and happiness of a development team, but is very difficult for companies and managers to control and allow. People need to communicate, share ideas, ask questions, freely and easily, but at the same time be isolated and respected to actually concentrate on their work.

Companies generally prefer and mostly demand people to be at their office desk during the same work hours as everyone else. And that they do their work effectively there, while being able to monitor and contact them at any time in person. Developers (or perhaps rather me) prefer the opposite. We would like to be left alone, unmonitored, trusted to deliver quality work by concentrating on the tasks in hand and at different times.

One issue is of course that everyone is different, some people are most effective and happy in noisy, open environments with frequent dynamic exchanges with numerous people, other are useless in such places and brilliant when left on their own. Most people are somewhere in between and at different times.

My experience, with different hours and locations

I have worked in a team once where one member worked from 6:00 till 14:00, while another worked from 14:00 till 22:00 and this was in the same office not different time zones. That only worked as they did not have much overlapping work and thus no direct interaction was needed very often. If that was needed, clear lines and rules of communication must be agreed and accept calls and work outside your normal hours.

My benefits

In that company I worked from about 10:00 til 18:00, of which the first few hours was from home, then the afternoon in the office (just round the corner). That worked very well for me. I could concentrate and produce code in the morning, be available in the office for meetings and discussions (gossip), and when people was leaving the office for the day I could concentrate on work again for a few hours. It was very gratefying to always be able to deliver something every day as I had those few hours in the morning, before getting caught up in the possible interuptions of the office later on.

Being able to work from home is difficult for companies as they must trust you to deliver and to be an asset for others while not being in the office. I think my own contribution was good. I could concentrate and deliver at home, while being always online with IMs, and usually had 2-3 windows open all the time for continous discussions with other developers, while not letting it interupt whatever I was concentrating on, which a verbal discussion in the office would have interupted.


However other colleagues it may not have worked so well for. One delivered excellent code, however was very hard to get hold of, so it delayed mine and other people's work all the time. (So much that the company implemented in office core hours between 12:00-17:00, probably mostly so managers could get status updates.). However that could have been avoided if good practices and respect for each others meant that people were nearly always available and quick to respond to email, IMs, video chat and telephone calls. Another colleague felt managers did not appreciate or trust that he concentrated on his work, so he made a point of working in the office and placed his desk right in front a manager with his screen in full view, so they could see he was working at all times! :)

Scrum, agile enough?

So if you have or need this flexibility how do you then integrate Scrum and agile process in to this free multi-location, any-time setup? Scrum implies that teams physically sit very close together, share and discuss verbally, have in person stand up meetings, use non electronic task boards.

Simple answer is you don't.

But actually you can. But probably not at the start. Once people are familiar with the process and each other and trust has established, you can start to use electronic tools such as JIRA-GreenHopper for the task board, develop processes for IM/webcam communications, agree regular but flexible times when everyone is in the office, etc.

Even if not working from home you can achieve Coding Happy Place with headphones, offices with doors, just some separation from other people and developers without the humiliation of cubicles (basically just being really left alone) etc. One of Scrum's ideas is to shield developers from interuptions. And that benefits concentration.

My Coding Happy Place

So where I am most productive, and also happy?

As a consultant on contracts I now have to show facetime at clients, and as a 3rd party, are perhaps not trusted to work from home (ie bill unseen). So I basically can never work from home, and I think my productivity suffers. Being professional I still produce well and accept these limitations, but at a cost.

I can achieve coding efficency at work, usually after 16:00 when the offices is emptying and I can relax and concentrate. (And usually get engrossed/stuck on some task, and don't get home til 21:00). Also when I have had a nice desk in corner (facing outwards), quite inaccessible for others and not overlooked (not feeling paranoid about searching newsgroups for answers), I have managed a Coding Happy Place and churned out lots of work, as Im comfortable and people do not interupt me directly or indirectly so easily either. (With the right tools: Tiny screens, forced to use Windows, restrictive network, etc over time costs much more in lost productive hours than initially supplying better hardware).

I did like the arrangement I had at that previous job (however as mentioned it did not work for everyone). So somewhere you are trusted to work from home when required, and it is not an issue would be great for me and really for my productivity.

Recently when I was left to myself at the cabin, I did more work on a pet project in two days than I had for 6 months. Simple because I was left alone. So that is my Coding Happy Place, being left alone. Whether it is at home (mornings only, not evenings when other people is there) or in a corner desk at the office. I would still spend most time in the office, for project discussion and velocity but also for the social banter and gossip!

Can companies compromise?

I hope they can, but big companies can afford to and unfortunetly often let go of creative developers in favour for A4 ones, but also big companies can afford to adapt to more flexible arrangements as well. Can small to medium as well? I think so.

Basically I think with trust comes respect for others. So they accomodate your flexibile location and hours, while you must respect other's needs as well. With good lines of communication this can so easily be overcome. Not just phones, but email, IM, webcam, good use of task managers etc.

They should not think they are pandering to developers, nor should they accept missuse. But see benefits with flexibility and privacy comes concentration and very good productivity. Catering for Coding Happy Place is good for everyone concerned.