The hardest defect to find in your own product is the one that only appears to somebody unlike you. You know where the button is. You know what the empty state means. You have never once arrived at the page cold, on a phone, unsure whether the thing is a scam.
So the test drive runs on a panel: simulated testers with names, devices, attitudes and a reason to leave, each given a brief and turned loose on your product. Until recently that panel was twelve hand-written archetypes, and the file that holds them says its own ceiling out loud. Archetypes are the right default and the wrong specifics. A product for Korean-speaking case-interview candidates got the same twelve people as a plumbing-quote tool.
What was missing was a population to draw from. There is one now.
The population
The pool is a curated slice of the MatrAIx Persona dataset, an MIT-licensed research release of simulated users built for exactly this purpose. It is vendored into the repository rather than fetched, with its source, commit and licence sitting in the same file as the data, so the people your panel is drawn from are pinned to a version you can point at.
Ten thousand records. Most of them are not usable, and that turns out to be the most interesting thing about the dataset.
scripts/personafigs.cjs,
through the same brief() the product renders.A record only matters here in one form: the brief a tester is actually handed. So the quality bar is measured on that rendered brief and nothing else, because an attribute the brief never mentions is not richness, and counting it would measure the wrong thing.
Below 250 characters a tester reads like this, in full: You are Ivan Kowalski, 22, working engineering in Software & AI, from Eastern Europe. You have been burned by AI tools that overpromised. That person costs a whole browser session and a model’s attention and tells you almost nothing. Just over three thousand records land there and none of them are ever seated.
The alternative was to pad them, and padding was refused. Inventing detail the dataset does not have produces a fake-rich tester, and a confident invention is worse than a thin truth everywhere else in this product. What is left is 6,783 people with a median brief of 424 characters, which sits in the same class as the twelve hand-written archetypes rather than a thinner one: those run 494 to 615.
How six of them end up at your table
You describe your audience in your own words. The dataset describes people in its own
vocabulary, which is not the same vocabulary: you type consultant, the schema says
role_function: Executive.
The bridge is a small synonym table, and it is deliberately boring and deliberately visible. A miss is a one-line fix rather than a model call on every visit to your settings. Your words become tokens, tokens are scored against each record, and a native-language match outranks every keyword by design: a Spanish-language product with a panel that cannot read it is not a panel.
Ties are broken by a diversity pass, so six people who scored identically do not turn out to be the same person six times. Then two numbers come back with the panel, and both of them are the honest kind:
- Matched and filled are reported separately. A seat that answered your audience and a seat filled for coverage are different things, and presenting a padded panel as a targeted one would be the exact overstatement this product exists to catch.
- A filter that cannot be met is named. Narrow the pool hard enough and six seats will not fill. There are three things to do about that: seat fewer people, ignore the filter silently, or say so. The first two are lies, so the panel says which filter was loosened and by how much.
A real panel
Here is one seat from an actual draw, for the audience small business owners booking home repairs. Six matched, none filled, no filter loosened:
You are Aditya Rahman, 50, working senior-level executive in Business & Management, from South Asia. You use technology because you must, not because you enjoy it. You verify everything, you cross-check any claim before you act on it; you have been burned by AI tools that overpromised, and you remember; unfamiliar interfaces genuinely stress you, and you quietly give up rather than fight one.
That last clause is the one worth stopping on, and it is not decoration. Every brief carries an edge sentence derived from the record’s own measured attitudes, and it is never omitted, however agreeable the record. The panel file’s founding rule is that polite yes-men make the panel worthless, and the way to enforce a rule like that is by construction rather than by hoping.
The testers you never hear from
Aditya is not an edge case. He is a large, quiet fraction of every real audience.
Roughly one in six seatable testers is reluctant or avoidant with technology. Those are the people who close the tab instead of filing a bug, which means they are invisible in your analytics as anything except a number that went down. A panel drawn only from people who enjoy software would be a panel that agrees with you, and it would find the defects you were going to find anyway.
What the panel refuses to model
Ethnicity, religion, marital status and gender are dropped before the data enters the repository. Not filtered at render time, not hidden behind a setting: removed at conversion, so the fields do not exist to be used.
The reasoning is narrow and practical. Tester behaviour in a browser flows from tech comfort, trust, language, domain and patience. Those attributes change what somebody does on a signup form. The others are stereotype fuel with no QA signal attached, and the cheapest place to refuse them is the schema, where no future feature can reach for them by accident.
The same panel, every time
Same audience, same seed, same six people. This is less obvious than it sounds and it matters twice. Nobody should watch their testers reshuffle between visits, and a defect blamed on a panel has to be reproducible or it is not a finding, it is an anecdote.
Curation works the same way. Pinning five testers you liked and rerolling the sixth returns those five byte-identical, and the one you replaced cannot come back on the next draw, which is a reroll button that would sometimes do nothing and look broken rather than random.
What this is not
The research team who built the dataset are clear about its limits, and their caveat is ours. Simulated testers are for exploration and stress-testing. They are not a replacement for real people, and nothing here should be read as one.
What they are good at is the thing that is genuinely hard to arrange: someone unlike you, on demand, at three in the morning, who will press the button you never press and tell you plainly that nothing happened.
Getting started with the panel
- Describe your audience in your own words. Not the dataset’s vocabulary, yours. The synonym table does the translating.
- Name the language if it matters. A native-language match outranks every keyword, so one word here moves the panel more than a paragraph anywhere else.
- Draw the panel. Six testers come back with the seed that produced them, so the same description gives you the same six people every time.
- Read the two numbers. Matched and filled are reported separately, and any filter that had to be loosened is named.
- Curate and run. Pin the ones you want, reroll the rest, then turn them loose on the product. Pinned testers come back byte-identical.