Remote technical interviews are a DX nightmare - here's how to fix them

Remote technical interviews are a DX nightmare - here's how to fix them

TLDR: Prepare a ready to use environment where engineers can show off their skills

There's a problem with the live technical interviews - the tech. Latency during Zoom calls is one thing, but when you add installing NPM dependencies, incorrect Node versions, busy ports - you end up in a tangled mess.

Whether as an interviewer or an interviewee this is incredibly frustrating. What's more often times people's careers are at stake. With all the anxiety that an interview already brings the last thing you want to see is an error because you're using Python 2 and not Python 3.

After yet another interview where a candidate had a hard time getting started with the code assignment I use for interviews I decided enough is enough. There has to be a better way?!

In this case, the problem can be a solution too. You just have to out-tech the tech.

The tool that helped me break this endless cycle of sadness is Gitpod. It's akin to GitHub Codespaces apart from a few minor differences but the important thing is it allows you to spin up individual development environments that have everything you need.

I'm not just talking about having the right version of Node. Interviewees are a click away from being presented with a Visual Studio Code instance that:

  • has all dependencies preinstalled
  • has the test application running
  • has client and server tests running on watch mode

All they need is a GitHub account, a browser and an internet connection.

Getting started with Gitpod is very easy and well documented.

Once your Gitpod project is configured you'll end up with a YAML file in your repo that might look a little bit like this one:

# https://www.gitpod.io/docs/config-start-tasks#wait-for-commands-to-complete

ports:
- port: 3000
  visibility: public
- port: 8000
  visibility: public

tasks:
- name: Install dependencies
  before: cd full-stack-test
  init: npm i && gp sync-done dependency-install

- name: Run client tests
  before: cd full-stack-test
  init: gp sync-await dependency-install 
  # the command won't run until dependencies are installed
  command: npm run test:client

- name: Run server tests
  before: cd full-stack-test
  init: gp sync-await dependency-install 
  # the command won't run until dependencies are installed
  command: npm run test:server

- name: Run app
  before: cd full-stack-test
  init: gp sync-await dependency-install 
  # the command won't run until dependencies are installed
  command: npm start

Projects are automatically prebuilt so there won't be any waiting around when the interview starts. You just need to make sure the candidate has access to the repo and instruct them to go to gitpod.io/#https://github.com/<your-org>/<your-repo>. After they login in with their GitHub account, they'll be automatically enrolled in Gitpod's free plan. If everything goes well they'll be ready to code in 60 seconds.

I've gotten very positive feedback from candidates who've experienced this improved development experience. In one case a candidate chose to use their own PC for the interview. Soon they realised it'd take them too long to clone and set up the repo, so they quickly switched to Gitpod and began coding. Instead of the interview being completely derailed we only lost a few minutes.