Total flexibility

Every job is different, and we offer a very flexible environment to allow you to tailor an interview to your needs.


An interview is composed of one or more programming puzzles. You can:
  • use the ones from our database and get started quickly
  • create your own and control exactly what skill you want to test

Interview format

The duration of a programming test is suggested to you by our system, it's automatic, however you can also adjust the duration yourself.

Programming languages

You can let the candidate use any language he likes, or reduce his choices to a subset of the languages we support.
Or even limit him to just 1 programming language.

And the limit is per puzzle, consequently for each puzzle assigned to the candidate, you can set different language restrictions.

Programming puzzles

Use you own

You can create your own puzzles, it's a very simple process. Once they're in, you can reuse them for as many interviews as you like.

Use HireBooth puzzles

We provide a database of puzzles which is constantly updated, there is a wide variety of choices that already cover a large range of skills.
Our puzzles are carefully tested.

Tagging mechanism

Puzzles can be tagged with keywords to easily inform you of their content, for example
  • combinational analysis
  • depth first search
  • data mining
  • artificial intelligence
  • etc...
In addition you can create your own tags.
Note: From a candidate perspective, the tags are not visible while he takes the test.

Varying difficulty

The puzzles are also associated with a difficulty level, allowing you to decide which one to use for a junior engineer or for a senior one.

Last but not least: the iPuzzle

The iPuzzle lets you test interactions in programming, like thread interaction in multithreading or process interaction when programming an AJAX protocol. For more information, check the Advanced Technologies.

Code editor

No need to install anything

The code editor lets the candidate program right in the web browser.
The code written by the user is automatically compiled and executed on the puzzle unit tests.

User friendly

Syntax is highlighened for each language, the tabulations are auto inserted to keep the code readable.
In other words, it makes it as easy as possible to write clean readable code.

Detailed feedback

The output tab lets the candodate see what are the problems with his code: compilation errors, segmentation fault, memory access errors, etc...
The information provided is very detailed and helps the user debug his program.

Code history

The library tab contains the history of the candidate submissions, it effectively lets the him load any of his previous submissions.
This proves to be useful when the user wants to revert back some changes, or moves to a different computer to continue a previously started interview session.

Automated code testing

The code is evaluated by running it on a serie of unit tests. The behavior of the code is captured in several of the following ways.

Unit tests metrics

For each unit test, a serie of metrics are collected:
  • whether the unit test passed or failed
  • the time it took the program to run
  • the amount of memory it used
  • the size of the source code
  • the optimality of the solution found (in case of NP complete problems or large datasets approximations)
  • a fixed number of points if the test passed
  • and any other metric you want, our system is flexible, if a metric can be programmed, it can be collected

Language specific grading

How to compare the execution time a C++ solution versus a PHP one for example ?
That's where the language aware grading comes into play, we support language to language automatic comparison.

Protocol & UI testing

With the iPuzzle, a specific type of interactive puzzle we provide, you can test interactions such as a communication protocol. Following the same principle, UI (User Interaction) testing is made possible.

Multithreading testing

The iPuzzle is a flexible component that can also be used to test advanced programming features such as multithreading. It can be used to test hard to test problems such as:
  • correctness of a multithreaded implementation
  • race conditions

A few words about objectivity

The same standard

The same standard is applied to everyone taking the same interview.
Assessing a candidate programming skills is done by a set of metrics, which are the same for all the candidates taking the interview. The scoring and ranking process doesn't involve any human interaction, thus excluding subjectivity.

However, you can always review any submitted code if you're looking for something specific.

A world standard

For HireBooth puzzles, candidates' performance is compared against others candidates in the database. This worldwide comparison allows you to have a more contextualized evaluation of the candidates' skills and abilities.

Programming languages

Most popular languages

  • C
  • C#
  • C++
  • Java
  • JavaScript
  • Objective-C
  • Objective-C++
  • PHP
  • Perl
  • Python
  • Ruby 1.8
  • Tcl

Coming soon

  • Haskell
  • Ruby 1.9

Need another language ?

The language support is constantly updated. If you don't find your language here, contact us, we wiil add support for it.

Advanced technologies

Problem without a known solution

Let's say you want to test a candidate ability to solve a problem for which there's no known optimal solution, which is a challenge that programmers face on a daily basis.
Our scoring system dynamically adjusts itself to new optimal solutions found by candidates, scaling every candidate score with respect to other candidates submissions. This in addition has the advantage to really measure the effectiveness of a solution which would be hard to judge on a white board type of interview process.


Multithreading has becomed increasingly popular as a skill with the multicore processors now being the standard. However testing someone's ability to write multithreaded code is notoriously difficult.

To address this challenge, we have a special type of puzzle, the iPuzzle. What is specific to this type of puzzle, is that it can simulate process/threads communications, effectively capturing the mechanism of multithreading. We can simulate any number of threads, but for practical reasons we limit this number to 6 which in most situations is more than sufficient. If you have needs for more please to contact us.

Protocol testing

Imagine this situation: you want to test the ability to write a program that responds differently to changing conditions, like for example AJAX messages exchanged between a web browser and web server. Testing such a system is difficult, since testing one message at a time may not reveal memory leaks or other problems that accumulate through the exchange of messages.

Here again our solution is the iPuzzle, it provides the ability to simulate the communication between the user program and a process. Allowing to dynamically adapt the content communicated to the user program. This provides a simple and effective method for protocol testing.