Tuesday, May 29, 2012

Dealing with Wrist Pain

Towards the end of 2010 my hands and arms started aching whenever I worked on the computer for more than a few minutes at a time. After a particularly full on November featuring some work deadlines and Nanowrimo it was bad enough that I was dreading typing. My work reflected this and my output of code and writing decreased dramatically.

Even when I felt like the pain wasn't that bad it was easy to see that I wasn't working as consistently or for as long periods of time as I had been previously. This is a particularly bad position to be in for programming considering how much time I actually need to work uninterrupted to have a chance of getting into a state of flow.

So I set out to try and fix the problem in the usual fashion of trying things until something worked and being entirely too stubborn to visit a professional.

First Change: Advantage Kinesis Keyboard

My first big change was moving to the kinesis keyboard. I'd heard good things about it and figured the change would help. Of course it was an effort to learn how to use a different keyboard layout. 

In the end it took a couple of months to get back to my usual typing speed with it, the first week was particularly hellish. Learning a new keyboard had some side affects though, in particular I seemed to have slightly higher accuracy when I type on it than other keyboards, I suspect this is because of the key layout enforcing some more disciplined typing on me.

I find the kinesis particularly enjoyable to type on, due to the comfortable form and high quality keys. The presence of macros turned out be unexpectedly useful, I didn't expect to like them as much as I do but having key combinations for common bits of code is excellent.

The kinesis did improve my hands a bit, but in the end it turned out to be a long way from a cure. After a few months I moved onto the next project, one that I regret not having started off at the same time as moving to Kinesis.

Second Change: Dvorak

The next change I tried was moving to Dvorak.  I wish I'd done this at the same time I moved to the kinesis I expect it wouldn't have extended learning time too much. As it was I spent a while thinking the new keyboard and better posture was enough until an intense period of work left me in significant pain again.

Learning Dvorak took significantly longer than moving to the kinesis in terms of regaining my typing speed, although I found I was able to touch type again in the sense that I had a working mental map of which key was which quite early on. Being able to hold conversations online again(~40wpm) took a week or so, but actually getting back to being a decently fast typist was closer to 4 months.

I've also found that the move to Dvorak means I can no longer use qwerty, while I can still type fine on non kinesis keyboards.

Like the move to the Kinesis, changing to Dvorak improved matters a bit but wasn't enough. Particularly when it came to wanting to write longer pieces. 

Third Change: Voice Recognition

Another batch of work left me in pain and with Nanowrimo coming up again I needed something that would support writing large amounts over short periods of time. 

I'd tried Dragon: Naturally Speaking a few years ago and it had fallen over on my accent. I decided to give it another shot though and it turned out to have come a long way in the last couple of editions. 

It required a silent room and a decent microphone to work decently. But once I'd spent a couple of hours teaching it my speech it was able to recognize the vast majority of what I was saying and at speeds far beyond anything I've ever been capable of typing. It also had an interesting side-effect in that the "writing" I produced with it had a much more conversational tone than most of my other writing does. 

The biggest issues were that it didn't have certain words in its dictionary, finding the requisite quietness and dealing with the higher amount of editing required to catch small errors. Mostly these were manageable but it meant I had limited periods when I could get the ongoing privacy necessary. There were particularly irritating moments when someone started saying something to me and my laptop froze up trying to process all the input that was suddenly coming in.

Voice recognition has come a long way and I can recommend it for longer form writing; however, I hadn't managed to use it with any great success for coding or technical work, so another solution was needed.

Fourth Change: Rob

Rob ended up being the best answer to actually giving me the ability to not type at all for three months or so, actually letting some of the damage I've done to my hands heal. He was an experienced developer who wanted to learn Rails. This meant I could pay him a modest amount in exchange for me teaching him about Rails while he did all my typing. 

In essence, it was a training style pair programming arrangement with me always navigating. It turned out to be an excellent fit for both of us. Rob learned a lot about Rails in a short period of time and we had most of the focus and problem solving benefits that come from pair programming as well. 

After three months of us traipsing around cafes and coding together Rob had learned enough that I hired him as a full time developer and my hands had healed enough to be able to type reasonably comfortably again. Possibly the best win-win working arrangement I've managed to create. 

If my hands ever start to bother me too badly again then I'll go straight to finding a new Rob.

Wednesday, May 16, 2012

The Benefits of a Unique Company Culture

There is a steady supply of people writing blog posts about how their unique working environment means they're hiring "A players" because of some combination of the following:

  • They only have a four day work week
  • They have a high intensity startup environment with exciting work
  • Everyone has stock
  • Everyone has a profit share
  • 20% Time
  • An onsite chef
  • Everyone works from home
  • The company loves open source and employees spend their spare time writing more of it
  • Fussball Table
  • Table Tennis Table
  • The office is made anime figurines glued together to form a protective structure
  • A masseuse
  • Some kind of famous person
  • Anything else someone has thought might be cool
It's great that these kind of benefits are being offered to employees. There's no doubt that these kind of benefits help employees feel that they're being valued. In many cases benefits like this will have a better payoff in motivation and happiness than a similar cash increase would. 

The problem with how these benefits are presented is that some companies have convinced themselves that their particular combination of benefits is going to lead to significantly happier and better employees than other companies have. They proceed to spread their new formula as hiring gospel, but this isn't an optimal approach to finding the best people for your company.

In the job market each potential benefit will be valued differently by different potential employees - some people love having a masseuse and others don't like to be touched.  That's a good, employers are dealing with the a market for employees and actually benefit from differentiating themselves. A niche offering appeals to those in a niche, you can get employees more affordably if their wants match a particular set of unique offerings than if you simply compete on price. 

Some of the benefits that could be offered are in opposition to each other and most organisations will only have the resources to select a few anyway. Instead of adopting whatever the latest fad in benefits is, a benefit package needs to be carefully crafted to target the particular people that the company wants to attract.

If a companies' benefits target the particular type of individuals the company wants to attract, for instance 20% time is a better benefit for attracting open source developers, then they'll act as a filter if you make it clear that the company values people who value these kinds of benefits. Over time the employee base will end up being those people who value the particular configuration offered by the company[1].

Many people like to talk about hiring A players, but A players aren't a static category. Potential A players generally have particular areas to which they're most suited. An A player in a bank is someone who can deal with massive system complexity and produce very high reliability software; An A player in a startup is someone that can deliver quickly on a wide array of potential changes in a short time frame. The best bank employee might be an experienced developer who would like evenings to spend with their kids and a decent set of health care benefits while the best startup employee might be more on the lookout for how many ways you can get stimulants into their bloodstream.

Instead of setting out to evangelize their set of benefits to other companies more companies should encourage a wide array of benefits and differentiation amongst companies. The worst outcome for a company would be to convince many employers in an area to adopt the same style as themselves.

This illusion of A Players all being recruited by a company's own special set of benefits is the cause of all the blog posts by different companies in the same area espousing completely different views on attracting A players. One company busily states that they only hire people with a certain level of passion to pour into the product while the other insists they get the best results by working four days a week and relaxing. If you're seeing both their blog posts then both companies are probably successful and both believe they've found the secret sauce to getting the best people. In reality, both are right. They just don't realize that they aren't competing on the same factors for new employees.

1. Behavioural psychology shows people will come to be unwilling to take offers that cause them to lose benefits they already have.