A hiring platform where candidates fix real services and hidden tests grade them in a sandbox.
Outcome
- 14 sp95 to verdict at 300 concurrent submissions (k6)
- 0lost or double-graded runs out of 50,000 with workers killed at random
- 22architecture decision records
Architecture
Scroll the diagram sideways
Problem
The platform runs untrusted code, takes bursts during hiring campaigns and must grade every run exactly once.
How it runs
Linear with two-week cycles, a written Definition of Done, weekly 1:1s, an ADR and design review before cross-module changes. Coding agents follow AGENTS.md and ArchUnit rules.
Key decisions
Modular monolith, one PostgreSQL
ArchUnit enforces module boundaries, so a module can become a service later without a rewrite.
gVisor sandboxes
User-space kernel, no egress, CPU and memory limits, a time budget per run.
Outbox and RabbitMQ
A submission and its event commit in one transaction. Queue depth drives sandbox autoscaling.
Warm sandbox pool
Cold starts took half the verdict time. The pool is sized from the arrival rate.
Java 25, Spring Boot, PostgreSQL, RabbitMQ, Kubernetes, gVisor, Next.js, k6

