I had an interesting conversation with a recruiter recently about the difficulty of the ThoughtWorks recruitment process. It’s true that the majority of applicants don’t make it through, but then that it is true of most recruitment processes. The ThoughtWorks one is perhaps more drawn out and longer so you feel that more effort was invested if you don’t go through.
One thing that is quite interesting is that being really smart is not the only criteria if you want to work at ThoughtWorks. Candidates who fail the process often go on to join other very prestigious companies. Why did you turn down this person who went to this other company?
In most cases the answer is that the company they ended up joining was not a consultancy. Consultancy is, unfortunately perhaps, not just about raw smarts and programming ability. Unlike a lot of companies ThoughtWorks doesn’t really have a codebase, the job is mostly about working with and helping people improve their own codebases.
Coaching, persuading and analysing code is quite different from writing good code. My favourite example of this is a code submission that solved all three of our problems in probably one of the shortest sets of solutions I’ve seen. The candidate correctly identified each underlying abstraction and applied the standard solutions in a concise powerful way.
An automatic hire then? No, sadly not, because while the candidate had the time to solve all three problems they didn’t bother to write a single test. If you look at what they did they really just proved their own superiority and left nothing that helped explain, maintain or develop their code base. You could already see that this person wanted to be the hero of the piece, not the collaborator.
In the three years I’ve been at ThoughtWorks there have been several times when I could have produced a much better solution to problems than what was actually created in collaboration with my clients. I would like to think that instead of the best solution we were able to produce something that our client teams understood better than what they had previously, was more productive that what they had previously and was more reliable that what they had previously.
All these things are more valuable than an individual being a better coder than their peers.
31 thoughts on “Why didn’t I get into ThoughtWorks?”
Readability should have been the goal of every coder since the creation of the first assembly language.
I’m tempted to mention correctness as well, but a) that’s obvious, and b) I run the risk of turning the comment into a Spanish Inquisition parody.
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?
So I’ve seen a few complaints about the exercises that are set but to be honest the problems are absolutely straightforward. They do not contain any trick elements, deliberate errors or unintentional errors (they get peer-reviewed pretty heavily and some of them have been around for a while). When you say they are nonsensical I think that is untrue and certainly it can turn me off a candidate. Particularly if they “solve” their interpretation of the problem instead of the one asked in the exercise.
Do we ask people to work for three days for free? Well the problem is meant to be solved in three days but there is some flexibility. I believe I did mine in two evenings but due to the needs of the job I was doing at the time I started two days after I was asked and probably submitted on the fifth day after I received the problem.
Is ThoughtWorks like that? Well to be honest, yes it is. People do amazing things in their spare time that really benefit the company and their colleagues. It isn’t really a 9 to 5 job. If you resent that then it probably isn’t a good fit.
I’d like to say that not getting feedback on a submission is a rare thing but I know that in fact it happens a lot. I always put down what I liked and didn’t like about a submission and sometimes I put some detailed notes down to provide to the candidate. But I don’t follow up whether these get passed on.
I do think we should be better about this. In this respect actually working at ThoughtWorks is a lot better than your experience. It does actually have a good feedback culture.
I have recently applied for Thoughtworks and received an email from them about my availability to discuss my application and I emailed them back about the date and time and I have not received any acknowledgement email from them but how ever I was waiting for their call .
It might sound a bit silly but is it worth giving a call or sending an email
Oh I have applied for an Expression of interest for Junior Test Analyst position at TW Australia
Any info would be appreciated
Hi there, you should definitely send another email. Recruiting can sometimes get messy, particularly around scheduling. In all probability it has just got lost in the shuffle.
Anyway, I have just been reject because a guy judged that my code was not ObjectOriented enough. Lets say that in my opinion what happened is that I did not used the code convention expected by the thoughtworkers. I did make tests, created a readme file for helping compiling and running the examples. In my opinion, for a collaborator one should have the ability to write bug free code and I’m sure that the code I’ve presented did so.
Why we need to brainless mark variables inside a class as private if their only purpose is to be used with two methods set and get. This is not elegant at all. I did this choice consciously. Moreover, in a company that expect innovative people tshould consider that slightly difference in the way people write programs can rise the discussion of how things can be best done.
I have serious doubts about the future of tw.
Ph.D. Pedro Velho
So I do not work at ThoughtWorks any longer (I’m now trying to launch a startup called Wazoku (http://www.wazoku.com)) this means I don’t have any insider knowledge anymore but that I can be freer with my opinions.
I haven’t seen your code but from what you say you do have some opinions that would need to be backed up. One thing that you weren’t to know is that getters and setters are considered poor form in ThoughtWorks (see Object Calisthenics from the TW Anthology and this post by Mark Needham http://www.markhneedham.com/blog/2008/11/06/object-calisthenics-first-thoughts/). Now it is not an automatic fail but it tends to indicate that someone is programming by theory or rote, better candidates will express their code in a domain form. Still if you write good but conventional code that isn’t a barrier to passing unless you want the more senior positions.
Encapsulation can be an automatic fail though. A variable that should only be manipulated by a setter must be private (if this is Java) as otherwise access to the variable is not limited to the setter method (look at the default access rule in the documentation). If this is what you did then yes it would look like you did not understand OO encapsulation and you might fail. In fairness to TW you also would also fail Oracle’s Certification questions on this as well.
Don’t be disheartened though! While there is a TW brand of OO code, you don’t need to know it before you join. Try and understand why other people think “brainless” stuff is important. If you do become a consultant remember you’ll need to understand your “brainless” clients too!
I realized ThoughtWorkers are like Scientologists … they will do anything for it, and they have this “young and cool” wannabe image… Smart? no… but weirdos… I had the impression that if you’re “normal” you don’t fit in…
I submitted my code and got an email the next day itself asking me to visit their office and to provide them 2 interview date options. I first replied back asking them if it was possible to conduct the next rounds on a weekend. I did not get a reply for a day so I sent them an email with some dates I could make it for the interview. It’s been 2 days since I sent them this email but no reply yet. What do you suggest I do next? Send another email or call the recruiter directly?
What could be the reason for not replying to any of the emails?
Well bear in mind that I don’t work for ThoughtWorks any more and I wasn’t really involved in TWI so this isn’t official.
I would simply call the recruiter if you have their number otherwise just another email about 4-5 days after the last one you sent.
The most common reason that people do not respond to your emails is that they are simply busy with a lot of applications. There is also the psychological effect that you might be very invested in your application and it has a lot of importance to you but the people on the other side are trying to go through maybe 40 to 100 applications and you aren’t really an individual for them yet.
Thank you for your reply! I was interviewed by ThroughtWorks at their pune office a few days after my previous comment. I understand that you no longer work with ThoughtWorks, however, I would like to share my experience with you and anyone following this blog.
The first round :
This was a code pairing round where I had to pair with a ThoughtWorker and discuss the solution I had submitted. I started by explaining my code to the interviewer. I had spent a lot of time going through my code and identifying any loose ends a few days before my interview and was able to point out the modifications we could make to my code while explaining the code itself. There was a golden moment where the ThoughtWorker said that he was going to tell me to make the change I had just pointed out myself. He asked me to refactor my code for this change. The refactoring went pretty well as I managed to modify the code without breaking any tests. Once the tests went green, I removed the trailing code and updated my test cases to finish off the refactoring. The interviewer then asked me how I would go about implementing an extension to my code. After a few invalid attempts, I was able to come up with the exact solution that he was looking for. On the whole, I feel I did extremely well in this round.
The second round :
This was a technical interview with two interviewers instead of one. It began really well. I was asked a few programming related questions on the languages I was experienced with which I feel I answered well. I was then asked to provide the design for a very simple problem. I screwed up badly on this task as I was not able to come up with a design to a very simple problem statement. The interviewer ended the interview abruptly and said that we have spent more time than the time assigned for this round and we should stop. I don’t blame him for wanting to end the interview as I was running around in circles for a simple design problem.
The third round :
This was again a technical interview with two different ThoughtWorkers. I was again asked questions about the technologies I had mentioned on my resume. The questions focused more on the purpose of each technology rather than the technology itself. I was asked to solve two problems during this round. I was able to solve the first problem but I don’t think I was able to provide a good and complete solution. The second problem is where I screwed up badly. It was a simple database schema design problem which I should have nailed easily. I ended up getting stuck a way many times than not and needed the interviewers to guide me in the right direction. It was more of the interviewers solving the problem than me. Another perfect screwup from my side.
The last round :
This was a written test with some logical problems in the form of a flowchart. I was able to answer 8/11 questions. I feel that I answered all attempted questions correctly as I solved each question twice. Although I am pretty sure they were expecting that all questions were answered because this was not at all a difficult test. I feel I screwed up in this round as well by not being able to solve all the questions.
Last thoughts :
I loved the process. All the people I interacted with were genuinely nice people. There were some instances where they passed rude remarks but nothing that was uncalled for. The probability that I will be hired is very very low since I screwed up in way too many places. Although I spoke confidently and fluently and showed a lot of patience and calmness throughout the interview process. I hope this gets me some bonus points!
I understand that you no longer work with ThoughtWorks but I would really appreciate it if you can tell me whether I have the faintest chance to get a call saying I have made it through 😉
I think interviews are sometimes a bit like sex, if you have to ask whether it went well it then it probably didn’t.
I think the important thing is to try and learn from the experience and if it doesn’t work out this time try again later when you’ve had the chance to change a bit.
Nice analogy! I learnt a lot from the interview process. I honestly feel that most questions were very simple if you have stayed in touch with the basics. That’s where I lost, I have completely lost touch with the basics.
I almost forgot that the recruiter told me that there was one more test left. Since it was already 9 pm by the time I got done with the logical test, she said we will have to conduct this test on some other day and she would be call me and let me know when to come for this test. How long does ThoughtWorks take to inform you whether you got through or not and how long before you get a feedback? It’s been 2 working days since my interview so just a bit curious
No I have no idea and usually unless it is a very clear yes or no then that part of the process can take a while.
What if you don’t complete the programming exercise? Will you automatically be denied? I’m looking more into consulting, and I can code, but I’m definitely not up to par with all the code monkeys, especially since I started programming a year ago.
I forgot to mention that I’m applying for an entry level position.
So I am not really qualified to answer this as I don’t know what the current graduate requirements are. However if you are applying for a developer role then essentially you need to be able to pass the programming test. After all what clients expect from a consultancy is really great developers.
However for a truly entry-level position then the pass grade for the test is different from an experienced hire.
Still I think it would be worth reading things like Growing Object-Oriented Software with Tests, the ThoughtWorks Anthologies and language appropriate books like Effective Java and Dive into Python. People, not just ThoughtWorks, expect you to know the social mores of your chosen language and their house style.
I was recently contacted by ThoughtWorks regarding a junior consultancy program. I finished the test that they gave me and I was told that it would take 1-2 weeks maximum to get back a call, both the test and the questionnaire seemed fairly easy so I know I did good at least. After three weeks of waiting, when I send thoughtworks an e-mail, a few moments later I get an email from a recruiter saying sorry they are unable to proceed with my application without any reason. This seems like something done in a rush because the person didn’t want to spend enough time to go through my application and even try for a second stage phone interview or something else entirely. Seems very unfair, what can I do about this? and is there anyway for me to find out what exactly happened with my application?
It depends on whether you applied in Europe or not. If you did you can request your application notes, otherwise I’m not aware you have much recourse. I think it is often a mistake to assume that tests were easy, one of the classic cognitive biases is over-estimating your performance.
Try and be humble and go back to the recruiter and ask for feedback to help understand the issues around your application. If you are aggressive then people are going to be less inclined to want to help you. Also try and understand whether it would be okay to apply again in the future. If the answer is yes you just need to develop your skills along the lines of any feedback you get.
Hey Thoughtworks is visiting my college this thursday.Where should I practice the coding and the written text questions from?
I think if you want to practice programming then the Ruby Quiz problems are good.
The longer you work, the more you realize that ~ 60-80% of all this coding style etc is just marketing baloney, selling books and services, etc. Clients don’t care how products are made. iPhones are made essentially by slaves, yet you buy them willingly. Just get the job done. Nobody cares about your nuance of “style”.
Additionally, while you stress about class x or template b as you work overtime, your bosses, agents, and “managers” are spending cash made on your back. The don’t give a shit about your class x or template b. Don’t be a sucker. Coders, and ‘consultants’ are just cash machines for agent parasites and “bosses” who are cashing in the real money while you work for slave wages and put in overtime.
here is another funny post of a person who didn’t make it.
More action :
This is a well thought of feedback .. unlikely anyone has even read it ..
Do you have any information on the two year associate training program for entry level developers? I was wondering how rigorous the interview process for this is since they don’t want anyone with more than one year experience with OOP.
I don’t as I left ThoughtWorks a number of years ago and now work with the Guardian here in the UK. I think it would be reasonable to assume that the process will be rigorous but maybe not focussed on particular programming practices or languages.
I had interviewed at TW 6 months back and got rejected in code pairing round. May be because of poor convention in the program. I have applied again. I think this time I have prepared quiet well to clear round (just a being positive).
But still have some nervousness, as this will be a second time. So, can I apply again ?, if I fail.
I no longer work at ThoughtWorks but most companies will accept a reapplication after a year to two years. In most cases though it would be good to look for a job with a different but related firm to help build up your experience. Good luck.