Archive for January, 2011

Hiring programmers for their communication skills.

Sunday, January 23rd, 2011

Sterotypically for programmers, many many year ago I used to do martial arts.

mr_miyagi-sticks

I trained with a man named Nick Arnold in Canterbury college sports hall. I learned some valuable lessons from these few years of training. Once I trained with Nick’s trainer a man named Tony Felix.

Tony Felix was fairly legendary in the martial arts world. As the story went, he was originally a professional rugby player, with an interest in external martial arts. Unfortunately he contracted a serious life threatening disease so traveled to China where he sought out the most revered internal martial arts teachers, to learn from them. For many years he trained internal martial arts in the east and eventually recovered from his illness. Returning to the western world, he taught, had different jobs, from being a bouncer to being Wesley Snipes training partner and body guard. As I said, somewhat of a legend.

So the caliber of people I was training with there was very high, a lot of top students from other martial disciplines had traveled some way to come to this training session. In a stereotypical fashion of a high testosterone environment many of them were showing off. With various types of somersaults and high kicks. This made me feel slightly disheartened.

At the end of the training session, I went up to Tony Felix and asked him if he though it would be a good idea for me to go off and learn a single martial art really well before I got to the more advanced stuff he was teaching. I always remember his reply:

It’s much easier to take a good fighter and make him a martial artist, than it is to take a martial artist and make a good fighter.

For the last few days, this phrase has been ringing in my ears. Why? Because I have been interviewing.

There is a lot on the Internet about doing interviews and choosing who to hire. Personally I find Joel Spolsky’s interview guide to be a good general roadmap. Smart and gets things done is a good principle to live by, but it’s not so concrete.

For example sometimes I find myself in a position where I hear that someone is technically amazing, but that a candidate is not so good socially and this was why what Tony Felix said was ringing in my head.

I would like to take what he said and adapt it to the world of programming:

It’s much easier to take a good communicator and make him a programmer, than it is to take a good programmer and make him a good communicator.

It sounds obvious but sometimes it’s not. Think about it a moment. Perhaps a candidate has spent 5 years programming, that means he’s probably in the age range of twenty to thirty. But what has been doing the other fifteen years? Learning to communicate. If it’s taken fifteen years to learn to communicate and he’s still bad at it, then it will be a lot of hard work to undo that. Whereas if he’s a good communicator but inexperienced programmer, then in a few years time he will easily learn the programming skill but have the advantage that he can also communicate.

In the world of agile, where pair programming should become a day to day activity, communication and team work is key to being successful. Without it you won’t be able to create the innovation and productivity you need to survive.

So when hiring, communication is far more valuable than technical ability in the long term.

Quality can be painful.

Friday, January 14th, 2011

pullingteeth

In a previous job I had to work with some awful backend devs on very large unnamed Telco.

The task was to build a small standalone app int HTML, CSS and Javascript. However the place they wanted this app was under the jurisdiction of a monstrously, inflexible, bloated CMS.

Inorder to combine the two a custom template had to be made with the main code, and all the resources had to be uploaded separately via the CMS interface.

A short time after launch, the inevitable happened, the client phoned, “we’ve got some extra budget and need a few changes and bug fixes to the code”.

Sigh.

What should have been a simple process was complicated by one constraint, the backend devs insisted on doing every change by themselves, by hand, rather than giving me access to the cms.

That meant that I had to make changes to the original codebase, send them an updated zip file, which they would unzip, do a diff on the files to see what I had changed, and then hand type every change into the template file.

No matter how many alternatives I suggested they were sticking to this process and sticking fast.

So, I started doing it. I zipped up the first batch of changes, filled out a spreadsheet that identified which lines had changed in relation to which bug and sent it over the wall.

What came back was, well, sub-optimal, let’s say.

Many of the changes had been missed or mistyped. It was much worse than when we started.

They were quite far away so i couldn’t go and see them so instead I phoned them.

We did a diff on the files and went through, line by line, character by character, image by image the changes.

I did this almost every night for two weeks. However, little by little it got better.

Then, after two weeks, something strange happened : they got it. They started doing the diffs properly and as hard as I searched I never saw another bug from them again.

As they were remote, I don’t know for sure what happened, maybe they started using a new app but my hope is that they got so sick of my my constant correction, they gained a higher appreciation for quality and my feedback helped change their working pattern.

So quality can be painful, but it’s worth it, so don’t give up.