Warning: Rant about what is in my head and random opinions to follow.
I have seen a few posts on sites disparaging developers from various nations but from my perspective I understand this but don’t agree with it. First off if you pay peanuts you get monkeys (do monkeys really like peanuts who comes up with these sayings) if you pay top dollar generally besides the charlatans you can get the best people no matter what country you are in. I have worked with awesome developers from a lot of countries but as a general rule developers tend to be crap and under-trained (by my standards) because the pervading philosophy of the day is cheap is better. I think every nation produces a small set of highly skilled developers and then the average ones. Most of those great developers have been hit by the peter principal and are no longer developers. I don’t know many great developer who are not non coding architects, development mangers etc. (Let’s start creating hero’s in every role please)
I have had the privilege of working with what I consider an uber team – well paid developers who have a passion and love developing where the company spares no expense(Nerdvana). This is an awesome experience that I suggest all developer have once in their lives because the experience is rare but fulfilling. That being said the general rule here is one or two experienced developers and a team of younger developers. This works well and I suppose is the most cost effective option but you hit a snag if one of your superstars leaves. (all great developers have their own style and you are likely to get a rewrite proposal with any new one).
I am beginning to think about the throw away system approach as an effective tool – a system with a 5 year life cycle (or when the maintenance becomes too costly). After the life cycle you redo the system in a parallel stream the downfalls of this is as you rewrite the current system changes and you have a moving target.
There must be a fair way to make sure you are getting a developer who can perform but I can’t think of something besides bad ideas [Rating system, Developer clubs, Linked in recommendations] (remember that developers all have different strengths and weaknesses so a mix of these can go a long way to a well rounded team)
Uber team – A small team of ultra experienced developers
Pros – You will have a great system, built quickly by people who know what they are doing.
Cons – There will be blood, clash of opinions and egos will be rife. Hard to focus, some developers find it hard not to create the perfect system instead of delivering. Hard to get the right balance and people.
To make this work you will need to put one person in charge and give them the power of veto or will have to lay down a framework for them to work within.
Few good men team – One or two very good developers and a team of average/ cheap/ young
Pros – Cost effective, great hand over, growing the next generation.
Cons – Key man risk, experienced developers don’t like to share or work with idiots. Also you could end up with one or two people doing all the work.
To make this work you will need to get the key men and have a plan for when the things change. You will also have to look after your developers as the key man will have a burden of work.
Outsource developer team – Highly skilled outsource manager (technically brilliant and good with reviews and management a rare find indeed may need to split this into two people) and a team of outsource developers.
Pros – Perceived cheap, company gets to focus on their core business, no lack of resources and hr issues.
Cons – Language, process heavy, requirements need to be exacting.
To make this work – Get the right outsource partner and manager, VERY rigid process.
How to hire the best – to do this you need the best and need to not be shy about cost. In South Africa the best of developers are generally contractors. I think it is quite near to impossible to hire a developer without a highly skilled person to interview or word of mouth. Things to look for are passion, experience, track record, interests. Someone with passion will go out of the bounds of what they are currently doing to find out what the world is doing. Also generally there are a strong set of opinions that come with strong developers. But with what I have said there are just generalizations so you will have corner cases.
Whatever road you choose you will have to get the pattern right and the correct people. Good luck.