Strategies for recruiting top notch developers in a flooded job market

Hiring experienced and competent developers in India is a very, very difficult job. Not because developers are hard to come by - but because there are just so many of them that filtering out the wheat from the chaff is a herculean task.

This post includes an explanation of why this problem exists, forces in the environment which exacerbate the situation and a description of how ThoughtWorks' recruitment practices attempt to solve at least some portions of the problem.

Understanding the root of the problem
Let's start at the beginning. Why is the Indian job market currently flooded with developers? The answer to this question is fairly simple - lack of opportunity.

For nearly fifty years after independence, the only opportunity for a kid from a middle-class family in India to make it big involved studying engineering or medicine and then moving to America. Interest or inclination had little to do with career choices - one had to be pragmatic in order to be able to support oneself. While this situation has improved over the last decade or so, engineering and medicine are still the only courses which guarantee some form of employment.

Sometime during the mid-nineties, a new field of engineering surfaced in mainstream Indian colleges - computers. Here was an engineering discipline which didn't need lakhs of rupees in investment to create lab infrastructure. Buy a dozen desktops and hire a few teachers and you're ready to roll. Soon, newer colleges which only offered courses in computers started appearing. These 'IT' colleges as they were called were a great success, with as many as a dozen new ones opening every year.

Then came the outsourced services boom and suddenly there was a huge market for these skills, with far less competition than was needed to go abroad. You no longer needed to crack the incredibly difficult IIT-JEE entrance exam (probably one of the most difficult in the world for a bachelor's degree) and make it into the IITs to achieve a good standard of living - an IT job guaranteed a salary far above what was normal at the time for fresh graduates and a standard of living to match. Of course, the cream still went abroad - the advantages of more than a hundred television channels, social security and spray paint in cans (something unheard of in India even today) were undeniable.

That trend has continued to grow to the point where today, roughly 10,000 students graduate every year with some degree in computers. A very small percentage of them actually enjoy writing code and learning new stuff in the field - both very necessary prerequisites for a successful programmer. This has resulted in a dramatic drop in the overall quality of talent available at the entry level. Some companies have simply stopped looking for knowledge of computers and now hire anyone with a BE in any field. The logic behind this decision is that the knowledge of computers one can expect from someone with a BE in, say, chemical engineering is much the same as someone with a BE in computers. The company doing the hiring looks for a base level of aptitude (indicated by the fact that the candidate has earned a BE) and proposes to train them themselves. The degree to which this affects the job market is clearly visible in the number of applications the bigger services firms receive. According to this article in the Economist, Infosys alone receives approximately 1.3 million applications every year, most of them unsuitable.

One must also keep in mind that this is equally hard on the all the people forced into software because (unlike in the first world) one does not get employment simply because one is educated in a certain area. I have several friends who graduated as engineers in various disciplines who have been forced into software jobs simply because there was no other alternative. If this is the case with engineers, it is easy to imagine what the situation is in fine arts, nursing or any other field where demand is driven from within the country rather than from without. But that rant is worthy of an entire post and I'll get around to it some other time.

One complicating factor is that demand from the software industry has also grown proportionately. The leading services firms like Wipro and Infosys routinely hire 20,000 people every year. A simple Google search for the keywords Infosys and hires brings a wealth of information to light. This makes for a very competitive market, where demand actually outstrips by a substantial margin.

Another is the way in which the career of a developer progresses in the majority of Indian firms. It is taken for granted that everyone eventually wants to become a manager, since that's where the money is. Whether he likes it or not, but his second or third year a developer is a team lead and by his seventh a project manager. Each step up the ladder means less hands-on coding - which most don't really miss anyway. The leveraged model followed in these firms result in developers being treated very poorly, with all the benefits accruing to managers. At the time of writing, the average developer with two years of experience could expect to earn approximately four lakh rupees a year before tax while his project manager took home that same amount simply in bonuses, with his entire package amounting to five times that. Finding a developer with ten years of experience is practically impossible. All you'll find are people with ten years experience who are managers and who used to be developers five years ago.

ThoughtWorks' recruitment process
There are two basic principles
  1. Leave assessing the capabilities of developers to other developers
  2. Don't hire developers without seeing their code
I'll get to these in a bit; we first need to do some filtering. Unfortunately, I have no earth shaking revelations here. The process is quite simple.
  1. Recruitment receives a CV
  2. They give it a once over to check that there is alignment in technologies (at the moment, this would include Java, C#, Ruby and Python)
  3. They look at the project work the candidate has been involved in. This is especially important for fresh graduates as little importance is attached to pure academic performance. The question is: Is the candidate interested in coding?
  4. They call the candidate in and administer a written test consisting of a dozen logic based questions - hardly rocket science.
Once the candidate clears this, we move onto the next level - writing code. Like Joel Spolsky says so succinctly in point 11 of 'The Joel Test', 'Would you hire a magician without asking them to show you some magic tricks? Of course not.' I personally feel it's pretty unrealistic to hire a developer without having him write code. Indeed, we feel so strongly about this that we get them to write code not once, but twice. The reason we actually have that logic test I mentioned is simply to ensure that ThoughtWorks' developers don't get flooded with too many code reviews and interviews. It isn't the best way to filter by any means, but it'll have to do until we come up with a better way.

So once a candidate clears the logic test, we send him a coding problem and ask him to solve it in (at the time of writing) either Java or C#. If the candidate prefers to do, say, C++, Ruby or Python, that too is acceptable. Once the candidate solves the problem, he emails it to us and it is assigned to a developer for review.

The objective of the review is to see if the style of writing code is up to the standard that we expect on our projects. This standard would of course vary from organization to organization depending on the kind of work they do - a company which specialises in kernel code in C may be completely indifferent to the candidate's Object Oriented Programming skills. In our case, the focus is very much on OO - for example, we occasionally receive code badged as C++ but which don't have a single class and is purely procedural. Such a submission would not be accepted because it doesn't make sense given the kind of work we do. The reviewer does base his expectations upon the number of years of work experience - you can't realistically expect a college grad to write unit tests, say. If they do, that's awesome, but if they don't - no big deal.

Once the candidate's code clears the code review, we enter the final stage of the process. The candidate is asked to come into one of our offices for a round of 'pairing' on his code. Here, he works with a ThoughtWorks developer to modify his code submission to handle the same problem but with more complex requirements. There are several takeaways. First, people who fudged on the code submission will never make it through this round. Second, the ThoughtWorker doing the pairing can fairly accurately assess the level of competence of the candidate, his openness to new ideas and his general exposure to programming concepts in general.

The pairing is followed by two rounds of interviews, with a couple of ThoughtWorks developers on the panel in each. I'm not going to go into the style of interviewing in detail - personally, besides technical competence, I look for two things:
  1. Does the candidate have opinions on technical subjects?
  2. Is writing code one of the top three things the candidate does in his or her spare time
Here I don't look for a 'right' opinion or a 'wrong' opinion; it's just a way of assessing the candidate's interest in technology in general (and I make it very clear to the candidate that contradicting the interviewer's opinion is not at all a bad thing :-)). Any opinion is a good thing and I make sure that the topics covered by the question are not something with very clear-cut positives or negatives. The ambiguity makes for good conversation.

