Toptal is one of the most exclusive freelancer networks out there, claiming to accept only the top 3% of applicants.
Once you're part of the network, you're part of it pretty much forever. You have the option of going for long-term full-time jobs, temporary full-time, or part-time gigs. You set your own hourly rate, but based on Toptal's price lists for companies, a good approximate is $50-$85+/hour (USD).
Wanting to give the contractor life a try, I joined the platform over a year ago and have just recently logged my 2000th hour. It's been wonderful so far. The clients are professional, the pay is excellent, and working remotely as a contractor is as flexible as it gets.
In this post, I'll be going through the steps of joining the platform as a developer while sharing some effective strategies, tips and tricks to maximize your chances of getting accepted.
If you're thinking of joining, apply to Toptal using my affiliate link and we'll both get $500 ($2500 for certain skill sets) when you land your first job. Feel free to DM me @denhox and I'll help you out however I can.
Step 1 - Brief intro and language evaluation
Difficulty: ๐งก๐ค๐ค๐ค๐ค
This introductory step won't take long, about 5-10 minutes. You'll be invited to a video call where you'll give some details about your experience and what you're looking for at Toptal. The goal is to assess your English & communication skills. Be genuine and comfortable, this step is nothing to worry about.
Step 2 - Algorithmic Challenges
Difficulty: ๐งก๐งก๐งก๐งก๐ค
Things get interesting from here. For your first technical assessment, you'll be given a link to complete a 90-minute coding test with 3 algorithm challenges.
Some info on the challenges:
- Your solutions will be assessed by their correctness and performance.
- You're not guaranteed to get the same problem set as another candidate.
- The acceptance criteria is quite ambiguous. From my observations, you're not required to solve all of the problems, and there is no set score threshold.
There are no shortcuts to this step (or any of the next steps, to be fair), so a lot of it comes down to your experience in solving algorithmic challenges. Even experienced applicants will have to brush off some dust before jumping in. However, there is a clear roadmap on how to get to the level you need.
Preparation
Familiarize yourself with the algorithm challenge format. All challenges have the same structure: the problem statement, input, and expected output format. Go through the Codility practice test to see this structure, and also familiarize yourself with the platform.
Choose a programming language you're most comfortable with. Nail down its string & array operations, arithmetic, data structures (especially maps), and bitwise operations.
Practice on sites like LeetCode, HackerRank, and CodeWars. You can even combine them for more variety. Here's a brilliant curated list of 75 LeetCode questions that cover a large variety of exercises. Also, check out the Codility lessons.
Time yourself as you get deeper into practice. The real test is timed and has the pressure factor, so you should simulate this during practice as much as you can.
Strategy
The main goal is to get the highest overall score you possibly can.
The optimal way to do this is to gather as many points from all three challenges. Aim for breadth rather than depth by giving each task a fair shot, versus putting all your eggs in one basket by focusing your efforts on only one task.
Therefore it stands that to achieve the most gains you want to give an equal amount of time to each task and no more. Put your full focus into one task, but once its 30 minutes are up, drop it immediately and move on to the next one. If you solve a task in less than 30 minutes, congrats! You just added some bonus time to the remaining ones.
Solving a task against the test input doesn't necessarily mean your solution's correctness is going to be 100%. After submission, the platform will test your solution against some hidden "real" input, which will ultimately decide your correctness score. But don't let this bother you too much. If your solution passes the test cases and its time is almost up, move on.
The key is to aim for the correctness points of all three tasks first, and only put effort into improving your algorithm's performance if there's time remaining at the end. One little obstacle in scoring for performance is that the platform won't give you any performance measurement indicators, it only judges it after your official submission (which is too late anyway). So, for performance, you'll have to figure out the algorithmic complexity yourself and decide whether it's good to go.
Step 3 - Live Coding
Difficulty: ๐งก๐งก๐งก๐งก๐งก
Welcome to what I believe is the most difficult step. According to Toptal, your chances of passing this phase are 48%. Looks pretty good to me!
This step is essentially a validation of your algorithm-solving skills, but by a human in a real-time video session. You'll have to solve two algorithm challenges, with 15 minutes each.
Have your development environment set up and ready with a barebones "Hello world" of your favorite language, ready to roll.
On joining the call, the Toptal technical screener will greet you, ask you a bit about the challenges you had in completing the previous step, and then ask you to open a webpage in your browser where they'll present you with your first problem statement.
You have less time to come up with a solution in this round, although the problems are of a slightly lower difficulty than the previous step. Correctness is everything and it's crucial for your solution to produce correct output. Performance does not matter as your solution won't be tested against huge input.
Preparation
Improve your speed by incorporating timing into your practice, and practice more. Use a timer for understanding the problem statement, and limit that to a maximum of 3 minutes. Then use a timer for the coding part, with a limit of 15 minutes.
Practice thinking out loud while you're understanding the problem statement, planning your solution, and while writing your code. Verbalize your thought process. See the strategy phase below for why this is important.
Strategy
The absolute number one tip for this step that I don't see people doing enough is to think out loud during the entire process. Most screeners will jump in and correct any misassumptions or give you a little towards the correct solution if they notice you might be wandering off the path. They will only be able to do this if you allow them to follow your thought process, and that's why you have to verbalize every decision you're making, from analyzing the problem statement to writing the code.
Spend as much time as possible understanding the problem statement before starting the timer. The screener won't start the timer until you say so, and you shouldn't say go until you've digested the problem statement entirely. There's an unwritten limit of course, but it's on you to prolong this as much as you need.
Do not make assumptions. One of the biggest reasons that candidates fail this step is that they make an incorrect assumption in the problem statement, eager to jump right into the code. Ask about any part of the problem statement that is not crystal clear to you, before starting the timer.
Identify the problem's edge cases and say them out loud too. As you might already know by now, edge cases in these algorithmic challenges represent some risky traps that require some special handling in your code.
Step 4 - Test Project
Difficulty: ๐งก๐งก๐งก๐ค๐ค
You're almost at the finish line! According to Toptal, about 88% of applicants pass this phase. Looking good. ๐
You will be sent a project assignment to complete within 2 weeks. The project depends on what you applied as (backend, frontend, or full-stack), but it'll typically take up to 40 hours. Plan accordingly.
The project assignment contains a list of functional and non-functional requirements that your project will have to fulfill. You'll be given access to a private Git repo to push your commits. Make sure you don't push any commits after the 2 weeks are up.
When you're done, you'll be able to set up a meeting to demo your project. During the demo, the screener will ask you to go through every requirement as they check them off the list.
The biggest factor for success in this step is (surprise, surprise) the sum of your technical project experiences so far in your career. A rough prerequisite for applying to Toptal is about 3 years of experience, which you most likely have if you've made it to this point.
Strategy
Use correct HTTP status codes and other semantics. Your project likely involves an API to build, consume, or both. The technical screener will verify that you're returning correct HTTP status codes for invalid input (400), non-existent resources (404), unauthorized requests (401), insufficient permissions (402), redirects (3xx), and a catch-all server error response (500).
Test extensively and make sure your project is clear of bugs and unhandled exceptions. An unhandled exception during the real demo will likely be fatal.
Rehearse the demo at least once. It's extremely likely you'll catch a missing piece of a requirement, or stumble upon an exception.
Conclusion
When the last requirement is ticked off the list, you're done! Congrats! ๐
The screener will congratulate you and set your account and Toptal email up for onboarding. You're officially part of Toptal and can now apply for jobs, which in itself is a challenge that I'll be writing about in a future post.
If you're thinking of joining, apply to Toptal using my affiliate link and we'll both get $500 ($2500 for certain skill sets) when you land your first job. Feel free to DM me @denhox and I'll help you out however I can.
Got any questions? Have you had a different experience when joining? Anything I might have missed? I'd appreciate it if you could let me know @denhox.
Good luck!
Top comments (1)
Thanks for the informative article! I think it describes the Toptal process quite well. How has Toptal been for you since joining? A follow-up article could be great