Adesina Samuel

Adesina Samuel

The Human Is Not a Fallback. The Human Is the Point.

July 14, 2026

AI-assisted builds converge on the same look because taste is the one input models can't generate for themselves — and that's not a temporary limitation.

Ask three different builders to prompt the same coding agent for a pricing page, and you'll often get three versions of the same page. Same spacing instincts, same card layout, same gradient, same rounded button with the same shadow. Nobody stole from anybody. They just asked the same model the same kind of question, and the model answered from the same place it always answers from: whatever it has already seen.

The sameness problem

This is the part of the AI-assisted building conversation that gets flattened into a slogan. People say "human in the loop" and mean something procedural, a compliance checkbox, a safety net for when the agent gets something wrong. That framing misses what's actually happening. The human in the loop isn't there to catch mistakes. The human in the loop is the only source of taste the system has access to.

A model doesn't have a point of view. It has a training distribution, an enormous compressed average of how millions of people have built things before. When you ask it for something without giving it anything of yours, spacing preferences, references you admire, a product principle you're trying to protect, it doesn't invent one. It returns the center of the distribution. Competent, coherent, and instantly recognizable as the thing everyone else is also getting back. Researchers studying AI-assisted writing have found exactly this pattern: the individual output can look fine, sometimes better than what a less experienced person would have produced alone, but pooled across many users the overall variety shrinks. Everyone gets lifted toward the same average, and the average has no fingerprint.

That's the real mechanism behind what builders in 2026 have started calling AI slop: not that the output is broken, but that it's generic in a way that's hard to name until you've seen fifty examples of it in a week. Speed without a point of view produces speed toward sameness. The tool didn't fail. It did exactly what an average-seeking system does when nobody gave it anything to deviate from.

Why the loop is the actual work

This is where the practical argument for human in the loop lives, and it has nothing to do with trust or safety theater. It's about supplying the one input the model structurally cannot generate for itself: a reason to build it this way instead of the other way. That reason has to come from somewhere outside the training data, and the only thing outside the training data in the room is you. Your reference folder. The three products you keep mentally comparing yourself to. The specific frustration that made you start this project in the first place. None of that is optional context you can skip to move faster. It is the raw material the entire build is supposed to be shaped around.

There's a temptation to treat this as a temporary condition, something that holds only until models get better at inferring taste on their own. It's worth being skeptical of that. A model trained to predict the next likely thing will always be pulled toward the likely thing. That's not a bug scheduled for a fix. It's the mechanism. Taste is, almost by definition, a departure from what's likely. No amount of scale teaches a system to want less of what it's good at producing. Only a person, deciding what this particular thing is for, can do that.

How to stay human in the midst of agents

Knowing this doesn't automatically change how you build. The agent is fast, the deadline is real, and it's easy to let the first output stand because arguing with it feels like friction you don't have time for. Staying in the loop in any meaningful sense takes a few deliberate habits, not good intentions.

Name the taste before you generate

Don't open with a feature list. Open with a description of the feel you're after, specific enough that a generic answer would visibly miss it. Not "clean dashboard" but "calm and airy, the kind of interface that makes a busy person feel briefly in control." The difference matters more than it sounds like it should. A feature list tells the model what has to exist on the page; it says nothing about how any of it should feel, so the model fills that gap with its most statistically likely guess, which is whatever look currently dominates its training data. Vague requests get average answers because average is a safe bet against vague. Specific, sensory direction, calm versus urgent, quiet versus loud, dense versus spacious, gives the model an actual target to aim at instead of its own center of gravity. This is also the step most builders skip under time pressure, because naming a feeling takes longer than listing a feature, and it's tempting to assume you can fix the vibe in review. In practice it's much cheaper to set the direction once at the start than to argue a generic layout back toward something specific after the fact.

Feed it your references, not just your requirements

A spec tells the model what to build. A reference tells it what to sound like. Point it at the two or three things you keep comparing yourself to, and say precisely what you want borrowed from each: this one's restraint, that one's use of type, not the whole aesthetic wholesale. The precision here is what separates a reference from a mood board. "Make it like Linear" gives the model a category to default toward, which is still an average, just a smaller one. "Take the amount of white space Linear leaves around its headings, but none of its blue" gives it a specific decision to carry through the build. Requirements alone will get you something that works. Named, dissected references get you something that's recognizably yours, because you've told the model exactly which choices to keep and which to leave behind, rather than asking it to guess at the whole package.

Treat the first output as a draft, not an answer

The instinct to accept the first pass because it technically works is where most of the taste leaks out of a build. Read it the way an editor reads a first draft, looking for what's competent but interchangeable, not for what's broken. A page can render correctly, pass every functional check, and still be the same page anyone else would have gotten from the same prompt. That's not a bug you can catch by testing the button; it's a quality you can only catch by looking at the whole thing and asking whether it feels like a decision or a default. If you can't point to one thing you'd have done differently, you probably haven't looked closely enough yet. This is the step that costs the most time and returns the most, because it's the only point in the process where you're actually comparing the output against your own standard instead of against "did it work."

Protect friction on purpose

Not every pause in a build is wasted time. Stopping to compare two structures before picking one, asking the agent to explain what it assumed, reading a diff line by line instead of skimming it, these are the moments where your judgment actually gets to enter the work. An agent will happily remove all of that friction if you let it, because removing friction is what it's optimized to do. Some of it needs to stay, deliberately, because that gap between prompt and output is where a build stops being generic and starts being yours. In practice this can be as small as refusing to let an agent auto-apply a suggested refactor without reading it first, or insisting on seeing two versions of a layout before committing to either. The friction isn't the enemy of speed here. It's the specific place where speed would otherwise erase the parts of the decision that were supposed to be yours to make.

Compare against your own bar, not the model's

The easiest failure mode is judging the output against "is this good" instead of "is this what I meant." A model's output can clear a reasonable bar for quality, sound code, working layout, sensible copy, and still miss your intent completely, because quality and distinctiveness are different measures entirely. Something can be well built and still be nobody's in particular. Keep asking the second question, every time the first one gets answered yes. It's the one the model can't ask for you, because it has no version of "what I meant" to check against. Only you have that, and it only stays intact if you keep insisting on it as the actual test.

The loop isn't temporary

The temptation, watching agents get faster every quarter, is to assume review and taste are a stopgap, something you'll eventually be able to skip once the tooling matures. That gets the relationship backwards. As generation gets cheaper, the review and direction layer becomes the entire differentiator, not a smaller part of the job but a larger one. Everyone has access to the same models. Not everyone brings the same references, the same restraint, the same reason for building the thing at all.

That's the part worth sitting with. The agents aren't going to slow down, and the pressure to accept the first good-enough output is only going to grow, because the cost of generating another version keeps dropping toward zero. Which means the scarce thing in any build was never the code, the copy, or the layout. It was always the person willing to stop, look at what came back, and decide it wasn't quite right yet. That decision doesn't get automated by a faster model. It gets skipped by an impatient one. The builders whose work still looks like something in a year of nothing but agents everywhere will be the ones who never let that decision go, not because they distrust the tools, but because they understood early that taste was the one input the tools were built to reflect, not replace.