Archive for 2009

A Guide To Hiring Great Programmers

Monday, December 7th, 2009

There are a lot of programmers out there these days. Since the explosion of the PC and then later the Internet there has been more and more people learning to programme in a computer centric world. But how do you go about finding the best ones?

I have had to hire many programmers over the years and I tend to find that the really good ones have certain things in common. I have a three step process I go through now to find the best people with the best fit for the company.

  1. Finding great people and attracting interest in your position
  2. Working out if they are the right person for the role
  3. The interview

Step 1: Finding great people and attracting interest in your position

The key to attracting great people is having a great place to work – that means the company culture, offices, people and the work you produce. Companies like Google and Apple have no problem finding the best people as they are like a recruitment magnet, people fall over themselves to work there. Now your company may not have the same size and appeal but every company have a unique culture and soul. You need to make sure you sell the full package to a potential recruit more than just their job role. Most great programmers love to challenge themselves and solve the big problems, so you need to let them know what kind of projects they will be working on.

Try not to use an agency if you can help it; I have rarely had much joy with agencies, they are incentives to find candidates but not the best candidates. It is much better if you can find someone who has been recommended, someone who worked for you as an intern, perhaps someone you have come across on a forum or an open source project. There are always many routes to finding great people.

I read recently that the 37 Signals team and the Hash Rocket team pretty much only recruit people who they have worked with, so freelancers or contractors who have worked on joint projects with them.

Step 2: Working out who is the right person for the role

Now hopefully some CVs and emails enquires are coming in and you need some way to filter them. Of course the CVs you see are important but qualifications and work history do not give you the whole picture. Have a look at the person’s blog, portfolio site, twitter account etc. Google their name to see what comes up. It is interesting if they have been posting and promoting themselves within the web community.

When I am sifting through potential people I am trying to answer the following questions:

Can they get things done?

The most important thing for me is that they have the focus, resolve and energy to get projects done. That is not to say they have to do this all by themselves but most of the time they will be working alone. The way to see if people can get things done is to look at their personal projects, open source projects, github repo, anything that shows they can see a project through to the end and not give up.

Do they have a thirst to learn new skills and technologies and can they pick things up easily?

All good programmers can pick up programming languages with ease, much like linguists can learn new spoken languages. There are people in my team who just have spend a few days learning a new language before they are off and running; PHP, Python, Lisp, ActionScript skills can be acquired with what looks like seemly little effort.

Do they challenge themselves in the projects and job roles they have had? Age is not a factor here as I know some incredible programmers who are right out of school and some who are further down the line in their career.

Are they passionate about the web, do they share things that they have learnt with you, do they keep up with the latest trends and news, do they read RSS feeds and listen to podcasts?

Are they an artist looking for beauty?

Attention to detail and the personal drive to write elegant, beautiful code. We all know that we have to write hacky, quick fixes some times but that should be the exception not the norm. If someone in our programming team tries to write some hacky code, it is usually picked up by the other developers even before it reaches me.

Good coding is an art form, as you move from planning, to psudo code, to basic, and then elegant scripts, refactoring along the way. I have said it before but attention to detail is key.

Have a look at some of the person’s open source scripts or code examples on their blog. Are they a coding artist?

Now once you think you have found the right person you can move onto to the interview process.

Step 3: The interview

So once you have found some potentials stars you need to get them in to meet them in person.

Telephone chat

First of all I have a quick chat on the phone, no more than ten minutes just to get a feel for the kind of person they are. This is simply a getting to know you chat there are no interview questions, I am simply chatting to them as if I had been introduced to them at a dinner party.

Personal chat

If I think they are a good fit with the culture and think their personality would fit in with the company I invite them in for a chat in person.
This is a very informal event, I do not ask interview style questions or sit behind a big desk. This is one person talking to another person. I try to make them comfortable as you will never get to really see what they are like if there is tension in the air.

Are they a great communicator?

