Panels — interview and roast
Two panellists per actor, run as independent processes, at the two moments where their findings still change something cheaply.
Two verbs, one machinery. interview runs a panel against the brief, before
accepted references exist. roast runs the same panel against the product
and module references, adversarially.
The point is not to simulate users — you cannot, and anyone who claims otherwise is selling something. The point is to make a design defend itself against people who are not you, at the one moment when changing it is still cheap.
Why a panel and not one reviewer
A single reviewer, however good, has one position. Ask it about six actors and it answers as itself six times, with the same blind spots each time.
Panellists run as separate processes that never see each other's answers. That independence is the whole mechanism: a panel that converges tells you something; a panel that converged because its members read each other tells you nothing.
Use run-panel.py — it fans the prompts
out and collects the answers. Never run them in one conversation.
Two panellists per actor
Every actor gets two panellists, because one is a single position with a single set of blind spots. What makes them differ is a judgement call, not a rule.
Choose the axis that actually splits this actor
The default axis is gender, because in most client contexts it correlates with things that genuinely change how someone reaches a service:
| Where gender usually bites | Where it usually doesn't |
|---|---|
| Mobility — who can travel to an office, and when | Which screen a back-office agent sees |
| Device and connectivity — whose phone, shared or owned | The order of steps in an internal circuit |
| Literacy and administrative confidence | The content of an internal opinion |
| Authority — who is listened to, who is told to come back | The technical shape of a queue |
| Time — caring responsibilities against opening hours |
It is a default, not an obligation. Two personas differing only by a pronoun return the same answer twice, and you have paid for two runs to read one opinion. For a civil servant registering mail, gender changes nothing about the work — but tenure does, and so does trust in the tool.
| Actor | An axis that usually splits them |
|---|---|
| External applicant | Gender, and everything it drags with it — mobility, device, confidence |
| Front-desk or registry agent | Twenty years on paper, against six months in post |
| Instructing officer | A busy urban service, against one handling three files a month |
| Decision-maker | Someone who reads every file, against someone who signs what is brought |
| Executing body | Someone accountable for the money, against someone accountable for the deadline |
Two personas that are genuinely the same person are a waste. Say so in the report rather than inventing a difference — "this actor has no meaningful second perspective" is itself a finding, and it tells you the role is narrow enough to specify with confidence.
Building a persona
From the brief's actor block, and nothing invented beyond it:
Name, age, where they live or work
Their role in the circuit — from the brief, verbatim
What they are trying to achieve — their outcome, from the brief
Their circumstances: device, connectivity, literacy, mobility, time, authority
What they have never done before
What would make them give upCircumstances the brief does not support are marked as assumptions in the persona itself, so the reader of the report knows which parts of a finding rest on invented context.
The brief's names are provisional. Once accepted, the product reference carries the controlled actor vocabulary. Every module selects from that list; none renames the same person locally.
interview — before the specification
Run against the brief. The question is: does this describe a service I could actually use?
Each panellist receives the brief, their persona, and this task:
- Walk your part of the journey. Where do you get stuck, confused, or give up?
- What is missing for you that the brief does not mention?
- What has been assumed about you that is wrong?
- What would make you abandon this and go back to the old way?
- What would you ask the people building this?
Ask for concrete failure, not opinion: "at step 4 I would have to leave and come back with a document nobody told me about" beats "the flow could be clearer".
What to do with the answers
Sort every finding, exactly as the questions pass does:
| Finding | Where it goes |
|---|---|
| A fact about the client's world we did not know | Enrich the brief, with provenance marking it as panel-derived, not client-stated |
| A question only the client can answer | The affected product or module open questions section |
| A design consequence | Note it; it lands when the relevant reference is written |
| An invented circumstance the brief does not support | Discard it, and say you discarded it |
Panel findings are never client statements. Mark them. A persona is a device for thinking, not a source — treating its output as though the ministry said it is how a brief fills with fiction.
roast — after the references
Run against the product and module references, once they exist. The question is no longer is this usable but where does this break me?
Same panellists, adversarial task:
- Find the rule that hurts you. Which requirement makes your job harder than the paper process it replaces?
- Find the case you fall into that nobody wrote. What happens to you specifically?
- Find where you are stuck. Which state can you reach and not leave?
- Find what you can do that you should not be able to do — and what you cannot do that you need to.
- What would you exploit if you wanted to?
The fourth is where the panel earns its cost: an actor asked to find their own excessive privilege usually finds it, because they know what their job does not require.
What to do with the answers
Same sort, plus one bucket:
| Finding | Where it goes |
|---|---|
| A rule is wrong | Fix the owning module reference, and say which panellist found it |
| A case is unspecified | New requirement, or a new open decision |
| A confidentiality or privilege finding | Treat as a defect until disproved, not as an opinion |
| A complaint with no failing case behind it | Discard |
Running it
mkdir -p /tmp/panel/{prompts,answers}
# one prompt file per panellist in prompts/, named actor-axis.md
tools/run-panel.py /tmp/panel/prompts /tmp/panel/answers --jobs 5Seven actors is fourteen runs and several minutes. That cost is the reason to run a panel at the two moments where it changes something — after the brief and after the references — and not after every edit.
How this fails
The panel agrees with you. Personas built from your own specification will confirm your own specification. Build them from the brief's actor block, before the design is in your head, and write the difficult circumstance in — the person with a shared phone, the agent who does not trust the tool, the one who has been doing it on paper for twenty years.
The findings become facts. A panel produces hypotheses about people who do not exist. Every finding that enters the brief carries a mark saying it came from a panel. Without that mark, an invented circumstance is indistinguishable in three months from something the ministry said.
The panel replaces the users. It does not. It is what you do because you have not met them — and every finding it produces is a candidate question for the people you should be meeting. If the brief says no real applicant was ever interviewed, a panel does not close that gap; it sharpens what to ask when you finally do.