For employers

See how they work before you hire them.

Give every candidate the same real task in a Simulation, or read the Engineering Passports and Builder Reports applicants choose to share. Review each finding against its source in your Hiring Workspace, then decide with your team.

Lumen Ledger

Owen Blake

BackendLumen LedgerPartner integrations2 projects shared

What the shared work demonstrates

A webhook service that stops retrying after five attempts and skips events it has already delivered. Concurrent workers and load behavior were not shown.

Webhook delivery service

Delivers partner payment events with bounded retries and a duplicate-event check.

  1. Event receiveddispatch starts delivery for one eventdispatcher.ts
  2. Duplicate checkAn event_id already seen is skippeddispatcher.ts
  3. Post to partnerMarked seen only after a successful postdispatcher.ts
  4. Retry on failureUp to five attempts, with backoffretry.ts

Selected requirement citesretry.ts · lines 18–27

Requirements

  • The loop stops after five attempts and exits on the first successful response.

How the Hiring Workspace works

From Simulation to decision.

19 validated templates across Applied AI, Backend & API, data, devtools_systems, embedded_firmware, Frontend, Full-stack & Product, game_graphics, ml_systems, Mobile, platform_infra, Security and test_quality.

  1. 01

    Publish the role

    In your Hiring Workspace: a validated Simulation, time, AI policy, and disclosed recording.

  2. 02

    Candidates take the Simulation

    A real codebase, incident, and simulated teammates, in the browser or the desktop app.

  3. 03

    Your team decides

    Builder Report findings cite their evidence. Advance, Hold, or Decline. Fydell never ranks.

Simulations

Every Simulation leaves a record you can open.

In a Simulation, file changes, test runs, team messages, and the mid-task requirement change are disclosed to the candidate before they start, then recorded as they happen.

In the Hiring Workspace, reviewers open the changed files, read each check with a plain-language status, and see the open questions from the handoff. Nothing is collapsed into a number.

  • Sealed submissions

    One submission per attempt. Files are frozen once, hidden tests rerun in Fydell's sandbox, and the candidate keeps a receipt with the archive hash.

  • Your AI policy, stated up front

    You choose whether AI tools are allowed, and candidates see the policy before they start. Use of the built-in assistant is recorded and shown. Fydell does not claim to detect anything.

Lumen Ledger
In Review

Keep the draft when a send fails

HBR-142BackendFrontendJordan Hale · submitted after 41 min · Review pending

Draft preserved after a failed send

Composer behavior, recorded at submit

Partner reply · Acme supportComposer
#4821Refund event · partner retry windowWaiting on partner

Partner returned 502 · send failed

Draft kept

Reply to Northwind support

Can you confirm the partner retry window before we close this ticket?

Submitted behavior - the typed message stays available after the failed send.

Starting
The reply is cleared when the send fails.
Submitted
The reply stays, and clears only after a confirmed 200.
Handoff from Jordan Hale

The draft is kept when the partner returns a 502 and cleared after a 200. Repeated submissions were not covered.

Trail7 events over 41 minRecorded, not scored

Read the briefAsked the QA leadAsked the AI coworkerReproduced the 502Kept the draftRan delivery testsSubmitted

Builder Reports

Builder Reports you can open, not a score you can't.

A Builder Report cannot be released unless every finding cites real evidence, and says plainly what it could not check.

Select a requirement to see the finding, the lines it rests on, and the question worth asking in the interview.

  • Findings that cite their lines

    Open any finding and you are looking at the code and checks behind it, including the part left unresolved.

  • Gaps stay visible

    No evidence is not evidence against the applicant. It is shown as Not observed until someone asks.

  • The decision stays with you

    Record Advance, Hold, or Decline with a private note your workspace keeps.

Lumen Ledger

Owen Blake

BackendLumen LedgerPartner integrations2 projects shared

What the shared work demonstrates

A webhook service that stops retrying after five attempts and skips events it has already delivered. Concurrent workers and load behavior were not shown.

Webhook delivery service

Delivers partner payment events with bounded retries and a duplicate-event check.

  1. Event receiveddispatch starts delivery for one eventdispatcher.ts
  2. Duplicate checkAn event_id already seen is skippeddispatcher.ts
  3. Post to partnerMarked seen only after a successful postdispatcher.ts
  4. Retry on failureUp to five attempts, with backoffretry.ts