I don’t buy the stereotypical picture of a nerd programmer who is devoid of social skills. Programmers have to work as part of a team, they have to disseminate specs and write documentation, write comments, they also have to keep the project manager or tech lead informed of progress. There are often brainstorming and strategy meetings, code reviews. These all requires great communication both written and verbal. I do not mean they have to be an orator but they have to be able to clearly communicate their ideas and opinions.

Do they know their stuff?

You have already had a look at what they can do, but by talking to someone face to face you can see if they really know what they are talking about. Try to ask for specifics as that will show if they actually understand what they are talking about. The best people ask questions themselves relevant the the conversation and are keen to share opinions and throw ideas around.

Give them a real project to solve, not a pointless test

I have done some tests in corporate interviews in the past and they are pointless and not relevant and I think they should be scrapped! I like to get the person to do a small self contained project and then peer review their code. I never compile or test the code I only want to see the style and the methodology. This usually takes the form of a current project we have in the office. They can do it in their own time and take as long as they want this is not an exam. You do not code under time pressure in real life (well not often anyway!).

If they have got this far then they are probably a superstar, so hire them quickly before someone else does! It might seem like a lot of time and effort but creating the right team is the most important thing for your company and both you and your team deserve to have the best people.

One last sanity check is that we have a one month probation period (which we should really never have to use) just to make sure that we all work together like a well oiled machine.

I would love to hear what other people do as part of their hiring process. Especially how they attract and find the best people to start with. Any thoughts?

A Client Management Masterclass

Wednesday, December 2nd, 2009

Today I was given a master class in client management.

I went to meet a client of ours who was not happy with the final quality of the creative output of our work. They had called the meeting as they were thinking of ending the project and cutting their losses.

By the end of the meeting not only were they happy, they had renewed confidence in our abilities and were happy for project to continue. How did this happen? The reason it happened is that I had a secret weapon in the meeting. I was joined by one of my directors at Busara, Pier Bracher who is a master of client management.

I did not say that much in the meeting and watched as Piers led the client through a journey:

Work out if the relationship is still salvageable

If the client does not want to at least try to work things out then is it is a very short meeting, there is no point in talking and the meeting is over. It is then time to send the lawyers in. But on the other hand if they do want to work together that is the first step and this creates some common ground to work on.

Where was the breakdown in the project?

Next you need to find out what the root problem of the relationship breakdown was. This is done by asking lots of questions and really listening to what the client has to say. Try and read between the lines, we were lucky the client was very upfront about the issue; there had been a misunderstanding when it came to the brief and all the issues stemmed from there.

Do not assign blame or dwell on the problems

Now that you know what the issue is, do not assign blame, do not dwell on the problems. It is all about rebuilding trust and convincing the cleint that you can deliver. Trying to assign blame does not help anyone and will only hurt the relationship further. In most situations there is probably fault on both sides but that is not what you need to focus on.

Accept responsibility and create confidence that you can deliver

You need to accept responsibility for the problem and create confidence that you can deliver. Now you know what the problem is you need to work hard to convince the client that you can solve it and exceed their expectations.

Focus on the plan and what is going to happen next

Explain in detail the plan forward, really sell the new plan and give hard deadlines on when things will be done. It is important to fix thing quickly and get back on track. By explaining the plan you are showing evidence that you can deliver. Reiterate where there is agreement and summarise regularly.

Deliver on your promises and over service

The final thing is the most important, you now need to deliver on your promises and over service along the way. If you can do that you have a very good chance of turning a bad situation into a good one.

Quite honestly there were times in the meeting where I had to bite my tongue as the natural thing to do is fight your corner and play the blame game but that does not help anyone.

The key is for you to rebuild confidence in your ability and show conviction that you can deliver on the brief. If you can continue to work together and turn the situation around you can often increase your standing in the client’s mind.

Technology Should Be Invisible

Tuesday, December 1st, 2009

One of my philosophies is that technology should be invisible. What I mean by that is that you could have an amazing algorithm or incredible platform but your user interface should be simple, intuitive and elegant.

