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.

Wednesday, January 4, 2012

Goals for 2012

A short collection of my goals for 2012 - publicity helps with these things.

  • Visit at least one new country(I meant to make it somewhere else last year, instead I ended up in Australia again.)
  • Renew Certified Scrum Practitioner certificate. Not really sure how much I value it, but it's cheap to renew and I'd like to try their shiny new test so I can have an opinion on it.
  • Deal with my wrist related issues better. Got a few solutions for this, my current favorite is getting junior devs to write code while I sit with them and teach/dictate, this is great for my hands and also seems to work well for getting people up to speed quickly.
  • More speaking and on more varied topics. I enjoy speaking so I shall do more of it and I need te break out of always doing tech focussed topics as what I do has become so much broader than that in the last couple of years.
  • Read more books. I have a few target areas here: Finishing off the main business books that I still have to read, progressing my broader knowledge( particularly more science related reading this year I think), a decent amount of tech reading, more good fiction and less trashy fiction.
  • Write More and regularly. My girlfriend has set out to do 500 words a day, I hope to match her totals but probably won't achieve the same regularity she will. Hopefully get up to at least five days a week though. Writing is something I'd like to develop into being more of a small regular habit than something I work at in bursts.
  • Get down to less than 50 Films to go on the IMDB top 250. I've got 93 to go now and watched just under 50 last year so I basically have two years left before I've finished watching the majority of the films that are really good in the generally watched realm. It does miss a bunch of really good films that have only achieved smaller audiences, but in general it feels like an enriching experience and makes me appreciate all film a lot more. In the same way as you have te read quite a bit of classic literature before it all starts coming together and being enjoyable.
  • Learn Clojure, I've always liked lisp and clojure is threatening to actually be moderately successful in the wider world.
  • Automate more things. Both small tasks in my day to day life and business related stuff, there are things I do too often and haven't got around to automating. I want to find at least 6 tasks that I do regularly that I can make more automated. This could mean anything from automating basic new site setup to getting a better system for handling my expenses. 
  • Get some traction for at least one of the startups I'm involved in. Got few things in the pipeline and a couple of projects that are succeeding on the marketing front so long as the product arrives when it's looking like it should.

Tuesday, January 3, 2012

Some of My Achievements and Failures in 2011


  • Railscamp. Organising Railscamp took up quite a bit of time at the beginning of this year but it was worth it. Even better is that there are now lots of people in NZ wanting to help organise future ones. Including the one in Canterbury next month.
  • Speaking. I spoke at various events covering everything from clouds and python to rails and node.js. It's been interesting making it to such different and I'm looking forward to further broadening what I attend and speak at in the coming year.
  • Broadened my end to end business skills. By happenstance I took a couple of decently-sized projects right through from business development to final delivery. It's a lot of work but a really interesting experience to be able to manage client expectations through the entire process rather than building up a more piecemeal client relationship. Not a particularly scalable approach, but I enjoyed doing it and think I learned a lot about some of the areas of project leadership that I hadn't touched so much previously.
  • Read some books that have been on my list for a while. 71 books in total with some great reads like Poor Economics and Bargaining for Advantage as well as some of the more serious books that took a long time to get through like Godel, Escher, Bach, and the Decline and Fall of the Roman Empire. My rato of non-fiction to fiction was a lot higher this year, mostly as I did a few big dives into topics that have plenty of easy to read books in them like negotiation practices or the broader coding styles books. 
  • Helped out and collected equity in various different startups. Involved myself in a number of various startups that are now in various states. In the end I came away with interests in four of them of which two are showing some level of growth. There was much learning to be had from this involvement and if any of them actually succeed it'll pay off well as well. Regardless, I'm happy for the experience and look forward to applying it to some other upcoming projects.
  • Completed the stanford AI Class online course in the advanced track. Didn't put as much time into this as it deserved but I completed it and it reminded me how cool a lot of the more hardcore CS stuff is.
  • Decent load of writing for Nanowrimo. Nanowrimo went pretty well this year as I started using dragon dictate to avoid the dangers of typing 50000 words in a month again. Not sure what I'll do with what I've written but will definitely spend the time to tidy it up.
  • Improvisation - Ended up doing an improvisation course towards the end of the year and it turned out to be one of the highlights. I'll blog on it specifically sometime soon.
  • Watched lots of really good films. I watched over 40 films from the IMDB top 250 films list as well as spending a lot of time at film festivals. I'm really enjoying watching good films, especially when the list forces me to watch things I otherwise might not. Many of the old films on the list are marvelous and there are some genres I hadn't watched that turned out to be excellent when viewing the best of them. Of particular surprise to me was how much I enjoyed most of the westerns on the list.
  • Switched to dvorak. Switching to dvorak took slightly longer than I thought it would but it's going to pay off over time.


  • Blogging. I didn't blog as much as I said I would. I hope to do better this year.
  • RSI. I haven't dealt with the pain in my wrist as well as I should have, doing a slightly better job of things now though.
  • Startups that didn't fly. Some of the startups I was involved in didn't go as well as they should have. To some degree this is expected with startups, but I'd still like them to be more sucessful. I'm starting to lean towards being more process oriented with them from the get go. The biggest issue I've seen cropping up in the ones that fail is expectation management and people thinking the path to product should be much shorter than it actually turns out to be. I either need to get better at holding these ones together or at identifying that issues are present and stopping investing time sooner. 
  • Failed to Travel anywhere new. I made it to Aussie a couple of times at least, but that's not very exciting.