These three rounds are followed by all the ThoughtWorks developers involved getting together for a chat and figuring out whether the candidate should be hired. If there is any area where there are still unanswered questions, the candidate may have to face a third panel. The final consensus of these developers is what decides if the candidate is hired or not.

Summary
The Indian job market is flooded with developers. Identifying good developers isn't easy and at a bare minimum, candidates must be asked to demonstrate their competence by writing code and must also clearly prove their inclination toward coding for fun.

20 comments:

Binil said...

Sidu, I agree with most of your analysis, but one needs to also ask the question - "Does the industry really need that kind of development competence in plenty?".

Almost every software company in India rejects most of the resumes they get - but one must not forget that these (rejected) people are gainfully employed somewhere i.e. you might not want them to go anywhere near one of your keyboards, but there is someone out there who is paying good money for their skills.

Sure, for those who actually need exactly a high level of competence it could be a needle-in-a-haystack hunt; but maybe this is the natural state of things.

Praveena M said...

It's really nice that Thoughtworks & you are giving such high importance for coding.It's really nice to read such write up on interviews.

But the fact of the matter most of the jobs (service based companies) don't require such competence.It's considered as bad if some expereinced guy says he writes code!
Coding is consdered as carreer limiting move in most of the time.Coding is considered as less sexy job even from fresh graduates.