Some of the best technology out there like the Apple iPhone, Google’s search algorithm or Flickr’s image processing are hugely complicated with thousands of hours development but the user interface is elegant. The user does not care how amazing your technology all they care about is performing their task quickly and accurately.

I have been dealing with a lot of hardcore developers recently and I am finding that sometimes they can overcomplicate their applications to show off the complexity of underlying platform. You should always keep in mind your audience when developing an interface and make their choices simple and intuitive.

A New Kind of Technology Venture Firm

Monday, November 23rd, 2009

I really admire the early stage seed venture firms like Y Combinator, Seedcamp and TechStars. Their model is to make make small cash investments in very early stage companies and then provide mentoring and support as the company grows. I think this is a good model but I have been thinking a lot about how this could be improved.

Thinking back to my own experiences of starting and growing a company, a lot of the time the issue is not funding it is knowledge and experience. What about instead of just seed capital you could get experience to a whole team of advisors and operators who worked with you on your business. Could the traditional seed capital model be extended so that there is an operational presence in the portfolio of companies, and also some shared resources?

I thought that I would leave the obvious draws backs to this model aside (e.g. scalability) and come up with some guiding principles for this new kind of venture that could add an extra edge to start-ups.

1. Focus on revenue not exit

I have posted about this before but I believe businesses should have a clear business model and clear path to operating profit. In my view a business should make money. People will always quote the exceptions to the rule companies like Twitter do not make a profit nor did Facebook for a long time. But these businesses are few and far between, I would much rather reduce the risk and work to create value for investors via regular profit sharing from operations.

Creating a business geared for an exit does not always mean that you make the best long-term decisions for the business. It is very hard to predict when and if your business will be acquired or floated.
A portfolio of companies all delivering increasing profit each month is the best way to build a solid foundation for investment success.

2. Build for the long term

I read on the Y Combinator site recently that they “help start ups through what is for many the hardest step, from idea to company”. I disagree with this. I think the hardest part about building a business is once you have your technology platform in place; creating a proposition, getting you positioning right and selling into your chosen marketplace, building your brand. All of these take time, dedication and focus. If you take a long term view you are more likely to focus on quality, customer service and creating an incredible brand that people trust and believe in.

3. Operations not investments

Instead of the core ventures team looking for investments and working on new deals, they should be helping operating the businesses. The core ventures team would act as close advisors and actively help in operating the portfolio of companies. This huge wealth of knowledge and experience would enable the business owner to accelerate business growth and not fall into common pitfalls and super charge their progress.

4. Centralised technical team and shared business resource

The portfolio of investments should have a centralised shared technical team. There is no need to have a set of programmers for each business as there would be massive overlap and doubling up of resources. A central team would be responsible for the technical requirements of all the portfolio. Having a common platform, unified technical approach will mean more expertise and greater stability.

I would even extend this to include a shared business resource e.g. admin, bookkeeping, accounting etc. Everyone uses the same tools, same calendaring system, same accountancy package etc.

Let the business owner get on with building the business and leave the admin, accounting and programming tasks to the central team.

5. Find ideas that solve the user’s pain

The best kind of businesses are the ones that solve a real need in the marketplace. These businesses make a very attractive proposition to the prospective buyer and are an easy sell.

6. Share the effort, share the equity but no big money investments

This is a joint effort, both business owner and venture team are working creating the best business possible. The equity should be spilt 50-50 and there would be no large cash buy in for the venture stake.
An equal split means that both parties are totally motivated to success.

7. Bootstrapping

All the businesses in the portfolio should be very aware of their cash burn. Keeping costs under control until profits can sustain the operating costs of the business.

Summary

There are issues and problems with this approach but I think that it could be an interesting option for a seed capital venture company:

  • Find the best ideas and back the best founders
  • Team them with an experienced, successful team
  • Remove any unnecessary tasks of admin, programming and accounting to create laser focus
  • Focus on the business model
  • Build for the long term
  • Bootstrap to create maximum profit and value

I like the sound of this business and would be interested to hear people’s thoughts on whether it would work in reality.

Yahoo Query Langauge

Wednesday, November 18th, 2009