Selected requirement citesretry.ts · lines 18–27

Requirements

  • The loop stops after five attempts and exits on the first successful response.

Hiring Workspace

Applications that arrive with the work.

Publish a role in your Hiring Workspace and share the link. Applicants send the projects they choose as an Engineering Passport, each with a Builder Report; your team reads them requirement by requirement.

What an applicant leaves out never appears in the review, not even by name. What they share is exactly what you see, at the revision they pinned.

  • Same source for everyone

    Cited files open beside each requirement on the opening.

  • Limits stay visible

    Not Assessed and Partial stay labeled until someone asks about them.

About the Hiring Workspace
Jordan Hale

Share your Engineering Passport

Recipient: Lumen Ledger hiring
Preview

Include in share

2 of 3 projects included

What the recipient sees

Jordan Hale

BackendFrontendFull-stack

  • Webhook delivery serviceBounded retries · Duplicate event gateretry.ts · lines 18-27
  • Ledger export pipelineInvalid row hold · Batch size capvalidate.py · lines 18-23

Compared

What changes when the work is real.

CriterionResume screenTake-homeFydell
What you actually readClaims about past workFinished code, unseen processThe changes, the tests, the questions, the handoff
Same task for everyoneNoRarely checkedYes: one versioned task per role
Checked independentlyNoYou rerun it yourselfHidden tests rerun in an isolated sandbox
Who decidesA keyword filterWhoever has timeYour reviewers, with cited findings

Simulation templates

Start from a simulation that already works.

