Case Study

Designing Prompt Studio: From Prompt Editing to Testing & Version Control

A workspace for developers and AI engineers to create, test, compare, version and release prompts used by their AI agents.


ROLE

Product Designer

SCOPE

Prompt Studio, incl. Stress Test.

PRODUCT

Netra

STATUS

Shipped

TL;DR — FOR THE 2-MINUTE READ

  • Netra is an LLM observability platform for teams building AI agents. As teams started working more seriously with prompts, customers needed a more systematic way to create, test and manage them.

  • What I worked on: I designed Prompt Studio, a workspace for developers and AI engineers to:

Create → Test → Compare → Version → Release

  • The main challenge was how do we make prompt development feel like one connected workflow instead
    of a collection of separate tools?


  • My focus was providied a simpified experience in - Prompt editing · Testing · Comparison · Versioning ·

    Production workflow

01 · THE PROBLEM

Code Gets Tested. Prompts Got a Copy-Paste.

As teams started building AI agents with Netra, prompts were becoming more than just pieces of text.

A developer might write a prompt, change it several times, test it with different inputs, try another model, compare the results and eventually move a version into production.

The problem was that these activities could easily become disconnected.

There wasn't a single, clear workflow for answering some basic questions:

  • Which prompt am I working on?

  • What happens when I change a prompt that's already being used?

  • Which version is currently in production?

  • Does this change actually work better?

  • How does it behave across different models and repeated runs?

  • What happens if something breaks after release?

Customers were asking for a more systematic way to manage prompts, while the market was also moving towards dedicated prompt-management workflows.



This led us to a broader question:

"How might we give developers one place to take a prompt from an early idea to a tested, reliable version running in production?"

WHERE THIS FITS

Prompt Studio is the writing-and-staging half of the platform - where instructions get written, versioned and proven, before anything measures them in production. It is the surface the rest of Netra depends on being trustworthy.

WHY NOTHING CAN BE EDITED

A published version can’t be edited, only copied into a new draft. That single limit is what makes labels honest: if a version could change after being marked “production”, the label would be lying.

WHY TESTING EXISTS

One good run tells you a prompt can work. It tells you nothing about the fiftieth try, a messier input, or a different model underneath. That question needs a hundred answers before it means anything.

5

AI models compared in one test

6

ways to score an answer

1→100

runs per test - 1, 25, 50 or 100.

3

health states: ship, fix, or stop

02 · WHO IT’S FOR

Two People, Two Different Questions.

The person writing the instructions and the person approving them don’t mean the same thing by “done.” One wants room to experiment. The other wants a reason to say yes. Both live in the same screens, so the screens had to answer both.

PRIMARY USER

AI / Prompt Engineer

VOLUME

Opens it dozens of times a day: change something, try it, see whether it got better.

MENTAL MODEL

A prompt is a recipe. Instructions and settings go in, an answer plus its cost and speed come out.

MEASURED BY

How fast a rough idea becomes a version they trust enough to ship.

SECONDARY USER

Release Reviewer — PM or Eng Lead

VOLUME

Opens it at release time, reviewing what changed rather than writing it.

MENTAL MODEL

A version is a release candidate. The question is never “is this good writing?” but “is this safe to turn on?”

MEASURED BY

Whether the badge was green before they approved, and whether anything ever had to be rolled back.

03 · HOW I THOUGHT ABOUT IT

What happens when the thing you’re editing is already live?

If the prompt I’m editing is the same prompt my application is running, then every experiment is a risk — one careless keystroke and production shifts underneath me. My first instinct was a warning: confirm before you touch a live prompt. But a warning still leaves the mistake possible. So the answer moved into the model itself, not the UI. I split one idea into four things, each pointing at the next, so that editing and running could never be the same act.

Prompt

the named object (“Email Summarizer”)

→

Draft

editable working copy

→

Version

published, now permanent

→

Label

the release channel (“production”)

A Draft is yours to wreck. Edit it, throw it away, and nothing remembers. Publish it and it hardens into a Version that can be read and compared but never edited again. A Label is just a tag that points at one Version, which is why moving “production” from v6 to v7 takes a click instead of a deploy.

Why this shape, specifically

•

A warning wouldn’t have worked - if published versions stayed editable, no amount of “please don’t edit this” would stop someone breaking production by accident. Making it impossible was the only design that holds.

