Coding, MCQ and written assessments
Hire developers by what they can build
Create timed assessments, invite candidates by email and review every attempt with your hiring team, all in one workspace.

Candidates answer coding problems in
- JavaScript
- TypeScript
- Python
- Java
- C++
- C
- C#
- Go
Why DevBench
Hiring developers is broken in four familiar ways
Each one has a direct fix in the product, not a workaround.
Problem: A CV says React. It doesn't say they can ship.
Fix: Timed coding, multiple choice and written problems show what a candidate can actually do.
Problem: Take-home tests have no clock.
Fix: Every attempt runs on a server-side timer and submits itself when time runs out.
Problem: Every review eats senior engineers' time.
Fix: Multiple choice grades itself. Coding and written answers wait in one queue, oldest first.
Problem: Seat licences charge you for quiet months.
Fix: Buy credits when you hire. One invitation uses one credit, with no subscription.
Product tour
See every screen, not a mock-up
Screenshots from the seeded demo workspace, in whichever theme you're using.






Write a problem once, reuse it everywhere
Coding problems carry visible and hidden test cases. Hidden ones never reach the candidate's browser.
How it works
From question bank to hiring decision in four steps
- 1
Create problems
Build a reusable bank of coding, multiple choice and written questions.
- 2
Build an assessment
Pick problems, set the time limit and the passing score, then publish.
- 3
Invite candidates
Send invitations by email. Each one costs a single credit and expires if unused.
- 4
Review results
Score objective answers automatically and review coding and written answers with your team.
Built for every role
Three portals, one platform
Hiring teams, candidates and platform admins each get the tools for their job and nothing else.
Everything you need to run an assessment
The company portal is shared by owners, assessment creators and evaluators, with each role seeing only its own tools.
- Problem bankWrite coding, multiple choice and written problems once and reuse them across assessments.
- AssessmentsCombine problems, set the duration and passing score, then move an assessment from draft to published to closed.
- InvitationsTrack each invitation as pending, accepted, expired or revoked. Resend or revoke at any time.
- EvaluationsReview submissions that need a human, give a score and leave feedback for the record.
- Team managementOwners invite creators and evaluators by email. Billing and team settings stay with the owner.
- Credits and billingSee your balance, a transaction history and every payment made through Stripe.

Fair and secure by design
Rules the candidate can't bend
Every guarantee below is enforced on the server, not promised in the UI.
A clock that can't be paused
Time left is worked out from the server's expiry time. Refreshing the page, closing the laptop or changing the device clock doesn't add a second.
Nothing answered is lost
Answers autosave as the candidate types. When time runs out, the attempt submits itself and grades whatever was saved.
Hidden test cases stay hidden
Candidates only receive visible test cases. Hidden ones never leave the server, so they can't be read from the browser.
Your data stays yours
Every query is scoped to the caller's company. Another company's problems, candidates and results are never reachable.
An audit trail for sensitive actions
Who did what and when, for problems, assessments, invitations, grades and credit changes.
Sessions use httpOnly cookies with rotating refresh tokens.
Integrity check
Renaming variables doesn't hide a copy
Evaluators see how closely each answer matches every other answer to the same problem. Try it: this demo runs the same algorithm in your browser.
- function twoSum(nums, target) { (matches)
- const seen = new Map(); (matches)
- for (let i = 0; i < nums.length; i++) { (matches)
- const need = target - nums[i]; (matches)
- if (seen.has(need)) { (matches)
- return [seen.get(need), i]; (matches)
- } (matches)
- seen.set(nums[i], i); (matches)
- } (matches)
- return []; (matches)
- } (matches)
- // find two indexes that add up to the goal
- function findPair(values, goal) (matches)
- { (matches)
- const lookup = new Map(); // value -> index (matches)
- for (let idx = 0; idx < values.length; idx++) (matches)
- { (matches)
- const wanted = goal - values[idx]; (matches)
- if (lookup.has(wanted)) { return [lookup.get(wanted), idx]; } (matches)
- /* remember this one */
- lookup.set(values[idx], idx); (matches)
- } (matches)
- return []; (matches)
- } (matches)
Names, spacing and comments are ignored, then the code is fingerprinted with winnowing, the technique behind Stanford's MOSS. In the product, code that many candidates share is set aside too, and the result is a signal for the evaluator, never an automatic penalty.
Compared
How DevBench stacks up against the usual methods
An honest look at common screening methods next to DevBench.
| What you need | DevBench | CV screening | Take-home task | Live whiteboard |
|---|---|---|---|---|
| Shows real coding ability | Yes | No | Yes | Partly |
| Same time limit for every candidate | Yes | No | No | Yes |
| No engineer time spent per candidate up front | Yes | Yes | Yes | No |
| Candidates choose when to take it | Yes | Yes | Yes | No |
| Answers kept for the whole team to review | Yes | No | Partly | No |
Simple pricing
$1.00 per credit, one credit per invitation
No subscription and no seats. Buy from 1 to 1,000 credits at a time and use them whenever you invite a candidate. Revoking an unused invitation refunds its credit.
$50.00
FAQ
Common questions
Run your first assessment in five minutes
Create a free account, buy credits when you need them and invite your first candidate today.
Built with
- Next.js App Router
- TypeScript
- Tailwind CSS and shadcn/ui
- TanStack Query and Zustand
- TanStack Form and Zod
- Express and Prisma
- PostgreSQL
- Stripe
Open source on GitHub:Frontend sourceBackend source





