<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: SentientUI</title>
    <description>The latest articles on DEV Community by SentientUI (@sentient-ui).</description>
    <link>https://dev.to/sentient-ui</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4012053%2F9c5d0409-afbb-4fdb-b9b0-d62975c9f51d.png</url>
      <title>DEV Community: SentientUI</title>
      <link>https://dev.to/sentient-ui</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sentient-ui"/>
    <language>en</language>
    <item>
      <title>A/B testing was built for a web that no longer exists</title>
      <dc:creator>SentientUI</dc:creator>
      <pubDate>Tue, 04 Aug 2026 10:50:01 +0000</pubDate>
      <link>https://dev.to/sentient-ui/ab-testing-was-built-for-a-web-that-no-longer-exists-46m9</link>
      <guid>https://dev.to/sentient-ui/ab-testing-was-built-for-a-web-that-no-longer-exists-46m9</guid>
      <description>&lt;p&gt;A/B testing is one of the most successful ideas in web development. It replaced opinion with evidence. It made "I think users prefer the green button" into a testable claim. Nobody sane wants to go back to shipping on vibes.&lt;/p&gt;

&lt;p&gt;So this isn't a "A/B testing is dumb" post. A/B testing is a &lt;em&gt;good tool with a narrow set of assumptions baked into it&lt;/em&gt; — and those assumptions came from the web of 2010. Three of them are quietly breaking. One of them broke this year.&lt;/p&gt;

&lt;p&gt;Let's look at the assumptions, because once you see them, you can't unsee them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assumption 1: there is an "average visitor" worth optimizing for
&lt;/h2&gt;

&lt;p&gt;An A/B test asks: &lt;em&gt;which variant wins?&lt;/em&gt; Singular. You run A against B, you get a winner, you ship the winner to everyone.&lt;/p&gt;

&lt;p&gt;But "the winner" is the variant that performed best &lt;strong&gt;averaged across your entire traffic mix&lt;/strong&gt;. And your traffic isn't one audience — it's a pile of them stacked on top of each other:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The developer who came from Hacker News and reads every word&lt;/li&gt;
&lt;li&gt;The buyer who came from a LinkedIn ad and wants the pricing in 4 seconds&lt;/li&gt;
&lt;li&gt;The returning user who already knows what you do&lt;/li&gt;
&lt;li&gt;The person on a 3G phone in a different timezone&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A/B testing collapses all of them into one number and picks the variant with the best mean. That's optimizing for the average visitor — and the average visitor doesn't exist. It's the &lt;a href="https://www.thestar.com/news/insight/when-u-s-air-force-discovered-the-flaw-of-averages/article_7796e816-2c5d-5061-a041-1211a70a7f5b.html" rel="noopener noreferrer"&gt;Norden bomber cockpit designed for the average pilot&lt;/a&gt; that fit nobody. You can win the A/B test and still show every real segment a worse experience than they could have had.&lt;/p&gt;

&lt;p&gt;The moment you accept "different visitors want different things," a single winner stops being the goal. What you actually want is &lt;em&gt;the right variant conditioned on who showed up.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Assumption 2: you have enough traffic to reach significance
&lt;/h2&gt;

&lt;p&gt;Here's the part nobody likes to say out loud: &lt;strong&gt;most A/B tests never reach statistical significance, and teams ship anyway.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The sample size you need scales brutally with how small the effect is. Detecting a lift from a 3% baseline conversion rate to 3.3% (a real, respectable 10% relative lift), at 80% power and 95% confidence, needs roughly:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;n ≈ 16 * p(1-p) / (MDE)²
  ≈ 16 * 0.03 * 0.97 / (0.003)²
  ≈ ~51,000 visitors per variant
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;That's ~100k visitors for &lt;em&gt;one&lt;/em&gt; test of &lt;em&gt;one&lt;/em&gt; change. Most sites don't get that in a month. So what actually happens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The test runs for two weeks&lt;/li&gt;
&lt;li&gt;The dashboard shows B is "up 12%"&lt;/li&gt;
&lt;li&gt;The p-value is 0.34&lt;/li&gt;
&lt;li&gt;Someone says "close enough, ship it"&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Congratulations, you just shipped noise and wrote it down as data. And you'll do it again next sprint, because the ritual &lt;em&gt;feels&lt;/em&gt; rigorous even when the math isn't there. Underpowered testing isn't better than intuition — it's intuition wearing a lab coat.&lt;/p&gt;

