Open-source project
poteto/hiring-without-whiteboards avatar
poteto/hiring-without-whiteboards

hiring-without-whiteboards: a company list whose test suite is a Markdown linter

⭐️ Companies that don't have a broken hiring process

52,271 stars3,943 forksJavaScriptMIT

At a glance

What is it?
The repository is a README of pipe-separated company entries, and its only test command runs remark against that README. Alphabetical ordering, tabs, trailing spaces, and URL slashes are all enforced by lint rules, while nothing checks whether a careers link still resolves.
Who is it for?
Treat the list as leads, not as verified fact about an employer's current process. It earns its keep for candidates who want to know what a take home or pairing round actually looks like at a specific company, and it is close to useless if you need to know which employers are hiring right now or want a comparison.
Can I use it commercially?
Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
Is it still maintained?
Yes. The repository last received commits 7 days ago.
What is it written in?
Mainly JavaScript, according to GitHub's language statistics.

Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.

Editorial analysis

The only test command lints the README

package.json has one script, and it does not run code.

code
    "test": "node ./node_modules/remark-cli/cli.js README.md -f -q"

It points remark at README.md, with -f and -q. The file also declares main as index.js, but nothing in the manifest imports it, and there is no build or publish target, so the package is a lint harness rather than a library anyone installs. Consequence for a reader: the green build tells you the Markdown is well formed, that list items are alphabetized, and that the entries match the expected shape. It says nothing about whether Airtable still runs a five hour onsite, or whether the link you are about to click resolves.

Alphabetical order is a lint rule, not a promise

The section headings from 0 - 9 through A - C and onward are kept in order by remark-lint-alphabetize-lists at ^3.0.0, wired into remarkConfig as lint-alphabetize-lists.

code
    "remark-lint-alphabetize-lists": "^3.0.0",
    "remark-lint-hiring-without-whiteboards-links": "^0.3.2",

Consequence: inserting a company in the wrong place is a test failure, which is a good property for a list that grows one pull request at a time. The same rule makes a rename a mechanical event. If a company rebrands, the entry has to move in the alphabet, and nobody reading the rendered page is told that the position is load-bearing, so the ordering looks like housekeeping rather than part of the contract.

A custom remark plugin polices the entry shape

The dependency remark-lint-hiring-without-whiteboards-links at ^0.3.2 is a rule written for this repository, and the remarkConfig plugin list turns on the lint preset plus no-tabs, no-trailing-spaces, a fixed unordered list marker style, and no-url-trailing-slash, with remark-lint-list-item-indent explicitly set to false because the entries indent their continuation text. That is the whole automated guarantee: tabs out, trailing spaces out, trailing slashes out of URLs, and a line format the custom plugin understands. Consequence: an entry that skips a field breaks the build, which keeps the file consistent, and a link that has rotted breaks nothing, because the plugin list contains no link validator of any kind.

Each entry is name, location, and process, separated by pipes

The format is uniform: a linked name, a pipe, a location, a pipe, a description of the loop. Airtable is listed as a take home resembling a problem Airtable solves, plus a five hour onsite covering UI design, architectural tradeoffs, and code debugging. Adyen's entry notes that it provides visa sponsorship to the Netherlands. AdCellerant is listed as a phone screen, a five day take home code challenge, and an onsite of cultural and technical discussions. Abstract appears with San Francisco, CA and nothing after it. Consequence: the third field is optional in practice, so a sparse line tells you only that someone put a company on the list, and a rich line tells you what to expect, with the two sitting side by side under the same heading.

Duds is the mechanism for removing a stale claim

There is a Duds section whose instruction is direct: if you have been through an interview recently and your experience contradicts the description, open a pull request to remove the company. The list therefore treats every line as a claim about a company's process that a stranger can falsify, and the correction path is the same pull request as the addition path. Consequence: entries are not validated, they are collected, and accuracy depends entirely on the applicant who noticed the mismatch and took the trouble to write it up. An entry that quietly stops being true produces no signal, and the repository has no mechanism that would tell you a company has since reintroduced trivia questions.

The pull link points at master while the default branch is main

Both contribution links in the README address the pull request page for the master branch, and the repository's default branch is main. Nothing in the tree reconciles the two: package.json, CONTRIBUTING.md, and the rest of the manifest make no mention of which branch a change should land on. Consequence for a contributor: following the page's own instructions can open a pull request against a branch that is not where commits are merged, and a first-time contributor has no way to tell from the README whether the link is stale or whether main is a convenience wrapper. Check the branch before you spend an evening on a polished entry.

Linting is switched off around the reading list

The Discussion and other reads section is wrapped in lint disable and lint enable comments, which is how a bare item reading Discussion can sit above entries that are alphabetized and fully linked. The exception is visible in the file and invisible in the rendered page, so a reader browsing the list has no way to tell which part of it is held to the project's own rules. The reads themselves span a HackerNews thread from 2017, a second thread from 2020 reached through an archive snapshot, an article on finding a better alternative to the whiteboard interview, a post on hiring engineering talent, and Aaron Swartz's How I Hire Programmers. Consequence: the argument the list rests on is argued in those links, not in the repository, and the repository itself offers no summary of it.

Editorial conclusion

Treat the list as leads, not as verified fact about an employer's current process. It earns its keep for candidates who want to know what a take home or pairing round actually looks like at a specific company, and it is close to useless if you need to know which employers are hiring right now or want a comparison. Before you rely on a line, open the company's careers page yourself, because the repository tests the format of the entry and never the destination. If you want to contribute, remember the documented pull link points at master while the default branch is main, and that the entry rules live in CRITERIA.md rather than on the page you are reading.

Frequently asked questions

What is a whiteboard interview?

In this repository the whiteboard is a metaphor rather than the problem. The board itself is not bad, it is a symbol for the CS trivia questions tied to bad interview practice, and sites like HackerRank and LeetCode probably fall into the same category.

What companies don't do leetcode?

That is the list itself, grouped alphabetically from 0 - 9 and A - C onward. The qualifying signal is an interview that resembles day-to-day work, such as pairing on a real world problem or a paid or unpaid take home exercise, and companies are added by pull request.

What are the three types of interviews?

The repository does not define three types. Its summary splits formats into two: discussing a real world problem, with or without a whiteboard, is the good case, and solving CS trivia, technical puzzles, riddles, or brainteasers is the one to avoid.

What is the biggest red flag to hear when being interviewed?

The closest thing to a signal here is the shape of the loop. Listed companies are described as pairing on a real world problem or setting a take home, from a small project to a five day code challenge, and the Duds section exists for the opposite case, where a company no longer matches its description.

Official sources

  1. Official README
  2. Project repository