•

“v7” means nothing to a system, but “production” does - keeping the label separate from the version is what turns a rollback into one click instead of a re-publish.

•

Drafts needed somewhere to be wrong - nobody writes good instructions on the first try, so the messy part had to live somewhere that can’t reach customers.

04 · DESIGN PRINCIPLES

Four Rules, and Where They Came From.

P·01

Published versions can never change.

We could have warned people before they edited something live. But a warning still means the mistake is possible. So we changed the system instead: once a version is published you don’t edit it, you create a new draft from it. Labels, rollback and the audit trail all followed from that one constraint. Preventing the mistake was better than explaining the mistake.

P·02

A number beats a feeling.

The question the product had to answer was “is this good enough to release?” Reading the prompt back never answers it, because a prompt can read well and still behave inconsistently across repeated runs and different models. So every screen puts a measured score above an impression.

P·03

Model settings sit next to the words.

What changes the output isn’t only the words. Variables, runtime inputs, the model and its parameters all change what comes back. Burying those in a settings panel would hide half of what a version actually is, so they sit beside the text they shape.

P·04

Side by side, never remembered.

Comparing candidates one after another means holding the differences in your head while you read the next one. Side by side gives each candidate less room, and that was the trade-off I took knowingly, because comparison was the actual task.

P·01

Published versions can never change.

We could have warned people before they edited something live. But a warning still means the mistake is possible. So we changed the system instead: once a version is published you don’t edit it, you create a new draft from it. Labels, rollback and the audit trail all followed from that one constraint. Preventing the mistake was better than explaining the mistake.

P·02

A number beats a feeling.

The question the product had to answer was “is this good enough to release?” Reading the prompt back never answers it, because a prompt can read well and still behave inconsistently across repeated runs and different models. So every screen puts a measured score above an impression.

P·03

Model settings sit next to the words.

What changes the output isn’t only the words. Variables, runtime inputs, the model and its parameters all change what comes back. Burying those in a settings panel would hide half of what a version actually is, so they sit beside the text they shape.

P·04

Side by side, never remembered.

Comparing candidates one after another means holding the differences in your head while you read the next one. Side by side gives each candidate less room, and that was the trade-off I took knowingly, because comparison was the actual task.

05 · WRITING AND COMPARING

If there are three versions, how do you decide which is better?

At first I let people switch between candidates one at a time. It tested badly: comparing three meant holding two in your head while you read the third, and the comparison happened in memory instead of on screen. So I put the candidates side by side — each column a whole candidate, its own prompt, model and result. The cost was real: three columns give each prompt less width than a full editor would. For this task I took the trade, because comparing mattered more than sprawl.

netra · prompt studio · email summarizer

A production version sits beside two drafts. “Run all” fires every column at once — so the question stops being “does it work” and becomes “which one wins,” answered by looking, not remembering.

netra · prompt studio · configuring a model

Model settings sit beside the text they shape: provider, temperature, length.

netra · prompt studio · creating a prompt with AI

Drafting with AI: the model writes the first pass, the engineer owns every line after — and it lands as a Draft, never straight into a live version.

06 · VERSIONING & PUBLISHING

Every Publish Is a Diff, Not a Save

Publishing never overwrites anything. It shows what changed against the live version, the way a code review would, and asks you to say why. The value is the small pause it forces before something goes live. A label like production, staging or latest points at one version, and that label is what an application actually calls.

netra · prompt studio · publishing a prompt

Every publish carries a note and a label, so the history reads back as a record of decisions.

netra · prompt studio · comparing versions

Model configuration sits beside the prompt - provider, model, temperature, max tokens and top-P.

netra · prompt studio · version history overlay

The version-history menu lists drafts, the published version, and actions to duplicate or delete a draft.

07 · SMALL DECISIONS, ONCE THE FOUNDATION HELD

Auto-Save and Auto-Naming Fell Out of the Model

Once drafts were the safe place to be wrong, two smaller things resolved themselves. If a draft can’t hurt anything, I shouldn’t have to think about saving it either — so edits sync on their own every few seconds, and auto-save only ever touches the draft; it never publishes. That one boundary keeps “don’t lose my work” and “make this version live” as two different actions instead of one dangerous one. Naming went the same way: nobody opens a blank prompt wanting to name it first, so once you start writing, the prompt names itself from what you wrote — rename it whenever you like. The rule under both: don’t make people do metadata work before they’ve done the real work.

