I keep filing the same defect against screens my coding agents build, and it isn’t a bug. The layout is fine, the tokens are right, dark mode works, the tap targets pass. The defect reads: “feels AI-made.” For months that was the least actionable line in my tracker, because I couldn’t say why – and an agent can’t fix “feels”.
The internet’s consensus fix is real but partial. Yes, AI-generated UI converges on the statistical average of every interface it’s seen – the purple gradient, the Inter font, the three-card row – and yes, handing the model your actual design system kills most of that. Mine did. The screens matched my colours, my type scale, my spacing. They still felt generated. There’s even an empirical study showing AI-generated interfaces score fine on usability while staying relentlessly conventional – “usable but conventional” is the exact texture I mean.
The tells that survive the design system aren’t visual. They’re structural – in how a block is organised, not how it’s painted. After enough review rounds I could name five, and once named, they turned “feels AI-made” into a checklist an agent can actually pass.
The five laws
1. Two text layers per block, maximum. A title and one supporting line. The third layer is where models go to restate: title says “Weekly summary”, subtitle says “Your summary for this week”, caption adds “Here’s an overview of your week.” Each layer is individually reasonable, which is exactly how it gets past review. Humans write the third line too – the difference is a human editor deletes it on the second read, and a model has no second read unless you give it one.
2. No box-in-box. A bordered panel, inside a rounded card, inside a padded section container. Models nest containers relentlessly; my guess is that every component in the training data arrived screenshotted in its own tidy frame, so composition learned to mean stacking frames. Whatever the cause, a designer opens the layers panel and flattens, and the model needs the law stated: one container per block, siblings separated by spacing, not by more borders.
3. No idle captions. Text that describes what the user can already see is filler: “Select an option below” above three visible options, “Your items” above a list of items. On a phone every restating line costs a line of content. The test is brutal and easy: delete the caption; if the screen loses no information, it was never information. The law targets restating, not information – empty states and a first-run explanation of a non-obvious control stay.
4. No confirm ceremony on reversible actions. A toggle that opens an “Are you sure?” sheet. An onboarding flow that routes you through a mandatory feature-showcase detour before the button you actually came for. I shipped that second one. My app’s first-run screen walked every new user through a tour stop before the enter button, because the flow had been generated screen by screen and each screen wanted to justify itself. The fix was pure deletion: the primary action became sticky and entered the app directly, and every real choice on that screen – including a consent – stayed exactly where it was. Models add ceremony because ceremony reads as care in prose; interaction isn’t prose. If the action is reversible in one tap, asking first is friction cosplaying as safety.
5. Never re-ask a stable preference. The user picked their language, their units, their reading mode – once, in settings, where those choices live. A generated flow will cheerfully ask again at every entry point, because each screen was generated as if it were the app’s front door. State that exists must be read, not re-collected.
The common root: models design a screen the way they’d describe a screen. Description rewards completeness – more labels, more framing, more reassurance. Interaction rewards economy. A block should be designed for how it’s used, not how it reads as a spec. That single sentence in a review prompt does more than any palette instruction I’ve written.
Making it a gate, not a mood
What changed behaviour was less the laws than the reclassification: “feels AI-made” is now a defect class in my review gate, same standing as a failing test. Concretely:
- Every screen-touching change gets a block-by-block pass against the five laws before merge, run by a reviewing agent with the laws quoted in full. Verdict per block, and one named deletion or merge that would most improve it.
- The reviewer’s last question is not about the laws: “would a person who cares have shipped this block?” The laws catch the mechanical tells; that question catches the ones I haven’t named yet.
- Violations round-trip to the agent that built the screen, not to a human clean-up pass. The laws are mechanical precisely so a model can apply them.
The short form of the reviewer’s contract, paste-able as-is:
Review the screen block by block. A block = one card, row, header, or sheet.
Per block, check:
1. More than two text layers? Quote the layer you would delete.
2. Nested containers? Name the frame to remove.
3. Captions restating the visible? Delete-test each one.
4. Confirmation guarding a reversible action? (Destructive, financial,
and legal moments keep their ceremony - say which side this is on.)
5. Re-asking a preference that already exists in state?
Report a verdict per law per block, plus the ONE deletion that most
improves the block. Bias every fix toward deletion; never fix a
feel finding by adding labels, frames, or explanations.
The deletion-first bias matters. Almost every fix under these laws removes something – a caption, a border, a detour, a re-asked question. That’s also the cheapest possible fix to review. When a reviewing agent proposes adding elements to fix an AI-feel finding, it has misunderstood the defect.
When ceremony is right
The honest limits. Law 4 has real exceptions: destructive actions, legal consent, payments, anything with gravity deserves its confirmation – the law targets ceremony on reversible actions, and “reversible” is a judgement, not a grep. The laws are tuned for phone-sized blocks; a dense analytics desktop can legitimately run more text layers. And passing all five doesn’t make a screen good – it makes it not-generated-feeling, which is only the floor; taste still doesn’t compile.
The screens that pass don’t suddenly get prettier. They stop narrating the obvious: nothing on them restates itself, asks again, or guards a tap you can undo. Whatever remains after the five laws is the part I still can’t mechanise, which is why the reviewer’s last question – would a person who cares have shipped this? – stays in the gate. But start with the narration. In my review queue, that is where “feels AI-made” has pointed almost every time.
Further reading: Why AI design looks generic on the convergence problem the design-system fix does solve; Usable but Conventional, the study putting numbers on “fine but flat”. The full five-law audit lives in my prompts library as ai-feel-block-audit, and the laws grew out of Think Like Roy, my full QA standard – free, CC BY 4.0. Related: the writing prompt that hunts the same tells in prose.
Comments & Reactions
Got a thought, a war story, or a “well, actually”? Sign in with GitHub and jump in.
Loading comments…