Skip to content

Take the next step to join Ad Hoc

Once you've applied for an open position, one of our recruiters will review your application. If they believe you're well-qualified, they'll ask you to complete one of our homework assignments.


Start with one assignment. We'll ask you for more if your first submission passes our review. Read each assignment carefully for important information on completing each problem.

This is an open-book test, so feel free to use search engines, but don't copy your work from pre-existing solutions you might find or ask others to help you complete the exercises. Engineering solutions should be able to be run on a UNIX command line (Linux/Mac). We're familiar with Go, Ruby, JavaScript, Java, and Python. You may submit in another language, but let us know how we can set up our environment to run your code.

Engineering assignments UX assignments

Evaluation process

Our subject matter experts will review your homework. We assign submissions a random number so our team doesn't know whose homework they're grading. This lets us grade without any preconceived notions of abilities and ensures the first evaluation is based solely on the solution you deliver.

Read about why we use homework for recruiting.

Getting help

Use the chat button in the lower right to contact us if you get stuck or have a question. We'll reply as soon as we can. If you submit the question outside the hours of 9 a.m. - 5 p.m. (ET), come back to this page later to check for a reply.

Quick tips

We want to see how you approach the problem, understand what's being asked, and solve it. This is the first stage in our hiring process, so please don't feel pressure to demonstrate every skill you have.

  • DO submit the homework as if you were giving it to a coworker for code review.
  • DO aim for a clear and concise MVP for your solution.
  • DO follow directions and solve just the problem in front of you. There's no need to over-engineer the solution.
  • DON'T submit multiple solutions. Choose the approach and language you feel is best.
  • DON'T include unit tests. We won't run them.
  • DON'T worry about handling arbitrary input, unless the assignment explicitly requires input validation.