I did it! I successfully passed the grueling Toptal hiring process, and am now a Toptal-er. The process of making it into the top 3%, however, definitely wasn’t easy.
There are already a bunch of blog posts out there about different people’s experiences (good or bad) with the Toptal hiring process. Not surprisingly those that passed tend to have really good reviews of it, and those who failed… well, not so much. I’d like to add my voice to the chorus in as balanced a tone as I can.
Step 1 – The screening interview
After submitting my application, résumé, and code samples, I received an email inviting me to schedule a short phone interview. Like others have described, it’s basically just to see if you speak English fluently and don’t have a horrible personality.
I spoke with a gentleman over Skype for about 15 minutes about my background, technologies I work with, and so on. He asked me a couple of pretty standard interview questions — what experience did I have working remotely in distributed teams, and why did I want to join Toptal.
It was pretty painless and at the end he described the next step would be to take an online coding test, which I’d have to complete within the next 48 hours. No problem, I thought.
Step 1: easy.
Step 2 – Online Coding Test
I received an email linking me to Codility. The test consisted of 3 questions, and you are given 90 minutes total to complete all three.
There is also a practice test you can take as many times as you want beforehand, which doesn’t count toward your 90 minutes. In the event, I took the practice test several times because you are scored not only on the correctness of your answers, but also their performance. For me, coming up with the correct answer was straightforward, but passing the aggressive performance benchmarks was not. I quickly realized that I would only have 30 minutes per question not only to give a correct solution, but to also to make it really lean and well-factored. Now there was some pressure.
Another issue is the Codility interface itself. It’s like a mini IDE, except I really didn’t care for it. It was a clunky piece of junk. I was tempted to use my own IDE and copy my code over when I was finished, but thankfully I read some other blog posts advising against this. Codility takes screenshots as you type, so if you copy & paste completed code they’ll think you cheated. So you pretty much have to deal with the Codility interface whether you like it or not.
My advice: take the practice test a bunch of times until you are really comfortable with not only the type of questions being asked, but also with the Codility interface.
Once I began the real test, I found the questions had little relation at all to real-world problems I deal with as a web developer. They were more mathematical than anything else (I mean, seriously, when does a web developer ever have to work with negabinaries?). So be prepared for anything.
You can view all 3 questions as soon as you start the 90 minutes, and you can answer them in any order you like. So I started with what seemed like the easiest question, and worked my way down to the ones I was less sure about. In the end I was able to work out solutions for all 3 questions within the time provided, but I definitely used all 90 minutes to the full. I felt good that I had correct solutions, but I wasn’t too sure how the performance score would turn out.
Step 2: Hard (a working solution is NOT enough).
Step 3 – Live coding test
I wasn’t sure if I had passed or not until I received an email inviting me to schedule the next step of the process. This is the part where you interview with a Toptal Senior Engineer over Skype, and they require you to share your screen and solve a couple problems as they watch you code.
Now, I hate it when people watch me as I’m working. It makes me nervous. So I definitely wasn’t looking forward to this step.
After some more standard interview questions, I was given 20 minutes to solve the first problem, which was pretty easy: create a function that takes a number and returns a comma-formatted string, WITHOUT using a native function built in to your language for that purpose. For example, I was using PHP so I couldn’t use number_format(). I got it done easily within the 20 minutes and everything was fine.
The second problem I was given was to create a function that would find all anagrams of a given word, using a word list that was provided for the purpose. Again, I was given 20 minutes to solve the problem. This too seemed straightforward. I wrote out the code which should have worked, only disaster struck — it wasn’t working.
At this point I’m now in full panic mode. Rationally I know that what I’ve written should work, and obviously I’ve just missed some minor detail somewhere. However, realistically, I’ve got a Sr. Engineer watching my screen, a 20 minute time limit counting down, and all my hopes of working at Toptal about to go down in flames.
After a long pause with no activity on my screen, my interviewer asks me (very politely) “will you be able to solve it?”. “Oh fuck”, I think to myself. This is it. So I outright said what I was feeling — “Yes I can absolutely solve this, I know I’ve just missed something small somewhere, and I’m just not seeing it because I’m under the gun and not thinking clearly.”
My interviewer was sympathetic — thank God. He even gave me a hint. “Did you look at line 23?” Sure enough, I messed up an array key there. Stupid mistake I would normally have caught easily, were it not for the pressure I was under.
I couldn’t bring myself to look at the clock, because I felt sure I had gone over the 20 minutes and blown it. But just then my interviewer said, reassuringly, “I can tell you’re a good developer. I’m going to pass you.” I had passed by the skin of my teeth, I know. (And I was lucky — other people have reported their interviewers were far less sympathetic.)
Step 3: HARD (not so much because of the questions, but because of the pressure).
Step 4 – Test Project
The last step is to build a small web app. The project I was given was to build a simple expense tracking application, where users can login, filter expenses, generate a simple report, and a few other requirements.
This part was easier for me, because it’s pretty much the kind of work I do everyday already. They told me upfront that most people who pass the project end up putting in about 20 hours of work to get it done. In my case I ended up investing 28 hours into the project, but I wanted to put in some extra time on UI/UX stuff. They say you’re not graded on the design, but I wanted it to be as slick as possible. I made up a name and a logo for my test app, and even bought the corresponding domain name — because I don’t do anything half way.
I was scheduled for a final interview in 2 weeks, which is when I would have to present my app to another Toptal Senior Engineer.
When the interview came around, it was brief, and, to be honest, not very friendly. He said nothing about my slick UI or wizbang Angular filters that I thought would impress. Instead, he zeroed in instantly on a bug (albeit a minor one) in my API code that I had completely overlooked. “Fuck”, I thought again, “this is the end.”
Now, in fairness, this 2nd Sr. Engineer had probably already reviewed my code in advance, since you have to push it into a private Git repository they provide. He must have already found the bug and wasted no time bringing it up once we were talking. But basically he just wanted me to fix it while we were on the call, which I did. It was quick fix and I did it on the spot. In retrospect, I think he was just testing to see how I would handle it.
Now, pretty much every blog post I’ve read from people who made it in to Toptal reported being told “Welcome to Toptal” by the end of this interview. I wasn’t. My final interviewer told me instead that he would take a few minutes to review everything, and that he’d email me to let me know. At that point, I was convinced I’d failed. He probably didn’t want to tell me the bad news face-to-face, so I figured he’d be emailing me a rejection letter any moment.
I waited, staring obsessively at my inbox. About 30 minutes later I got an email. The subject was: “Welcome to Toptal”. I had made it!
Step 4: Not hard, but time consuming.
My hiring process proceeded along the same pattern that many others have described. The process moves slowly — in total it took about 2 months, so be prepared to see it through. (In fact, I wouldn’t be surprised if the pace is deliberate, to filter out people who lack patience to see things through, especially things that are challenging.)
It’s tough, but in terms of narrowing the field of candidates it works very well. By the end of it, if you pass, you will definitely know you’ve earned your spot in the top 3%.
That said, if you’re thinking about Toptal I’d definitely encourage you to apply. It may be intimidating (it was to me), but you really have nothing to lose by trying. You never know until you try.