In this blog post, I will share my experience on the Toptal interview and how you can prepare to pass it.
Some time ago, a co-worker of mine posted an article in HipChat about an ex-Googler making three times as much with a company called Toptal. That immediately caught my attention and I started looking for information about the company. Pretty soon I discovered it is a platform similar to Upwork (was eLance and oDesk) but with the important difference that you can set your own rates. That is great, I thought, but entering it did not look so easy as they accept only the 3% of the applicants.
Motived not only by the cash but also to prove my skills, I polished my CV and sent in an application. Quite soon I received a reply from a recruiter asking to schedule a time for the first interview.
There are four interviews: one focused on communication skills, a coding test on Codility, another coding test on skype and a final interview on a project you are asked to do. It is implied that you are already very familiar with the technology stack you applied for, i.e. you are a senior developer in it. In my case this is Android.
Round 1: Communication skills
The first interview was fairly easy for me, perhaps because English has become my main language. I would recommend being at least at the B2 level of the CEFR and C1 is even better. That said, keep in mind that English is not the only point, your online presence such as a blog or you open source contributions do matter. They also try to gauge your motivation and enthusiasm and the reasons behind your application. I was also asked my rates, although the number that matters is the one you give in the fourth interview. All in all, a typical (short) HR interview, so prepare accordingly.
Round 2: Coding challenges on Codility
After you pass the first round, the recruiter will send you an email with two links on Codility, a practice test and the real test. Keep in mind that the solutions are ranked automatically so take the practice test and
understand how the platform scores the submissions. In particular, you might be familiar with other platforms or coding competitions where the input is always well-formed. Codility is different. It will test your code on all possible edge cases, so keep an eye on null values and overflows.
The test itself is made out of three problems for which you have an hour and a half. They were sorted by difficulty level, so try to be faster on the first to have more time for the last two. Manage your time as if it were an algorithmic competition. The difficulty was lower than the Google CodeJam but higher than many problems I have seen in interviews. Do not underestimate them and prepare accordingly.
This is probably the most difficult step of the interview process. To prepare I recommend Gayle McDowell’s Cracking the Coding Interview, 6th Edition. Do all the algorithmic exercises, especially the moderate and hard ones. After that, try some problems on TopCoders and from the past Google’s CodeJams. Another good free resource is InterviewBit. As a technical interviewer myself, I plan to write some posts or make some videos on how to approach a technical interview in general. Let me know in the comments below if you are interested.
Round 3: Live coding
If you do well on the second round, you will receive an email to schedule a third interview with a Toptaler. In this interview, after discussing briefly the round before, you share the screen with a software engineer and solve two tasks he assigns to you. You will have roughly twenty minutes per task, although this may vary I suppose.
The tasks are similar to the ones of the second round. In my case, they were also in order of difficulty. You can use your own development environment but you cannot use Google or any other resource which is not documentation. I suggest you set up an empty project with all the dependencies you need (e.g. JUnit) so you don’t waste precious minutes during the interview. Prepare like round 2.
Round 4: Project discussion
After you pass round 3, you will receive instructions on a project to complete and discuss. Your first task will be to estimate how much time you need to finish the project and commit to a date to deliver it. This makes total sense to me because as a freelancer you will be doing it all the time. I appreciated it. After the commitment, you schedule a meeting with another interviewer for the final discussion.
In the meanwhile, you also receive access to a private git repo on which you push code. The project itself should be ”usual business” and it is probably the easiest part, surely the one that feels closer to your normal job. Anyway, that said, this is not a trivial project. The logic itself is complex enough to show your skills and just hacking something up will not cut it. Put into practice all the good engineering principles you learned over the years and you will be fine. In my case, I also delivered some extras which were received as a good sign.
The discussion itself is not really difficult, but keep in mind you are in an interview. Be ready to justify your decisions and to explain the architecture of your project. This part is what you should be doing every day at work so I will not elaborate further. After the discussion, you set your final rates. Finally, after the interview, you will receive a link to a new shiny profile to fill out. Congratulations you are in!
The interview was a nice experience for me. The algorithmic challenges were tough but not impossible and I learned a couple of things in the final project as well. Keep in mind the time you will spend though: the whole process takes around a month with the final project taking up a full week (or two weeks if you work part-time like me).
I have not had time for any work engagement yet. I will follow up with my impressions after I complete some. In the meanwhile, if you feel up to the challenge, go and apply here. Good luck!