Following on from a previous post on Yahoo Developer Tools I have been playing around with another clever Yahoo tool called Yahoo Query Language (you will need a yahoo account to access this page).

Recently I have been doing a lot of research on The Semantic Web (which I will be talking about in a future post), the idea that one day the whole of the web will be accessible as one large connected information cloud. While this tool is not Semantic web it is a good step in the right direction.

What is YQL?

Yahoo! Query Language (YQL) Web Service is a tool which enables you to access Internet data with SQL-like commands. The YQL Web Service enables applications to query, filter, and combine data from different sources across the Internet. YQL statements have a SQL-like syntax, familiar to any developer with database experience.

The following YQL statement, for example, retrieves a list of cat photos from Flickr:
SELECT * FROM flickr.photos.search WHERE text=”cat”

To access the YQL Web Service, a Web application can call HTTP GET, passing the YQL statement as a URL parameter, for example:
http://query.yahooapis.com/v1/public/yql?q=SELECT * FROM flickr.photos.search WHERE text=”Cat”

When it processes a query, the YQL Web Service accesses a datasource on the Internet, transforms the data, and returns the results in either XML or JSON format. YQL can access several types of datasources, including Yahoo! Web Services, other Web services, and Web content in formats such as HTML, XML, RSS, and Atom.

Open data tables

Yahoo provide a large list of open data tables that you can query covering the Yahoo services e.g. Flickr, maps, weather.

But the great thing is that you can create your own open data table from your web app that you can then make available to the community for other to query. I have had a quick look at the community tables and the ones that caught my eye are: Amazon, Craigslist, Delicious, Facebook, Instapaper, lastfm and Twitter to name just a few. That means you can use all the power of YQL to access all of these great services.

While I have not used YQL in a web app yet, I have played around with the service and so far I am very impressed. I have a use case for some of the tables in an upcoming project so I will let you know how I find it.

You can read the YQL documentation here.

Play with the YQL console here (requires a Yahoo login)

Love What You Do And Never Work Again

Tuesday, November 17th, 2009

A quick warning that today’s post is a bit off topic!

My son recently turned one year old and a milestone like that gets you thinking about your life.

It is amazing having a young baby because to them everything is inspiring, new and fascinating. And when I say everything I literally mean everything fascinates them. The great thing about this is that it is infectious; it gets you looking at things in a different light and fills you with wonder about the world again.

I have been very lucky in my career in that I will not accept a day job that I do not enjoy. It is something that I believe very strongly in because if you do not love you will not put your heart and soul into it. I saw a quote from Steve Jobs once that said something like if he wakes up five consecutive days and does not look forward to work then he looks for another job. We are not all that lucky but the overall idea is a good one.

We spend so much time at work and over a lifetime it adds up to a significant proportion of your life. Do what you love and you will never have to work again.

A bit philosophical today but that never hurt anyone!

chooseajobyoulove

TypeKit Finally Extends Web Typography

Thursday, November 12th, 2009

I have been reading about Typekit for a long time and have been eagerly waiting for them to launch. Having seen the volume of tweets this week mentioning Typekit it is safe to say they are live at last.

The age old issue for websites was the limited number of fonts available for use on the web. This has always made print designers cringe, “So you can only choose from Arial, Verdana or Time New Roman” they exclaim. Explaining this to clients as well is time consuming and they show the same amazement as the print designers.

At the moment you can choose any font you want for you website BUT if the person viewing your website does not have that font installed on their computer then the text will display in a more basic font. This has led to a trend of most websites adopting only the most basic of fonts that are pre-installed on most modern computers.

There are some solutions to this problem (sIFR comes to mind – but relies on Flash) but most have a lot of downside. So what is Typekit and what is all the fuss about?

Typekit is a very easy way to use a huge selection of fonts on your website without the need for the user to have the font installed. That means that you can be sure that the font you choose will display exactly as you planned for your users (assuming they have JavaScript enabled, but most people do these days). Add a line of code to your pages and choose from hundreds of fonts. Simple, bulletproof, standards compliant, accessible, and totally legal.