&lt;h2&gt;
  
  
  Assumption 3: the web moves slowly enough to test episodically
&lt;/h2&gt;

&lt;p&gt;A/B testing is a &lt;strong&gt;batch process&lt;/strong&gt;. Set up the experiment, freeze the variants, wait for the calendar to grant you significance, pick a winner, tear it down. Weeks per decision.&lt;/p&gt;

&lt;p&gt;Two problems with batch in 2026:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The regret problem.&lt;/strong&gt; During the entire test window you keep sending ~50% of traffic to the variant you increasingly suspect is worse. Even after the evidence is piling up, the design of the test forces you to keep paying that tax until the end date. That wasted traffic has a name in the literature — &lt;em&gt;regret&lt;/em&gt; — and A/B testing maximizes it by construction.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The staleness problem.&lt;/strong&gt; The winner you crown is optimal for the traffic mix you had &lt;em&gt;during the test&lt;/em&gt;. Then your Product Hunt launch lands, or a campaign shifts your source mix, or seasonality hits — and your "winner" is now tuned for an audience you no longer have. You won't find out until the next quarterly test.&lt;/p&gt;

&lt;p&gt;The alternative here isn't new, it's just underused on the frontend: &lt;strong&gt;multi-armed bandits&lt;/strong&gt;. Instead of a fixed split, you shift traffic toward what's winning &lt;em&gt;as you learn&lt;/em&gt;, keeping a little exploration alive:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// A/B test: fixed 50/50 the whole way, decide at the end&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;variant&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;Math&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;random&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;&lt;/span&gt; &lt;span class="mf"&gt;0.5&lt;/span&gt; &lt;span class="p"&gt;?&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;A&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;B&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;

&lt;span class="c1"&gt;// Bandit: allocation follows the evidence, continuously&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;pickVariant&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;Record&lt;/span&gt;&lt;span class="o"&gt;&amp;lt;&lt;/span&gt;&lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="na"&gt;wins&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nl"&gt;trials&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;number&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;// Thompson sampling: draw from each variant's Beta posterior, take the best draw&lt;/span&gt;
  &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nb"&gt;Object&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;entries&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;stats&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;map&lt;/span&gt;&lt;span class="p"&gt;(([&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;])&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="nx"&gt;name&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nf"&gt;sampleBeta&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wins&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;+&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;trials&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;s&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;wins&lt;/span&gt;&lt;span class="p"&gt;))]&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="kd"&gt;const&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;sort&lt;/span&gt;&lt;span class="p"&gt;((&lt;/span&gt;&lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;b&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;a&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;])[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;][&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;];&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Same evidence, far less regret, and it never "ends" — it just keeps adapting. The batch experiment becomes a continuous process.&lt;/p&gt;

&lt;h2&gt;
  
  
  The assumption that broke this year: everyone visiting is a human
&lt;/h2&gt;

&lt;p&gt;Every assumption above still lives in a world where a &lt;em&gt;person&lt;/em&gt; lands on your page, forms an impression, and decides. A/B testing is fundamentally a theory of &lt;strong&gt;human behavior over sessions&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Then a meaningful slice of your traffic stopped being human.&lt;/p&gt;

&lt;p&gt;If you've looked at your logs lately you've seen it: &lt;code&gt;GPTBot&lt;/code&gt;, &lt;code&gt;ChatGPT-User&lt;/code&gt;, &lt;code&gt;Claude-User&lt;/code&gt;, &lt;code&gt;PerplexityBot&lt;/code&gt;, and a rising tide of agents fetching your pages — often without running your JavaScript — to answer a question on someone's behalf. They don't scroll. They don't A/B into a funnel. They don't come back on visit two and convert. They read, extract, and leave. Your carefully-tested hero headline may never be &lt;em&gt;rendered&lt;/em&gt; for them at all.&lt;/p&gt;