Each template ships with a starter project, tests, a reference solution, and simulated teammates.

  • Fix stale and off-plan support retrieval

    Diagnose why a support assistant's retrieval returns stale, off-plan or headless passages, using a recorded eval set, and fix it so it holds on held-out articles and questions.

    Applied AI60 minRetrievalNode.js 22, standard library only (BM25 over an in-memory index)
  • Keep the support agent inside its budgets and tool boundaries

    Repair a tool-using agent loop: enforce step and cost budgets before each call, retry only idempotent tools, send a timed-out refund to review, and run only allowed, well-formed tool calls.

    Applied AI60 minAgent ToolsPython 3.12, standard library, recorded and scripted model turns
  • Make the triage evaluation report honest numbers

    Fix an evaluation harness that overstates a classifier: few-shot leakage, dropped abstentions and failures, pooled macro F1 and undefined per-label metrics.

    Applied AI60 minEvaluationPython 3.12, standard library, recorded JSON predictions
  • Stop invalid extractions from reaching the shipment store

    Make a model-backed extraction pipeline safe: validate output against a schema, repair only safe cases, retry provider failures within a bounded policy that honors retry-after, and route unrecoverable documents to manual review.

    Applied AI60 minStructured OutputNode.js 22, standard library only (recorded provider responses, injected sleep)
  • Add cursor pagination to the inventory list without breaking clients

    A partner's inventory sync gets duplicate and missing items. Add exact cursor pagination and parameter validation without breaking clients that still page with offset and limit.

    Backend & API60 minContractNode.js, plain handler functions
  • Make clinic bookings consistent under concurrent requests

    Make slot booking atomic across worker processes, keep the booking and its reminder together, and keep cancellation and rebooking correct on a database that already holds double bookings.

    Backend & API75 minConsistencyPython 3.12, standard library, sqlite3
  • Prevent duplicate webhook processing

    A retried webhook credits a customer twice. Reproduce it, make event handling exactly once across workers and restarts, and add regression coverage.

    Backend & API60 minReliabilityPython, SQLite
  • Recover label jobs after crashes and timeouts

    Label jobs get stuck after deploys and some shipments are charged for two labels. Make leases, retries and dead-lettering recover correctly, and add regression coverage.

    Backend & API60 minJobsNode.js, in-memory job store
  • Make the daily revenue rollup survive redeliveries, late events and reruns

    Fix an event ingestion job and its backfill so each event counts once toward its UTC day, however often it is delivered and however often a range is rebuilt, and add regression tests.

    data50 minPipelinePython 3.11+, sqlite3, standard library
  • Make the CLI's layered configuration follow its own rules

    Fix a CLI's configuration loader so defaults, config file, environment and flags combine per setting as documented, booleans parse strictly, and every problem names its setting and source, with regression tests.

    devtools_systems50 minConfigNode.js 22, standard library, CLI with injected io
  • Stop a sump pump controller from short-cycling, hanging and forgetting faults

    Logic harness for a firmware control loop: fix a sample ring buffer, a float switch debouncer, the watchdog kick placement and a fault latch that must survive resets, driven tick by tick.

    embedded_firmware45 minState MachineNode.js 22, standard library, logic harness (no board or real timers)
  • Stop stale searches from overwriting newer results

    Fix a search-as-you-type panel so results, the busy state and the error state always belong to the latest query, whatever order responses arrive in, and add deterministic regression tests.

    Frontend50 minState SyncNode.js 22, standard library, DOM stand-in (no browser)
  • Make bulk card moves safe across the board API and client

    Fix a small board service and its client so changes stay inside the project in the path, input is validated, bulk moves are all-or-nothing in memory and on disk, and the client rolls back refused moves.

    Full-stack & Product55 minPartial FailureNode.js 22, node:http, JSON file store, standard library
  • Fix tunneling and timestep drift in a 2D game simulation

    Logic harness for gameplay simulation: fix a fixed-timestep accumulator and its catch-up cap, and replace a discrete overlap check with swept box collision that slides along surfaces.

    game_graphics45 minSimulationNode.js 22, standard library, logic harness (no engine or renderer)
  • Make the churn model's validation measure unseen customers

    Fix a churn model's evaluation so validation holds only unseen customers chosen reproducibly, preprocessing is fit on training rows only, and AUC is correct for ties and single-class inputs, with regression tests.

    ml_systems55 minSplitsPython 3.11+, standard library (csv, random, statistics)
  • Merge offline note edits without losing work

    Logic harness for offline sync: merge offline note edits field by field against the last synced copy, resolve and report same-field conflicts, merge tags as a set, and keep deletes from losing edits or coming back.

    Mobile45 minOfflineNode.js 22, standard library, logic harness (no device or app shell)
  • Make a rolling deploy keep serving traffic and report when it stalls

    Logic harness for deploy safeguards: fix rollout config validation and a rolling update controller so readiness decides availability and a stalled rollout fails at its progress deadline, all against a deterministic mock orchestrator.

    platform_infra45 minDiagnosisNode.js 22, standard library, logic harness against a deterministic mock orchestrator
  • Close cross-account invoice access and fix the unsafe search

    Fix object-level authorization and SQL injection in a small invoicing API without breaking legitimate use, and add regression tests.

    Security50 minRemediationPython 3.11+, http.server, sqlite3, standard library
  • Make the rate limiter's tests deterministic and able to catch real bugs

    Rewrite a flaky token bucket suite so it controls time and tests only documented behavior, make it catch seeded limiter defects, and fix the refill defect it exposes.

    test_quality50 minSuitePython 3.11+, unittest, standard library

Questions from hiring teams.

Does Fydell score or rank candidates?

No. Fydell runs the tests and organizes the evidence. Your reviewers read it against your requirements and make the decision.

Which roles can I assess?

Simulations cover Applied AI, Backend & API, data, devtools_systems, embedded_firmware, Frontend, Full-stack & Product, game_graphics, ml_systems, Mobile, platform_infra, Security and test_quality today. Other engineering tracks are offered once a template for them passes validation. Applications work for any engineering role.

Can candidates use AI tools?

You choose the policy for each simulation, and candidates see it before they start. Fydell does not claim to detect AI tools. When the built-in assistant is allowed, its use is recorded and shown to your team.

How long does a simulation take?

Templates run 45 to 75 minutes of task time, plus untimed setup. You can set a different length when you adapt a template or upload your own.

What does it cost?

Engineers and workspace exploration are free. Team pricing and what is never billed are on the pricing page. Nothing is charged for applications, invitations, or attempts that produced no report.

Bring one open role.

Create a Hiring Workspace, choose a Simulation template, and invite your first candidate. The first Builder Report is the argument.