Wednesday, 22 April 2009

I can recommend the HP W2448hc24" screen

Got the HP w2448hc 24" lcd screen a few months ago. And I am very happy with it. It has a built in webcam, speakers, usb ports and microphone.

I was warned by reviews of the glossy screen. But I have not noticed it at all! The screen is very clear and colourful, with no reflection. Then again I am not using it by a window or in a bright office, just in my home office.

The webcam works well in Skype. Clear and bright. The microphone is a bit quiet, but useable. Since the webcam is hidden in screen frame it does not stick out so lookwise it is really good.

The speakers are fine, but I think I'll eventually re-plugin the old speakers, as the screen speakers is not that loud and no bass. And also when the screen goes into power save the speakers go off as well, which is not handy if listening to radio or expecting Skype calls. But 3 months have passed and still using the screen speakers so they must be fine.

The screen is supplied with VGA and HDMI cables, but no DVI cable although it does have a DVI port. I am using the VGA for now, as my card does not have HDMI. But if I come across a spare DVI at work I might use it, as they are too expensive to buy outright.

Even with minor faults I can highly recommend it. Basically as a screen it is very good. And it looks good too, which was important as it is in a desk corner in our lounge.

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.

Wednesday, 1 April 2009

What I would like to do, if others are up for it...

(Not to be confused in a context of romantical entaglement, although...)

Been meaning to for awhile to write a little social networking application, UpTo (in want for a better name so far). But have had no spare time so far, but hope to at some point in the future.

The main idea is to arrange things to do. You do this by listing things you might want to do, perhaps by restricting time and date. This are general things over days, weeks, or always. E.g. I am always up for a beer on fridays, I don't mind playing football any day of the week after work. This is week I am keen for a concert, etc.

Then one of your friends thinks: "I think I want to play football on Sunday, who is up for it?". A quick check on lists whom might be want to play. Integrate this with email, IM or SMS and hey pronto: you have a game of footy! Similar things can be done with nights out, trips etc.

Interface must be intuitive so that people easily can add what they would like to do, and also so that they do not need to often change this. Complicated or repetative tasks will kill any usage.

Also as with any social networking site, spreading/extending the friends circle is a key feature. No point telling only yourself what you would like to do.

The normal friends, friends of friends, and everyone networks will probably be used. But also the ability to choose a select subset of friends for certain events would be nice. E.g. Only Non work colleagues may know I am up for a beer during the workweek, or non of your female friends should know you really want to go to a Star Trek convention, or something similar.

Including an event scheduler would be handy, with the ability to organise and invite people to specific things you will be up to, E.g. that Oasis concert next week.

Time will tell if I get round to this project. Or, as usual find someone else has done the exact thing, but better. :)

License a plenty , here are my usuals

I try and make it clear that my work is usually under some form of license. This is to clarify for other people who might wonder what license they may use my work with, and to evangielise license to the unaware. And to make sure people don't abuse my work, claim it as their own etc.

As an open source believer, my licenses are mostly OS. This is also so most people can benefit from my work. Over time the prefered license(s) have changed, but right now my choice is clearer:

For 90% my development work, as in source code, binary etc, the license of choice is AGPL, as in Affero Gnu Public License version 3. Previously similar work was often licensed under plain GPL.

As AGPL is very open souce and quite restrictive for business use, I do offer alternative licenses as default for some utility work, or as an option if people contact me for AGPL work. The alternative is then either LGPL or even Apache License. Some previous work has been under MIT license.

My none code work, as in flickr photos, blogs etc are often under some type of Creative Commons license. Always with attribution(by), most of the time with share-alike(sa) and sometimes non-commercial(nc). But rarely with no-derivatives(nd), as my view is to share and modify is good.

In addition I often append an optional ethical license. This tend to reflect my expectations on how people recognise and reward my work in regards to how much it is important to the people using it and how much resources they have. I usually use my own respect license.

Ps. This is work I do as a private person, often via Work I do in my real job, is (unfortunetly) mostly closed proprietary source code.