&lt;p&gt;This breaks A/B testing in a way you can't patch:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;You can't measure them the same way.&lt;/strong&gt; No session, no funnel, often no JS, so no client-side experiment framework even fires.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You can't optimize the same thing.&lt;/strong&gt; "Which button converts better" is meaningless to an agent extracting facts. The question becomes &lt;em&gt;"is my content legible and answerable?"&lt;/em&gt; — a completely different objective.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;They're invisible in your current tooling.&lt;/strong&gt; Most analytics silently drop no-JS agent traffic, so the fastest-growing segment of your visitors doesn't even show up in the data you're A/B testing against.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You cannot A/B test your way to good agent experiences, because the entire premise — a human making a decision you can nudge — isn't there. You need to (a) &lt;em&gt;see&lt;/em&gt; agent traffic as a first-class segment and (b) optimize for a different goal for it than you do for humans.&lt;/p&gt;

&lt;h2&gt;
  
  
  So what replaces it?
&lt;/h2&gt;

&lt;p&gt;Not "nothing" — and not "one clever tool." The shift is from &lt;strong&gt;testing&lt;/strong&gt; (find the single winner, ship it to all) to &lt;strong&gt;adapting&lt;/strong&gt; (serve the right experience conditioned on who — or what — showed up):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Optimize &lt;em&gt;per segment&lt;/em&gt;, not per average. Different personas, sources, and devices can converge on different variants.&lt;/li&gt;
&lt;li&gt;Allocate traffic &lt;em&gt;continuously&lt;/em&gt; toward what's working, instead of freezing a split for three weeks.&lt;/li&gt;
&lt;li&gt;Treat &lt;strong&gt;agents as their own segment&lt;/strong&gt; with their own objective — legibility, not clicks.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Concretely, that looks less like "set up experiment #47" and more like declaring what's adaptive and letting the system converge:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight tsx"&gt;&lt;code&gt;&lt;span class="c1"&gt;// You mark what can vary and what "good" means.&lt;/span&gt;
&lt;span class="c1"&gt;// The system decides per visitor and keeps learning — humans and agents included.&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Adaptive&lt;/span&gt; &lt;span class="na"&gt;goal&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="s"&gt;"signup"&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
  &lt;span class="p"&gt;&amp;lt;&lt;/span&gt;&lt;span class="nc"&gt;Hero&lt;/span&gt; &lt;span class="na"&gt;variants&lt;/span&gt;&lt;span class="p"&gt;=&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;proof-first&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;speed-first&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;developer-first&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt; &lt;span class="p"&gt;/&amp;gt;&lt;/span&gt;
&lt;span class="p"&gt;&amp;lt;/&lt;/span&gt;&lt;span class="nc"&gt;Adaptive&lt;/span&gt;&lt;span class="p"&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The honest version of the argument
&lt;/h2&gt;

&lt;p&gt;A/B testing isn't obsolete. If you have huge traffic and one high-stakes, all-human decision — a checkout flow on a site doing millions of sessions — a clean A/B test is still the right, rigorous call. Keep it there.&lt;/p&gt;

&lt;p&gt;But if you're like most teams — not enough traffic to reach significance, multiple audiences hiding inside one funnel, and a growing share of visitors who are software, not people — then the tool is being asked to hold up assumptions it was never built for. That's not a knock on A/B testing. It's just that it was designed for a web that is quietly, permanently, changing underneath it.&lt;/p&gt;

