Products · Coding assessments
Good code needs good judgment.
Candidates build a solution in a real editor, check it against expected behavior, and explain their choices in an AI debrief. You set the rules for AI assistance before they begin.
See how engineers build, test, and explain.
A correct answer is the start. The reasoning behind it is the signal.
- from collections import defaultdict
- class RollingLimit:
- def __init__(self, limit, window):
- self.limit, self.window = limit, window
- self.events = defaultdict(list)
- def allow(self, key, now):
- live = [t for t in self.events[key]
- if t > now - self.window]
- self.events[key] = live
- if len(live) >= self.limit:
- return False
- live.append(now)
- return True
- ✓
allow("a", 0)→ true - ✓
allow("a", 1)→ true - ✓
allow("a", 2)→ false - ✓
allow("b", 2)→ true - ✓
allow("a", 1000)→ true
Review the whole picture
Ratings tied to the code and the conversation.
See competency ratings and the evidence behind them in one scorecard, next to the code and the debrief.
- Behavior checks, not just a final answer
- Ratings against explicit criteria
- The candidate's explanation alongside the code
UNIFIED SUMMARY
ASSESSMENT 1
0.0
AdvanceASSESSMENT 2
0.0
AdvanceStrengths
- Clean code structure
- Tested edge cases
- Well-structured documentation
COMPETENCY SCORES
Code and reasoning
What the code says, and what they said.
The debrief ties each decision in the code to the candidate's own explanation, so reviewers can tell real understanding from a lucky pass.
function dedupeEvents(events) {1 const latest = new Map(); for (const e of events) { const key = `${e.userId}:${e.type}`; const prev = latest.get(key);2 if (!prev || e.at > prev.at) { latest.set(key, e); } } return [...latest.values()]3 .sort((a, b) => a.at - b.at);} - Debrief
- 1 Why a map?
One pass, and I keep only the newest event for each user and type.
- 2 Two events at the same time?
Right now the first one wins. If order matters, I'd break ties on the event id.
- 3 Why sort at the end?
Callers expect time order, and the map doesn't keep it.