API design & contracts in a Senior interview
An API is a promise other teams build on, your own frontend included. Our questions test whether you can keep it while the system underneath changes, and the second version is where that gets hard.
An axis of our Senior backend and Senior fullstack targets.
The check comes with every pass and covers all the competencies of the target you choose: 8 for Senior backend (about 16 minutes) and 10 for Senior fullstack (about 20 minutes). It reports each one as Ready, Borderline or a Gap for this level. It never predicts a pass.
Patterns our questions are designed to test at Senior
These are the distinctions the questions on this axis are written to separate — our judgement from writing them and having them reviewed, not a measurement of candidates. We have run no study, so nothing here is a statistic and none of it is phrased as one.
- 1.
Compatibility judged against the schema rather than the callers
Adding an optional field is safe. Making it required, narrowing a type, changing a default or tightening validation are not — and whether they break anything depends on what clients actually send, which is a question you have to be able to answer.
- 2.
Errors designed last
A caller has to handle every failure mode you expose, not only the success shape. Which errors are retryable, which are permanent, whether the same request may be sent again, and how a client tells the three apart is part of the contract.
- 3.
Idempotency delegated to the transport
HTTP says which methods ought to be idempotent. It does not make your handler so. Where the key comes from, how long it is remembered, and what happens when the same key arrives with a different body are API decisions with an operational cost.
- 4.
Pagination that breaks while the data moves
Offset paging over a table being written to skips and repeats rows. Cursor paging is the version that stays correct under concurrent writes, and the trade it makes, no jumping to page forty, is worth saying out loud.
What a strong answer sounds like: A strong answer talks about existing callers by what they actually send, not by what the specification permits.
How the check measures it
3 questions drawn on this axis alone — 2 medium and 1 hard for a Senior target, because the bar is the level. Hard counts for one and a half times a medium, which is what makes the verdict relative:
| Medium right | Hard right | Verdict |
|---|---|---|
| 2 of 2 | 1 of 1 | Ready |
| 1 of 2 | 1 of 1 | Ready |
| 2 of 2 | 0 of 1 | Borderline |
| 0 of 2 | 1 of 1 | Borderline |
| 1 of 2 | 0 of 1 | Gap |
| 0 of 2 | 0 of 1 | Gap |
Three questions is coarse and the report says so beside every verdict. It is enough to separate this axis from the others in your target, which is what the check is for — there is no total, no percentage and no single number anywhere in the report.
What there is to practise
Questions here most often also test reliability & failure modes, technical judgment: decisions and trade-offs, networking and code quality & design. Few questions on this axis test it alone, which is why the check reports every competency separately rather than averaging them.
One of them, in full
A question from the free demo, not written for this page. A demo quiz opens with it; the answer, the explanation and the source come when you submit — no account needed.
Answer it on the demoOne axis is not the loop
This axis is one of 8 in our Senior backend target and one of 10 in Senior fullstack, and being strong here says nothing about the others. The check covers all of them in one sitting and reports each separately, so what comes back is a profile rather than a score.