&lt;p&gt;The web got heterogeneous, continuous, and non-human. Our optimization tools should too.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;I'm building &lt;a href="https://sentient-ui.com" rel="noopener noreferrer"&gt;SentientUI&lt;/a&gt; around exactly this shift — adaptive interfaces instead of episodic tests, with agent traffic as a first-class segment. The SDKs are open source if you want to see how the adaptation and the agent-legibility parts actually work under the hood. Curious what your logs look like — how much of your traffic is already non-human? Drop a number in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>performance</category>
      <category>analytics</category>
    </item>
    <item>
      <title>The Interface Is Not The Product. It's The Output</title>
      <dc:creator>SentientUI</dc:creator>
      <pubDate>Thu, 02 Jul 2026 10:13:20 +0000</pubDate>
      <link>https://dev.to/sentient-ui/the-interface-is-not-the-product-its-the-output-391g</link>
      <guid>https://dev.to/sentient-ui/the-interface-is-not-the-product-its-the-output-391g</guid>
      <description>&lt;p&gt;There is an assumption buried so deep in how we build software that it rarely gets questioned. The assumption is that an interface is something you make. You sit down, you make decisions. What goes where, what colour, what size, what order... Those decisions get encoded into a codebase that serves them to everyone who arrives, identically, until someone decides to make different decisions.&lt;/p&gt;

&lt;p&gt;This is not how most things that learn work. A teacher doesn't deliver the same lesson to every student in the same order with the same emphasis regardless of what they already know. A good doctor doesn't give every patient the same examination in the same sequence regardless of what they came in for. But software has always worked this way, one interface, authored once, served to everyone, and we've never really interrogated whether that's the best we can do or just the best we knew how to do.&lt;/p&gt;

&lt;p&gt;We think it's the latter. And we think that's changing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Logic Knows Everything. The Visuals Know Nothing About You
&lt;/h2&gt;

&lt;p&gt;The most interesting thing about how interfaces are built today is what they don't separate.&lt;/p&gt;

&lt;p&gt;A React component is a function that contains both. It knows what it does: what state it holds, what events it fires, what data it needs. And it knows what it looks like: the markup, the styling, the layout. These two things are compiled together into the same artifact. You can't have one without the other. The logic and the visuals are inseparable by design.&lt;/p&gt;

&lt;p&gt;This coupling made sense when interfaces were simple and when the people building them were also the people using them. When you're building for yourself, your decisions about how something looks and how it behaves can live in the same place without friction. But as interfaces scaled to billions of users across thousands of different contexts, the coupling started to create a problem that nobody quite named.&lt;/p&gt;

&lt;p&gt;The logic of an interface, what it does, what it knows, what it responds to, is stable across people. A checkout flow adds items to a cart for everyone. A search bar takes queries from everyone. A dashboard displays data to everyone.&lt;/p&gt;

&lt;p&gt;The visuals, what those things look like, in what order they appear, how much prominence each element gets, what the flow emphasises and what it minimises, are not stable across people. They're stable across decisions made by one person, at one time, for a user they imagined. Not for you.&lt;/p&gt;

&lt;p&gt;The question we keep returning to is: what happens when you pull those two things apart? When the logic is complete and self-contained, and the visuals are derived separately, specifically, for the person looking?&lt;/p&gt;

&lt;h2&gt;
  
  
  The Interface Doesn't Know What It Looks Like Until It Knows Who's Looking
&lt;/h2&gt;

&lt;p&gt;Here's what we mean by that in practice.&lt;/p&gt;

&lt;p&gt;Imagine a product page. The logic is fixed: there is a product, it has a price, it has images, there is an add-to-cart action, there are reviews, there is related product data. All of that is structural. It exists the same way for every visitor.&lt;/p&gt;

&lt;p&gt;But the way that information is arranged, what you see first, how much of the price is emphasised versus buried, whether the reviews are above the fold or below it, whether the call to action is bold and urgent or quiet and inviting, none of that is structural. All of it is a visual decision. And right now, those decisions are made once, by a designer or a product team, and served identically to a first-time visitor arriving with low intent, a returning customer ready to buy, a researcher comparing options, and someone who arrived from a recommendation and is already sold.&lt;/p&gt;

&lt;p&gt;The same page. For all of them. Because the logic and the visuals are coupled. Because the interface is authored as a single thing.&lt;/p&gt;

&lt;p&gt;When you pull them apart, the logic remains fixed. The product exists. The price exists. The reviews exist. But the visual layer, the decisions about arrangement, emphasis, ordering and prominence gets derived from what is actually true about the person arriving. Not guessed in advance. Derived from evidence about this kind of person, at this kind of moment, with this kind of history.&lt;/p&gt;

