All work

Evaluation: the quality layer for AI outputs.

AI teams were shipping and judging quality by user complaints and support tickets. I designed Evaluation, the quality layer that turns "does this seem right?" into a number you can track, compare, automate, and gate a release on: one template definition, running the same way across datasets, tracing, and simulations.

Role
Sole product designer
Timeline
3 weeks
Platform
FutureAGI web app — B2B
Core workflow
Define → test → score → retune
  • 3

    Eval types

    Code, LLM-as-Judge, Agent Evaluator

  • 4

    Test modes

    Dataset, Tracing, Simulation, Custom JSON

  • 4

    Tabs per eval

    Details, Usage, Feedback, Ground Truth

Case snapshot

  • Role

    Sole product designer: research, library taxonomy, and all 7 core interactions end to end

  • Team

    1 designer (me) + PM + engineering + ML team

  • Key constraint

    One eval template had to behave identically on all four test surfaces. "Groundedness" means the same thing on a dataset or a live trace.

Shipping AI and hoping for the best.

Most AI teams discovered quality in production. A prompt changed, a model updated, a feature shipped, and whether it was better got answered by user complaints and support tickets. "Good" was a judgment call that changed with whoever made it.

Evaluation turns that judgment into a measurement. Define "good" once as an eval template, and the platform applies it to every response the same way. The score is repeatable, the bar is fixed, and you can finally track whether you're getting better.

The goal

Make "is this good?" a question with a consistent answer: whoever asks, on any dataset, any day.

Four ways teams were flying blind.

Sessions with teams already running ad hoc QA on their AI features surfaced four patterns that shaped every design decision.

  • Spot-checks weren't representative

    Teams reviewed a few outputs before a release and called it QA. They picked the ones they expected to be fine: confirming beliefs, not finding gaps.

  • Regressions invisible until production

    A prompt change that improved tone often hurt factual accuracy. Without consistent measurement, users found the trade-off first.

  • A/B decided on feel, not data

    "This sounds better" was the most common reason to ship. Without the same eval on both versions, it couldn't be trusted.

  • No way to disagree with an eval result

    When a score seemed wrong, there was nowhere to say so, record it, or use it to improve the evaluator.

What evaluation had to be.

Each gap from discovery became a design goal, answering a different question a team would ask about an eval.

  1. Discoverable

    Find the right eval in seconds. Type filters and use-case groups make 70+ templates quick to narrow down.

  2. Testable

    Try it before you commit it. Teams test an eval on their own data before wiring it into production.

  3. Observable

    See where and how it's used. Once live, teams can track an eval's performance across projects.

  4. Improvable

    Disagreement as signal, not noise. Feedback and retune turn a wrong score into a better evaluator.

Feature 01 · Choose an eval type

filter down to what you actually need.

The evaluation library opens with everything visible.

Filtered librarytype filter collapses 70+ templates to the ones that match

Feature 02 · The eval detail

four tabs, everything you need to know and do.

Clicking any eval in the library opens a full detail page with four tabs, each for a different job.

  • Details

    Understand it: instruction, variables, output type

  • Usage

    Observe it: every run, across every project

  • Feedback

    Improve it: disagreement as a retuning signal

  • Ground Truth

    Anchor it: reference examples to test against

Eval detail pagetopbar, four-tab strip, and the active tab body below

Feature 03 · Eval details tab

instruction, variables, output type, error localization.

The source of truth for what an evaluator does. Read it and you know what's measured, what inputs it needs, what it returns, and whether it will point to the failing part of a response, before running a single row.

Eval Detailsinstruction, variable chips, input/output type, error-localization toggle
  1. The instruction is the eval

    For LLM-as-Judge templates, the instruction shown here is the actual prompt sent to the evaluator model. Not a paraphrase, not docs.

  2. Variables are explicit

    Every input shows as a chip, like {{output}} or {{context}}, so teams know what to map before they map it.

Feature 04 · Test modes

four ways to supply your own data.

Before wiring an eval into production, teams try it on real data. The Test Evaluation panel has four input modes, depending on where the data lives.

  1. Dataset

    Pick a dataset, preview a row, map columns to variables. Matching names auto-map; mismatches are flagged. Best for bulk runs across many rows.

  2. Tracing

    Map span attributes from an Observe project to variables and run on real production traces. Best for validating against what your agent actually produces.

  3. Simulation

    Same as Tracing, but the source is a simulation run. Best for testing against controlled agent runs before deploying.

  4. Custom JSON

    Type the variables as a JSON object. No file, no mapping. Best for checking one edge case or one example.

Dataset moderow preview and column-to-variable mapping
Tracing modeObserve project and span-to-variable mapping
Simulation modetesting against a controlled agent run
Custom JSON modetyped variables, no file needed

Feature 05 · Test results

score, reason, and exactly what failed.

The result screen shows everything needed to judge the eval: verdict, score against the threshold, a plain-language reason, and (with error localization on) the exact phrase that failed. It's the start of an iteration, not the end.

Test resultverdict, score vs. threshold, and the highlighted failing phrase inline
  1. The reason is the product

    Teams valued the reason more than the score. "2/5" says something's wrong; "introduces a warehouse location not in the context" says what to fix.

  2. Errors highlighted inline

    The failing phrase is highlighted right in the result text, not listed separately below.

  3. Every result leads somewhere

    "Add to dataset" and "Add feedback" live on every result card. No dead ends.

Feature 06 · Usage

see everywhere this eval runs, and how it's doing.

Once an eval runs across projects, teams need to see how it's doing everywhere, run by run, not just in aggregate.

Usage tabpass-rate stats, time filters, and a per-project run log
  1. Time filters per job

    30 min for live incidents, Today for standups, 30 days for trends, All time for audits.

  2. Per project, not averaged

    Each log entry shows the project, surface and score. One project never gets averaged into another.

  3. Full context in every row

    Expand any run to see input, output, context and explanation, without switching tools.

Feature 07 · Feedback & retune

when the eval gets it wrong, say so.

No evaluator is perfect. Feedback Insight records disagreement formally: the correct value, the reasoning, submitted in one step. That feedback feeds straight into retuning.

Feedback Insight panelcorrect-value selector, explanation field, Recalculate / Retune / Submit
  1. Recalculate vs. Retune

    Recalculate reruns the evaluator as-is, for transient failures. Retune feeds the feedback into the evaluator itself.

  2. Correct value is a selector

    Teams pick from the eval's own scale, so feedback stays machine-readable as a training signal.

  3. Feedback closes the loop

    Before, disagreement vanished into Slack threads or was ignored. Now it has somewhere to go.

What designing evaluation taught me about trust.

The hardest problem wasn't the library or the type system. It was the feedback loop. Teams trust an eval when it's right often enough that they notice and correct it when it's wrong, not when it's infallible.

What surprised us

Surfacing "the eval got this wrong" built trust instead of breaking it.

Feedback Insight was resisted internally at first. But teams who watched their feedback recalculate past runs trusted the eval far more than teams with no way to push back.

Three things I'd do differently

  1. Make test modes an entry point

    Build the four test modes as a first-class entry point, not a panel on the detail page.

  2. Show usage on the library card

    Surface a usage summary on each card, so a failing eval is visible without opening it.

  3. Recommend evals for your use case

    Seed a "recommended" section from connected projects. The right five are predictable; browsing 70 isn't needed.

Back to all workNext: Agent Simulation