Sidu said...

Which is why companies which have a hiring profile like ThoughtWorks do the 'high risk' work. Here, 'high risk' translates 'technically challenging' and usually also 'latest technologies'.

I notice you carefully added 'service based' in the middle there. Because if someone said they considered writing code as a career limiting move in Google or Yahoo, they'd get fired so fast they wouldn't know what hit them.
And the reason is that good code is at the core of these companies and they realise that.
For most of our local services companies, code is not central to their business. It is, however, to some of their clients. And when these clients get their fingers burned because that company with 70,000 employees wasn't up to the challenge, they look for a services company which actually cares about code. And guess where they show up eventually :-).

Coding is considered less sexy by less sexy people. Manages who know crap-all about code are the single biggest reason for project failures. Period. So yeah, sure if you want to be a manager in that 70,000 employee company, go ahead. But if you enjoy writing code and don't want to be a face in the crowd, you know where to apply :-).

And just for the record, roughly half the directors at ThoughtWorks were developers. Two that I know personally graduated from college in 1999 and spent the next five years writing code. How do you like that for career limiting? Managing Director of an organisation in eight years flat, starting with 0 experience.

Anonymous said...

Quite correct. I am a dev. manager :-) working for a medium-large software products' company (~3000). I am required (and enjoy) to pull up my sleeves and do coding, design and code reviews - not just the suite stuff; and no, I don't need to wear even a tie! My hiring rate is pretty low, thanks to the "I did 3 years in Infosys, so I must be leading people, not deliverables" syndrome.

deman said...

Sidu,

The process of joining Thoughtwork looks very scary but for me it may be fun. I'll take the challenge. It may be a very rewarding experience to know what kind of people at Thoughwork and also the level of passion they have on coding.

How long will it be to complete the process?

I've been contacted by Thoughtwork Australia. I'll need to fix phone interview soon. Your post does reveal on what kind of process I'll face on in the coming months. Any specific advice for me? Tq

Sidu said...

@deman,

The process usually takes one working day, but may take more if there are several candidates.
Advice? Not much in addition to what I have in the post. Relax and have fun is about the sum of it :-).

Uma Shankar Ladha said...

I like the process. I was thinking up of sending my resume, but I found that you look for people who are working on C#/Java/RoR.

I have done Java and C# while in my college days. My final sem project was on C# and Java was a small project on webservices. Right now, I am into C/C++ more specifically symbian C++.

I am right now learning RoR. Do I stand a chance in your process.

Looking forward to seeing you at BCB4.

Sidu said...

Sure, as long as you are flexible and open to learning a new skillset so you can tackle enterprise apps :-).

The interviews are geared toward fundamentals which are language agnostic anyways.

I'd interviewed someone with a background in C/C++ mobile development a few weeks ago and we eventually made him an offer, so I see no reason why you shouldn't apply.

If you're interested, send me your resume. My mail id is my first name at thoughtworks.com

shafhuz said...
This comment has been removed by the author.
shafhuz said...

Its nice to read about the hiring process at ThoughtWorks.

I remember that I personally wrote an email ( referred by a friend ) to you asking about the hiring process, but didn't get any response though :)

I've applied to ThoughtWorks a few months ago and got a reply to call their London office to fix an appointment for an interview. I was living in Germany at that time. I was excited and I called them several times to make an appointment, left so many messages at the answering machine and reception for a call back, but there was no response.

Probably, I'll give a try next time :)

Sidu said...

@shafhuz
My apologies for not replying to you - I can be very absent minded at times. Please let me know your e-mail address and I'd be happy to get in touch with you.

Anonymous said...

B**S**T ... what does thoughtworks do ? ... write compilers or Operating system ... not even microsoft has such a recruitment process . Read jeffrey richters post on recruitment in MS .. they dont make you write a single line of code .. but rather concentrate on lateral thinking ... as joel said "we want developers who are smart and gets things done" not necessarily someone like bill joy ... give some years .. thought works will be down to a single interview to recruit ...

