<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Temi Amodu: Writing</title>
    <link>https://temi.me/feed</link>
    <atom:link href="https://temi.me/feed.xml" rel="self" type="application/rss+xml" />
    <description>Essays and notes on design systems, accessibility, growth and product work, from Temi Amodu, product designer in Amsterdam.</description>
    <language>en-gb</language>
    <lastBuildDate>Mon, 28 Sep 2026 00:00:00 GMT</lastBuildDate>
    <item>
      <title>When the Interface Starts Acting on Your Behalf</title>
      <link>https://temi.me/feed/articles/when-the-interface-acts-on-your-behalf</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/when-the-interface-acts-on-your-behalf</guid>
      <pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>AI-enabled experiences</category>
      <category>ai</category>
      <category>agents</category>
      <category>delegated authority</category>
      <description><![CDATA[Agentic systems move the design problem from what a model can produce to what it is authorised to change. That makes delegated authority, not conversation, the thing being designed.]]></description>
      <content:encoded><![CDATA[<p><em>AI introduces a design problem software has rarely had to confront at this scale: delegated authority.</em></p>
<p>You ask an assistant to find somewhere for dinner. It researches restaurants and gives you three suggestions. Useful.</p>
<p>Now give it access to your calendar. It excludes the nights when you are busy. More useful.</p>
<p>Now give it the ability to make reservations. The interaction has changed.</p>
<p>The question is no longer only whether the system understood what you meant. The system can now create consequences.</p>
<p>What exactly did you authorise?</p>
<h2>Generation is easier to reason about than action</h2>
<p>Much of the first generation of AI product interaction has revolved around outputs.</p>
<ul>
<li>Generate some text.</li>
<li>Summarise a document.</li>
<li>Create an image.</li>
<li>Suggest code.</li>
<li>Answer a question.</li>
</ul>
<p>In each case, there is a natural boundary. The system produces something. The human chooses what happens next.</p>
<p>Agents weaken that boundary. A system can research, navigate, modify information, invoke tools and interact with external services.</p>
<p>Now the answer to a prompt may not be another artefact. It may be a changed state somewhere else.</p>
<ul>
<li>An email sent.</li>
<li>A meeting moved.</li>
<li>A pull request opened.</li>
<li>A file edited.</li>
<li>A purchase prepared.</li>
</ul>
<p>The central design problem therefore moves from: <strong>What can the model produce?</strong></p>
<p>towards: <strong>What is the system authorised to change?</strong></p>
<h2>Access and authority are different things</h2>
<p>This distinction becomes clearer in current agentic products.</p>
<p>ChatGPT Work's cloud browser can interact with supported websites, including clicking buttons, entering information and working inside signed-in experiences.</p>
<p>Its current product guidance explicitly separates permission to access a website from approval for a consequential action. Allowing access to a site does not remove the need to confirm actions that can be hard to reverse or create significant financial, legal, account or other real-world commitments, such as confirming a booking or making a payment.[1]</p>
<p>That distinction is more important than it first appears.</p>
<p><strong>Access answers:</strong> Can the system enter this environment?</p>
<p><strong>Authority answers:</strong> What may it do once it is there?</p>
<p>Those are completely different permissions.</p>
<p><img src="https://temi.me/articles/when-the-interface-acts-on-your-behalf/access-vs-authority.svg" alt="Two columns contrasting access, such as reading a site or inspecting a calendar, with authority, such as placing a booking or merging a change." title="Entering an environment and being allowed to change it are separate permissions."></p>
<p>This difference existed before AI, but agents make it central. A calendar application may have permission to edit events. That does not automatically answer whether an agent should reschedule a client meeting because it inferred that another time was more convenient.</p>
<p>Technical capability does not define legitimate delegation.</p>
<h2>Delegation needs boundaries</h2>
<p>When people delegate tasks to other people, they rarely delegate infinite authority.</p>
<p>“Find somewhere for dinner” is an objective.</p>
<p>“Find somewhere for dinner within twenty minutes of the hotel, under €80 per person. You can reserve it, but ask me before anything with a cancellation charge.” is something else.</p>
<p>It contains a small authority model.</p>
<p>Goal. Scope. Constraint. Threshold. Escalation condition.</p>
<p>AI interfaces need ways of representing the same thing. Not necessarily as a formal settings panel. But the system has to know where delegated authority stops.</p>
<p>I think of that boundary as the <strong>delegation contract</strong>.</p>
<p>The contract answers:</p>
<ul>
<li>What outcome is the agent pursuing?</li>
<li>What resources can it use?</li>
<li>What actions can it perform?</li>
<li>What constraints apply?</li>
<li>What requires approval?</li>
<li>What should happen outside the agreed boundary?</li>
<li>How can the person stop or reverse it?</li>
</ul>
<p><img src="https://temi.me/articles/when-the-interface-acts-on-your-behalf/delegation-contract.svg" alt="Six fields of a delegation contract: goal, resources, allowed actions, constraints, approval thresholds, and recovery or stop conditions." title="What a person actually hands over, written down."></p>
<p>If the answers are unclear to the user, the agent may be capable without being trustworthy.</p>
<h2>GitHub makes the boundary visible through the pull request</h2>
<p>Consider GitHub Copilot's cloud agent. GitHub documents a workflow where the agent can work autonomously on an issue or developer request and raise a draft pull request. Its default guardrails restrict the agent from merging that pull request itself and require human review before merge.[2][3]</p>
<p><img src="https://temi.me/articles/when-the-interface-acts-on-your-behalf/github-copilot-agent-pull-request.webp" alt="A draft pull request opened by the GitHub Copilot cloud agent, showing that it wants to merge commits into main and has requested a human review." title="The pull request is not just workflow. It is an authority boundary. GitHub Docs, captured 21 September 2026."></p>
<p>This is not just an engineering workflow. It is an authority boundary embodied in an existing product primitive.</p>
<p>The agent is allowed to:</p>
<p>investigate, change code, prepare a proposal, respond to feedback.</p>
<p>But the pull request creates a checkpoint before those changes become part of the shared codebase.</p>
<p>The important interface element is not the AI icon. It is the boundary between <strong>prepared action</strong> and <strong>committed action</strong>.</p>
<p>GitHub also now exposes more explicit agent-merge workflows in some Copilot experiences. Those workflows remain bounded by repository rules, checks and approvals, which is useful precisely because it shows that “more autonomy” is not one switch. It is a set of permissions layered onto existing governance.[4]</p>
<h2>We need more than an “autonomous / not autonomous” switch</h2>
<p>AI products are often discussed as though autonomy is one variable. It is more useful to treat it as a gradient.</p>
<p>A system can <strong>observe</strong>. It can <strong>recommend</strong>. It can <strong>prepare</strong>. It can <strong>execute</strong>. It can <strong>commit</strong>.</p>
<p><img src="https://temi.me/articles/when-the-interface-acts-on-your-behalf/authority-gradient.svg" alt="A gradient from observe through recommend, prepare and execute to commit, with the kind of action described beneath each stage." title="Autonomy is not one switch. The same model sits at different points depending on the tools it is given."></p>
<p>These levels are not determined by intelligence. They are determined by product permissions and interaction design. The exact same model can occupy completely different positions depending on the tools it receives.</p>
<p>A travel assistant that compares flights is not the same product as one that can purchase the ticket. A coding agent that prepares a patch is not the same product as one that can deploy production code. A financial assistant that explains transactions is not the same product as one that can initiate them.</p>
<h2>Confirmation everywhere would defeat the point</h2>
<p>There is an obvious solution to the authority problem. Ask before every action.</p>
<ul>
<li>May I search?</li>
<li>May I open this file?</li>
<li>May I edit it?</li>
<li>May I save?</li>
<li>May I continue?</li>
</ul>
<p>The system is now safe partly because it is barely delegated.</p>
<p>The opposite approach is complete autonomy. That works until the agent confidently makes the wrong consequential decision.</p>
<p>The design problem is therefore not whether people remain “in the loop” in some abstract sense. It is <strong>where the loop closes</strong>.</p>
<p>Approval belongs where the consequence changes.</p>
<ul>
<li>Reading a calendar is not the same as deleting an appointment.</li>
<li>Finding flights is not the same as purchasing one.</li>
<li>Editing a local branch is not the same as merging it into shared code.</li>
<li>Drafting a message is not the same as sending it to 200 people.</li>
</ul>
<p>This suggests a more practical rule:</p>
<blockquote>
<p>Ask for intervention when an action crosses a meaningful consequence boundary, not merely because the agent performed another step.</p>
</blockquote>
<h2>Reversibility changes how much autonomy is reasonable</h2>
<p>There is another variable: what happens when the system is wrong. Consider two agent actions.</p>
<p>The first reorganises a private draft. The second permanently deletes a shared customer record.</p>
<p>Even if the probability of error were identical, these actions should not inherit identical authority. One is cheap to reverse. The other is not.</p>
<p>The interface should therefore understand not only <strong>what action is happening</strong>, but also the cost of recovering from it.</p>
<p>This is one reason familiar product primitives such as drafts, pull requests, version history, staged changes and confirmation boundaries become newly important in agentic products. They create places where automation can do substantial work without immediately creating irreversible consequences.</p>
<h2>The agent also needs an understandable history</h2>
<p>As workflows become longer, another interface problem appears. What exactly did the system do?</p>
<p>A conventional interaction often leaves obvious traces.</p>
<p>The message appears in Sent. The file gets a version. The transaction appears in history.</p>
<p>An agent can coordinate several services and perform several actions before returning. The end result alone may not explain the process.</p>
<p>That means agentic products increasingly need an <strong>action trail</strong> rather than simply a conversation transcript. Not internal debugging output.</p>
<p>A useful human account:</p>
<ul>
<li>What did you change?</li>
<li>Where?</li>
<li>Why?</li>
<li>What failed?</li>
<li>What did you leave untouched?</li>
<li>What still requires me?</li>
</ul>
<p><img src="https://temi.me/articles/when-the-interface-acts-on-your-behalf/action-trail.svg" alt="A compact activity history listing what an agent searched, excluded, prepared, where it stopped, and what it is waiting on." title="What it changed, what it left alone, and where it stopped."></p>
<h2>Trust may depend less on personality than boundaries</h2>
<p>A large amount of attention in AI design goes into whether an assistant feels conversational, natural or human. Those things matter. But for systems that act, I suspect trust will increasingly come from something more mundane.</p>
<p>Predictability.</p>
<ul>
<li>Does the agent stay within the task I delegated?</li>
<li>Does it recognise when circumstances have changed?</li>
<li>Does it stop at the right moments?</li>
<li>Can I inspect what happened?</li>
<li>Can I undo what it did?</li>
<li>Does it distinguish access from authority?</li>
</ul>
<p>Those properties are not visual polish surrounding the AI. They are the product.</p>
<h2>We are beginning to design authority</h2>
<p>For decades, interface design has largely focused on giving people controls for telling software what to do. Agentic systems introduce the inverse problem.</p>
<p>We now also need controls for telling software what it is <strong>allowed to do without us</strong>.</p>
<p>Scopes. Limits. Budgets. Approval thresholds. Exceptions. Reversible actions. Stop controls. Action histories.</p>
<p>These may look less exciting than a conversational interface. But they define the relationship.</p>
<p>Once software can act on our behalf, the most important question is no longer only: <strong>What can this system do?</strong></p>
<p>It becomes: <strong>What have I actually entrusted it to do?</strong></p>
<h2>References</h2>
<ol>
<li>OpenAI Help Centre, “Using cloud browser in ChatGPT”. <a href="https://help.openai.com/en/articles/20001280-using-cloud-browser-in-chatgpt">Source</a></li>
<li>GitHub Docs, “Risks and mitigations for GitHub Copilot cloud agent”. <a href="https://docs.github.com/en/copilot/concepts/agents/cloud-agent/risks-and-mitigations">Source</a></li>
<li>GitHub Docs, “Integrating agentic AI into your enterprise's software development lifecycle”. <a href="https://docs.github.com/en/copilot/tutorials/roll-out-at-scale/enable-developers/integrate-ai-agents">Source</a></li>
<li>GitHub Docs, “Managing issues and pull requests with the GitHub Copilot app”. <a href="https://docs.github.com/en/copilot/how-tos/github-copilot-app/managing-issues-and-pull-requests">Source</a></li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>The Design System Is Actually a Negotiation System</title>
      <link>https://temi.me/feed/articles/the-design-system-is-a-negotiation-system</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/the-design-system-is-a-negotiation-system</guid>
      <pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>Design systems</category>
      <category>design systems</category>
      <category>governance</category>
      <category>decision rights</category>
      <description><![CDATA[Components are the visible output. The harder work is deciding which decisions are shared, which stay local, and what evidence is required to move between the two.]]></description>
      <content:encoded><![CDATA[<p><em>Components are the visible output. The harder work is deciding who gets to make which decisions.</em></p>
<p>A product team needs a new component. The design-system team says an existing component almost solves the problem. The product designer says “almost” is precisely the issue. Engineering does not want another implementation. Accessibility identifies behaviour that neither proposal handles properly. Another team appears with a similar requirement, but not quite the same one.</p>
<p>Eventually someone asks:</p>
<p><strong>Should this go into the design system?</strong></p>
<p>It sounds like a component question. Often, it is actually a question about authority.</p>
<ul>
<li>Who is allowed to make this decision locally?</li>
<li>When does that decision become shared?</li>
<li>What evidence is required before everyone else inherits it?</li>
</ul>
<h2>Components are evidence of decisions already made</h2>
<p>A button in a mature design system represents far more than a rectangle with a label. Somebody has already made decisions about interaction states.</p>
<p>Spacing. Typography. Focus behaviour. Keyboard interaction. Contrast. Disabled states. Touch targets. Implementation. Usage. Possibly analytics and localisation.</p>
<p>When a product team consumes that button, it receives all of those decisions together. This is where much of the leverage comes from. The organisation stops repeatedly solving problems it has already solved.</p>
<p>But there is another side to that efficiency. Every shared decision removes some local freedom. That makes a design system an organisational mechanism for allocating <strong>decision rights</strong>.</p>
<h2>Standardisation always draws a boundary</h2>
<p>Imagine two extremes.</p>
<p>In the first organisation, every team can invent whatever it needs. Local speed is high. The cost appears later through duplication, inconsistent behaviour, fragmented implementation and repeated accessibility work.</p>
<p>At the opposite extreme, nothing can change without the central system team. Consistency is high. Now experimentation slows, context gets flattened and the system becomes a bottleneck.</p>
<p>Neither extreme is especially attractive. The real work is deciding where the boundary belongs.</p>
<p>Some decisions should be global. Some should belong to a platform. Some belong to a product family. Some should remain intentionally local.</p>
<p><img src="https://temi.me/articles/the-design-system-is-a-negotiation-system/decision-rights-layers.svg" alt="Four nested frames, foundation on the outside through shared patterns and product patterns to a local solution at the centre, with reach increasing outward." title="Not every decision belongs at the same level of the organisation."></p>
<p>This makes a mature design system less like a catalogue and more like a negotiated boundary between autonomy and coherence.</p>
<h2>GOV.UK makes the burden of proof unusually visible</h2>
<p>Most organisations do this negotiation internally. GOV.UK exposes a substantial part of it publicly.</p>
<p>A new proposed component or pattern first needs to demonstrate that it is <strong>useful</strong> to multiple teams or services and <strong>unique</strong> relative to what already exists.</p>
<p>Before publication, the implementation is reviewed for usability, consistency and versatility, including evidence from user research and testing with disabled users.[1]</p>
<p><img src="https://temi.me/articles/the-design-system-is-a-negotiation-system/govuk-contribution-criteria.webp" alt="The GOV.UK Design System contribution criteria, listing useful and unique for proposing a component, and usable, consistent and versatile for developing one." title="The scope of the decision expands only after the burden of proof expands. GOV.UK Design System, contribution criteria, captured 21 September 2026."></p>
<p>Look at what the process is actually doing. A single team is free to encounter a problem. That does not automatically give the solution authority over every other team.</p>
<p>The burden of proof rises when the scope of the decision rises. That is the negotiation.</p>
<p>This suggests a useful principle:</p>
<blockquote>
<p>Governance should increase with blast radius.</p>
</blockquote>
<p><img src="https://temi.me/articles/the-design-system-is-a-negotiation-system/governance-blast-radius.svg" alt="A continuum from local experiment to system primitive, with blast radius and governance burden both rising along it." title="The further a decision reaches, the more it should have to prove."></p>
<p>Changing a local component affects one context. Changing a component used by fifty products affects fifty contexts. Those decisions should not require the same level of evidence.</p>
<p>That sounds obvious when stated plainly. In practice, organisations frequently treat both directions badly.</p>
<p>Sometimes tiny local deviations require central approval. Elsewhere, major shared components enter the system because one influential team needed them quickly.</p>
<p>The process becomes political because the decision boundary has never been made explicit.</p>
<h2>There is another path: let the pattern mature in the product</h2>
<p>GitHub's Primer documents a particularly interesting route for new components. Its guidance describes an “on-ramp from product to Primer”: a component can first exist as a custom component inside a feature team's application and then move towards the shared system as it matures and gains broader usage.[2]</p>
<p><img src="https://temi.me/articles/the-design-system-is-a-negotiation-system/product-to-system-on-ramp.svg" alt="Five stages from a local component through discoverable, reused and mature to upstreamed into the shared system." title="Standardisation does not always need to precede evidence. Sometimes evidence is what earns standardisation."></p>
<p>That reverses a common assumption. Not every potentially reusable component needs to begin its life as a system component.</p>
<p>Sometimes the responsible path is:</p>
<p>solve the specific problem, observe it, learn from actual usage, discover other contexts, then generalise.</p>
<p>Primer's wider contribution guidance also recognises several routes into the system, including discussions, pattern proposals, documentation changes, prototypes, testing and open-source contributions.[3]</p>
<p>The model differs from GOV.UK's. The underlying problem is the same.</p>
<p>How does a local decision acquire enough evidence and legitimacy to become shared infrastructure?</p>
<h2>This is where “flexibility” gets dangerous</h2>
<p>The natural compromise is to make the shared component flexible enough for everyone.</p>
<ul>
<li>Add a prop.</li>
<li>Add another variant.</li>
<li>Add a configuration.</li>
<li>Add an override.</li>
</ul>
<p>Eventually the component supports fifteen behaviours that were individually reasonable and collectively incomprehensible. This is a negotiation failure disguised as technical flexibility.</p>
<p>Instead of deciding which behaviours actually belong in the shared abstraction, the system stores every disagreement as configuration. The component becomes the fossil record of unresolved organisational decisions.</p>
<p>A mature system sometimes needs to say:</p>
<ul>
<li>That behaviour belongs here.</li>
<li>That variation belongs locally.</li>
<li>These two use cases are not actually the same component.</li>
</ul>
<p>Or: We do not yet understand this problem well enough to standardise it.</p>
<p>Those are design decisions too.</p>
<h2>The system needs a way to change its mind</h2>
<p>There is another reason governance matters. Standardisation makes decisions durable. That is useful until the decision becomes wrong.</p>
<p>Technology changes. Platforms change. Accessibility guidance changes. Product expectations change. The organisation itself changes.</p>
<p>If introducing a shared decision requires evidence, retiring one should require deliberate work too. Otherwise the system accumulates rules that nobody still believes in, but everyone continues following because they are encoded in components.</p>
<p>The healthiest systems are not merely good at accepting contributions. They are good at <strong>renegotiating previous decisions</strong>.</p>
<h2>Measure the quality of negotiation, not the size of the library</h2>
<p>Component count tells us very little about system maturity. Even adoption is incomplete.</p>
<p>I would rather know:</p>
<ul>
<li>Can teams understand why a shared decision exists?</li>
<li>Can they identify when their problem genuinely falls outside it?</li>
<li>Can they propose a change without needing a personal relationship with the system team?</li>
<li>Can local experimentation happen without fragmenting the entire product?</li>
<li>Can repeated local patterns graduate into the shared system?</li>
<li>Can obsolete shared decisions leave it?</li>
</ul>
<p>Those questions tell us more about the health of the system than the size of its component catalogue.</p>
<h2>Consistency is the result</h2>
<p>Consistency matters. Users benefit when basic behaviours remain predictable. Engineers benefit from not rebuilding solved interactions. Designers gain time when foundational decisions do not have to be remade for every feature.</p>
<p>But consistency is not the most interesting thing the system creates. Consistency is what we see when enough teams agree to share enough decisions.</p>
<p>The deeper product of a mature design system is the mechanism by which those decisions can be adopted, questioned, improved and occasionally rejected.</p>
<p>That is why some of the hardest design-system conversations begin with five deceptively simple words:</p>
<p><strong>“Our case is slightly different.”</strong></p>
<p>Sometimes it isn't. Sometimes it genuinely is. The quality of the system depends on being able to tell the difference.</p>
<h2>References</h2>
<ol>
<li>GOV.UK Design System, “Contribution criteria”. <a href="https://design-system.service.gov.uk/community/contribution-criteria/">Source</a></li>
<li>Primer, “Adding new components”. <a href="https://primer.style/product/contribute/adding-new-components/">Source</a></li>
<li>Primer, “How to contribute”. <a href="https://primer.style/product/contribute/how-to-contribute/">Source</a></li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>When a Product Constraint Becomes Part of the Interface</title>
      <link>https://temi.me/feed/articles/when-a-constraint-becomes-the-interface</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/when-a-constraint-becomes-the-interface</guid>
      <pubDate>Sat, 05 Sep 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>Product experience</category>
      <category>system design</category>
      <category>state</category>
      <category>engineering collaboration</category>
      <description><![CDATA[A technical constraint becomes an interface concern the moment it changes what someone can understand, trust or decide next. Infrastructure does not stay inside the architecture diagram.]]></description>
      <content:encoded><![CDATA[<p><em>Technical limitations do not remain inside architecture diagrams. Eventually, the user meets them.</em></p>
<p>There are sentences every product designer eventually hears from an engineer.</p>
<ul>
<li>“We don't know until the request completes.”</li>
<li>“That value can change while the user is here.”</li>
<li>“We cannot update those independently.”</li>
<li>“The provider has not responded yet.”</li>
<li>“If they close this now, the changes have not reached the server.”</li>
<li>“This process runs in the background.”</li>
</ul>
<p>The sentence normally arrives as an explanation of how the system works. The interesting part comes afterwards.</p>
<p>What does the interface do with that information?</p>
<p>Because the moment a technical condition changes what the user can understand, trust or do next, it stops being purely an implementation detail.</p>
<h2>System truth and interface truth</h2>
<p>Every interactive product is presenting a version of reality.</p>
<p><img src="https://temi.me/articles/when-a-constraint-becomes-the-interface/system-interface-expectation.svg" alt="A diagram running from what the system knows, through what the interface claims, to what the user therefore expects." title="Three versions of the same moment. Problems appear in the distance between them."></p>
<ul>
<li>The button says the file is saved.</li>
<li>The price says the item costs €80.</li>
<li>The progress indicator says something is processing.</li>
<li>The green tick says the operation succeeded.</li>
</ul>
<p>Behind those representations is another state: what the system actually knows. When those two states align, nobody notices. When they diverge, we get a product problem.</p>
<ul>
<li>A file looks saved but is still local.</li>
<li>A product appears available but inventory has expired.</li>
<li>An action appears finished but the job is still running.</li>
<li>A filter looks applied while an older network request is actually controlling the results.</li>
</ul>
<p>The useful design question is therefore not simply: <strong>What is the technical constraint?</strong></p>
<p>It is: <strong>What does the interface currently imply that the system cannot guarantee?</strong></p>
<h2>Figma does not need to teach users about IndexedDB</h2>
<p>Take losing an internet connection while working in Figma. The technical story is not simple.</p>
<p>Figma is cloud-based. When connectivity disappears, the application can store changes locally in the browser and later synchronise them when the connection returns. Figma documents that it surfaces an offline indicator, an unsaved-changes notification and, where necessary, a flow for synchronising those offline edits later.[1]</p>
<p>The user does not need to understand the local persistence mechanism. They need to understand something much smaller:</p>
<p><strong>Your latest work exists, but it has not reached the shared system yet.</strong></p>
<p>That is the product translation.</p>
<p><img src="https://temi.me/articles/when-a-constraint-becomes-the-interface/figma-unsynced-changes.webp" alt="A Figma notification reading that changes made offline have not synced yet, with options to open the file to sync or postpone." title="Figma exposes the consequence of its infrastructure, not the implementation of it. Figma Help Centre, captured 21 September 2026."></p>
<p>I find it useful to think about technical constraints in three ways.</p>
<p>Some should remain completely <strong>concealed</strong>. Users do not need to know about every cache, request, replica or background service.</p>
<p>Some need to be <strong>translated</strong>. “Your changes haven't synced yet” is a translation of a technical state into a product state.</p>
<p>And occasionally the constraint needs to be explicitly <strong>exposed</strong> because understanding it changes the user's decision.</p>
<ul>
<li>“This price is no longer available.”</li>
<li>“Results may be incomplete.”</li>
<li>“This operation will continue after you leave.”</li>
</ul>
<p><img src="https://temi.me/articles/when-a-constraint-becomes-the-interface/conceal-translate-expose.svg" alt="A three-part framework: conceal a constraint with no user consequence, translate one that changes understanding, expose one that changes the decision." title="Three treatments for the same kind of fact. The right one depends on whether it changes what the user should do."></p>
<p>The challenge is knowing which treatment is appropriate.</p>
<h2>A useful threshold</h2>
<p>The question I keep returning to is:</p>
<blockquote>
<p>Does understanding this constraint change what the user should do?</p>
</blockquote>
<p>If the answer is no, the infrastructure should probably stay invisible. If the answer is yes, hiding it starts to become misleading.</p>
<p>That is where architecture enters the interaction.</p>
<h2>A loading spinner can hide too much</h2>
<p>Consider a process containing several dependent operations. A spinner communicates that something has not finished. It communicates almost nothing about why.</p>
<p>For a simple operation that may be enough. For a system where dependency matters, it can be inadequate.</p>
<p>GitHub Actions handles this differently. Every workflow run can generate a real-time visualisation graph. Jobs appear with their individual statuses, while lines show dependencies between them.[2]</p>
<p>Here the structure of the system becomes part of the interface because the structure is useful.</p>
<p>A developer may need to know that deployment is not simply “slow”. It is waiting because another job has not completed.</p>
<p><img src="https://temi.me/articles/when-a-constraint-becomes-the-interface/github-actions-workflow-graph.webp" alt="The GitHub Actions visualization graph, showing completed jobs, a job still running, and a deploy job waiting on its dependencies." title="When dependency changes what the user needs to understand, a generic loading state can hide too much. GitHub Docs, captured 21 September 2026."></p>
<p>Those are very different explanations.</p>
<h2>Latency changes more than speed</h2>
<p>Suppose a filter applies remotely and takes three seconds to return. It is easy to treat this as a performance problem. Then the interaction begins.</p>
<ul>
<li>Can the user select another filter while the first request is running?</li>
<li>If they do, which response wins?</li>
<li>Can responses arrive out of sequence?</li>
<li>Is the displayed result count associated with the old state or the new one?</li>
<li>Do we optimistically update the control before the backend confirms it?</li>
<li>What happens when the request fails?</li>
</ul>
<p>The delay has now affected causality. It changes whether someone can understand which action produced the state they are seeing. A spinner cannot solve that on its own.</p>
<p>The real design problem is <strong>state coherence</strong>.</p>
<p><img src="https://temi.me/articles/when-a-constraint-becomes-the-interface/async-request-race.svg" alt="Two timelines. In the first, the older response arrives last and overwrites the newer result; in the second below it, the late response is discarded." title="A late response can quietly overwrite a newer intention. The delay is not the problem; the ordering is."></p>
<h2>Product truth has a cost</h2>
<p>Products naturally want to appear fast, stable and simple. That instinct is healthy until simplicity starts creating false certainty.</p>
<ul>
<li>The price changes at the final step.</li>
<li>The upload looked finished but was not.</li>
<li>The supposedly saved change disappears.</li>
<li>The result count describes an earlier query.</li>
</ul>
<p>Each mismatch asks the user to revise their understanding of what the interface means. One mismatch is normally survivable. Repeated mismatches teach people not to trust the product's representations.</p>
<p>There is an important distinction here. Good design hides irrelevant implementation complexity. Good design should not hide <strong>relevant uncertainty</strong>.</p>
<h2>Constraints can produce the interaction rather than merely damage it</h2>
<p>This is also why I do not think constraints should always be framed as compromises.</p>
<ul>
<li>Offline behaviour forces us to think seriously about local and remote state.</li>
<li>Long-running operations force us to design asynchronous workflows.</li>
<li>Changing inventory forces us to think about freshness.</li>
<li>Platform differences force us to reconsider how an interaction should behave rather than blindly reproduce another platform.</li>
</ul>
<p>Sometimes the wrong question is:</p>
<blockquote>
<p>How do we preserve the design despite this constraint?</p>
</blockquote>
<p>A better question is:</p>
<blockquote>
<p>What interaction becomes appropriate because this constraint exists?</p>
</blockquote>
<p>That change in framing is small. But it often produces a more truthful product.</p>
<h2>When infrastructure becomes UX</h2>
<p>When a technical limitation appears, I use four questions.</p>
<ul>
<li>What does the system actually know?</li>
<li>What does the interface currently claim?</li>
<li>What does the user therefore believe?</li>
<li>Would the difference change their next decision?</li>
</ul>
<p>If the last answer is yes, we are no longer discussing an implementation detail. The infrastructure has entered the experience.</p>
<h2>References</h2>
<ol>
<li>Figma Help Centre, “What can I do offline in Figma?”. <a href="https://help.figma.com/hc/en-us/articles/360040328553-What-can-I-do-offline-in-Figma">Source</a></li>
<li>GitHub Docs, “Using the visualization graph”. <a href="https://docs.github.com/en/actions/how-tos/monitor-workflows/use-the-visualization-graph">Source</a></li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>Designing for Reassurance Is Different From Designing for Usability</title>
      <link>https://temi.me/feed/articles/designing-for-reassurance</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/designing-for-reassurance</guid>
      <pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>Product experience</category>
      <category>behavioural design</category>
      <category>verification</category>
      <category>decision making</category>
      <description><![CDATA[Usability answers whether a person can complete an action. Reassurance answers whether they feel certain enough to commit to it, and the two pull apart as decisions get more expensive.]]></description>
      <content:encoded><![CDATA[<p><em>Why a product can be easy to use and still be difficult to commit to.</em></p>
<p>You have found the flight. The departure time works. The connection is reasonable. The price is inside your budget. You have already entered the passenger details. The next button is obvious. Nothing appears broken.</p>
<p>And yet you go backwards.</p>
<p>You check the date again. You confirm that you are departing from the airport you think you are. You reopen the baggage conditions. You look at the fare rules. Maybe you open the airline's website in another tab. Then you return to the booking.</p>
<p>We normally interpret behaviour like this as friction. Sometimes it is. But there is another possibility: the interface is usable, while the decision is not yet comfortable.</p>
<p>That distinction deserves more attention.</p>
<h2>The moment after usability</h2>
<p>A great deal of product design is built around helping people understand what they can do and making it easier to do it.</p>
<ul>
<li>Can I find the action?</li>
<li>Do I understand the terminology?</li>
<li>Can I complete the task?</li>
<li>Can I recover if something goes wrong?</li>
</ul>
<p>Those questions are fundamental. But they do not describe everything happening when someone makes a consequential decision.</p>
<p>Someone buying a €12 cable and someone purchasing a €1,200 flight may use familiar interface patterns, but they are not psychologically doing the same thing. The cost of being wrong is different. The amount of verification is different. The need for certainty is different.</p>
<p>Usability can get someone to the final step. It does not necessarily get them across it. There is a space between <strong>understanding an action</strong> and <strong>being comfortable enough to take it</strong>.</p>
<p>I think of that as the reassurance gap.</p>
<p><img src="https://temi.me/articles/designing-for-reassurance/reassurance-gap.svg" alt="A diagram separating usability, which asks whether the task can be completed, from reassurance, which asks whether the decision is comfortable enough to commit to." title="A usable interface can still leave a consequential decision unresolved."></p>
<h2>Watch what people do when they are uncertain</h2>
<p>One of the most useful indicators of uncertainty is repetition.</p>
<ul>
<li>People reread things.</li>
<li>They go back.</li>
<li>They reopen collapsed information.</li>
<li>They compare details they have already seen.</li>
<li>They leave the product to verify information elsewhere.</li>
<li>They ask another person.</li>
<li>They take a screenshot.</li>
</ul>
<p>Not every repeated interaction indicates poor usability. Some are <strong>verification loops</strong>. The person is not trying to discover how the product works. They are trying to reduce the possibility that they have misunderstood something important.</p>
<p>That distinction changes what we design.</p>
<p>If someone repeatedly checks whether checked baggage is included, making the purchase button easier to see does not resolve the uncertainty. If someone repeatedly checks the recipient before a bank transfer, reducing the number of screens is not necessarily an improvement. If somebody wants to know what happens when they cancel an insurance policy, hiding the conditions in the name of simplicity can actually make the experience harder to trust.</p>
<p>There are situations where efficiency and confidence pull in different directions.</p>
<h2>Repetition can have a different job the second time</h2>
<p>The GOV.UK Design System has a pattern called <strong>Check answers</strong>. Immediately before a user submits information, the service can display the answers they previously supplied, give them a direct way to change each answer, and then ask them to explicitly submit.</p>
<p>The information is repeated. But GOV.UK describes that repetition as helping users gain confidence that their information has been captured correctly and giving them another opportunity to spot mistakes before submission.[1]</p>
<p>That is an important distinction. The first time an address appears, its purpose may be <strong>input</strong>. The second time, its purpose is <strong>verification</strong>.</p>
<p>Same information. Different job.</p>
<p><img src="https://temi.me/articles/designing-for-reassurance/govuk-check-answers.webp" alt="The GOV.UK Check answers pattern, listing previously entered details with a Change link beside each one and an Accept and send button at the end." title="The information is deliberately repeated. Its first job was input. Here, its job is verification. GOV.UK Design System, Check answers pattern, captured 21 September 2026."></p>
<p>This gives us a better question than:</p>
<blockquote>
<p>Have we already shown this information?</p>
</blockquote>
<p>The question becomes:</p>
<blockquote>
<p>Does the person need this information again to make the next decision confidently?</p>
</blockquote>
<p>Those are not the same standard.</p>
<h2>Money makes the reassurance gap easier to see</h2>
<p>Financial products make this especially obvious because the consequences are explicit.</p>
<p>Wise's current transfer flow asks the user to choose a recipient and amount, shows fees and delivery estimates, and then provides a transfer review before the user commits. Wise explicitly tells users to check that the transfer details are correct before continuing.[2]</p>
<p>The review screen is technically another step. A pure friction-reduction argument could ask why it exists. But removing it would transfer the cost of speed to the user.</p>
<p>The product is effectively saying:</p>
<p><strong>Before money moves, here is the state of the decision in one place.</strong></p>
<p>Recipient. Amount. Currency. Fees. Delivery.</p>
<p>The user can stop thinking about how information was collected and inspect the transaction they are about to create.</p>
<h2>Reassurance has a time dimension too</h2>
<p>Uncertainty is not only about whether the information is correct. Sometimes the question is whether it is still correct.</p>
<p>Travel products are full of this problem. Prices change. Availability changes. Cancellation terms differ. Taxes and fees depend on context. A user can therefore understand the information perfectly and still wonder whether it represents the complete commitment.</p>
<p>Airbnb's current guidance describes a detailed price breakdown before a booking is finalised, and its guest terms frame the booking commitment around the total price and other requirements identified during checkout.[3][4]</p>
<p>This is not simply pricing information. At that point in the journey, it becomes <strong>commitment information</strong>.</p>
<h2>Four kinds of uncertainty keep appearing</h2>
<p>There is a pattern underneath many of these experiences. People want to know whether they have understood the thing correctly. They want to know whether the information remains valid. They want to understand the consequence of proceeding. And they want to know whether they can recover if they are wrong.</p>
<p><strong>Comprehension.</strong> <strong>Validity.</strong> <strong>Consequence.</strong> <strong>Recoverability.</strong></p>
<p>A product does not have to answer all four questions with equal emphasis. The need grows with the cost of being wrong.</p>
<p>That matters because reassurance can also be badly designed. A warning before every action makes ordinary activity feel dangerous. Three confirmation modals do not automatically make something safer. Five security logos can make a checkout look more suspicious, not less. Lengthy explanations can introduce doubts that did not previously exist.</p>
<p>The goal is not maximum reassurance. It is <strong>calibrated reassurance</strong>.</p>
<h2>This changes how we read behavioural data</h2>
<p>Product teams commonly measure conversion, completion, abandonment and time on task. Those metrics tell us important things. But they can miss what happens immediately before commitment.</p>
<ul>
<li>How many people reopen the cancellation conditions?</li>
<li>How frequently do users return to an earlier step without changing anything?</li>
<li>Which information is expanded repeatedly?</li>
<li>Where do people leave the product and come back?</li>
<li>Which questions repeatedly reach support teams just before purchase?</li>
</ul>
<p>Those behaviours can indicate uncertainty even when the interface remains completely functional.</p>
<p>Instead of only asking: <strong>Where are people struggling?</strong></p>
<p>we can also ask: <strong>Where are people checking?</strong></p>
<p>That creates a different picture of the experience.</p>
<h2>Designing confidence</h2>
<p>A product does more than help somebody perform an action. It helps them decide whether the action is worth performing. As decisions become more expensive, permanent or consequential, that second responsibility becomes harder to ignore.</p>
<p>The best experience is therefore not always the one that gets someone to the end in the fewest interactions. Sometimes the better product is the one that gives them enough certainty that they no longer feel the need to check somewhere else.</p>
<p>And then allows them to continue.</p>
<h2>References</h2>
<ol>
<li>GOV.UK Design System, “Check answers”. <a href="https://design-system.service.gov.uk/patterns/check-answers/">Source</a></li>
<li>Wise Help Centre, “How do I send money with Wise?”. <a href="https://wise.com/help/articles/2977959/how-do-i-send-money-with-wise">Source</a></li>
<li>Airbnb Help Centre, “Pricing display in the United States”. <a href="https://www.airbnb.com/help/article/3610">Source</a></li>
<li>Airbnb Guest Terms / Terms of Service. <a href="https://www.airbnb.com/help/article/2857">Source</a></li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>Accessible to Whom?: When Personal Software Becomes a Product</title>
      <link>https://temi.me/feed/articles/accessible-to-whom</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/accessible-to-whom</guid>
      <pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>Accessibility</category>
      <category>accessibility</category>
      <category>ai</category>
      <category>european accessibility act</category>
      <description><![CDATA[AI is making it easier to create software for ourselves. The harder question begins when that software becomes somebody else’s product, because speed of creation does not remove responsibility for who can use what we build.]]></description>
      <content:encoded><![CDATA[<p>There has probably never been a better time to build bad software.</p>
<p>Not bad in the sense that it does not work. Quite the opposite.</p>
<p>You can describe an idea to an AI coding tool and, within hours, have something surprisingly functional: a utility for organising photographs, a dashboard for tracking expenses, or a tool that generates presentation mock-ups exactly the way you like them.</p>
<p>If you built it for yourself, accessibility might barely enter the conversation.</p>
<p>You know where everything is. You understand the strange icon you used. You know the unlabeled button in the corner exports the file. The colour combination works for you. The keyboard behaviour does not matter to your own workflow because you use a mouse.</p>
<p>And, within reason, that can be fine. Personal software has an audience of one.</p>
<blockquote>
<p>“The accessibility assumptions that barely matter when the audience is one become pivotal when the audience becomes everyone else.”</p>
</blockquote>
<p>Something changes when you put the tool on the internet. Someone else finds it useful. Then ten people do. You add accounts, authentication, payments, perhaps a subscription.</p>
<p>What began as software for you has become software for people you do not know.</p>
<p>You do not know how they see. You do not know how they move. You do not know whether they navigate with a keyboard, enlarge text, use voice control, rely on a screen reader, or experience the interface differently from you.</p>
<p>AI is dramatically shortening the distance between those two states.</p>
<h2>From personal software to public responsibility</h2>
<p>The current conversation around AI-assisted development is understandably optimistic. More people can build. Teams can move faster. Designers can create working interfaces. Developers can generate large amounts of implementation from descriptions. Small, specialised pieces of software can exist without needing the economics of a traditional software company.</p>
<p>Those possibilities are real. But democratising software creation has a second consequence: <strong>we are not only creating more software. We are creating more software that can become somebody else’s software.</strong></p>
<p>The prototype can become the product remarkably quickly. The internal tool can acquire external users. The weekend experiment can gain a payment screen. Somewhere during that transition, the standard changes.</p>
<p>Accessibility does not suddenly become morally relevant only when money changes hands. Personal tools can be accessible, and their creators may themselves depend on accessible interaction. The point is narrower: once a product is intended for a broader public, the consequences of inaccessible decisions expand, and commercial services may acquire explicit legal obligations.</p>
<h2>The threshold changed in Europe</h2>
<p>On 28 June 2025, the accessibility requirements of the European Accessibility Act began applying across the European Union. The Directive covers specified products and services including e-commerce, consumer banking, electronic communications and parts of passenger transport. In transport, its scope reaches websites, mobile applications, electronic ticketing, electronic tickets and certain self-service terminals.¹</p>
<p>The Act contains qualifications. Microenterprises providing services are exempt from its requirements, and the Directive contains provisions for fundamental alteration and disproportionate burden. The precise obligation therefore depends on the product, service and circumstances.¹</p>
<p><img src="https://temi.me/articles/accessible-to-whom/european-accessibility-act.webp" alt="The EUR-Lex record for Directive (EU) 2019/882, showing the title, its in-force status, and the Official Journal text of the European Accessibility Act." title="Directive (EU) 2019/882, in force. EUR-Lex, captured 21 September 2026."></p>
<p>But the broader direction is difficult to miss. For commercial digital services within scope, accessibility is not simply a backlog item labelled “nice to have”. It becomes part of the conditions under which the service is offered.</p>
<blockquote>
<p>“AI lowers the barrier to creating a product. Accessibility reminds us that the barrier to creating a responsible product is higher than getting it to work.”</p>
</blockquote>
<p>The timing matters. One development makes interfaces dramatically easier to produce. The other makes it harder to defend excluding people from those interfaces.</p>
<p>The European Commission describes the EAA as establishing common accessibility requirements for key products and services and notes that around 100 million people in the EU live with a disability.² The impact is therefore not an abstract compliance exercise. It concerns whether people can independently buy, bank, communicate, travel and participate in ordinary digital life.</p>
<h2>Faster does not mean more accessible</h2>
<p>Generative development introduces a tempting assumption: if a model has seen accessibility guidance, perhaps accessibility arrives automatically with the generated code.</p>
<p>The evidence is more complicated. A 2025 empirical study comparing web code generated by GPT-4o and Qwen2.5-Coder with human-written code found that the models often performed well on basic accessibility features such as colour contrast and alternative text, but continued to struggle with more complex issues including ARIA. Feedback-driven techniques improved the results.³</p>
<p>That finding prevents two easy conclusions. AI-generated code is not inherently inaccessible. But AI knowledge of accessibility does not make an interface accessible by guarantee.</p>
<p>Accessibility depends on context. A model can know that an image may need alternative text without knowing whether this particular image is decorative, informative, functional or redundant. It can know ARIA without correctly modelling a novel interaction. It can produce technically valid controls inside a journey that remains confusing or impossible to complete.</p>
<blockquote>
<p>“When the cost of producing an interface falls, the cost of a bad default rises.”</p>
</blockquote>
<p>A weak component used once is a defect. A weak component embedded in a design system, copied by an agent and instantiated across hundreds of generated screens becomes infrastructure.</p>
<h2>Accessibility is architecture</h2>
<p>This is why accessibility cannot be reduced to contrast checks and alternative text at the end of delivery.</p>
<p>Consider booking a flight. A traveller has to search, filter, compare, understand baggage, select an itinerary, enter passenger information, authenticate, pay, retrieve a ticket and potentially respond to disruption. Individual screens can pass automated checks while the journey as a whole remains difficult or impossible to complete.</p>
<p>The EAA is relevant here precisely because it reaches functional parts of commercial services, including e-commerce and passenger-transport interactions.¹ Accessibility has to survive the journey, not merely the component audit.</p>
<p>WCAG makes the architectural point explicit. Its “Robust” principle requires content to be interpretable by a wide variety of user agents, including assistive technologies. Success Criterion 4.1.2 requires interface components to expose programmatically determinable names and roles, as well as states and values where relevant.⁴</p>
<p>That means a visual interface has always had another representation underneath it. A heading is not merely large text. A button is not merely a rectangle. A checkbox has a state. A form control has a name. The semantics are part of the interface.</p>
<h2>Then something unexpected happens</h2>
<p>Those semantics now have another audience.</p>
<p>Chrome’s documentation for agentic browsing explicitly describes “accessibility for agents”. It explains that agents can use the accessibility tree to identify and understand interactive elements, and that missing accessible information can create problems for both assistive-technology users and agents.⁵</p>
<p><img src="https://temi.me/articles/accessible-to-whom/chrome-accessibility-for-agents.webp" alt="The Chrome for Developers page titled Accessibility for agents, filed under agentic browsing audits, describing how agents read the accessibility tree." title="Agent accessibility is now its own audit category in Chrome’s documentation. Chrome for Developers, captured 21 September 2026."></p>
<p>This is not because accessibility standards were secretly designed for AI. They were not. It is because both assistive technology and some agents benefit from meaning that survives beyond visual appearance.</p>
<p>A custom clickable  with an icon may be obvious to a sighted mouse user while exposing little useful information programmatically. A native button with an accurate accessible name carries its purpose into another layer of the system.</p>
<blockquote>
<p>“The web spent decades learning how to make interfaces understandable beyond pixels. Agents have unexpectedly become another consumer of that work.”</p>
</blockquote>
<p>This creates an additional incentive for semantic quality, but it should not replace the original reason for doing the work. Accessibility is for people. The fact that machines also benefit is a consequence, not the justification.</p>
<h2>Do not confuse the beneficiaries</h2>
<p>“Agent accessible” and “human accessible” are not synonyms.</p>
<p>A visual computer-use agent may successfully click an unlabeled icon that remains inaccessible to a screen-reader user. A perfectly labelled form may be easy for software to parse while still being exhausting for someone with a cognitive disability. A machine-readable action can still have terrible contrast. A structured API can be flawless while the human product built on top of it remains impossible to navigate with a keyboard.</p>
<p>The overlap is useful, but the experiences are different.</p>
<p>It is therefore helpful to distinguish three layers: human perceptual and interaction accessibility; semantic accessibility that exposes meaning programmatically; and explicit agent interoperability, where systems expose actions or tools directly rather than forcing software to reconstruct every task through the human interface.</p>
<p>These layers can reinforce one another, but none proves the others.</p>
<h2>Design for the system, not the demo</h2>
<p>The practical response is not to append “make it accessible” to the end of an AI prompt.</p>
<p>Accessibility needs to be encoded into the environment from which software is generated: components with correct semantics and keyboard behaviour, tokens that preserve contrast, content patterns, linting, automated tests, agent instructions, acceptance criteria, code review and testing with people who actually use assistive technologies.</p>
<p>If an accessible component library is the easiest thing for an agent to use, generation begins from a stronger default. If the design system contains inaccessible custom controls, the agent can reproduce those just as efficiently.</p>
<blockquote>
<p>“AI can accelerate implementation. It does not outsource responsibility.”</p>
</blockquote>
<p>This is one of the more important consequences of the EAA for teams adopting AI development tools. The organisation deploying the service still owns the outcome. The origin of the code does not change the experience of the person who cannot use it.</p>
<h2>Accessible by default is not accessible by guarantee</h2>
<p>Even strong foundations are not enough on their own.</p>
<p>Components can be accessible individually and inaccessible in combination. A dialog can manage focus correctly while appearing at the wrong moment. Every image can have alternative text while the descriptions are useless. Every heading can use valid markup while the information architecture remains incoherent.</p>
<p>Accessibility is partly a property of components. It is also a property of relationships, tasks and lived experience.</p>
<p>That is why an agent can help test accessibility without becoming the final authority on it. Automated evaluation is valuable. Human experience remains the system we are trying to support.</p>
<h2>The new meaning of robust</h2>
<p>There is an optimistic interpretation of this convergence.</p>
<p>For years, accessibility advocates have argued for semantic HTML, meaningful labels, predictable interaction, structured content and standards-based controls. These practices were sometimes treated as specialist requirements.</p>
<p>Now some of the same qualities also make products easier for machines to understand. That creates an additional economic incentive for work that should already have been happening.</p>
<p>The cynical version is uncomfortable: organisations may become interested in semantics because agents affect automation, discoverability or revenue. But the direction of the argument matters. Accessibility should not become valuable because machines need it.</p>
<blockquote>
<p>“An interface that only communicates through appearance is an incomplete interface.”</p>
</blockquote>
<p>WCAG’s word “robust” is becoming unexpectedly useful. The digital environment now contains browsers, assistive technologies, humans, visual agents, semantic agents and increasingly explicit machine-facing capabilities. Products have more than one surface.</p>
<p>The screen is one. The accessibility tree is another. The underlying capabilities may become another still.</p>
<p>The challenge of the AI era is not simply teaching machines how to use the web. It is making sure that, while we teach machines to use it and make software easier to create, <strong>we do not build a web that leaves people behind.</strong></p>
<h2>References</h2>
<ol>
<li>Directive (EU) 2019/882 of the European Parliament and of the Council, 17 April 2019, European Accessibility Act. <a href="https://eur-lex.europa.eu/eli/dir/2019/882/oj">Source</a></li>
<li>European Commission, “The EU becomes more accessible for all”, 31 July 2025. <a href="https://commission.europa.eu/news-and-media/news/eu-becomes-more-accessible-all-2025-07-31_en">Source</a></li>
<li>Hyunjae Suh, Mahan Tafreshipour, Sam Malek and Iftekhar Ahmed, “Human or LLM? A Comparative Study on Accessible Code Generation Capability”, 2025. <a href="https://arxiv.org/abs/2503.15885">Source</a></li>
<li>W3C, Web Content Accessibility Guidelines (WCAG) 2.2, Principle 4: Robust and Success Criterion 4.1.2 Name, Role, Value. <a href="https://www.w3.org/TR/WCAG22/">Source</a></li>
<li>Chrome for Developers, “Accessibility for agents”, 2026. <a href="https://developer.chrome.com/docs/lighthouse/agentic-browsing/accessibility-for-agents">Source</a></li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>After the Monolith: When Design Tools Stop Being Destinations</title>
      <link>https://temi.me/feed/articles/after-the-monolith</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/after-the-monolith</guid>
      <pubDate>Thu, 09 Jul 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>AI-enabled experiences</category>
      <category>ai</category>
      <category>design tools</category>
      <category>mcp</category>
      <description><![CDATA[AI is not simply adding features to creative software. It is changing the economics of making tools, weakening some of the boundaries between design and implementation, and making applications more useful as connected capabilities rather than isolated destinations.]]></description>
      <content:encoded><![CDATA[<p>For decades, becoming a digital designer meant mastering a small set of applications: Photoshop, Illustrator, Sketch, Figma.</p>
<p>The tools changed, but the relationship stayed the same. The software defined the workflow. Designers learned its capabilities, interfaces and limitations.</p>
<p><strong>Then the applications grew.</strong></p>
<p>Drawing became prototyping. Prototyping became collaboration, documentation, handoff, presentations, asset generation and code. General-purpose tools became platforms because software was expensive to build and broad products were easier to justify.</p>
<p><strong>AI is changing that logic.</strong></p>
<p>As software becomes cheaper to create, the minimum useful audience for a tool gets smaller. At the same time, major platforms are becoming more programmable and increasingly able to act through AI.</p>
<p>The result is not simply that new AI products replace old applications. The more important shift is that <strong>design tools stop being fixed destinations</strong>. They become adaptable systems: platforms that agents can connect to, small utilities that teams can generate, and interfaces that can be shaped around a particular problem.</p>
<h2>Software that does not need to become a product</h2>
<p>Imagine a tool that generates one specific kind of presentation mock-up. It places production components into a defined composition, applies a small set of visual treatments and exports the result.</p>
<p>There may be no market for it. It may only serve one team.</p>
<p>Previously, that would have been enough reason not to build it. Now the calculation is changing: for some narrow tasks, <strong>creating the utility can become easier than repeatedly working around its absence</strong>.</p>
<p>This idea has a longer intellectual history than the current AI boom. Ink &#x26; Switch describes “malleable software” as an ecosystem in which people can adapt tools to their own needs with much less friction, rather than continually adapting their workflows to fixed applications. [1]</p>
<p>Generative development gives that ambition a new practical route. It lowers some of the effort required to move from an idea for a tool to a working interface. That does not eliminate engineering, maintenance or quality concerns. It does change which ideas are worth trying.</p>
<p>For designers, the question starts to move from “Which tool should I use?” towards “What tool would make this problem easier?”</p>
<blockquote>
<p>“Software begins to behave less like a fixed environment and more like a design material.”</p>
</blockquote>
<h2>The platforms are adapting too</h2>
<p>This is not a rebellion against large applications. The incumbents are responding to the same shift.</p>
<p>Adobe has been adding agentic workflows inside Creative Cloud applications, describing an assistant that can orchestrate multi-step work while keeping outputs editable. Canva AI 2.0 similarly combines conversational creation, agentic editing and Canva Code inside its broader creative environment. Figma Make is moving closer to production code, including workflows that connect a local codebase, support visual edits and annotations, and carry changes through Git and pull-request processes. [2],[3],[4]</p>
<p>Those are company descriptions of their own products, so they should not be read as independent evidence that these approaches are better. They are useful for something narrower: showing that the largest creative platforms are changing their architecture and interaction models in response to the same pressure.</p>
<p>The important change is not that these products contain AI. It is that <strong>AI weakens the boundary between intention and operation.</strong></p>
<p>Instead of selecting every command one by one, a designer can increasingly describe an outcome and let the system assemble part of the sequence. Menus and toolbars do not disappear, but they are no longer the only route to capability. Context, constraints and judgement become more important.</p>
<blockquote>
<p>“The application remains, but the interface is no longer the whole product.”</p>
</blockquote>
<h2>Design and development begin to converge</h2>
<p>Product work has traditionally involved at least two representations: a design artefact and an implementation. Much of the industry's infrastructure exists to manage the distance between them.</p>
<p>Design systems, tokens, documentation, developer modes, specifications and handoff all help one representation survive its translation into another.</p>
<p>AI-assisted development makes that separation less rigid.</p>
<p>Paper is useful here as an example of a younger hybrid environment. Its documentation supports importing HTML into the design environment and connecting AI agents directly to design files through MCP. Figma is approaching the same broad problem from the other direction: its Make workflow can connect visual editing to an existing codebase, while its MCP tooling can move structured design context into development environments and write native content back to the canvas. [4],[5],[6]</p>
<p>Neither approach makes the traditional canvas obsolete. Nor does either prove that design and development should collapse into a single discipline. They do, however, make the boundary more negotiable.</p>
<blockquote>
<p>“How much value is there in maintaining separate representations when design and implementation can increasingly act on shared components, rules and context?”</p>
</blockquote>
<p>There are still good reasons for separation. Production code carries architecture, state, performance, accessibility, security and operational constraints that a visual canvas can hide. A design environment also gives people room to explore without prematurely committing to implementation details.</p>
<p>The more plausible change is continuity rather than collapse. A designer can work visually while an engineer works directly with implementation, with both drawing from increasingly shared context.</p>
<h2>Tools become connected infrastructure</h2>
<p>Model Context Protocol makes this shift easier to see.</p>
<p>Anthropic introduced MCP in November 2024 as an open standard for connecting AI assistants to external systems and data. The protocol has since continued to evolve, including a July 2026 specification revision focused on scalability, extensions and stronger authorisation. [7],[8]</p>
<p><img src="https://temi.me/articles/after-the-monolith/mcp-architecture.svg" alt="A schematic of an MCP host application: four clients sitting on the host boundary, each wired to its own server, with two local servers on one side of a dashed line and a shared remote server on the other." title="Each client holds one connection, and two of them can address the same remote server. Drawn from the architecture described in the Model Context Protocol documentation."></p>
<p>For design, the significance is straightforward. An AI system does not have to understand a design only from pixels or an exported file. Where a tool exposes structured context, an agent can work with components, variables, layout information, resources and actions.</p>
<p>Figma's MCP server, for example, exposes structured design context such as components, variables and layout data to compatible agents, and now supports creating or updating native Figma content in supported workflows. Paper documents a similar connection between AI agents and its design files. [6],[9]</p>
<p><img src="https://temi.me/articles/after-the-monolith/figma-copy-link-to-selection.webp" alt="A Figma context menu with Copy link to selection highlighted, beside a selected component on the canvas." title="The handover is a link to a selection rather than an export. Figma Help Centre, guide to the Figma MCP server, captured 21 September 2026."></p>
<p>The broader implication is more important than either implementation. Applications become less self-contained.</p>
<p>An agent can sit across boundaries that people previously crossed manually: inspect one system, retrieve context from another, compare an implementation, then create or modify an artefact somewhere else.</p>
<blockquote>
<p>“The design tool is no longer just an application with a canvas. It can become the relationship between platforms, protocols, data and task-specific utilities.”</p>
</blockquote>
<h2>The monoliths will remain</h2>
<p>None of this gives us a good reason to assume that large platforms disappear.</p>
<p>Organisations need permissions, version history, governance, security, accessibility, documentation, support and predictable continuity. Small generated tools do not acquire those qualities simply because they are easy to create.</p>
<blockquote>
<p>“Cheap software can create cheap technical debt.”</p>
</blockquote>
<p>The stronger model is a layered ecosystem. Large applications can remain trusted systems of record while smaller tools handle narrow, temporary or highly specific needs.</p>
<p><strong>The platform provides stability. The custom tool provides adaptability.</strong></p>
<p>There is also a governance cost to agentic interoperability. The MCP ecosystem has spent substantial effort on authorisation and security, including OAuth-based access, token validation and enterprise-managed authorisation. That work exists because a connected agent is more consequential than a passive assistant: access to more tools and data increases both usefulness and the consequences of a mistake. [8],[10]</p>
<p>So the future cannot simply be “connect everything to the model”. Capability without boundaries is not a mature workflow.</p>
<h2>What changes for designers</h2>
<p><strong>The professional shift may be more important than the technological one.</strong></p>
<p>Software proficiency has often been easy to confuse with design proficiency because it is visible and measurable. But if tools become more adaptive and agents can operate parts of them on our behalf, knowing where every control lives becomes less distinctive.</p>
<p><strong>Judgement becomes more visible.</strong></p>
<p>Understanding the problem. Defining constraints. Recognising quality. Building coherent systems. Detecting when a convincing output is wrong. Knowing what must remain consistent across hundreds of generated variations. Deciding where automation helps and where deliberate human intervention matters.</p>
<p>These have always been design skills. More capable tools simply expose how important they were all along.</p>
<p>A designer who cannot use the tools of the job still has a practical disadvantage. But a designer whose main advantage is operating a particular interface efficiently has a different problem.</p>
<blockquote>
<p>“The interface can increasingly operate itself. Judgement cannot.”</p>
</blockquote>
<h2>After the monolith</h2>
<p>The future of creative software is unlikely to resolve into one winning interface.</p>
<p>Large platforms, specialist applications, generated utilities and temporary interfaces can coexist. Some tools will begin with a canvas. Others with code. Some will be operated primarily by people; others increasingly through agents. Some will exist only long enough to solve one problem.</p>
<p>The major platforms may therefore become less like sealed destinations and more like durable infrastructure that other tools and agents can use.</p>
<blockquote>
<p>“This is not the end of design software. It is the loosening of its boundaries.”</p>
</blockquote>
<p>For most of our careers, designers adapted themselves to the tools available to them. We learned their abstractions, accepted their workflows and invented workarounds for their limitations.</p>
<p><strong>Now that relationship can become more reciprocal.</strong></p>
<p><strong>The tool can adapt to the designer.</strong></p>
<p>And if creating a new tool becomes cheap enough, the most interesting question may no longer be which application wins.</p>
<blockquote>
<p>“What would you make if the tool you needed did not have to exist yet?”</p>
</blockquote>
<h2>References</h2>
<ol>
<li>Geoffrey Litt, Josh Horowitz, Peter van Hardenberg and Todd Matthews, “Malleable Software: Restoring User Agency in a World of Locked-Down Apps”, Ink &#x26; Switch, June 2025. <a href="https://www.inkandswitch.com/essay/malleable-software/">Source</a></li>
<li>Adobe, “More time to spend on your craft: Adobe brings the power of its creative agent to Creative Cloud apps”, 18 June 2026. <a href="https://blog.adobe.com/en/publish/2026/06/18/more-time-spend-on-your-craft-adobe-brings-power-creative-agent-creative-cloud-apps">Source</a></li>
<li>Canva, “Introducing Canva AI 2.0: Reimagining how the world creates”, 2026. <a href="https://www.canva.com/newsroom/news/canva-create-2026-ai/">Source</a></li>
<li>Iris Lin and Jesse Lumarie, “Figma Make, now on your local code”, Figma, 28 May 2026. <a href="https://www.figma.com/blog/figma-make-now-on-your-local-code/">Source</a></li>
<li>Paper, product documentation. <a href="https://paper.design/docs">Source</a></li>
<li>Figma, “Guide to the Figma MCP server”. <a href="https://help.figma.com/hc/en-us/articles/32132100833559-Guide-to-the-Figma-MCP-server">Source</a></li>
<li>Anthropic, “Introducing the Model Context Protocol”, 25 November 2024. <a href="https://www.anthropic.com/news/model-context-protocol">Source</a></li>
<li>Model Context Protocol maintainers, “The 2026-07-28 Specification”, 28 July 2026. <a href="https://blog.modelcontextprotocol.io/posts/2026-07-28/">Source</a></li>
<li>Figma, “Get started with the Figma MCP server”. <a href="https://help.figma.com/hc/en-us/articles/39216419318551-Get-started-with-the-Figma-MCP-server">Source</a></li>
<li>Model Context Protocol, authorisation and enterprise authorisation documentation, 2026. <a href="https://apps.extensions.modelcontextprotocol.io/api/documents/authorization.html">Source</a></li>
</ol>]]></content:encoded>
    </item>
    <item>
      <title>Designing clarity into complex workflows</title>
      <link>https://temi.me/feed/articles/designing-clarity-into-complex-workflows</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/designing-clarity-into-complex-workflows</guid>
      <pubDate>Mon, 29 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>Product experience</category>
      <category>workflows</category>
      <category>complexity</category>
      <category>interaction design</category>
      <description><![CDATA[A short note on making operationally complex products feel understandable without pretending they are simple.]]></description>
      <content:encoded><![CDATA[<p>Some workflows are complex because the domain is complex. There are dependencies, exceptions, approvals, handoffs, permissions, and edge cases that cannot be removed with a cleaner screen. The design challenge is not to hide that reality. It is to make the next right action visible.</p>
<p>Clarity usually starts before the interface. It starts with understanding who needs to act, what information they need, what can safely be deferred, and where mistakes become expensive. A good workflow design makes those boundaries explicit instead of forcing people to reconstruct the process from scattered screens.</p>
<p>In practice, this means shaping the flow around sequence and confidence. The interface should show where someone is, what has already happened, what still needs attention, and what will happen next. Labels should describe work in the language people use, not only the language of the data model.</p>
<p>Complex products also need good recovery paths. Empty states, validation messages, review screens, and permission boundaries are not secondary details. They are where the product explains itself when the happy path breaks.</p>
<p>The best complex workflows do not feel simple. They feel held together. They give people enough context to move forward, enough feedback to trust the system, and enough structure to complete the work without carrying the whole process in memory.</p>]]></content:encoded>
    </item>
    <item>
      <title>What growth work looks like beyond optimisation</title>
      <link>https://temi.me/feed/articles/what-growth-work-looks-like-beyond-optimisation</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/what-growth-work-looks-like-beyond-optimisation</guid>
      <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>Growth</category>
      <category>growth</category>
      <category>product-led</category>
      <category>experimentation</category>
      <description><![CDATA[A short note on growth work that improves the product journey instead of only chasing surface-level conversion.]]></description>
      <content:encoded><![CDATA[<p>Growth work is often described through optimisation: improving a step, increasing a rate, reducing a drop-off. Those things can matter, but they are only useful when they are connected to a better product experience.</p>
<p>The stronger version of growth work asks why people hesitate in the first place. Do they understand the value? Are they being asked for commitment too early? Is the next action clear? Does the product create confidence before it asks for attention, data, or payment?</p>
<p>This kind of work sits between research, interaction design, content, measurement, and delivery. It may lead to a better entry point, a more honest prompt, a clearer comparison, a softer reminder, or a flow that explains the benefit before asking someone to opt in.</p>
<p>The difference is intent. Shallow optimisation tries to make the same moment harder to ignore. Product-led growth tries to make the moment more useful. It respects the user's context and improves the conditions around the decision.</p>
<p>That is why good growth design often looks quieter than expected. It removes friction, clarifies tradeoffs, closes feedback loops, and helps the product earn the next step rather than forcing it.</p>]]></content:encoded>
    </item>
    <item>
      <title>Accessibility as part of product quality</title>
      <link>https://temi.me/feed/articles/accessibility-as-part-of-product-quality</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/accessibility-as-part-of-product-quality</guid>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>Accessibility</category>
      <category>accessibility</category>
      <category>product quality</category>
      <category>delivery</category>
      <description><![CDATA[A short note on making inclusive design part of how products are shaped, reviewed, and shipped.]]></description>
      <content:encoded><![CDATA[<p>Accessibility is most effective when it is not treated as a separate pass at the end of delivery. By then, the important decisions have already been made: hierarchy, interaction model, content structure, focus order, error handling, and the assumptions behind the flow.</p>
<p>When accessibility is part of product quality, it becomes a normal design constraint. It informs whether a form is understandable, whether a comparison is readable, whether a state change is announced clearly, and whether a task can be completed without relying on a single input method or visual cue.</p>
<p>That shift changes the work. Designers make components with accessible states built in. Engineers have clearer acceptance criteria. Product teams can talk about usability risk before it becomes technical debt. The goal is not to make every conversation about compliance. The goal is to make the accessible path the default path.</p>
<p>Small product habits matter here: naming states clearly, designing keyboard paths, checking contrast in real brand contexts, writing labels that explain intent, and reviewing flows under stress. These habits create systems that are easier for more people to use, and they also improve quality for everyone else.</p>
<p>Good accessibility work is rarely loud. It shows up as fewer dead ends, clearer choices, stronger defaults, and interfaces that respect different ways of moving through a product.</p>]]></content:encoded>
    </item>
    <item>
      <title>Designing systems that stay useful as products grow</title>
      <link>https://temi.me/feed/articles/designing-systems-that-stay-useful</link>
      <guid isPermaLink="true">https://temi.me/feed/articles/designing-systems-that-stay-useful</guid>
      <pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate>
      <dc:creator>Temi Amodu</dc:creator>
      <category>Design systems</category>
      <category>design systems</category>
      <category>governance</category>
      <category>adoption</category>
      <description><![CDATA[A short note on keeping design systems practical as teams, surfaces, and product demands expand.]]></description>
      <content:encoded><![CDATA[<p>A design system does not stay useful because it has more components. It stays useful because teams can apply it to real product decisions without losing speed, clarity, or judgment.</p>
<p>As products grow, the system has to absorb more pressure. New flows introduce edge cases. Brand needs become more specific. Engineering constraints change. Teams interpret patterns differently. Without a shared operating model, the system can become either too rigid to use or too loose to trust.</p>
<p>Useful systems make the important choices visible. They explain where a pattern should be reused, where variation is acceptable, and what tradeoffs sit behind the decision. Tokens, components, documentation, contribution models, and review rituals all matter because they help people make consistent decisions at different levels of detail.</p>
<p>Governance is part of the design work, not an administrative layer around it. A system needs clear ownership, lightweight contribution paths, and enough product context to evolve with the teams using it. Otherwise, the library may remain tidy while the product experience drifts.</p>
<p>The most durable systems feel practical. They give teams a shared language, reduce repeated decisions, and leave room for the product to grow without redesigning the foundations every time the organisation changes shape.</p>]]></content:encoded>
    </item>
  </channel>
</rss>