&lt;p&gt;The interface doesn't look the same to everyone. It looks like the right thing for who is looking.&lt;/p&gt;

&lt;h2&gt;
  
  
  Brand Doesn't Disappear. It Gets More Precise.
&lt;/h2&gt;

&lt;p&gt;The first objection that comes to mind is usually about brand. If the interface is derived differently per person, does that mean every company loses the visual identity they've spent years building?&lt;/p&gt;

&lt;p&gt;It's the wrong question. It assumes that brand is the specific arrangement of pixels on a specific page, rather than what brand actually is. We define it as a set of values, constraints, and expressions that define the space within which good design decisions live.&lt;/p&gt;

&lt;p&gt;Nike's brand is not a specific homepage layout. It's a philosophy: bold, minimal, action-forward, high-contrast. Those properties define a space. Within that space there are many possible arrangements. Some work better for different people. The brand doesn't tell you which arrangement is best for the high-intent mobile visitor versus the first-time desktop visitor, it tells you what all arrangements must feel like, regardless of who they're for.&lt;/p&gt;

&lt;p&gt;When the interface is derived rather than authored, brand becomes the constraint system rather than the output. It defines what can vary and what cannot. The primary colour is locked. The typography is locked. The core identity is inviolable. What's unlocked is arrangement, emphasis, density and ordering, the things that don't change what a brand is but do change how effectively it communicates to each specific person.&lt;/p&gt;

&lt;p&gt;The brand becomes more itself for each person, not less itself for everyone.&lt;/p&gt;

&lt;p&gt;And there's something else that becomes possible when brand is a constraint system rather than a fixed artifact: it can be expressed in language. Not a token file or a style guide PDF — a sentence. "Luxury minimal with warmth" or "technical and precise but approachable" or "bold and urgent, never quiet." The system derives the specific design decisions from the sentence. The sentence is the brand. Everything that flows from it is interpretation within the space the sentence defines.&lt;/p&gt;

&lt;p&gt;This is not a smaller idea than it sounds. It means that the people who understand a brand best, the founders, the CMOs and the creative directors can express it directly, without it getting lost in translation through a design system and a component library and a handoff document and a developer who had six other things to build that week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Generate Once. Serve Instantly. For Everyone Who Matches.
&lt;/h2&gt;

&lt;p&gt;One of the things that seems hardest about this idea is performance. If the interface is derived specifically for each person, does that mean it has to be generated fresh for every visitor? Wouldn't that be impossibly slow?&lt;/p&gt;

&lt;p&gt;Not if you think about it at the right level of abstraction.&lt;/p&gt;

&lt;p&gt;People are not infinitely varied. They cluster. There are patterns of behaviour, patterns of intent, patterns of arrival that repeat across millions of visitors. A high-intent buyer arriving from a paid search ad to a product category they've explored before is a type of person. A first-time visitor scrolling slowly on a mobile device at 11pm is a different type. A returning customer who almost bought last week is another.&lt;/p&gt;

&lt;p&gt;These clusters are stable enough that you can derive the right interface for each one in advance, cache the result, and serve it instantly when someone who matches arrives. The derivation happens once per cluster. The serving happens in milliseconds. The visitor never waits for anything to be generated, they receive a cache hit that happens to have been prepared for someone exactly like them.&lt;/p&gt;

&lt;p&gt;This is the model that changes the economics of personalisation. It's not "generate something new for each person in real time." It's "understand the patterns that exist in your visitors, derive the right interface for each pattern, and serve it instantly to everyone who matches." The intelligence is in the pattern recognition. The serving is just caching.&lt;/p&gt;

&lt;p&gt;And the more sites participate in this model, the better the pattern recognition gets. A visitor's pattern doesn't start from zero when they arrive somewhere new. If they've been seen elsewhere. If their behaviour has been observed in other contexts their cluster is already known. They arrive pre-understood. The interface they receive on the first visit is already calibrated to who they are, not to who a designer imagined might show up.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Interface Follows The Person, Not The Device
&lt;/h2&gt;