the header state: the version dropdown beside “All changes saved”.

PLACEHOLDER - a new prompt naming itself from the first lines you write.

netra · prompt studio · version history overlay

PLACEHOLDER - version history screen showing the specific versioning behavior described here.

08 · THE VERSION I THREW AWAY

Five Ways to Test, and None of Them Answered the Question

We explored five different ways of testing a prompt, and each one made sense on its own. Assembled into a flow, the first thing the screen asked was that you understand the testing system before you could ask the only question you actually had: does this prompt hold up? The capability was right and the entry point was wrong. We kept models, runs and evaluators, and moved everything else off the main path.

The first flow opened with a checklist of test types - Prompt Confidence Score, Cross-Model Stress Test, Temperature Sweep - all to be chosen before anything could run.

Step 2 of 2 was a searchable evaluator library with a threshold on every row, presented before the first test had ever run.

What it produced was one blended number. “Stress test passed - 87% confidence” told you it passed, but not what to fix.

The lesson was that capability and usability are not the same thing, and I had been optimising for the first.

09 · STRESS TESTING

One Good Run Proves Nothing

A prompt that works once has been demoed, not tested. I started by exploring five ways to test one — a model shootout, a consistency check, a temperature sweep, an input-variable test, and a full custom matrix. On paper each answered a different question. In the flow, they made people learn the testing system before they could ask the only question they actually had: does this hold up? So I cut the five-way chooser and made one path — pick models, pick how many runs, pick what to measure, run, review — with the depth still there for anyone who wants it. A stress test now runs a prompt up to 100 times across up to 5 models and scores every answer against the team’s own rules, before anything ships.

How a test runs

netra · stress test · setup

PLACEHOLDER - Stress Test setup screen with model selection, runs-per-model presets, and total execution count.

netra · stress test · evaluators

PLACEHOLDER - Stress Test setup screen for selecting evaluators before a run.

netra · stress test · evaluator detail

The Stress Test flow lists evaluators with pass thresholds before the run starts.

netra · stress test · in progress

Runs happen in the background — the prompt stays editable, and a test can be stopped mid-run.

Reading the result without being a data analyst.

One badge sits above every chart - Healthy, Needs Optimization, or Critical Issues. Nobody should have to read a chart to find out whether they can ship.

🟢 Healthy — ready to publish

🟡 Needs Optimization

🔴 Critical — do not publish

netra · stress test · results

Under it: pass rate per model, and one radar chart comparing every model across quality, speed and cost - because the cheapest model is rarely the best one.

Stress test progress — shipped UI
Exploration: a starting screen offering five ways to test a prompt
Exploration: the earlier multi-step stress-test flow
Exploration: evaluator configuration, version 1

10 · SMALL DECISIONS INSIDE TESTING

Runs, Models, and What “Good” Means

Three smaller choices sit inside the one testing flow. Runs come as presets — 1, 25, 50, 100 — because a blank number field asks people to guess at statistics; the presets carry the meaning instead. Models are a multi-select, because the same prompt rarely behaves the same on every one, and the useful question is where it breaks. And “good” had to be defined, so evaluators let a team say what good means here — sometimes correctness, sometimes latency, sometimes cost, sometimes a strict JSON shape. None of these earned its own screen; they live inside the flow as sensible defaults you can open up.

Shipped: selecting models for a stress test
Shipped: runs per model
Shipped: configuring evaluators

11 · WHY THESE CHARTS

Every Chart Answers One Question

There are a dozen ways to draw reliability data. I picked each one against a question a reviewer actually asks out loud, rather than whatever the charting library offered first.

•

Health badge before any chart — the question is binary: “can I ship this?” The answer is a single traffic-light word, not a dashboard to interpret under time pressure.

•

A chart only when it answers something - bars for where a model fails, one radar for which model wins overall, and a trend line only once there are two tests to compare, because with one data point a chart is decoration.

Exploration: radar chart comparing models across quality, speed, cost
Shipped stress-test results overview
Exploration: results page redesign
Shipped: results logs tab

12 · VERSION + TEST HISTORY

A Score Is Only Useful Tied to a Version