Typekit is a subscription based service (you can see pricing here) but the pricing is very reasonable and well worth the fee to enable a richer typography design on your site. Typekit work with a number of font foundries and are planning to add to the number of fonts in the future.

I will definitely be using this on the next project I work on.

What A CTO Does

Tuesday, November 10th, 2009

A Chief Technical Officer (CTO), or technical director (if you are from the UK), is often a misunderstood role with a wide range of responsibilities within a company. They usually are part of a companies senior management and report directly to the CEO (Managing Director if you are from the UK).

The CTO role should ensure the company has the best technology and sets the technical and strategic direction.

They should be a big thinking, innovator and technology evangelist to staff, suppliers and customers.

The CTO is also a public face of technology for the company. For a high-tech company, part of the brand is its technical prowess and insight.

In a small company or start up, until the team is large enough, they often have a more hands on, operational role, managing developer and being the senior coder.

Like any management role, having a good knowledge of finance, marketing and project management is essential.

In a typical week here is how I spend my time:

Time Breakdown

The key roles of a CTO are:

  • Aligning IT to business strategy - the most important aspect of the CTO/ CIO role
  • Technology selection and platform design – selecting the languages, databases, platforms
  • Seeing the big picture – knowing how all the pieces fit together in an organisation
  • Providing options and solutions – nothing is impossible, there is always options and solutions
  • Innovating and big thinking – pushing technology, being at the forefront of thinking
  • Growing technical leaders – nurturing, educating and growing leaders to delegate to

London Technology Fund Competition

Monday, November 9th, 2009

London Technology Fund CompetitionI spent an interesting evening at the London Technology Fund Competition 2009 Awards Ceremony on Wednesday.

The London Technology Fund Competition was established in 2008 to help address the equity gap for high potential technology businesses in London. The awards ceremony was held at the City headquarters of The Royal Bank of Scotland on 4 November, attended by some 200 representatives of major corporates, investors, and government, as well as entrepreneurs, academics, and professionals.

The awards are in various sectors ICT, Life Sciences, Engineering etc.

It was the life sciences division that was the most interesting this year. The three finalists were:

Trojantec
Trojantec is developing cancer stem therapeutics based on its platform technology of intracellular and intranuclear delivery of proteins. It has created, thus far, two novel nanoparticle fusion proteins, TR1 and TR4, that aim to achieve normal p21 delivery to p53/p21 mutated tumors (TR1) and inhibition of notch signalling (TR4) resulting in tumor eradication in preclinical models.

IXICO
IXICO provides clinical trial services to pharmaceutical companies helping them gather evidence of drug safety and efficacy through medical images.

Fertility Innovations
Fertility Innovations is developing technology designed to enable direct treatment for male infertility by activating non-motile sperm.

The winner was Trojantec as they were deemed to have the most attractive proposition to potential investors. All the finalists have been through many rounds of interviews and assessments meaning that a lot of due diligence has already been done for investors.

All of these companies were deemed to have a very bright future assuming they can raise the capital required to meet their growth targets.

Yahoo YQL Auto Tagger

Saturday, November 7th, 2009

This is the first of a series of posts detailing some cool developer tools that I learned as a result of a talk given by Yahoo developer Christian Heilmann.

Yahoo seem to be coming out with some great tools at the moment but they do not seem to be promoting them to the developer community. Most of the developers I have talked to have not heard about the tools I am going to describe.

The first one I wanted to talk about is the YQL Auto Tagger.

… let’s be honest tagging blog posts, articles, assets etc is a very boring exercise. The amount of times I have had to explain to clients about how to tag their documents correctly is never ending. This tool goes some way towards helping people overcome this issue.

At the moment the YQL tagger is a small GitHub project but it could grow to become a very elegant solution to this tagging problem. How well it works at the moment is a matter of opinion.
All you have to do is enter some text in a text area or WYSIWYG and then move your mouse out of the box and the tags automatically appear in the input box below.

You can see a demo of it in action here.

Screenshot:

YQL Auto Tagger