EazyRyder said...

if you ask me thats a crap recruitment process ... its not as if they are developing any software for the land rover program .. they are into services for christ sakes .. i am in this industry for 9 years and have never faced a requirement that a guy with a decent experience could not fix ...
i agree .. in a few years they would be down to our level .. recruiting like TCS .. i.e blindly ...
and the fact is that none of the realy brainy people are ever in the market ...

Singh said...
This comment has been removed by the author.
Singh said...

Hi Sidu,

How much experience is required in TW for java guys . I have 2 yrs of experience.Are there any opening for 2 years

srinivas said...

Eazyryder, That's why no one asks you!
And the bloke who commented before (anon), the poor devil thinks Microsoft is the Gold standard of software dev. Amusing!
-- Srinivas C

Sudeep Sridhar said...

Interesting post. Having interviewed with ThoughtWorks way back in 2005 - for the role of a Business Analayst - I've been impressed with the rigour that TW puts into recruitment. (I didn't take up the offer though)

However, in this post there is one thing that touches a raw nerve. The whole point about whether the person does coding in his free time. Why would you care? In fact, the point of free / spare time is to do activities you dont do at work. Today, I've an MBA and am far removed from the tech world, but I'm involved in recruiting for consulting (the industry I work in), but I'll not hire a person who does cases during his / her spare time. I'd rather hire someone who has a life and some hobbies. Such people can be much more interesting, fun to work with, and actually more versatile at solving business problems than someone who has a unidimensional personality.

Sidu said...

Weird. I came here after I received a comment notification by mail, but see nothing here. Here's the comment anyway, from Sudeep Sridhar:

"Interesting post. Having interviewed with ThoughtWorks way back in 2005 - for the role of a Business Analayst - I've been impressed with the rigour that TW puts into recruitment. (I didn't take up the offer though)

However, in this post there is one thing that touches a raw nerve. The whole point about whether the person does coding in his free time. Why would you care? In fact, the point of free / spare time is to do activities you dont do at work. Today, I've an MBA and am far removed from the tech world, but I'm involved in recruiting for consulting (the industry I work in), but I'll not hire a person who does cases during his / her spare time. I'd rather hire someone who has a life and some hobbies. Such people can be much more interesting, fun to work with, and actually more versatile at solving business problems than someone who has a unidimensional personality."

Sidu said...

"The whole point about whether the person does coding in his free time. Why would you care? In fact, the point of free / spare time is to do activities you dont do at work."

There are three aspects to this.

The first point is that I never said 'only code in his spare time.' Some of the best programmers I know run marathons, are published authors and have two level 80 toons in Wow, while having a non trivial open source output.

The second is that I want to work with people that enjoy their work, so it is something they do anyway.

The third is better couched as a question: Would you hire a doctor who told you he/she didn't study improvements in medicine in their spare time? How do you suppose musicians who got all their practice only in concert would fare?

Quite frankly, leave aside programmers, the best managers I know spend a great deal of time studying how businesses work. The Ford assembly line came about through study, as did the Toyota 'lean' management philosophies.

I'm not sure I can agree with what you're saying, since my perception is that study in one's spare time is both pleasant and fulfilling, makes you better at what you do and consequently more successful in your career, often hugely so, and doesn't prevent one from pursuing other interests.

Anonymous said...

I applied for a job at Thoughworks, I didn't pass the first step wich was to write a program from a text they gave to me (Kiwikand exercice).
I've done something which was working fine, writing test cases, javadoc, it was well designed even if that is always arguable. I've used maven though when I felt they didn't really know how to use it.
I was surprised to find some obvious none senses in some of the questions. I've finished the program quickly as I couldn't give 3 days working for free as they expected.
Thoughtworks said I didn't pass the test and they didn't give explanations.
Ok, although I felt that a bit rude, I wondered what consideration they would really give to their employees regarding how they manage candidates.
- none senses in the exercices.
- Asking to work on an exercice for 3 days for free.
- No feedback about the result.

Is working for Thoughtwork, just like that too?