A score floating on its own is trivia. Attached to the version that produced it, it becomes evidence. Every stress test is pinned to the exact version it ran against, so history reads as a chain — version, test, result, next version, test again — and you can finally answer whether a change made the prompt better or quietly worse. Reliability stops being a snapshot and becomes a trend.

13 · WHEN THINGS GO WRONG

A Test Takes Time — So It Can’t Block the Work

A stress test can run for minutes, so I couldn’t treat it like a button that freezes the screen until it’s done. It runs in the background — start it, keep editing, come back to results. Which means the interesting design isn’t the happy path; it’s the day the test itself falls over. Each state below went to engineering written down, not left as a to-do.

•

One model dies mid-test - the other three results still show, marked incomplete, with the failed model called out on its own. Never a blank screen.

•

Someone stops a test - the runs that already finished keep their scores. It is labelled partial, not thrown away: 60 finished runs are still a real signal.

•

A blank field - the test won’t start. It is caught at setup, not five minutes later as a wall of failures.

•

A test still running - publishing is blocked, with the reason spelled out rather than a greyed-out button.

Exploration: loader versus shimmer for the running-test state

14 · ENGINEERING

The Decisions Got Real in the Build

Most of these only became true once engineering and I worked them through. Immutability: a published version can’t be edited, so any change forks a new draft — enforced in the data model, not just the UI. Auto-save: syncing every few seconds meant designing the save status, the retry and the conflict, not only the happy path. Async testing: a background run needs its progress, partial results and failures to survive a refresh. Publishing: the diff-and-comment gate needs a hard line between a mutable draft and a frozen version. The interface is the visible half; these contracts are the other half.

15 · DESIGN SYSTEM

Consistent With the Rest of Netra

I tried not to invent a pattern just because this surface was new. Where a Netra component already solved the problem — buttons, inputs, tables, the toast system — I reused it. Where the behaviour genuinely differed — the side-by-side composer, the health badge, the run matrix — I extended an existing pattern instead of starting over. New patterns had to earn their place, and most didn’t need to.

16 · WHERE IT LANDED

Shipped, Documented, Measurable

Both surfaces are live inside Netra and written up in the public docs. The screens above are the shipped product, not a concept. The product is young, so I am not going to hand you adoption numbers I would have to invent. What I can point at is the instrumentation built to earn them: a score on every version, pass rates tracked over time, and a record of every label that ever moved. The work keeps its own scoreboard.

Shipped version history and reliability trends

17 · THE WHOLE LOOP

One Connected Workflow, Not a Pile of Features

Start writing, and the prompt names itself. Auto-save holds the draft. Edit, compare candidates, stress-test the strongest, read the result, iterate. Publish a version, point production at it, and test again against the next change. The point was never any single feature — it was making these steps feel like one motion, so shipping a prompt looks less like copy-paste and more like a release.

18 · THE DECISIONS AT A GLANCE

What Changed, and Why

Drafts reaching production → split into Draft, Version and Label, so experiments can’t touch customers. Comparing alternatives → side-by-side candidates, trading width for a comparison you can actually see. How testing starts → five approaches collapsed into one flow, with the depth kept underneath. While a test runs → it runs in the background, so it never blocks the work. When a test fails → explicit states, each naming the next action. Releasing a change → diff, comment, immutable version. Small edits → auto-save, scoped to the draft only. Naming → generated from the prompt, renamable later.

19 · WHAT I LEARNED

What This Project Actually Taught Me

01

The model of a thing comes before the look of it

The composer, the diff view, the label picker - all of it followed from one decision made before any of them existed. Draft, Version and Label are three different things, not three moods of the same thing. I have never seen good visual design rescue a product that got that part wrong.

02

Making something impossible beats warning about it

Locking published versions deleted a whole species of worry from the product, the “hang on, did someone touch this?” kind. I did not need a warning dialog, because there was no longer a mistake left to warn about.

03

A confidence score is worthless without a threshold someone chose on purpose

The AI Analysis badge earns its authority from something unglamorous: the team sets each pass rule themselves, and can see every one. Had I hidden those defaults, the badge would have felt like a black box telling people what to do.

Reliability as a Design Problem

Both surfaces ship inside Netra today. What I keep taking from the project is smaller than the product itself. Most of the trust in an AI feature gets built outside the model: in whether you can see what changed, undo it, and prove it worked before a customer proves it for you. The chat window is the easy part.

Create a free website with Framer, the website builder loved by startups, designers and agencies.