Background
I first heard about ThoughtWorks last year from a good friend of mine whom I consider a mentor and one of the brightest technologist I have ever met. After doing tons of research on ThoughtWorks, I decided that at some point, I would love to work for this company. After allowing quite a bit of time to pass, I finally worked up the nerve to interview with ThoughtWorks. Many people have blogged about their experiences with the ThoughtWorks interview process and I vowed that I would do the same, regardless of the final outcome.
Disclaimer
As a disclaimer, I want to state that this is not a definitive guide on how to “crack” the ThoughtWorks interview, nor will I disclose any detailed interview questions or code I wrote for the code challenge. I am writing this blog to offer a high level view of the ThoughtWorks interview process for those who are considering applying for a position at ThoughtWorks.
ThoughtWorks Recruiter
I reached out to a ThoughtWorks recruiter on LinkedIn and politely asked him if ThoughtWorks was hiring. He indicated that ThoughtWorks was always looking for developers and asked me to send him an updated resume. After a day, the recruiter got back with me and wanted to schedule a non-technical phone interview.
The interview with the recruiter was pretty straightforward and quite enjoyable. I felt that the recruiter was extremely honest about what ThoughtWorks was looking for and he was able to answer all the questions that I had. What really stood out to me during the interview is that the recruiter really seemed to try to find out what type of person I was and my awareness of world events. I have always been good about keeping up with current events and I really love reading books about the Civil Rights Era and social justice in general, so our discussion was enjoyable. After the interview was over, the recruiter told me that he felt I was a good fit personality-wise and that he had sent me a set of code challenges to choose from. Unfortunately, I had two production releases that week and I knew I would be completely under the gun to finish the code challenge in 4 days.
Code Challenge
I received 3 coding challenges from the ThoughtWorks recruiter and I was to choose one of them to complete. Based upon the research I had done on ThoughtWorks, I knew that they were looking for good design, unit tests and readable code. I received the coding challenge on a Tuesday and I really didn’t start to work on the assignment until Wednesday. The code challenge that I chose was a scheduling problem. I was given a list of speaking talks, their duration, some basic scheduling rules and I was to write a program that would schedule these talks based upon these rules. The coding challenge was not a problem that you would normally find when developing enterprise software but more of a problem that would be assigned in an advanced programming class in college. Since my knowledge is primarily from the Microsoft Stack, I wrote the application in C#. I didn’t start working on the problem until Thursday of that week and after spending all day on Friday and Saturday working through the solution, I was able to submit the finished application on Sunday morning.
Unfortunately, after I submitted the assignment, I later found that my application would not run unless a data file was in a certain directory. Reading data from the file provided by ThoughtWorks was something that I focused on at the end and I didn’t unit test this part of the code and unfortunately, it was too late to fix the issue. However, I decided to make the necessary changes because I was disappointed in myself and I was still alive in the interview process, so it wasn’t going to hurt.
Re-Routed
After you submit your solution, you are either informed that your submission was insufficient and the interview process is over or you did well and you are invited to come to a ThoughtWorks office and take part in onsite interviews. Unfortunately for me, there seemed to be some debate on how well my code submission was. I was told that one individual gave me a low score and another individual gave me a high score and that I would have to take part in another technical phone screen with another ThoughtWorker to break the tie. The interview was pretty straightforward and it was extremely interesting because the person who interviewed me had around 25 years of experience and had worked extensively with Robert C. Martin. The interview lasted for quite some time because after the official interview was over, we had discussions on technology, what he thought of some of my design decisions in my code submission and he even recommended a few books.
Onsite Interviews
After a few days, I was contacted by the recruiter and informed that I had done well on the phone screen and that I was invited to the ThoughtWorks Dallas office for the final round of interviews. My interview took place on a Friday and the hostilities..erm..uh..festivities started at around 11 AM. Another ThoughtWork’s hopeful interviewing for a Business Analyst position was also onsite to do face to face interviews. First, we were given an exam that resembled a standardized test and allotted an hour to complete as many questions as possible. Next, we were given about 90 minutes to work through a series of complicated flowcharts that increased in complexity as you progressed through each one.
Afterwards, I had a pair programming interview with two ThoughtWorkers. In this round, I was asked about my design choices, why I made them, write more unit tests and give my thoughts about the quality of my code submission.
Next up, I had a technical interview with two ThoughtWorkers where I was not only quizzed in great detail about certain aspects of software development, but asked to expound upon my opinions.
Last, I had what ThoughtWorks refers to as a “P3” or “values” interview. In this final round, I was asked my opinions about current world events, my involvement in any social justice initiatives and what type of open source projects I was involved in outside of work.
Thoughts
Overall, I thought the ThoughtWorks interview process, though lengthy, was fair, innovative and for the most part, I enjoyed the process. I felt that the interviews really stretched my abilities and offered me ample time to get to know the company and the kind of people who work for ThoughtWorks.
Advice
The best advice I can give to anyone that is thinking about interviewing with ThoughtWorks is to do your best and demonstrate what skills you have at the time you are interviewing with ThoughtWorks. I think many candidates make the mistake of trying to read up on design patterns, software practices and technologies they are unfamiliar with to impress ThoughtWorks. I feel that when you are not genuine about where you are as a technologist at the time of your interview with ThoughtWorks, it will show up at some point during the interview process and this can decrease the odds of you getting the job. Also, as you progress through each round, try to forget about any mistakes you felt you made during the previous round. If you are fortunate enough to make it to the onsite interviews, try to relax and as I stated before, just view each round in a vacuum and do not mentally dwell on how you did in the previous round.
Happy Interviewing!