Interviews at top remote work platforms like Toptal, Crossover, or any other applicant vetting marketplaces are tough to crack. As part of the screening process, some of these sites will normally ask you to develop a project to evaluate your software engineering skills. I have cleared interviews at most of these places as well as reviewed dozens of projects myself. Let me give you some personal advice.
These projects will normally take 10-15 work hours to complete, depending on your experience. It's a ton of work but it pays off once you land the job. Play it intelligently and spend those hours doing what's absolutely necessary to ace the interview.
These are the 8 points I think you should consider when developing a full-stack project for an interview test project.
Show your interviewer you're not just about building novel features. You think about maintainability and long-term project health so you're concerned about unit testing. There's no time to be exhaustive, don't take it to 100% coverage. Add some tests to the most important features both in the frontend and the backend. You can consider shooting some integration tests with Cypress which is easy to set up and will show how you think about integration.
This is a must. You'll probably be asked to implement an API that needs to CRUD 2 or 3 entities. Say, for instance, you're implementing a reminders manager. You'll have lists and reminders. Make sure you build your API following proper Restful principles. Having endpoints like
GET /lists/:id/reminders/:id looks much more readable and maintainable than
POST /lists/:id/change-reminder-name?id=:id. Please use the right HTTP verbs wherever appropriate. There's nothing worse than seeing GET endpoints that mutate the DB state.
With absolute certainty, your interviewer will ask you to do add a new feature to your project. If you built your front and back in a scalable way then you will have no trouble doing this. What does this mean? In the frontend, it will probably mean you can create new router and pages easily, you can reuse existing models, easily put components behind the auth wall, etc. In the backend, this will probably mean having a proper DB schema to add a new model, have a good role and permission system in place, have a correct util/shared file architecture, etc.
Apply to Toptal with my referral code and we both get 500USD once you land your first job: https://www.toptal.com/#join-only-great-devs
Don't hide behind that comfort wall of "I'm an engineer so I suck at design, but my code is elegant". Final users can't care less, they expect something that works and looks good (don't call me off with exceptions like Reddit or Hackernews). If you call yourself a full-stack dev, your clients will expect you can pull off a decently looking site. You probably don't have design skills but you can play it smart. Get yourself some package like angular material, tailwind, or some other component framework and make sure to follow their guidelines. Don't get creative, it's not the time to discover your inner Picasso, just copy and follow the rules from those libraries.
Auth is critical in 99% of the applications you'll create. If you're interviewing for backend or full-stack, make sure your auth game is strong. Study how to hash passwords with salts, how oauth2 works, and what they offer in terms of security, how users are safely stored in the DB. If you don't know any of that, don't be intimidated. I learned all that in two days straight and put it into practice in the next few days. Interviewers will probably ask you to add a new role or to guard an endpoint behind an auth wall.
You need to be confident in supporting your decision to go with NoSQL or SQL databases. This intuition surely comes with years of experience but you don't have years to pass the interview. Get yourself familiar with those types of DBs, read tutorials, watch Youtube videos, check examples online, and implement yours. Make sure you know how to change the schema, alter data, add new models. If you're using NodeJS + Express you can get an ORM like Mongoose to help you with all that.
This goes hand in hand with authentication. Make sure you know how to properly implement route guards both in the backend and the frontend. A route guard is a mechanism to protect your URLs (client) and endpoints (server) from being accessed without authentication. Frontend frameworks come equipped with these mechanisms already and backend apps can leverage something like JWT to validate users.
Now, keep in mind this might be opinionated. It's based on my experience both as a candidate and interviewer. It'll depend on what the interviewer is most inclined to (whether back or front) and their experience with the stack. But, all in all, if you're able to follow these steps you're off to a great interview.
I've used these same concepts to ace interviews at Toptal, CrossOver, Number8 and a few more top remote work platforms. Now I'm writing a FREE guide with a lot of tips and tricks to ace remote tech interviews. If you're curious, you can sign up on the waitlist here and be the first to get it.
Let me know on Twitter if you have gone through any of these interviews. Would you suggest something else to have a world-class backend? What do you pour into your frontend to make it look clean and polished?
I normally write about career growth, interviewing, algorithms, and remote work. Follow me and enjoy some of my other articles on tips for your resume or get curious learning how much you can earn in Toptal or Crossover!