&lt;p&gt;The way we've handled multiple devices until now is a version of the same problem. A designer makes decisions for a desktop visitor. Then they make different decisions for a mobile visitor. Then someone notices the tablet experience is broken and those decisions get made too. Each time, someone is sitting down and authoring a version of the interface for a category they're imagining.&lt;/p&gt;

&lt;p&gt;When the interface is derived from who is looking rather than authored for a category, device context becomes one more input to the derivation rather than a separate authoring exercise. The same system that knows you're a high-intent returning customer also knows you're on a small touchscreen arriving from a social link late at night. The interface it derives takes all of those facts into account simultaneously.&lt;/p&gt;

&lt;p&gt;The experience across your phone, your tablet, your laptop isn't three separate designs that someone tried to keep consistent. It's one set of facts about you, rendering appropriately for whatever surface you're currently using.&lt;/p&gt;

&lt;p&gt;This extends further than people usually think. TV interfaces, in-app webviews, kiosk screens — anywhere software runs on a screen, the same question applies: who is looking, and what does the right interface for them look like here? The authoring model has always required someone to go and make separate decisions for each new surface. The derived model carries the understanding of who is looking and applies it wherever the looking happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Honest Tensions
&lt;/h2&gt;

&lt;p&gt;None of this arrives without tradeoffs, and it's worth being clear about them.&lt;/p&gt;

&lt;p&gt;The first is stability. People who use a tool every day build familiarity with it. An interface that keeps discovering better arrangements is an interface that keeps changing. For occasional visitors to marketing sites, constant discovery is fine, they have no established habits to disrupt. For daily users of internal tools and productivity software, stability matters as much as optimisation. The system has to know when it has found a good enough answer and hold it, rather than continuing to explore.&lt;/p&gt;

&lt;p&gt;The second is legibility. When a page looks different to you than it does to someone else, trust can erode. Did they see something I didn't? Was I shown a less favourable version? The derived interface needs to be explainable. Not technically, but in terms a person can understand and feel good about. You saw this arrangement because of what we know about people in your situation. Here is what we know. Here is why this serves you. Without that transparency, personalisation feels like manipulation rather than service.&lt;/p&gt;

&lt;p&gt;The third is creativity. Not every interface should converge on what works. Some of the most important experiences in the world are designed to challenge, disorient and expand, not to give you what you'd already have chosen. A museum doesn't adapt its curation to your preferences. A film doesn't rearrange itself around your attention span. Some interfaces should be stubbornly, deliberately static, because the friction is the point and the designer's intent matters more than the visitor's comfort. The derived interface is powerful for software that serves goals. It's wrong for experiences that pursue them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where We Are
&lt;/h2&gt;

&lt;p&gt;The assumption that an interface is something you make, authored once, served to everyone, is not a permanent feature of software. It's a consequence of the economics and the tools available when the decisions were made. When specificity is expensive, you default to generality. When it gets cheaper, you start asking whether generality was ever really what you wanted.&lt;/p&gt;

&lt;p&gt;We're building in the direction of something more specific. Not a different look for every single person — that's neither possible nor desirable. But a different understanding of who is looking, expressed through the decisions that actually vary: what gets prominence, what gets ordered first, what gets said to this person at this moment with this history.&lt;/p&gt;

&lt;p&gt;The interface as output rather than artifact. Derived from what is true rather than authored from what is imagined.&lt;/p&gt;

&lt;p&gt;The technology for this exists. The patterns are recognisable. The caching model makes it fast. What's missing is the layer that pulls it together, the system that observes, understands, derives and serves and the ecosystem of interfaces built to work with it rather than against it.&lt;/p&gt;

&lt;p&gt;That's what we're working on.&lt;/p&gt;

&lt;p&gt;SentientUI is building the personalisation layer for the web, starting with React and Next.js, pointed at something larger. If this is a problem you're thinking about, we'd like to talk.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>design</category>
      <category>ui</category>
      <category>ux</category>
    </item>
  </channel>
</rss>
