<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Alessandro Zulberti</title>
	<atom:link href="https://alessandrozulberti.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://alessandrozulberti.com/</link>
	<description>UX - User Experience Researcher</description>
	<lastBuildDate>Thu, 18 Jun 2026 15:24:51 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://alessandrozulberti.com/wp-content/uploads/2022/12/cropped-image-32x32.jpg</url>
	<title>Alessandro Zulberti</title>
	<link>https://alessandrozulberti.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>When an accessibility scan flags your documents, don&#8217;t fix them first</title>
		<link>https://alessandrozulberti.com/the-material-of-teaching/when-an-accessibility-scan-flags-your-documents-dont-fix-them-first/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Thu, 18 Jun 2026 14:24:37 +0000</pubDate>
				<category><![CDATA[The Material of Teaching]]></category>
		<guid isPermaLink="false">https://alessandrozulberti.com/?p=2221</guid>

					<description><![CDATA[<p>An audit's value is set by its format. A PDF ages; a workbook the team works in stays alive. The difference: separating "fixed" from "verified," so it can't overstate progress.</p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-teaching/when-an-accessibility-scan-flags-your-documents-dont-fix-them-first/">When an accessibility scan flags your documents, don&#8217;t fix them first</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">The Material of Teaching · Cross-functional working session</p>



<p class="wp-block-paragraph"><strong>In this article</strong></p>



<ul class="wp-block-list">
<li><strong>The decision:</strong> when a scan flags a pile of documents, sort them by what each is for before repairing anything — most shouldn&#8217;t stay documents at all.</li>



<li><strong>The method: </strong>route each document to where its job belongs — a web page, a form, an inline answer, a repaired PDF, or the bin.</li>



<li><strong>Who does what: </strong>the researcher runs the triage; content, engineering, design, and compliance own the work it routes to them.</li>



<li><strong>The rule:</strong> nothing is deleted until its content is confirmed to exist elsewhere.</li>
</ul>



<p class="wp-block-paragraph">A way of thinking, not a fixed recipe. Ownership, your CMS, and your team&#8217;s capacity all bend the routing — for example, a third-party manual you can&#8217;t edit doesn&#8217;t route to &#8220;rebuild as a page.&#8221; Treat the sheet as a model to modify, and adjust it to your environment as you go.</p>



<p class="wp-block-paragraph">The decision this article is about: when an accessibility scan lights up a pile of PDFs, the first move is not to repair the files. It is to sort them by what each document is for, and send each type where it belongs. Some get rebuilt as web pages. Some get deleted. Only a minority actually get repaired as documents. Deciding which is which — before anyone touches a file — is the researcher&#8217;s job, and it sets where every other team spends its effort.</p>



<h2 class="wp-block-heading">The situation</h2>



<p class="wp-block-paragraph">A mature website, especially one selling many vendors&#8217; products, collects documents over years: care instructions, assembly guides, FAQ sheets, returns forms, terms, conformity declarations, reports. Each was added for a good reason. Most were made in Word or a design tool, saved as PDF, and linked from a page. Nobody owns the pile.</p>



<p class="wp-block-paragraph">Then a scanner is run against the site, and the pile turns red — no tags, no titles, no language set, missing alt text, no reading order. Several teams are now involved whether they planned to be or not. Content owns most of the documents. Engineering owns the site they sit on. Design owns whatever replaces them. Compliance owns the risk the scan just surfaced. And someone has to decide what actually happens — that someone is the researcher, and what they decide first matters more than how fast anyone fixes anything.</p>



<h3 class="wp-block-heading">The trap</h3>



<p class="wp-block-paragraph">The reflex is to treat the scan report as a task list: the files are broken, so repair them one by one in the order listed. This feels like progress. It&#8217;s the wrong first move.</p>



<p class="wp-block-paragraph">The scanner is a thermometer. It tells you there&#8217;s a fever, not what the illness is, and certainly not the cure. Treating the report as a to-do list assumes every flagged document should stay a document and become an accessible one. For most of the pile that&#8217;s false — and acting on it spends the most effort on the files that deserve it least.</p>



<p class="wp-block-paragraph">A second wrong assumption hides underneath: that length should decide a document&#8217;s fate — short ones become pages, long ones get a fancier viewer. Length is easy to read off a file list, which is why it tempts. It&#8217;s also the wrong key. A fifty-page report read once, top to bottom, is a different object from a two-page sheet someone checks with one question in mind. Length doesn&#8217;t tell them apart. Function does.</p>



<p class="wp-block-paragraph">For a junior researcher, the lesson worth keeping: a scan tells you what failed, not what to do about it. The judgement lives in the gap between those two.</p>



<h2 class="wp-block-heading">Sort by function, then route</h2>



<p class="wp-block-paragraph">Replace &#8220;how do I fix this file?&#8221; with &#8220;what is this document for, and where does that job belong?&#8221; Sort the pile by function rather than file type or page count, and the right destination for each group becomes close to obvious. Six functions cover most piles:</p>



<ul class="wp-block-list">
<li>Tells someone how to use, clean, assemble, or maintain a product → a structured web page, with a print version generated from it. People search for this and read it one task at a time, often on a phone. It needs to reflow, be findable, and be translatable. A page does all three; a download does none.</li>



<li>Answers a question the site already asks → published inline, on the page where the question appears. The document is an answer pretending to be a file.</li>



<li>Collects structured input (a form, a checklist) → a web form that produces a printable summary. The interaction is the point.</li>



<li>States fixed, dated, citable terms (legal, regulatory, governance) → stays a PDF, repaired in place. Here the document is the right object: signed, dated, formally referenced. Converting it loses the fixity that gives it authority.</li>



<li>Read linearly for an overall impression (a report) → stays a tagged PDF, with a presentation layer over it only if wanted. Length is real, but the duty sits on an accessible version, not a decorative viewer.</li>



<li>Markets, with content that already lives elsewhere → removed, once you&#8217;ve confirmed the substance is genuinely on a page.</li>
</ul>



<p class="wp-block-paragraph">Read that against the red report and watch it shrink. The legal and regulatory documents get repaired in place, cheaply, because they were authored as text and tag well. Another share gets deleted, not repaired, because the content already exists on a page. The genuine conversion work — the part that costs real effort — turns out to be a minority of the pile, not the majority the scanner implied.</p>



<p class="wp-block-paragraph">That is the orchestration move: the researcher isn&#8217;t fixing documents, but deciding which function each serves and routing it to the team that owns the destination. The decision is upstream of the repair, and it&#8217;s what stops four teams spending a quarter on the wrong work.</p>



<h4 class="wp-block-heading">Who does what</h4>



<ul class="wp-block-list">
<li><strong>Researcher </strong>— runs the triage: sorts by function, sets each destination, sets the order of work, and owns the parity check before anything is deleted. Does almost none of the hands-on work; the contribution is the routing.</li>



<li><strong>Content </strong>— rewrites instructional and FAQ documents as pages, confirms each page carries everything the old document did, and flags the marketing duplicates that can go.</li>



<li><strong>Engineering</strong> — builds the page structures, forms, and print generation; repairs the PDFs that stay; removes deleted files and their links cleanly.</li>



<li><strong>Design </strong>— handles structure and reading order of new pages and forms, so they&#8217;re accessible by construction, not by later repair.</li>



<li><strong>Compliance / legal </strong>— confirms which documents are genuinely fixed-and-citable, and signs off the parity checks on anything retired, since retiring a document is a risk decision as much as a content one.</li>
</ul>



<p class="wp-block-paragraph">One thing this division makes visible: clearing the pile is not the cure. The files failed because the way they were authored never treated structure as content — headings styled to look like headings instead of marked as headings, meaning in images that was never written down, reading order left to chance. Fix everything and change nothing about authoring, and next year&#8217;s scan turns red again. The work that means you don&#8217;t repeat this is getting content, design, and engineering to treat structure as content from the start.</p>



<h2 class="wp-block-heading">The rule that prevents the expensive failure</h2>



<p class="wp-block-paragraph">One failure mode hides inside the work that looks most like progress. When instructional content moves from a document to a web page, the rewrite is an act of judgement — and judgement drops things. A safety warning, a caveat about one model, a note that mattered to a small group: exactly the details a confident rewrite leaves behind, because they look marginal until the person they protect is the one reading the page.</p>



<p class="wp-block-paragraph">So the page looks modern, passes the scanner, and is quietly less complete and less safe than the document it replaced. The score went up while the information available to a user went down — the worst outcome in the exercise, because every surface signal says it went well.</p>



<p class="wp-block-paragraph">The rule is one sentence: nothing is removed until its content is confirmed to exist elsewhere. The old document retires on the day someone confirms, line by line, that the new page carries everything it did — not the day the page launches.</p>



<p class="wp-block-paragraph">For a stakeholder, that&#8217;s the question to ask in every status meeting: has parity been confirmed, or just assumed?</p>



<p class="wp-block-paragraph"><strong>The instrument</strong></p>



<p class="wp-block-paragraph">This article comes with a document triage sheet — a spreadsheet that takes a scan export and walks the team through the sort: function, destination, owning team, order of work, and a parity-check column that must be ticked before a deletion row can close. Headers are written for the whole team, so a content owner or developer can work in it directly.</p>



<p class="wp-block-paragraph"><a href="https://alessandrozulberti.com/wp-content/uploads/2026/06/01-document-triage.xlsx" type="attachment" id="2205">Download Excel Template</a></p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-teaching/when-an-accessibility-scan-flags-your-documents-dont-fix-them-first/">When an accessibility scan flags your documents, don&#8217;t fix them first</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Deliver your accessibility audit as a working spreadsheet, not a report</title>
		<link>https://alessandrozulberti.com/the-material-of-teaching/deliver-your-accessibility-audit-as-a-working-spreadsheet-not-a-report/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Thu, 18 Jun 2026 14:21:04 +0000</pubDate>
				<category><![CDATA[The Material of Teaching]]></category>
		<guid isPermaLink="false">https://alessandrozulberti.com/?p=2212</guid>

					<description><![CDATA[<p>When a scan flags your documents, don't fix them first. It tells you what failed, not what to do — and most shouldn't stay documents at all. Sort by what each is <em>for</em>, then route it.</p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-teaching/deliver-your-accessibility-audit-as-a-working-spreadsheet-not-a-report/">Deliver your accessibility audit as a working spreadsheet, not a report</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">The Material of Teaching · Cross-functional working session</p>



<p class="wp-block-paragraph"><strong>In this article</strong></p>



<ul class="wp-block-list">
<li><strong>The decision: </strong>deliver the audit as a workbook the team works in, not a PDF they read once — the format determines whether the findings ever get fixed.</li>



<li><strong>The method: </strong>five sheets that separate what changes (findings, progress) from what doesn&#8217;t (evidence, scope), with progress computed, never typed.</li>



<li><strong>Who does what: </strong>the auditor builds and owns the structure; developers, content, design, and stakeholders each work a defined part of it.</li>



<li><strong>The rule:</strong> progress is derived by formula from the status field, so the workbook can&#8217;t lie about how far along it is.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">A starting point, not a fixed system. If your team works in Jira, Azure DevOps, or Asana, treat the register as the audit and planning layer and export findings into your tracker — keep the systemic layer and dashboard here. Adapt the sheet to your environment; that adaptation is part of the work.</p>
</blockquote>



<p class="wp-block-paragraph">The decision this article is about: an accessibility audit&#8217;s value is decided by its format before anyone reads a word of it. A PDF report is read once, summarised in a slide, and then ages while the product keeps changing. A workbook designed as the working surface of the remediation stays current, because the team fixes, verifies, and closes findings inside it. Choosing the workbook over the report is the call that determines whether the audit changes anything.</p>



<h2 class="wp-block-heading">The situation</h2>



<p class="wp-block-paragraph">A WCAG 2.2 AA audit of a reasonably large site produces hundreds of findings across many pages and several teams. The findings have to be understood, assigned, fixed, retested, and closed — over weeks or months, by developers, content owners, and designers who were not in the room when the audit was run.</p>



<p class="wp-block-paragraph">That is the real job, and it starts the moment the audit ends. So the question that should govern the deliverable is not &#8220;does this present the findings clearly?&#8221; It is &#8220;can the team work in this — assign, fix, verify, close — without the auditor in the room?&#8221; A sixty-page PDF fails that test on contact. A developer cannot filter it, a stakeholder cannot see progress in it, and nobody can record that a finding has been fixed and retested.</p>



<h3 class="wp-block-heading">The trap</h3>



<p class="wp-block-paragraph">The reflex is to make the audit thorough and readable — and to optimise it for the moment of delivery. That produces three formatting habits that all read well and all fail the team afterwards.</p>



<p class="wp-block-paragraph">Grouping findings by WCAG success criterion reads well to auditors and to nobody else: a developer doesn&#8217;t fix &#8220;1.1.1&#8221;, they fix a component on a page. Writing findings as prose paragraphs makes them impossible to filter, count, or assign. Expressing severity as adjectives — &#8220;significant&#8221;, &#8220;moderate&#8221; — makes them impossible to sort. Each habit serves the handover and works against every day after it.</p>



<p class="wp-block-paragraph">The lesson worth keeping: a deliverable that is finished when it&#8217;s handed over is a deliverable nobody can work in. The audit is the cheap part. The format has to carry the months that follow.</p>



<h4 class="wp-block-heading">The method: five sheets</h4>



<p class="wp-block-paragraph">A workbook of this kind settles into five sheets. The point is the partition — each sheet answers a different question, changes on a different rhythm, and is read by a different person.</p>



<ul class="wp-block-list">
<li><strong>Findings register </strong>— the layer where work happens. One row per issue, never per criterion: where it occurs, what fails, which criterion, severity on a defined scale, the user impact in plain behavioural terms, and a status. Everything must be filterable. The discipline is granularity — &#8220;alt text inadequate across product imagery&#8221; is a category pretending to be a row. Ten thousand images with one shared failure become a single systemic finding pointing at the cause, plus a small sample that proves the pattern.</li>



<li><strong>Evidence </strong>— screenshots by finding ID, the assistive technology used, reproduction steps. Separated from the register because it&#8217;s written once and read rarely — but when it&#8217;s read, it&#8217;s read under challenge (&#8220;is this really a failure?&#8221;), so it has to settle the argument on its own.</li>



<li><strong>Systemic layer </strong>— the recurring causes behind clusters of findings, and the rule that prevents each from regenerating. This is what separates an audit of symptoms from an audit of causes: individual findings close one by one, but a systemic failure closes only when its source is fixed.</li>



<li><strong>Progress</strong> — counts and proportions derived entirely by formula from the register&#8217;s status field. The moment progress is typed rather than computed, the workbook holds two versions of the truth and the optimistic one wins. This is the sheet stakeholders open; it must never be hand-editable.</li>



<li><strong>Scope and method</strong> — what was tested, with what, on which dates, against which target, and what was excluded. This sheet exists for the reader two years away — possibly a lawyer, possibly you.</li>
</ul>



<h4 class="wp-block-heading">Who does what</h4>



<ul class="wp-block-list">
<li>Auditor / researcher — builds the workbook, writes the findings at the right granularity, defines the severity scale and the status vocabulary, and owns the structure. The contribution isn&#8217;t finding problems; it&#8217;s making the remediation legible and trackable for everyone else.</li>



<li>Developers — work in the findings register: pick up issues by component and page, fix them, move each to &#8220;fixed&#8221;, and link the change. They never edit the progress sheet — it follows their status changes automatically.</li>



<li>Content — owns findings on copy, alt text intent, link text, and reading order in content, working the same register rows.</li>



<li>Design — owns findings on contrast, focus order, target size, and anything that has to be corrected at the component level so it doesn&#8217;t recur per instance — i.e. the systemic-layer fixes, not just the instances.</li>



<li>Stakeholder / programme owner — reads the progress sheet, and asks the one question the status vocabulary exists to answer (below). Doesn&#8217;t work in the register; relies on it being honest.</li>
</ul>



<p class="wp-block-paragraph">The division only holds if the status field is honest, which is the next point.</p>



<h4 class="wp-block-heading">The rule that keeps the workbook honest</h4>



<p class="wp-block-paragraph">The single highest-leverage decision is the status field, and it&#8217;s a precision problem, not a project-management one. &#8220;Done&#8221; is fatal, because it flattens at least three different conditions: a fix has been made, a fix has been verified by retest, and a finding has been consciously accepted as a known limitation. The status vocabulary needs a distinct value for each — because the gap between &#8220;fixed&#8221; and &#8220;verified&#8221; is exactly where accessibility programmes quietly fail. Changes ship, nobody retests with the assistive technology that surfaced the issue, and the register fills with closures the next audit reopens.</p>



<p class="wp-block-paragraph">Because progress is computed from this field, the vocabulary is also what stops the workbook lying. If &#8220;fixed&#8221; and &#8220;verified&#8221; are the same value, the progress sheet will always look better than the product is.</p>



<p class="wp-block-paragraph">For a stakeholder, that&#8217;s the question to ask in every status meeting: how many findings are verified, not just fixed?</p>



<p class="wp-block-paragraph"><strong>The instrument</strong></p>



<p class="wp-block-paragraph">This article comes with the audit workbook itself — the five sheets pre-built, with the status vocabulary defined, the progress sheet wired to the register by formula, and the severity scale set. Drop in findings and it tracks itself. Sheet and column headers are written for the whole team, so a developer or content owner can work in it without a walkthrough.</p>



<p class="wp-block-paragraph"><a href="https://alessandrozulberti.com/wp-content/uploads/2026/06/02-audit-workbook.xlsx" type="attachment" id="2206">Download Excel Template</a></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-teaching/deliver-your-accessibility-audit-as-a-working-spreadsheet-not-a-report/">Deliver your accessibility audit as a working spreadsheet, not a report</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Audit your product names for structure, not words</title>
		<link>https://alessandrozulberti.com/the-material-of-teaching/audit-your-product-names-for-structure-not-words/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Thu, 18 Jun 2026 14:00:50 +0000</pubDate>
				<category><![CDATA[The Material of Teaching]]></category>
		<guid isPermaLink="false">https://alessandrozulberti.com/?p=2204</guid>

					<description><![CDATA[<p>A product name isn't copy — it's interface. Inconsistent names can't be scanned, so users do the work the listing should. An attribute they can't find by scanning isn't there.</p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-teaching/audit-your-product-names-for-structure-not-words/">Audit your product names for structure, not words</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[


<p class="wp-block-paragraph">The Material of Teaching · Cross-functional working session</p>



<p class="wp-block-paragraph"><strong>In this article</strong></p>



<ul class="wp-block-list">
<li><strong>The decision:</strong> audit product names as part of the interface, not as copy — the usual failure is structural, not a vocabulary problem.</li>



<li><strong>The method</strong>: score names on consistency criteria (attribute order, label matching, descriptor presence), not just clarity and tone, so the real fault becomes visible.</li>



<li><strong>Who does what</strong>: research owns the naming structure; category owners own what the structure prioritises; content, PIM, and engineering apply it.</li>



<li><strong>The rule:</strong> when the same attribute is labelled differently across products, users miss it entirely — as if it weren&#8217;t there.</li>
</ul>



<blockquote class="wp-block-quote is-layout-flow wp-block-quote-is-layout-flow">
<p class="wp-block-paragraph">A model to adapt, not a fixed rule. The criteria, weights, and naming template here are a starting point. Different categories weight them differently, and your portfolio will need its own structure — deciding how it bends to your catalogue is part of the work.</p>
</blockquote>



<p class="wp-block-paragraph"><strong>The decision this article is about:</strong> in ecommerce, a product name isn&#8217;t copy — it&#8217;s part of the interface. So a naming audit shouldn&#8217;t be run like a copy review, asking whether each name is clear and on-brand. It should be run like an interface audit, asking whether names are structurally consistent across the listing, so users can scan and compare without opening anything. Almost always, the problem you find isn&#8217;t the words. It&#8217;s the structure.</p>



<h2 class="wp-block-heading">The situation</h2>



<p class="wp-block-paragraph">A listing page works when users can compare and shortlist without ever opening a product page. They scan down the column, recognise the attribute that matters — size, type, finish, quantity — and eliminate options. That only happens if the same attribute appears in the same place, with the same label, on every name.</p>



<p class="wp-block-paragraph">When naming is inconsistent, that breaks. The user opens one product page, then another, goes back, forward again — doing the work the listing page should have done. The product page becomes the workaround for a broken listing page. Baymard Institute&#8217;s research on product lists points the same way: hard-to-scan product information slows users almost as much as having no information at all, and titles in list views have to support comparison at a glance.</p>



<p class="wp-block-paragraph">Several teams already shape these names, usually without coordinating. Category and product managers nominate what goes in a name. The content team owns wording and naming conventions. The product-data (PIM) team owns which attributes exist and how they&#8217;re stored. Engineering renders the name in the listing. Each optimises its own field, and the structural consistency — the thing the user actually needs — is owned by no one.</p>



<h3 class="wp-block-heading">The trap</h3>



<p class="wp-block-paragraph">The reflex is to audit names the way you&#8217;d review copy: is each name clear, is it on-brand, does it read well? Score names this way and most of them pass. They are clear. They are on-brand. The audit comes back mostly green, and the scanning problem is still there — because clarity was never the failure.</p>



<p class="wp-block-paragraph">The failure is structural, and it&#8217;s invisible at the level of a single name. Attribute order varies between collections. Size labels don&#8217;t match — &#8220;12-piece&#8221; in one place, &#8220;set of 12&#8221; in another, &#8220;large&#8221; in a third. A descriptor is explicit in one name and implied or missing in the next. None of it looks wrong when you read one product. All of it becomes visible when you step back and read the column.</p>



<p class="wp-block-paragraph">For a junior researcher, this is the lesson worth keeping: when names don&#8217;t scan, audit the structure across products, not the words within one. The fault lives in the relationships between names, not inside any single name.</p>



<h4 class="wp-block-heading">The method: score structure, not just words</h4>



<p class="wp-block-paragraph">The fix is to audit names against criteria that separate structural quality from linguistic quality, and to weight the structural ones properly. A workable criteria set:</p>



<ul class="wp-block-list">
<li><strong>Clarity of meaning</strong> — does the name communicate what the product is? (Linguistic. Usually already fine.)</li>



<li><strong>Alignment with user language </strong>— does it match how users describe the thing? (Linguistic. Usually already fine.)</li>



<li><strong>Structural consistency </strong>— does this name follow the same attribute order and labelling as its neighbours? (Structural. This is where the failures hide.)</li>



<li><strong>Distinctiveness </strong>— can a user tell this product from the one next to it on text alone? (Structural in effect — identical names create a comparison dead end.)</li>



<li><strong>Scalability</strong> — will the structure still hold when the range grows?</li>
</ul>



<p class="wp-block-paragraph">Score a portfolio this way and a pattern emerges that a copy review would never surface: names lose almost no points on the linguistic criteria and most of their points on the structural ones. That gap is the finding. It says, in numbers, that the problem the team keeps trying to fix with better wording is actually a problem of inconsistent structure — and no amount of rewording will fix it.</p>



<p class="wp-block-paragraph">The structural diagnosis also produces a concrete target: a naming template the whole portfolio can follow. Something like collection + function + material + quantity + size, applied in a predictable order. The exact slots are yours to define; the point is that there is an order, and every name obeys it.</p>



<h4 class="wp-block-heading">Who does what</h4>



<p class="wp-block-paragraph">The naming structure is a shared object that no single team currently owns, which is exactly why it drifts. The audit&#8217;s job is to assign that ownership.</p>



<ul class="wp-block-list">
<li><strong>Researcher </strong>— owns the naming structure: runs the audit, defines the criteria, sets the template (attribute order and labelling rules), and identifies where scanning breaks. Owns the system, not the individual names.</li>



<li><strong>Category / product owners </strong>— own what the structure prioritises. A name&#8217;s job differs by category: some categories need the name to fully describe the object, others need it to anchor a collection identity with specs handled elsewhere. Category owners set that weighting within the shared structure — the one place category-specific judgement belongs.</li>



<li><strong>Content </strong>— applies the template to wording, owns the naming conventions, and removes duplication so each attribute has one canonical form.</li>



<li><strong>PIM / product data </strong>— confirms the attributes the template needs actually exist and are stored consistently, so the structure can be populated rather than improvised.</li>



<li><strong>Engineering </strong>— renders names in the listing so the structure survives into the interface the user actually sees.</li>
</ul>



<p class="wp-block-paragraph">This is the orchestration point: the structure is one decision, owned by research; the weighting of what matters within it is a category decision. Separating those two — a shared system, with category-specific priorities inside it — is what stops five teams each optimising a different answer. Baymard&#8217;s research supports exactly this shape: consistency and predictable attribute order, with category-appropriate density, rather than one rule applied flatly everywhere.</p>



<h2 class="wp-block-heading">The rule that prevents the expensive failure</h2>



<p class="wp-block-paragraph">The failure that costs the most is also the quietest, because it doesn&#8217;t look like a failure at all. When the same attribute is labelled differently across products — &#8220;12-piece&#8221; here, &#8220;set of 12&#8221; there — users don&#8217;t see two versions of the same thing. They miss the attribute entirely, as if it weren&#8217;t there. The information is present, technically, and functionally absent.</p>



<p class="wp-block-paragraph">So the rule is one sentence: an attribute the user can&#8217;t find by scanning is an attribute that isn&#8217;t there. Consistency isn&#8217;t tidiness — it&#8217;s the difference between information that exists in the database and information that exists for the user. A name that&#8217;s clear in isolation but inconsistent with its neighbours has failed at the one job a listing-page name has.</p>



<p class="wp-block-paragraph">For a stakeholder, that&#8217;s the question to ask of any naming review: did we check whether the same attribute is labelled the same way everywhere — or only whether each name reads well on its own?</p>



<p class="wp-block-paragraph"><strong>The instrument</strong></p>



<p class="wp-block-paragraph">This article comes with a naming consistency scorecard — a spreadsheet that scores a set of product names against the structural and linguistic criteria separately, weights them, and shows the gap between the two. It surfaces the structural failures a copy review hides, with category-specific weighting built in so different parts of a portfolio can prioritise differently within one shared structure. Drop in your names and it shows you where scanning breaks.</p>



<p class="wp-block-paragraph"><a href="https://alessandrozulberti.com/wp-content/uploads/2026/06/03-naming-consistency.xlsx" type="attachment" id="2207">Download Excel Template</a></p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-teaching/audit-your-product-names-for-structure-not-words/">Audit your product names for structure, not words</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Scaling Research for Strategic Decisions</title>
		<link>https://alessandrozulberti.com/az-case-study/scaling-research-for-strategic-decisions/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 09:28:37 +0000</pubDate>
				<category><![CDATA[AZ Case Study]]></category>
		<guid isPermaLink="false">http://localhost:8888/?p=1899</guid>

					<description><![CDATA[<p>A case study on expanding research from isolated insight into a strategic function that supports prioritisation, direction, and business decisions.<br />
Focus: Research, Strategy</p>
<p>The post <a href="https://alessandrozulberti.com/az-case-study/scaling-research-for-strategic-decisions/">Scaling Research for Strategic Decisions</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="wp-block-post-excerpt"><p class="wp-block-post-excerpt__excerpt">A case study on expanding research from isolated insight into a strategic function that supports prioritisation, direction, and business decisions. Focus: Research, Strategy </p></div>

    <div class="az-shortcode-render az-shortcode-render--case-study" data-az-shortcode-type="case-study">
        
        <article
            class="az-case-study"
            data-az-component-id="AZ-PAG-PRT-02"
            data-az-template-id="AZ-PAG-PRT-02"
        >
                            <section class="az-case-study__hero">
                    <div class="az-case-study__hero-main">
                                                    <p class="az-case-study__subtitle">Embedding Research into Strategic Planning</p>
                        
                                                    <div class="az-case-study__lede">
                                <p>The Company is best known for its iconic Swiss Army Knife, but its digital ecosystem had grown into something far more complex: multiple eCommerce platforms, service portals, and brand-led websites operating across markets and systems.</p>
<p>As the ecosystem expanded, delivery speed increased faster than shared clarity. Platform and feature decisions were increasingly driven by internal opinion, legacy assumptions, and isolated performance metrics. The risk was not slow delivery, but accelerated launches without validating user impact or accessibility implications.</p>
<p>As a Senior UX Researcher, I worked across product, marketing, engineering, and service to raise UX maturity, integrate research into decision-making, and restore a shared definition of success across platforms.</p>
                            </div>
                                            </div>

                                            <aside class="az-case-study__meta" aria-label="Project information">
                            <div class="az-case-study__meta-plane" aria-hidden="true"></div>
                            <dl class="az-case-study__fact-list">
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Project type</dt>
                                        <dd>Research strategy</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Role</dt>
                                        <dd>Senior UX Researcher</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Scope</dt>
                                        <dd>Multiple ecommerce, service, and brand platforms</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Methods</dt>
                                        <dd>Usability testing, analytics, service blueprinting, accessibility review</dd>
                                    </div>
                                                            </dl>
                        </aside>
                                    </section>
            
                    <div class="az-case-study__flow">
                                    <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="challenge">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    01 / CHALLENGE                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="challenge">
                            Challenge                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>The Company was undergoing a major transformation: a move from a monolithic commerce platform to a composable, headless architecture; the launch of new digital platforms; and an ambition to increase eCommerce performance globally.</p>
<p>At the same time, accessibility requirements were rising, internal ownership was fragmenting, and teams were under pressure to deliver quickly.</p>
<p>The core challenge was not change itself, but how to make high-impact decisions during change without relying on assumptions, internal opinion, or partial metrics.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                                            <div class="az-case-study__media-grid">
                                        <figure class="az-case-study__video">
                <div class="az-case-study__media az-case-study__media--video">
                                            <iframe title="Victorinox Brand Movie | Being Prepared Makes Life Better" width="960" height="540" src="https://www.youtube.com/embed/FV4H5PaaxNc?feature=oembed" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>                                    </div>
                        <figcaption class="az-case-study__caption">
                            <span class="az-case-study__caption-label">Video</span>
                                        <span class="az-case-study__caption-text">Brand film used as contextual reference for the ecosystem and positioning.</span>
                    </figcaption>
                    </figure>
                                </div>
                <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="strategy">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    03 / STRATEGY                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="strategy">
                            Strategy                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>I led a research-led transformation focused on turning fragmented signals into shared evidence, structured around four pillars.</p>
<p>Continuous Discovery</p>
<p>I embedded mixed-method research across web properties to surface behavioural friction early and create a steady flow of decision-ready insight.</p>
<p>Across platforms and over time, one pattern remained consistent: persistent friction around navigation clarity and content hierarchy. Users repeatedly struggled to understand where they were in the journey and how to progress, particularly in product exploration and service flows.</p>
<p>These observations reinforced that the issue was not visual design, but semantic precision and hierarchy.</p>
<p>Cross-functional Enablement</p>
<p>I worked closely with eCommerce, Development, and Marketing to translate research findings into prioritisation inputs, ensuring insights informed roadmap, content, and feature decisions.</p>
<p>Operationalising Accessibility</p>
<p>I acted as a point of escalation for digital accessibility, embedding WCAG requirements into delivery processes so compliance became a design and development concern rather than a late audit.</p>
<p>Platform-First Thinking</p>
<p>During the SAP Commerce Cloud migration, I supported the evolution of the design system to meet new development constraints, enabling consistency across Community Online, B2B, and brand platforms while preserving flexibility.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                                            <div class="az-case-study__media-grid">
                                        <figure class="az-case-study__video">
                <div class="az-case-study__media az-case-study__media--video">
                                            <iframe title="Design System" src="https://player.vimeo.com/video/1112593476?dnt=1&amp;app_id=122963" width="960" height="544" frameborder="0" allow="autoplay; fullscreen; picture-in-picture; clipboard-write; encrypted-media; web-share" referrerpolicy="strict-origin-when-cross-origin"></iframe>                                    </div>
                        <figcaption class="az-case-study__caption">
                            <span class="az-case-study__caption-label">Video</span>
                                        <span class="az-case-study__caption-text">Design-system walkthrough used to support platform migration and consistency across releases.</span>
                    </figcaption>
                    </figure>
                                </div>
                <section class="az-case-study__section az-case-study__section--dense az-section-tone az-section-tone--default" aria-labelledby="execution-highlights">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    05 / EXECUTION HIGHLIGHTS                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="execution-highlights">
                            Execution Highlights                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>Revenue Optimisation via UX Research</p>
<p>I combined behavioural analytics with usability testing on key product subcategories to understand where personalisation and navigation workflows broke down.</p>
<p>These signals helped distinguish genuine engagement from uncertainty-driven interaction and guided targeted adjustments to structure and content.</p>
<p>Service Blueprint for Repairs</p>
<p>I mapped the end-to-end journey for the Repair Service, connecting frontend interactions with backend processes. The service blueprint exposed misalignments between user expectations and internal workflows, creating a shared reference for operational and experience improvements.</p>
<p>Platform Migration Support</p>
<p>During the transition to a headless architecture, I partnered with development and content teams to maintain UX coherence across releases. Documentation and design-system updates helped balance speed, branding, and consistency during parallel launches.</p>
<p>Accessibility as a Cultural Shift</p>
<p>Recurring failures in semantic structure, contrast inconsistencies, and keyboard-navigation traps clearly indicated systemic design-system issues rather than isolated defects. This evidence proved decisive in prioritisation discussions and shifted accessibility from reactive fixes to structural improvement.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                            <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="outcome">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    06 / OUTCOME                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="outcome">
                            Outcome                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>This work helped reposition UX research as a stabilising force during transformation.</p>
<p>Decisions became more evidence-led, accessibility risks were surfaced earlier, and platform changes were supported by a shared understanding of user behaviour.</p>
<p>We shifted from release-driven decision-making to evidence-informed prioritisation, using research as a standard checkpoint rather than an optional add-on.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                            <section class="az-case-study__section az-case-study__section--dense az-section-tone az-section-tone--default" aria-labelledby="reflection">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    07 / REFLECTION                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="reflection">
                            Reflection                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>Scaling UX research in this context was less about introducing new methods and more about changing how certainty was earned.</p>
<p>When research consistently showed where assumptions failed, and when signals were shared across teams, UX moved from being a support function to a source of clarity during change.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                    
                    </div>
                </article>
    </div>
    
        <section class="az-editorial-pathway" aria-labelledby="related-method">
                            <h2 id="related-method" class="az-editorial-pathway__title">
                    Related method                </h2>
            
            
            <ul class="az-editorial-pathway__list">
                                                        <li class="az-editorial-pathway__item">
                                                    <p class="az-editorial-pathway__type">Working Framework</p>
                        
                        <p class="az-editorial-pathway__link">
                            <a href="https://alessandrozulberti.com/working-framework/signal-driven-discovery/">
                                Signal-Driven Discovery                            </a>
                        </p>

                                                    <p class="az-editorial-pathway__summary">A method page for reading weak signals, testing interpretation, and turning research into decisions.</p>
                                            </li>
                                                        <li class="az-editorial-pathway__item">
                                                    <p class="az-editorial-pathway__type">Field Note</p>
                        
                        <p class="az-editorial-pathway__link">
                            <a href="https://alessandrozulberti.com/field-note/eu-consumer-law-and-ux-the-consumer-as-ecosystem/">
                                EU Consumer Law and UX: The Consumer as Ecosystem                            </a>
                        </p>

                                                    <p class="az-editorial-pathway__summary">The law requires withdrawal to be as easy as purchase. The footer link fails this test on every&hellip;</p>
                                            </li>
                            </ul>
        </section>
        <p>The post <a href="https://alessandrozulberti.com/az-case-study/scaling-research-for-strategic-decisions/">Scaling Research for Strategic Decisions</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>How Do You Ask a Chameleon to Stop Changing Colour</title>
		<link>https://alessandrozulberti.com/field-note/how-do-you-ask-a-chameleon-to-stop-changing-colour/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Tue, 09 Jun 2026 15:48:53 +0000</pubDate>
				<category><![CDATA[Field Note]]></category>
		<guid isPermaLink="false">https://alessandrozulberti.com/?p=2201</guid>

					<description><![CDATA[<p>There are three studies open on my screen. Interviews from a discovery sprint, behavioural data from Contentsquare, a usability session from six weeks earlier. I have read all of them. Not skimmed — read, the way you read something when you know you will need to find the gap between what participants said and what [&#8230;]</p>
<p>The post <a href="https://alessandrozulberti.com/field-note/how-do-you-ask-a-chameleon-to-stop-changing-colour/">How Do You Ask a Chameleon to Stop Changing Colour</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">There are three studies open on my screen. Interviews from a discovery sprint, behavioural data from Contentsquare, a usability session from six weeks earlier. I have read all of them. Not skimmed — read, the way you read something when you know you will need to find the gap between what participants said and what the synthesis will eventually claim they meant.</p>



<p class="wp-block-paragraph">I ask the model to synthesise across all three.</p>



<p class="wp-block-paragraph">It does. Fluently. Coherently. With the kind of quiet confidence that makes you want to believe it.</p>



<p class="wp-block-paragraph">Then I ask it to challenge its own conclusions. To find what the data forbids, not just what it supports.</p>



<p class="wp-block-paragraph">It does that too. Fluently. Coherently. With the kind of quiet confidence that makes you want to believe it.</p>



<p class="wp-block-paragraph">The problem is not that the second response is wrong. The problem is that I have no way of knowing whether it is right — unless I already know the answer. And if I already know the answer, I did not need the tool.</p>



<h2 class="wp-block-heading">The distinction that matters</h2>



<p class="wp-block-paragraph">Synthesis asks: what does the evidence support?</p>



<p class="wp-block-paragraph">Falsification asks: what would the evidence rule out?</p>



<p class="wp-block-paragraph">These are not the same operation. In research practice, in strategic decision-making, in risk assessment, the difference between them is the difference between a map and a terrain. Synthesis builds the map. Falsification walks the terrain and notices where the map is wrong.</p>



<p class="wp-block-paragraph">Large language models are extraordinarily capable at synthesis. They can hold multiple sources in tension, identify convergent threads, surface patterns that would take a researcher hours to assemble manually. Used well, that capability is genuine — it saves time, extends reach, surfaces things you would have missed.</p>



<p class="wp-block-paragraph">But falsification requires something synthesis does not. It requires doubt that arrives from outside the frame. It requires a question the model cannot generate from its own outputs, because generating it would mean reaching beyond the statistical distribution of language it has been trained on — toward the thing that does not fit, the participant whose account does not cohere, the metric that pulls in the opposite direction from everything else.</p>



<p class="wp-block-paragraph">When I ask the model to challenge its own synthesis, it produces challenge. But the challenge arrives in the same register as the synthesis. Same fluency. Same coherence. Same confidence. It is wearing the shape of resistance without the substance of it.</p>



<p class="wp-block-paragraph">I started calling this performed rigour. The form of stress-testing, without the function.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The chameleon problem</h2>



<p class="wp-block-paragraph">I spent several months trying to engineer my way out of this. If the model defaults to coherence, I thought, prompt it toward incoherence. Ask it to argue the opposite case. Ask it to play devil&#8217;s advocate. Ask it to find the three things most likely to be wrong.</p>



<p class="wp-block-paragraph">Some of this is useful. Devil&#8217;s advocate prompting produces responses I would not have reached alone. Asking for alternatives — framed as competing hypotheses rather than elaborations — pushes the model somewhere more generative than consensus.</p>



<p class="wp-block-paragraph">But none of it solves the underlying problem. Each time I ask the model to resist its own conclusions, it produces resistance in the same medium as the conclusions. The critique is fluent and well-structured. It sounds like challenge. It has the grammar of intellectual opposition.</p>



<p class="wp-block-paragraph">A chameleon changes colour to match its environment. Ask it to stop, and it changes to a colour that looks like stopping.</p>



<p class="wp-block-paragraph">This is not a failure of the model. It is the model working exactly as designed. Coherence is not a bug. But coherence at the point where you need incoherence — where you need the thing that does not fit to refuse to fit — is a structural problem, not a prompting problem.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">What Euler understood</h2>



<p class="wp-block-paragraph">In 1736, Leonhard Euler was presented with a puzzle from the city of Königsberg. The city was built across a river, with seven bridges connecting its parts. The question: was it possible to walk across all seven bridges exactly once, returning to the starting point?</p>



<p class="wp-block-paragraph">People had tried. No one could do it. But no one could prove it was impossible — until Euler recognised that the question itself was wrong.</p>



<p class="wp-block-paragraph">The impossibility was not navigational. It did not matter which bridge you started from, which route you took, how carefully you planned. The topology of the system — the number of bridges connecting to each landmass — made the complete traversal structurally impossible regardless of how you moved through it.</p>



<p class="wp-block-paragraph">Euler&#8217;s insight was not a better route. It was a different question: not <em>how do I cross all seven bridges</em> but <em>what kind of system makes that crossing possible at all</em>.</p>



<p class="wp-block-paragraph">The falsification problem has the same shape.</p>



<p class="wp-block-paragraph">Writing a better prompt does not solve it. Rephrasing the challenge, adjusting the instruction, asking more precisely — these are navigational moves inside a system whose topology makes certain traversals impossible. The model will respond to each prompt from within its own frame. Ask it to critique that frame, and the critique arrives wearing the frame&#8217;s grammar.</p>



<p class="wp-block-paragraph">You cannot walk out of Königsberg by choosing a different bridge.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">What organisations are actually removing</h2>



<p class="wp-block-paragraph">This matters at the individual level — for every researcher who believes they have stress-tested a synthesis because the model produced something that looked like resistance. But it matters more at the organisational level, because the structural decision is being made there, and it is being made on the basis of an incomplete understanding of what AI can and cannot carry.</p>



<p class="wp-block-paragraph">Organisations are cutting junior analyst and researcher roles. The reasoning is coherent on its surface: AI handles synthesis adequately, senior judgment remains at the top, the cost line comes down.</p>



<p class="wp-block-paragraph">What this misses is what junior roles were actually doing.</p>



<p class="wp-block-paragraph">It was not primarily output. A junior researcher reading raw interview transcripts is not performing a task that AI cannot perform. They are doing something more specific: they are building the capacity to carry doubt into a room before the synthesis begins. They have read the thing. They have noticed the participant whose account didn&#8217;t quite fit. They have felt the friction between what the data says and what the framing wants it to say.</p>



<p class="wp-block-paragraph">That friction is not recorded anywhere. It does not appear in the synthesis document. It lives in the person who sat with the material — and it is the condition under which falsification becomes possible at all.</p>



<p class="wp-block-paragraph">A Dominican philosopher I interviewed for the Disciplina project described the master/disciple relationship in terms drawn from Aquinas: understanding arrives not by instruction from above but by living contact. The hot stone does not make the cold stone warm by explaining heat. It makes it warm by proximity. The cold stone changes because it was in the room.</p>



<p class="wp-block-paragraph">The junior researcher is the cold stone. Not because they are less expert — they become more expert precisely through this contact — but because they are the presence in the room that carries the heat of independent encounter with raw material. Remove them, and the senior researcher is left with AI synthesis on one side and their own prior frameworks on the other. The feedback loop that would have interrupted drift no longer arrives.</p>



<p class="wp-block-paragraph">You have not reduced cost. You have removed the structural condition under which falsification was possible.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The frame defends itself</h2>



<p class="wp-block-paragraph">McLuhan argued that the content of a medium blinds us to the character of the medium itself. We attend to what is said and stop noticing how the saying shapes what can be said.</p>



<p class="wp-block-paragraph">The extension I want to make is this: the frame does not merely obscure itself through carelessness. It defends itself. When you ask the medium to critique the medium, the critique arrives in the medium&#8217;s register. It performs transparency. It sounds like what stepping outside the frame would sound like, from inside the frame.</p>



<p class="wp-block-paragraph">This is why the chameleon problem is not solvable by prompting alone. The better the model — the more capable, the more fluent, the more sophisticated its simulation of resistance — the harder it becomes to distinguish performed challenge from genuine challenge. The failure mode scales with capability.</p>



<p class="wp-block-paragraph">For a practitioner who has carried independent doubt into the session — who has read the raw material, noticed the friction, built the uncertainty before the tool was opened — this is manageable. The independent doubt is the external ground. It is what allows you to evaluate whether the model&#8217;s resistance is real or performed.</p>



<p class="wp-block-paragraph">For a practitioner who has not — or for an organisation that has removed the roles through which that independent doubt would have formed — the performance of rigour is indistinguishable from rigour itself.</p>



<p class="wp-block-paragraph">That is the risk. Not that AI gets facts wrong. That it gets the synthesis right while making genuine challenge structurally impossible.</p>



<hr class="wp-block-separator has-alpha-channel-opacity"/>



<h2 class="wp-block-heading">The honest position</h2>



<p class="wp-block-paragraph">I am still working on the falsification prompt.</p>



<p class="wp-block-paragraph">I have a version that produces something closer to genuine resistance than the default. It involves framing the request not as critique of the synthesis but as a search for the participant or data point the synthesis would most need to be false — the specific, concrete case that would break the argument rather than qualify it. It involves doing this before the synthesis is complete, not after. It involves bringing my own independent reading into the prompt explicitly — naming what I noticed before I opened the tool — so the model has something to push against that did not come from the model.</p>



<p class="wp-block-paragraph">This is not a solution. It is a partial mitigation that works when I have done the prior reading, and fails when I have not.</p>



<p class="wp-block-paragraph">Euler&#8217;s actual contribution was not a better route across the bridges. It was a proof that the question of routes was the wrong question, and a new framework — graph theory — that made a different class of questions possible. The topology of the problem had to be understood before it could be worked around.</p>



<p class="wp-block-paragraph">What the equivalent framework looks like for the falsification problem — what kind of human/AI relationship makes genuine challenge possible, and what structural conditions organisations need to preserve to make that relationship viable — is the question the field has not yet asked clearly enough.</p>



<p class="wp-block-paragraph">I do not know the full answer. That is not a weakness in the argument. It is the most credible thing a researcher can say right now.</p>



<p class="wp-block-paragraph">What I do know is that the answer is not a better prompt. The bridge you are trying to cross does not exist inside the medium. The topology has to change.</p>



<p class="wp-block-paragraph"></p>
<p>The post <a href="https://alessandrozulberti.com/field-note/how-do-you-ask-a-chameleon-to-stop-changing-colour/">How Do You Ask a Chameleon to Stop Changing Colour</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Material of Teaching</title>
		<link>https://alessandrozulberti.com/the-material-of-teaching/the-material-of-teaching-overview/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Thu, 28 May 2026 15:38:55 +0000</pubDate>
				<category><![CDATA[The Material of Teaching]]></category>
		<guid isPermaLink="false">https://alessandrozulberti.com/?p=2195</guid>

					<description><![CDATA[<p>Teaching UX Research Through Practice I teach UX research as a practical discipline, not as a list of methods. The work starts before the framework, with a person trying to understand a page, complete a task, compare options, trust a service, or decide whether to continue. Sometimes the problem is explained clearly; more often, the [&#8230;]</p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-teaching/the-material-of-teaching-overview/">The Material of Teaching</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<h3 class="wp-block-heading">Teaching UX Research Through Practice</h3>



<p class="wp-block-paragraph">I teach UX research as a practical discipline, not as a list of methods. The work starts before the framework, with a person trying to understand a page, complete a task, compare options, trust a service, or decide whether to continue. Sometimes the problem is explained clearly; more often, the evidence arrives in fragments: a pause, a repeated question, a skipped section, a hesitation before clicking.</p>



<p class="wp-block-paragraph">That is the material students need to learn from. My teaching focuses on the movement from messy evidence to responsible action, using a simple sequence: listen, frame, map, and test. It is the same movement I use in professional research across ecommerce journeys, service experiences, accessibility reviews, behavioural analytics, and product decision-making.</p>



<h3 class="wp-block-heading">Listen</h3>



<p class="wp-block-paragraph">Students begin with raw participant evidence, not polished insights or final recommendations. They work with real comments, contradictions, and moments of uncertainty, learning to separate what the participant says from what the behaviour may reveal.</p>



<p class="wp-block-paragraph">A comment about unclear costs may also be about trust. A positive reaction to a visual explanation may not be about the image itself, but about confidence. A complaint about too much content may signal that the page is asking the user to work too hard. This is where research begins: in attention before interpretation.</p>



<h3 class="wp-block-heading">Frame</h3>



<p class="wp-block-paragraph">The next step is to turn evidence into a better question. Students move from quote to structure by translating observations into a problem, an objective, and a How Might We question. This prevents the common mistake of jumping directly from one user comment to one design fix.</p>



<p class="wp-block-paragraph">A weak response is to say, &#8220;make this clearer.&#8221; A stronger response asks what the user needed at that moment, why the current experience failed to provide it, and what the team needs to learn before deciding on a solution. Research becomes direction when it starts with the right question, not the nearest fix.</p>



<h3 class="wp-block-heading">Map</h3>



<p class="wp-block-paragraph">Students then place the evidence into a journey. They identify the moment, the content block, the user action, the emotion, and the opportunity, so the problem becomes concrete rather than abstract.</p>



<p class="wp-block-paragraph">Most UX issues do not live inside one isolated component. A trust signal, delivery message, review count, image, form field, or content module can change meaning depending on where it appears in the journey. Mapping shows where confidence builds, where it breaks, and where the system creates unnecessary effort.</p>



<h3 class="wp-block-heading">Test</h3>



<p class="wp-block-paragraph">The final step is to turn an insight into a testable hypothesis: if we change this part of the experience, then this metric may improve, because the research showed this behaviour or risk. This is where teaching becomes close to real product work.</p>



<p class="wp-block-paragraph">Not every insight should become a recommendation. Some ideas need to be tested. Some need more evidence. Some should be deprioritised because they are interesting but not consequential enough to act on. In digital commerce and service design especially, a change can increase engagement while failing to improve the outcome that matters.</p>



<h3 class="wp-block-heading">What students learn</h3>



<p class="wp-block-paragraph">The aim is not to teach students to make research look tidy. The aim is to teach them how to handle evidence without flattening it. They work with participant quotes, behavioural signals, journey maps, hypotheses, and prioritisation frameworks, while understanding that qualitative and quantitative evidence can support each other but can also disagree.</p>



<p class="wp-block-paragraph">Good UX research requires judgement. Judgement means knowing when a quote is a symptom, when a metric is misleading, when a journey map reveals a structural issue, and when a design idea needs to become an experiment rather than a recommendation. That distinction does not come from method. It comes from practice.</p>



<h3 class="wp-block-heading">Why this matters</h3>



<p class="wp-block-paragraph">In real projects, evidence is incomplete, stakeholders need decisions, teams want clarity, and metrics can point in one direction while interviews point in another. Accessibility issues may be invisible until someone tests the journey differently. A service can look simple on the surface while creating operational pressure behind it.</p>



<p class="wp-block-paragraph">Students need to practise that complexity — not a cleaned-up version of it. They need to learn how to slow down, structure the material, and move forward without pretending the evidence is cleaner than it is. That means tolerating ambiguity long enough for the real problem to become visible, and being precise about what is known, what is inferred, and what still needs to be tested.</p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-teaching/the-material-of-teaching-overview/">The Material of Teaching</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Material of Desgin</title>
		<link>https://alessandrozulberti.com/the-material-of-design/the-material-of-desgin/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Thu, 28 May 2026 15:34:14 +0000</pubDate>
				<category><![CDATA[The Material of Design]]></category>
		<guid isPermaLink="false">https://alessandrozulberti.com/?p=2179</guid>

					<description><![CDATA[<p>Design is not only what appears on the screen. It is the behaviour a system produces, the decisions it encourages, the assumptions it hides, and the work it transfers to the user. This is why I think of UX research as a material practice — not only a process for collecting evidence, but a way [&#8230;]</p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-design/the-material-of-desgin/">The Material of Desgin</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">Design is not only what appears on the screen. It is the behaviour a system produces, the decisions it encourages, the assumptions it hides, and the work it transfers to the user.</p>



<p class="wp-block-paragraph">This is why I think of UX research as a material practice — not only a process for collecting evidence, but a way of working with attention, language, structure, and judgement. The material of design is found in the small moments where a system meets real use: a hesitation before checkout, a skipped content block, a service step that feels disconnected, an accessibility barrier, a page that explains too much while clarifying too little.</p>



<p class="wp-block-paragraph">These moments are not noise. They are where the work begins.</p>



<h3 class="wp-block-heading">The fold</h3>



<p class="wp-block-paragraph">A fold appears when the designed flow and the user&#8217;s reality stop aligning. It may happen when someone pauses where the interface expects speed, ignores content the team considered important, or reaches a service step that sends them somewhere else to complete what should have been simple.</p>



<p class="wp-block-paragraph">The fold is not always a bug. Sometimes it is a contradiction, a missing signal, or the moment where the user reveals what the organisation has stopped seeing. In research, I try not to resolve the fold too quickly. Naming it too early can reduce it; leaving it untouched can make it disappear. The work is to hold it long enough for its meaning to become useful.</p>



<h3 class="wp-block-heading">Listening</h3>



<p class="wp-block-paragraph">Research is often described as asking questions, but much of the value comes from listening. Listening means noticing what people repeat, what they avoid, what they assume, and what they do when the interface stops supporting them.</p>



<p class="wp-block-paragraph">This connects with photography as much as UX. In both practices, the first discipline is observation: learning to look before explaining, understanding that framing changes meaning, and noticing that what sits at the edge of the frame may matter as much as the subject. In UX research, the important evidence is not always in the answer. Sometimes it is in the pause before the answer.</p>



<h3 class="wp-block-heading">Method</h3>



<p class="wp-block-paragraph">Methods are not neutral. An interview stretches meaning, a survey compresses it, analytics shows behaviour at scale, and a usability test reveals friction inside a task. An A/B test can show impact, but it does not always explain why that impact happened.</p>



<p class="wp-block-paragraph">Each method gives something and removes something, which is why I rarely trust one signal alone. I look for the relationship between what users say, what they do, where they struggle, how often it happens, and what business or service consequence follows. Research becomes useful when it helps a team understand which problem matters, why it matters, and what should be tested or changed first.</p>



<h3 class="wp-block-heading">Language</h3>



<p class="wp-block-paragraph">Research changes when it becomes language. A user may say, &#8220;I clicked here because it felt safer,&#8221; but in a report that can easily become &#8220;users want clearer navigation.&#8221; The summary may be true, but something has been lost: uncertainty, emotion, risk, instinct.</p>



<p class="wp-block-paragraph">This matters because language assigns responsibility. &#8220;Users were confused&#8221; makes the problem sound as if it belongs to the user. &#8220;The interface did not provide enough reassurance at the decision point&#8221; makes the system visible. Good research writing should help teams act, but it should not erase the conditions that produced the evidence.</p>



<h3 class="wp-block-heading">Service</h3>



<p class="wp-block-paragraph">Some of the most important UX problems are not interface problems. They are service problems, where the visible screen is only one part of a larger experience involving communication, operational process, timing, expectation, and trust.</p>



<p class="wp-block-paragraph">A journey may look acceptable on one page but fail across the full experience. A customer may understand the next step and still feel uncertain because the system around that step is not aligned. The question is not only whether the user can complete the task, but what effort the system creates, where responsibility moves, what the user needs to trust, and what happens after the visible interface ends.</p>



<h3 class="wp-block-heading">Accessibility</h3>



<p class="wp-block-paragraph">Accessibility sharpens this way of working because it makes hidden assumptions visible. It shows where design depends too much on vision, speed, precision, memory, confidence, or familiarity, and it reveals whether a system is genuinely structured or only visually arranged.</p>



<p class="wp-block-paragraph">Accessibility is not a final check. It is a way of asking whether the experience can hold different bodies, contexts, technologies, and levels of certainty. When it is treated as part of design practice rather than a compliance layer, it improves the whole system — making content clearer, journeys more robust, decisions easier, and responsibility more explicit.</p>



<h3 class="wp-block-heading">What remains</h3>



<p class="wp-block-paragraph">Most research fails before the report. Teams mistake visibility for understanding. Dashboards replace observation. Metrics become more important than the behaviour behind them. Workshops create alignment without changing the service, content, or process causing the problem.</p>



<p class="wp-block-paragraph">I have seen teams optimise journeys users still do not trust. I have seen accessibility treated as compliance while people struggle to complete basic tasks. I have seen organisations celebrate engagement while increasing effort for the customer. The issue is rarely lack of data. The issue is that interpretation requires something data alone cannot supply: a willingness to sit with the problem long enough to understand what it is actually about.</p>



<p class="wp-block-paragraph">Research becomes useful when teams connect evidence across the full experience — behaviour, language, accessibility, operational constraints, commercial pressure, and user intent. That work is slower than producing slides. It requires judgement, disagreement, and the willingness to face problems that sit beyond the interface itself. None of that is comfortable. It is, however, the part that changes anything.</p>
<p>The post <a href="https://alessandrozulberti.com/the-material-of-design/the-material-of-desgin/">The Material of Desgin</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Clarity in High-Season Sales</title>
		<link>https://alessandrozulberti.com/az-case-study/clarity-in-high-season-sales/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Sun, 24 May 2026 09:28:37 +0000</pubDate>
				<category><![CDATA[AZ Case Study]]></category>
		<guid isPermaLink="false">http://localhost:8888/?p=1898</guid>

					<description><![CDATA[<p>Improving comprehension and confidence at moments of seasonal pressure and heightened user demand.<br />
Focus: Conversion, Content Strategy</p>
<p>The post <a href="https://alessandrozulberti.com/az-case-study/clarity-in-high-season-sales/">Clarity in High-Season Sales</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[

    <div class="az-shortcode-render az-shortcode-render--case-study" data-az-shortcode-type="case-study">
        
        <article
            class="az-case-study"
            data-az-component-id="AZ-PAG-PRT-02"
            data-az-template-id="AZ-PAG-PRT-02"
        >
                            <section class="az-case-study__hero">
                    <div class="az-case-study__hero-main">
                                                    <p class="az-case-study__subtitle">Reducing Cognitive Load During Peak Traffic</p>
                        
                                                    <div class="az-case-study__lede">
                                <p>The Company approached its holiday campaigns with a clear ambition: convert seasonal traffic into meaningful engagement and confident purchasing decisions.</p>
<p>Earlier campaigns assumed that high holiday intent meant users already understood the product value and needed only visual appeal and refreshed layouts to convert. In reality, users required reassurance, guidance, and clearer differentiation, especially under time pressure.</p>
<p>I led UX research and usability testing across successive holiday campaigns, guiding their evolution from surface-level optimisation toward behaviourally informed experiences.</p>
                            </div>
                                            </div>

                                            <aside class="az-case-study__meta" aria-label="Project information">
                            <div class="az-case-study__meta-plane" aria-hidden="true"></div>
                            <dl class="az-case-study__fact-list">
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Project type</dt>
                                        <dd>Campaign optimisation</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Role</dt>
                                        <dd>Senior UX Researcher</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Scope</dt>
                                        <dd>Holiday landing pages, decision journeys, and campaign validation</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Methods</dt>
                                        <dd>Usability testing, five-second tests, behavioural analytics, heatmaps, journey mapping</dd>
                                    </div>
                                                            </dl>
                        </aside>
                                    </section>
            
                    <div class="az-case-study__flow">
                                    <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="challenge">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    01 / CHALLENGE                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="challenge">
                            Challenge                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>The initial goal was direct: understand why a visually refined landing page failed to convert during high-stakes holiday moments.</p>
<p>Usability testing revealed that users were not lost; they were unconvinced. Under time pressure and emotional load, behaviour changed markedly. Users became more risk-averse, scanned less, and relied on quick heuristics.</p>
<p>These hesitation points reappeared across successive holiday seasons, particularly around uncertainty about product suitability, shipping timing, and gift appropriateness.</p>
<p>Quantitative data confirmed limited engagement beyond the first scroll. Qualitative sessions explained why: unmet expectations and delayed reassurance.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                                            <div class="az-case-study__media-grid">
                                        <figure class="az-case-study__figure">
                <div class="az-case-study__media az-case-study__media--figure">
                    <img decoding="async"
                        class="az-case-study__image"
                        src="https://alessandrozulberti.com/wp-content/uploads/2025/07/Slide2-1024x576.jpg"
                        alt="Holiday campaign research slide one"
                        loading="lazy"
                    >
                </div>
                        <figcaption class="az-case-study__caption">
                            <span class="az-case-study__caption-label">Image</span>
                                        <span class="az-case-study__caption-text">Early campaign analysis focused on where visual polish failed to create decision confidence.</span>
                    </figcaption>
                    </figure>
                                </div>
                <section class="az-case-study__section az-case-study__section--dense az-section-tone az-section-tone--default" aria-labelledby="surface-clarity">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    03 / SURFACE CLARITY                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="surface-clarity">
                            Surface Clarity                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>Primary Methods</p>
<p>– Remote usability testing, including five-second tests</p>
<p>– Targeted user interviews</p>
<p>– Scroll-depth and click data analysis</p>
<p>– Prototype evaluation of new layout variations</p>
<p>Diagnosing Misalignment Through Usability Testing</p>
<p>The same pattern emerged repeatedly: users were not confused enough to stop, but not confident enough to convert.</p>
<p>One participant captured the tension clearly: after filtering, they felt mostly confident they had found the right product, but still worried there might be a better option they had missed.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                                            <div class="az-case-study__media-grid">
                                        <figure class="az-case-study__figure">
                <div class="az-case-study__media az-case-study__media--figure">
                    <img decoding="async"
                        class="az-case-study__image"
                        src="https://alessandrozulberti.com/wp-content/uploads/2025/07/Slide5-1024x576.jpg"
                        alt="Holiday campaign research slide two"
                        loading="lazy"
                    >
                </div>
                        <figcaption class="az-case-study__caption">
                            <span class="az-case-study__caption-label">Image</span>
                                        <span class="az-case-study__caption-text">Later design directions focused on decision support rather than visual dominance.</span>
                    </figcaption>
                    </figure>
                                </div>
                <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="designing-for-decision">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    05 / DESIGNING FOR DECISION                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="designing-for-decision">
                            Designing for Decision                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>With baseline issues identified, the focus shifted from diagnosis to intentional redesign.</p>
<p>One design direction was deliberately deprioritised: a visually dominant, hero-first layout that pushed explanatory content further down the page. Testing showed that users needed clearer value framing and decision aids earlier, not more visual emphasis.</p>
<p>Using behavioural principles, the journey was reshaped to reduce cognitive load, strengthen salience, and align content order with how decisions are made under pressure.</p>
<p>The landing page evolved from a static presentation into a sequence of deliberate decision moments, separating inspiration from commerce, elevating the Gift Finder, clarifying support pathways, and rewriting copy for rapid scanning.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                            <section class="az-case-study__section az-case-study__section--dense az-section-tone az-section-tone--default" aria-labelledby="validating-in-motion">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    06 / VALIDATING IN MOTION                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="validating-in-motion">
                            Validating in Motion                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>Primary Methods</p>
<p>– Scenario-based usability testing</p>
<p>– GA4 behavioural data review</p>
<p>– ContentSquare heatmaps</p>
<p>– A/B test planning</p>
<p>– Device-specific observations</p>
<p>– Feedback analysis from live prototypes</p>
<p>Real-Time Research During Campaign Rollout</p>
<p>Before launch, we conducted pre-live validation to refine nuance rather than uncover major flaws.</p>
<p>At one point, analytics suggested improved click-through on promotional elements. However, usability sessions revealed that many of these clicks were driven by uncertainty rather than true engagement.</p>
<p>The tension was resolved by restructuring the hierarchy so promotional elements supported, rather than replaced, decision-critical content.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                            <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="reflection">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    07 / REFLECTION                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="reflection">
                            Reflection                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>A small change produced a disproportionate effect: introducing concise, high-salience value statements such as warranty, gifting suitability, and delivery certainty directly above the product grid. This reduced early-journey hesitation and restored confidence.</p>
<p>This project was not about redesigning a landing page. It was about learning how people decide when attention is fragmented and stakes are high.</p>
<p>Clarity, in these moments, is not aesthetic. It is functional.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                    
                    </div>
                </article>
    </div>
    <p>The post <a href="https://alessandrozulberti.com/az-case-study/clarity-in-high-season-sales/">Clarity in High-Season Sales</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Accessibility as a Strategic Foundation in the D2C Ecosystem</title>
		<link>https://alessandrozulberti.com/az-case-study/accessibility-as-a-strategic-foundation-in-the-d2c-ecosystem/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Fri, 24 Apr 2026 09:28:37 +0000</pubDate>
				<category><![CDATA[AZ Case Study]]></category>
		<guid isPermaLink="false">http://localhost:8888/?p=1900</guid>

					<description><![CDATA[<p>From compliance activity to organisation-wide accessibility practice across systems, governance, and delivery.</p>
<p>Focus / Role: Accessibility Strategy, Governance</p>
<p>The post <a href="https://alessandrozulberti.com/az-case-study/accessibility-as-a-strategic-foundation-in-the-d2c-ecosystem/">Accessibility as a Strategic Foundation in the D2C Ecosystem</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[

    <div class="az-shortcode-render az-shortcode-render--case-study" data-az-shortcode-type="case-study">
        
        <article
            class="az-case-study"
            data-az-component-id="AZ-PAG-PRT-02"
            data-az-template-id="AZ-PAG-PRT-02"
        >
                            <section class="az-case-study__hero">
                    <div class="az-case-study__hero-main">
                                                    <p class="az-case-study__subtitle">From Compliance Checks to Organisational Practice</p>
                        
                                                    <div class="az-case-study__lede">
                                <p>The Company was evolving rapidly: new eCommerce platforms, a shift to composable architecture, a global design system rollout, and increasing regulatory pressure across markets.</p>
<p>Yet accessibility quality remained inconsistent. Issues accumulated across templates, UI components, and content practices, creating friction not only for users with accessibility needs but for anyone navigating the site under real-world constraints.</p>
<p>Teams were committed to delivering high-quality experiences, but with competing priorities and fragmented ownership, accessibility was often treated as a corrective task: reviewed late, fixed locally, and rarely scaled.</p>
<p>As Senior UX Researcher and accessibility lead, I established a structured, organisation-wide approach that positioned accessibility as a driver of product quality, risk reduction, and user trust rather than a compliance checkbox.</p>
                            </div>
                                            </div>

                                            <aside class="az-case-study__meta" aria-label="Project information">
                            <div class="az-case-study__meta-plane" aria-hidden="true"></div>
                            <dl class="az-case-study__fact-list">
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Project type</dt>
                                        <dd>Accessibility strategy</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Role</dt>
                                        <dd>Senior UX Researcher and accessibility lead</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Scope</dt>
                                        <dd>Global ecommerce platforms, templates, components, and content practices</dd>
                                    </div>
                                                                                                        <div class="az-case-study__fact">
                                        <dt>Methods</dt>
                                        <dd>WCAG audits, screen reader testing, design-system governance, training, dashboards</dd>
                                    </div>
                                                            </dl>
                        </aside>
                                    </section>
            
                    <div class="az-case-study__flow">
                                    <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="challenge">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    01 / CHALLENGE                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="challenge">
                            Challenge                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>The accessibility challenge was structural, not symptomatic.</p>
<p>Legacy SAP Commerce Cloud pages coexisted with new headless components, creating inconsistent patterns and uneven accessibility quality. The design system lacked WCAG-aligned guidance and governance, and responsibility for accessibility was unclear across design, development, content, and QA.</p>
<p>Teams shipped quickly. Reviews happened late, accessibility debt accumulated, and fixes became increasingly costly.</p>
<p>The core challenge was not identifying accessibility issues, but building the structures, processes, and shared understanding required to prevent them.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                            <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="strategy">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    02 / STRATEGY                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="strategy">
                            Strategy                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>The accessibility program was built on four parallel pillars designed to embed accessibility into everyday decisions rather than post-release correction.</p>
<p>Accessibility Governance and Foundations</p>
<p>I authored and introduced an accessibility roadmap aligned with WCAG 2.2 AA and tailored to the Company’s platforms and component libraries. It defined responsibility boundaries, acceptance criteria, mandatory checkpoints, and escalation paths.</p>
<p>Embedding Accessibility in the Design System</p>
<p>Working with design and engineering leads, I integrated accessibility requirements directly into component specifications, including semantic structure, contrast constraints, keyboard behaviour, error handling, and inclusive copy guidance.</p>
<p>Continuous Audits and Behavioural Validation</p>
<p>I established an audit program combining automated scanning, manual WCAG reviews, and user-centred observation using screen reader workflows.</p>
<p>Cross-Functional Enablement</p>
<p>I supported teams with training and lightweight tooling, including accessibility office hours, pattern libraries with dos and don’ts, sprint-level checklists, and pre-release smoke tests.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                            <section class="az-case-study__section az-case-study__section--dense az-section-tone az-section-tone--default" aria-labelledby="execution-highlights">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    03 / EXECUTION HIGHLIGHTS                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="execution-highlights">
                            Execution Highlights                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>Transforming the Checkout Experience</p>
<p>Checkout was prioritised due to its complexity and revenue sensitivity. I supported the redesign by mapping the screen reader journey, standardising form structures, aligning validation logic, and ensuring dynamic steps were announced and focus-managed.</p>
<p>The most confusing interaction before standardisation was the transition between checkout steps. Users, especially those using screen readers, received no announcement of context change and often did not realise the page had advanced. Resolving this significantly reduced ambiguity and cognitive load for all users.</p>
<p>Component-Level Accessibility Fixes</p>
<p>Several components required systemic intervention, including accordions, tabs, filters, product carousels, and heading structures.</p>
<p>Addressing these issues at the design-system level ensured fixes scaled consistently across global markets rather than being reintroduced through local variations.</p>
<p>Accessibility Monitoring and Dashboards</p>
<p>To support prioritisation, I introduced a structured approach to tracking automated scan trends, issue recurrence, component regressions, and accessibility debt over time.</p>
<p>Recurring regressions in design-system components proved most effective in shifting stakeholder prioritisation. They demonstrated that the cost of inaction multiplied across markets and releases, prompting leadership to prioritise systemic fixes over page-level patches.</p>
<p>Redefining Content Practices</p>
<p>Accessibility extended beyond UI components. I worked with content and marketing teams to evolve alt-text practices, heading usage, link naming, and inclusive copywriting standards.</p>
<p>These changes improved clarity for assistive technologies and reduced cognitive load more broadly, reinforcing that structural clarity, not content reduction, was the primary driver of improved readability.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                            <section class="az-case-study__section az-case-study__section--default az-section-tone az-section-tone--default" aria-labelledby="outcome">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    04 / OUTCOME                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="outcome">
                            Outcome                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>The accessibility program reshaped how the organisation approached digital quality.</p>
<p>Strategic Impact</p>
<p>Accessibility became part of the standard definition of done. Platform migrations launched with stronger foundations, fewer regressions, and a reduced backlog of accessibility debt.</p>
<p>User Impact</p>
<p>Screen reader journeys became more predictable. Form-heavy flows such as checkout, account creation, and repairs showed reduced friction and clearer progression.</p>
<p>Organisational Impact</p>
<p>Design system teams adopted accessibility-first component governance. Development teams integrated checks into CI/CD workflows. Content and marketing teams embedded inclusive writing practices as standard.</p>
<p>The clearest signal of change was the integration of accessibility criteria directly into the design system’s component acceptance process: no new component or update could ship without meeting accessibility requirements.</p>
<p>Accessibility moved from specialist review to shared expectation.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                                            <section class="az-case-study__section az-case-study__section--dense az-section-tone az-section-tone--default" aria-labelledby="reflection">
            <!-- Left column: Section label/number -->
            <div class="az-case-study__section-label-col">
                <div class="az-case-study__section-label">
                    05 / REFLECTION                </div>
            </div>

            <!-- Main column: Content -->
            <div class="az-case-study__section-main">
                <div class="az-case-study__section-inner">
                                            <h2 class="az-case-study__section-title" id="reflection">
                            Reflection                        </h2>
                    
                                            <div class="az-case-study__body">
                            <p>Accessibility is not a sprint deliverable. It is an organisational capability.</p>
<p>This work demonstrated that sustainable improvement depends on shared ownership, clear standards, early intervention, continuous validation, and a unified source of truth.</p>
<p>It also reinforced a core NN/g principle: accessible design improves usability for everyone.</p>
<p>The foundation established here supports every future platform, every market rollout, and every digital experience the Company will launch.</p>
                        </div>
                                    </div>
            </div>

            <!-- Right column: Optional quotes/highlights (currently empty, extensible) -->
            <div class="az-case-study__section-right"></div>
        </section>
                    
                    </div>
                </article>
    </div>
    <p>The post <a href="https://alessandrozulberti.com/az-case-study/accessibility-as-a-strategic-foundation-in-the-d2c-ecosystem/">Accessibility as a Strategic Foundation in the D2C Ecosystem</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Agentic AI Reading Instrument</title>
		<link>https://alessandrozulberti.com/field-note/agentic-ai-reading-instrument-shortcode/</link>
		
		<dc:creator><![CDATA[Alessandro Zulberti]]></dc:creator>
		<pubDate>Sat, 18 Apr 2026 12:48:41 +0000</pubDate>
				<category><![CDATA[Field Note]]></category>
		<guid isPermaLink="false">http://localhost:8888/?p=2065</guid>

					<description><![CDATA[<p>This experiment helps inspect short ideas about agentic AI through fixed critical lenses. Rather than simulating an assistant, it reads where delegation compresses context, assumes capability, and leaves hidden recovery work behind.</p>
<p>The post <a href="https://alessandrozulberti.com/field-note/agentic-ai-reading-instrument-shortcode/">Agentic AI Reading Instrument</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p class="wp-block-paragraph">This experiment helps inspect short ideas about agentic AI through fixed critical lenses. Rather than simulating an assistant, it reads where delegation compresses context, assumes capability, and leaves hidden recovery work behind.</p>


<section class="az-agentic-mount az-shortcode-render az-shortcode-render--agentic-ai-reading alignfull">
<article class="az-agentic" data-az-agentic>
  <style>
    .az-agentic-mount {
      display: block;
      width: 100%;
      max-width: none;
    }

    .az-agentic {
      --az-agentic-bg: linear-gradient(180deg, #f1ece3 0%, #f7f4ef 30%, #fcfaf7 100%);
      --az-agentic-surface: rgba(255, 255, 255, 0.78);
      --az-agentic-surface-strong: rgba(255, 255, 255, 0.92);
      --az-agentic-surface-soft: rgba(246, 242, 235, 0.88);
      --az-agentic-ink: #171512;
      --az-agentic-muted: #615b54;
      --az-agentic-line: rgba(23, 21, 18, 0.12);
      --az-agentic-line-strong: rgba(23, 21, 18, 0.22);
      --az-agentic-accent: #1f3d35;
      --az-agentic-accent-soft: rgba(31, 61, 53, 0.12);
      --az-agentic-risk-low: #2f6247;
      --az-agentic-risk-low-bg: rgba(47, 98, 71, 0.1);
      --az-agentic-risk-medium: #8a6332;
      --az-agentic-risk-medium-bg: rgba(138, 99, 50, 0.12);
      --az-agentic-risk-high: #8b4337;
      --az-agentic-risk-high-bg: rgba(139, 67, 55, 0.12);
      --az-agentic-shadow: 0 20px 48px rgba(18, 16, 13, 0.06);
      --az-agentic-radius-lg: 26px;
      --az-agentic-radius-md: 18px;
      --az-agentic-radius-sm: 12px;
      --az-agentic-serif: var(--wp--preset--font-family--az-heading, "Newsreader", serif);
      --az-agentic-sans: var(--wp--preset--font-family--az-body, Inter, sans-serif);
      position: relative;
      max-width: 1120px;
      margin: 0 auto;
      padding: clamp(1.1rem, 2vw, 1.8rem);
      border: 1px solid var(--az-agentic-line);
      border-radius: var(--az-agentic-radius-lg);
      background: var(--az-agentic-bg);
      box-shadow: var(--az-agentic-shadow);
      color: var(--az-agentic-ink);
      font-family: var(--az-agentic-sans);
    }

    .az-agentic::before {
      content: "";
      position: absolute;
      inset: 0;
      border-radius: inherit;
      background:
        radial-gradient(circle at top right, rgba(95, 111, 90, 0.12), transparent 26%),
        radial-gradient(circle at bottom left, rgba(143, 108, 74, 0.08), transparent 22%);
      pointer-events: none;
    }

    .az-agentic,
    .az-agentic * {
      box-sizing: border-box;
    }

    .az-agentic__header,
    .az-agentic__form-shell,
    .az-agentic__summary-grid,
    .az-agentic__lens-grid,
    .az-agentic__judgement,
    .az-agentic__usage,
    .az-agentic__empty {
      position: relative;
      z-index: 1;
    }

    .az-agentic__header {
      display: grid;
      gap: 1rem;
      padding: clamp(0.6rem, 1vw, 1rem);
    }

    .az-agentic__eyebrow,
    .az-agentic__label,
    .az-agentic__meta-label,
    .az-agentic__lens-label,
    .az-agentic__examples-title {
      margin: 0;
      font-size: 0.72rem;
      letter-spacing: 0.18em;
      text-transform: uppercase;
      color: var(--az-agentic-muted);
    }

    .az-agentic__title,
    .az-agentic__summary-text,
    .az-agentic__synthesis-text,
    .az-agentic__judgement-title {
      margin: 0;
      font-family: var(--az-agentic-serif);
      font-weight: 200;
      letter-spacing: 0;
      line-height: 1.05;
      text-wrap: balance;
    }

    .az-agentic__title {
      max-width: none;
      font-size: var(--az-type-h3, var(--wp--preset--font-size--large, clamp(1.54rem, 1.36rem + 0.55vw, 1.83rem)));
      line-height: 1.12;
    }

    .az-agentic__intro,
    .az-agentic__note,
    .az-agentic__summary-card p,
    .az-agentic__synthesis-card p,
    .az-agentic__judgement p,
    .az-agentic__empty p,
    .az-agentic__lens-card p,
    .az-agentic__textarea-note {
      margin: 0;
      max-width: 62ch;
      font-size: var(--az-type-body, var(--wp--preset--font-size--medium, clamp(1.06rem, 1.01rem + 0.24vw, 1.16rem)));
      line-height: var(--az-leading-body, 1.7);
      color: var(--az-color-text, var(--az-agentic-ink));
    }

    .az-agentic__note {
      font-size: 0.95rem;
      color: var(--az-agentic-ink);
    }

    .az-agentic__form-shell {
      display: grid;
      gap: 1rem;
      margin-top: 1.4rem;
      padding: clamp(1rem, 2vw, 1.5rem);
      border: 1px solid var(--az-agentic-line);
      border-radius: var(--az-agentic-radius-md);
      background: var(--az-agentic-surface);
      backdrop-filter: blur(18px);
    }

    .az-agentic__examples {
      display: grid;
      gap: 0.7rem;
    }

    .az-agentic__example-list {
      display: flex;
      flex-wrap: wrap;
      gap: 0.6rem;
    }

    .az-agentic__example {
      border: 1px solid var(--az-agentic-line);
      border-radius: 999px;
      background: rgba(255, 255, 255, 0.6);
      color: var(--az-agentic-ink);
      padding: 0.65rem 0.95rem;
      font: inherit;
      font-size: 0.92rem;
      line-height: 1.3;
      cursor: pointer;
      transition: border-color 140ms ease, background-color 140ms ease, transform 140ms ease;
    }

    .az-agentic__example:hover,
    .az-agentic__example:focus-visible,
    .az-agentic__example.is-active {
      border-color: rgba(31, 61, 53, 0.3);
      background: rgba(31, 61, 53, 0.08);
      outline: none;
      transform: translateY(-1px);
    }

    .az-agentic__form {
      display: grid;
      gap: 0.8rem;
    }

    .az-agentic__field {
      display: grid;
      gap: 0.55rem;
    }

    .az-agentic__textarea {
      width: 100%;
      min-height: 8.75rem;
      padding: 1rem 1.05rem;
      border: 1px solid var(--az-agentic-line-strong);
      border-radius: var(--az-agentic-radius-sm);
      background: rgba(255, 255, 255, 0.92);
      color: var(--az-agentic-ink);
      resize: vertical;
      font: inherit;
      font-size: 1rem;
      line-height: 1.55;
      transition: border-color 140ms ease, box-shadow 140ms ease;
    }

    .az-agentic__textarea:focus-visible {
      outline: none;
      border-color: rgba(31, 61, 53, 0.42);
      box-shadow: 0 0 0 3px rgba(31, 61, 53, 0.12);
    }

    .az-agentic__actions {
      display: flex;
      flex-wrap: wrap;
      align-items: center;
      gap: 0.75rem;
    }

    .az-agentic__button {
      border: 1px solid var(--az-agentic-ink);
      border-radius: 999px;
      padding: 0.82rem 1.25rem;
      font: inherit;
      font-size: 0.95rem;
      line-height: 1;
      cursor: pointer;
      transition: transform 140ms ease, background-color 140ms ease, border-color 140ms ease, color 140ms ease;
    }

    .az-agentic__button:hover,
    .az-agentic__button:focus-visible {
      outline: none;
      transform: translateY(-1px);
    }

    .az-agentic__button--primary {
      background: var(--az-agentic-ink);
      color: #ffffff;
    }

    .az-agentic__button--primary:hover,
    .az-agentic__button--primary:focus-visible {
      background: #000000;
    }

    .az-agentic__button--secondary {
      background: transparent;
      color: var(--az-agentic-ink);
      border-color: var(--az-agentic-line-strong);
    }

    .az-agentic__button--secondary:hover,
    .az-agentic__button--secondary:focus-visible {
      background: rgba(23, 21, 18, 0.04);
    }

    .az-agentic__button:disabled {
      opacity: 0.6;
      cursor: wait;
      transform: none;
    }

    .az-agentic__status {
      min-height: 1.2rem;
      font-size: 0.88rem;
      color: var(--az-agentic-muted);
    }

    .az-agentic__results {
      display: grid;
      gap: 1rem;
      margin-top: 1rem;
    }

    .az-agentic__results[hidden] {
      display: none;
    }

    .az-agentic__summary-grid {
      display: grid;
      gap: 1rem;
      grid-template-columns: minmax(0, 1.05fr) minmax(0, 1.35fr);
    }

    .az-agentic__summary-card,
    .az-agentic__synthesis-card,
    .az-agentic__lens-card,
    .az-agentic__judgement,
    .az-agentic__empty {
      padding: clamp(1rem, 1.6vw, 1.35rem);
      border: 1px solid var(--az-agentic-line);
      border-radius: var(--az-agentic-radius-md);
      background: var(--az-agentic-surface-strong);
      box-shadow: 0 12px 30px rgba(18, 16, 13, 0.035);
    }

    .az-agentic__summary-card,
    .az-agentic__synthesis-card,
    .az-agentic__judgement {
      display: grid;
      gap: 0.85rem;
    }

    .az-agentic__summary-source {
      margin: 0;
      padding-left: 1rem;
      border-left: 2px solid rgba(23, 21, 18, 0.1);
      font-size: 0.95rem;
      line-height: 1.6;
      color: var(--az-agentic-ink);
    }

    .az-agentic__summary-text {
      font-size: var(--az-type-h2, var(--wp--preset--font-size--x-large, clamp(1.86rem, 1.54rem + 1vw, 2.39rem)));
      line-height: 1.04;
    }

    .az-agentic__meta-row {
      display: flex;
      flex-wrap: wrap;
      gap: 0.45rem;
      align-items: baseline;
      padding-top: 0.85rem;
      border-top: 1px solid var(--az-agentic-line);
      color: var(--az-agentic-muted);
      font-size: 0.92rem;
      line-height: 1.5;
    }

    .az-agentic__meta-row strong {
      color: var(--az-agentic-ink);
      font-weight: 600;
    }

    .az-agentic__synthesis-card {
      background:
        linear-gradient(135deg, rgba(31, 61, 53, 0.08), rgba(31, 61, 53, 0) 38%),
        var(--az-agentic-surface-strong);
    }

    .az-agentic__synthesis-text {
      font-size: var(--az-type-h2, var(--wp--preset--font-size--x-large, clamp(1.86rem, 1.54rem + 1vw, 2.39rem)));
      line-height: 1.04;
    }

    .az-agentic__lens-grid {
      display: grid;
      gap: 1rem;
      grid-template-columns: repeat(2, minmax(0, 1fr));
    }

    .az-agentic__lens-card {
      display: grid;
      gap: 0.9rem;
      background: var(--az-agentic-surface);
    }

    .az-agentic__lens-head {
      display: flex;
      align-items: flex-start;
      justify-content: space-between;
      gap: 0.85rem;
      padding-bottom: 0.85rem;
      border-bottom: 1px solid var(--az-agentic-line);
    }

    .az-agentic__lens-title {
      margin: 0;
      font-size: var(--az-type-h3, var(--wp--preset--font-size--large, clamp(1.54rem, 1.36rem + 0.55vw, 1.83rem)));
      line-height: 1.12;
      font-weight: 200;
      color: var(--az-color-text, var(--az-agentic-ink));
    }

    .az-agentic__risk {
      display: inline-flex;
      align-items: center;
      justify-content: center;
      min-width: 4.75rem;
      padding: 0.34rem 0.7rem;
      border-radius: 999px;
      font-size: 0.72rem;
      line-height: 1;
      letter-spacing: 0.14em;
      text-transform: uppercase;
      font-weight: 700;
      white-space: nowrap;
    }

    .az-agentic__risk[data-risk="Low"] {
      background: var(--az-agentic-risk-low-bg);
      color: var(--az-agentic-risk-low);
    }

    .az-agentic__risk[data-risk="Medium"] {
      background: var(--az-agentic-risk-medium-bg);
      color: var(--az-agentic-risk-medium);
    }

    .az-agentic__risk[data-risk="High"] {
      background: var(--az-agentic-risk-high-bg);
      color: var(--az-agentic-risk-high);
    }

    .az-agentic__lens-copy {
      display: grid;
      gap: 0.8rem;
    }

    .az-agentic__lens-block {
      display: grid;
      gap: 0.3rem;
    }

    .az-agentic__lens-block p {
      font-size: var(--az-type-body, var(--wp--preset--font-size--medium, clamp(1.06rem, 1.01rem + 0.24vw, 1.16rem)));
      line-height: var(--az-leading-body, 1.7);
      color: var(--az-color-text, var(--az-agentic-ink));
    }

    .az-agentic__judgement {
      background:
        linear-gradient(135deg, rgba(143, 108, 74, 0.12), rgba(143, 108, 74, 0) 48%),
        var(--az-agentic-surface-strong);
    }

    .az-agentic__judgement-title {
      font-size: var(--az-type-h2, var(--wp--preset--font-size--x-large, clamp(1.86rem, 1.54rem + 1vw, 2.39rem)));
      line-height: 1.04;
    }

    .az-agentic__judgement-note {
      max-width: 52ch;
    }

    .az-agentic__empty {
      background: var(--az-agentic-surface-soft);
    }

    .az-agentic__empty p {
      color: var(--az-agentic-ink);
    }

    .az-agentic__usage {
      display: grid;
      gap: 0.45rem;
      margin-top: 0.2rem;
      padding: 0.8rem 1rem;
      border: 1px solid var(--az-agentic-line);
      border-radius: var(--az-agentic-radius-sm);
      background: rgba(255, 255, 255, 0.52);
      color: var(--az-agentic-muted);
      font-size: 0.78rem;
      line-height: 1.45;
    }

    .az-agentic__usage[hidden] {
      display: none;
    }

    .az-agentic__usage-title,
    .az-agentic__usage-note {
      margin: 0;
    }

    .az-agentic__usage-list {
      display: flex;
      flex-wrap: wrap;
      gap: 0.35rem 0.85rem;
      margin: 0;
      padding: 0;
      list-style: none;
    }

    .az-agentic__usage strong {
      color: var(--az-agentic-ink);
      font-weight: 650;
    }

    @media (max-width: 900px) {
      .az-agentic__summary-grid,
      .az-agentic__lens-grid {
        grid-template-columns: 1fr;
      }
    }

    @media (max-width: 680px) {
      .az-agentic {
        padding: 0.9rem;
        border-radius: 22px;
      }

      .az-agentic__header,
      .az-agentic__form-shell,
      .az-agentic__summary-card,
      .az-agentic__synthesis-card,
      .az-agentic__lens-card,
      .az-agentic__judgement,
      .az-agentic__empty {
        padding: 1rem;
      }

      .az-agentic__lens-head {
        flex-direction: column;
        align-items: flex-start;
      }
    }
  </style>

  <header class="az-agentic__header" aria-labelledby="az-agentic-title">
    <p class="az-agentic__eyebrow">Editorial experiment</p>
    <h3 id="az-agentic-title" class="az-agentic__title">Agentic AI reading instrument</h3>
    <p class="az-agentic__intro">
      Paste a short scenario about an AI agent. The page reads it through fixed lenses so you can see where delegation compresses context, hides repair work, or should stop.
    </p>
    <p class="az-agentic__note">Not a chatbot. Not a feasibility checker. A compact diagnostic.</p>
  </header>

  <section class="az-agentic__form-shell" aria-labelledby="az-agentic-input-title">
    <div class="az-agentic__examples">
      <p id="az-agentic-input-title" class="az-agentic__examples-title">Load an example</p>
      <div class="az-agentic__example-list">
                  <button class="az-agentic__example" type="button" data-az-example="An AI agent books and rearranges my travel automatically.">
            An AI agent books and rearranges my travel automatically.          </button>
                  <button class="az-agentic__example" type="button" data-az-example="An agent buys groceries for a dinner party.">
            An agent buys groceries for a dinner party.          </button>
                  <button class="az-agentic__example" type="button" data-az-example="An agent handles insurance claims on my behalf.">
            An agent handles insurance claims on my behalf.          </button>
                  <button class="az-agentic__example" type="button" data-az-example="An agent configures and buys a laptop for me.">
            An agent configures and buys a laptop for me.          </button>
                  <button class="az-agentic__example" type="button" data-az-example="An agent manages supplier follow-ups for a small studio.">
            An agent manages supplier follow-ups for a small studio.          </button>
              </div>
    </div>

    <form class="az-agentic__form" data-az-form>
      <label class="az-agentic__field">
        <span class="az-agentic__label">Scenario</span>
        <textarea
          class="az-agentic__textarea"
          name="scenario"
          data-az-input
          placeholder="An AI agent handles insurance claims on my behalf."
          aria-describedby="az-agentic-textarea-note"
        >An AI agent books and rearranges my travel automatically.</textarea>
      </label>
      <p id="az-agentic-textarea-note" class="az-agentic__textarea-note">Enter one short scenario only. This version reads one agentic situation at a time, not a list, comparison, or instruction prompt.</p>
      <div class="az-agentic__actions">
        <button class="az-agentic__button az-agentic__button--primary" type="submit" data-az-analyse>Analyse</button>
        <button class="az-agentic__button az-agentic__button--secondary" type="button" data-az-reset>Reset</button>
      </div>
      <div class="az-agentic__status" data-az-status aria-live="polite"></div>
    </form>
  </section>

  <section class="az-agentic__results" data-az-results hidden>
    <div class="az-agentic__summary-grid">
      <section class="az-agentic__summary-card" aria-labelledby="az-agentic-summary-title">
        <p class="az-agentic__label">Scenario summary</p>
        <p class="az-agentic__summary-source" data-az-slot="scenario"></p>
        <h2 id="az-agentic-summary-title" class="az-agentic__summary-text" data-az-slot="summary"></h2>
        <div class="az-agentic__meta-row">
          <span class="az-agentic__meta-label">Interface legibility</span>
          <span data-az-slot="meta"></span>
        </div>
      </section>

      <section class="az-agentic__synthesis-card" aria-labelledby="az-agentic-synthesis-title">
        <p class="az-agentic__label">Dominant synthesis</p>
        <h2 id="az-agentic-synthesis-title" class="az-agentic__synthesis-text" data-az-slot="synthesis"></h2>
      </section>
    </div>

    <section class="az-agentic__lens-grid" data-az-slot="lenses" aria-label="Analysis lenses"></section>

    <section class="az-agentic__judgement" aria-labelledby="az-agentic-judgement-title">
      <p class="az-agentic__label">Final judgement</p>
      <h2 id="az-agentic-judgement-title" class="az-agentic__judgement-title" data-az-slot="judgement-title"></h2>
      <p class="az-agentic__judgement-note" data-az-slot="judgement-note"></p>
    </section>
  </section>

  <section class="az-agentic__empty" data-az-empty hidden>
    <p>Paste a scenario or load an example. The page returns one synthesis, five fixed lenses, and a final judgement.</p>
  </section>

  <section class="az-agentic__usage" data-az-usage hidden aria-live="polite"></section>

  <script type="application/json" data-az-agentic-config>{"defaultScenario":"An AI agent books and rearranges my travel automatically.","examples":["An AI agent books and rearranges my travel automatically.","An agent buys groceries for a dinner party.","An agent handles insurance claims on my behalf.","An agent configures and buys a laptop for me.","An agent manages supplier follow-ups for a small studio."],"endpointUrl":"https://alessandrozulberti.com/wp-json/az-agentic-ai-reading/v1/agentic-ai/analyse","fallbackAnalysis":{"contract_version":"agentic-ai-reading-v1","scenario":"An AI agent handles a loosely specified task on a person’s behalf.","summary":{"short":"A vague task delegated before standards and stop points are clear.","interface_legibility":"semantic","interface_note":"The system works from ordinary language before the task has clear fields or rules."},"synthesis":{"dominant":"The system acts before the person’s standards, exceptions, and stop points are clear enough to check."},"lenses":[{"title":"Compressed intent","change":"Short prompts flatten standards, exceptions, and trade-offs into a false sense of clarity.","agent":"The system fills gaps with defaults that may not fit this person or situation.","human":"The person still has to find the missing criteria after the system has acted.","risk":"High"},{"title":"Assumed human capability","change":"The system assumes the person can audit, interpret, and finish whatever remains unresolved.","agent":"The system assumes the person has the time, confidence, and knowledge to catch what it missed.","human":"The person carries the difference between formal completion and actual usability.","risk":"Medium"},{"title":"Recovery burden","change":"Whatever the system does not resolve comes back as repair work rather than disappearing.","agent":"The system makes the task look smaller, then leaves the unclear parts for later.","human":"The person absorbs correction, interpretation, and the social cost of mistakes.","risk":"Medium"},{"title":"Escalation boundary","change":"A strong system should know when to stop, ask, or return control.","agent":"The system keeps acting when it should ask a question or hand control back.","human":"The person needs an explicit moment where delegation becomes review again.","risk":"High"},{"title":"Tolerance for contextual loss","change":"Some categories can absorb approximation. Others break when nuance disappears.","agent":"The system assumes a rough fit is safe even when the situation depends on details.","human":"The person carries the fragility when good enough is contextually false.","risk":"Medium"}],"judgement":{"label":"Start with scoped assistance","note":"Use the system to frame, compare, and draft before the person lets it close the loop."}}}</script>
  <script>
    (() => {
      const currentScript = document.currentScript;
      const root = currentScript
        ? currentScript.closest("[data-az-agentic]")
        : document.querySelector("[data-az-agentic]");

      if (!root) {
        return;
      }

      const configNode = root.querySelector("[data-az-agentic-config]");

      if (!configNode) {
        return;
      }

      const config = JSON.parse(configNode.textContent);
      const results = root.querySelector("[data-az-results]");
      const emptyState = root.querySelector("[data-az-empty]");
      const form = root.querySelector("[data-az-form]");
      const textarea = root.querySelector("[data-az-input]");
      const analyseButton = root.querySelector("[data-az-analyse]");
      const resetButton = root.querySelector("[data-az-reset]");
      const status = root.querySelector("[data-az-status]");
      const exampleButtons = Array.from(root.querySelectorAll("[data-az-example]"));
      const slots = {
        scenario: root.querySelector("[data-az-slot='scenario']"),
        summary: root.querySelector("[data-az-slot='summary']"),
        meta: root.querySelector("[data-az-slot='meta']"),
        synthesis: root.querySelector("[data-az-slot='synthesis']"),
        lenses: root.querySelector("[data-az-slot='lenses']"),
        judgementTitle: root.querySelector("[data-az-slot='judgement-title']"),
        judgementNote: root.querySelector("[data-az-slot='judgement-note']"),
        usage: root.querySelector("[data-az-usage]"),
      };

      const clone = (value) => JSON.parse(JSON.stringify(value));

      const escapeHtml = (value) =>
        String(value).replace(/[&<>"']/g, (character) => {
          const entities = {
            "&": "&amp;",
            "<": "&lt;",
            ">": "&gt;",
            '"': "&quot;",
            "'": "&#39;",
          };

          return entities[character] || character;
        });

      const sentenceCase = (value) => value.charAt(0).toUpperCase() + value.slice(1);
      const invalidScenarioMessage = "Use one short scenario only. This tool reads one agentic situation at a time, not multiple examples, comparisons, or instruction prompts.";

      const validateSingleScenarioInput = (scenario) => {
        const text = scenario.trim();

        if (text === "") {
          return {
            valid: false,
            message: "Add one short scenario first.",
          };
        }

        if (Array.from(text).length > 600) {
          return {
            valid: false,
            message: invalidScenarioMessage,
          };
        }

        const nonEmptyLines = text
          .split(/\r\n|\r|\n/)
          .map((line) => line.trim())
          .filter(Boolean);

        if (nonEmptyLines.length > 2) {
          return {
            valid: false,
            message: invalidScenarioMessage,
          };
        }

        const listMarkerCount = nonEmptyLines.filter((line) =>
          /^\s*(?:[-*•]|(?:\d+|[a-z])[\.)])\s+\S/i.test(line)
        ).length;
        const newScenarioLineCount = nonEmptyLines.filter((line) =>
          /^\s*["“]?(?:(?:an?\s+)?ai\s+agent|an?\s+agent)\b/i.test(line)
        ).length;

        if (listMarkerCount > 0 || newScenarioLineCount > 1) {
          return {
            valid: false,
            message: invalidScenarioMessage,
          };
        }

        const invalidPatterns = [
          /\byou are about to receive\b/i,
          /\bfor each(?: one| scenario| of these)?\b/i,
          /\bscenarios\s*:/i,
          /\bscenario\s*(?:\d+|one|two|three)\b/i,
          /\b(?:compare|comparison|rank|score)\s+(?:these|the following|each|all)\b/i,
          /\b(?:analyse|analyze|inspect|evaluate|assess)\s+(?:the following|these|each|all)\b/i,
          /\b(?:your task is|act as|respond with|return json|output\s+(?:a|the)|below are|i will give you|use the following)\b/i,
        ];

        if (invalidPatterns.some((pattern) => pattern.test(text))) {
          return {
            valid: false,
            message: invalidScenarioMessage,
          };
        }

        const scenarioMatches = text.match(/(?:^|[\n\r]|(?:\.\s+)|(?:;\s+))\s*(?:(?:\d+|[a-z])[\.)]\s*)?["“]?(?:(?:an?\s+)?ai\s+agent|an?\s+agent)\b/gi) || [];

        if (scenarioMatches.length > 1) {
          return {
            valid: false,
            message: invalidScenarioMessage,
          };
        }

        return {
          valid: true,
          message: "",
        };
      };

      const buildFallbackAnalysis = (scenario) => {
        const response = clone(config.fallbackAnalysis || {});

        response.scenario = scenario.trim() || config.defaultScenario;

        return response;
      };

      const renderLensCards = (lenses) => {
        slots.lenses.innerHTML = lenses
          .map(
            (lens) => `
              <article class="az-agentic__lens-card">
                <div class="az-agentic__lens-head">
                  <h3 class="az-agentic__lens-title">${escapeHtml(lens.title)}</h3>
                  <span class="az-agentic__risk" data-risk="${escapeHtml(lens.risk)}">${escapeHtml(lens.risk)}</span>
                </div>
                <div class="az-agentic__lens-copy">
                  <div class="az-agentic__lens-block">
                    <p class="az-agentic__lens-label">What changes</p>
                    <p>${escapeHtml(lens.change)}</p>
                  </div>
                  <div class="az-agentic__lens-block">
                    <p class="az-agentic__lens-label">What the system assumes</p>
                    <p>${escapeHtml(lens.agent)}</p>
                  </div>
                  <div class="az-agentic__lens-block">
                    <p class="az-agentic__lens-label">Human recovery</p>
                    <p>${escapeHtml(lens.human)}</p>
                  </div>
                </div>
              </article>
            `
          )
          .join("");
      };

      const renderAnalysis = (analysis) => {
        slots.scenario.textContent = analysis.scenario;
        slots.summary.textContent = analysis.summary.short;
        slots.meta.innerHTML = `<strong>Likely system reading condition:</strong> ${escapeHtml(sentenceCase(analysis.summary.interface_legibility))}. ${escapeHtml(analysis.summary.interface_note)}`;
        slots.synthesis.textContent = analysis.synthesis.dominant;
        slots.judgementTitle.textContent = analysis.judgement.label;
        slots.judgementNote.textContent = analysis.judgement.note;
        renderLensCards(analysis.lenses);
        renderUsageSummary(analysis.usage_summary);
        results.hidden = false;
        emptyState.hidden = true;
      };

      const renderUsageSummary = (usageSummary) => {
        if (!slots.usage) {
          return;
        }

        const items = usageSummary && Array.isArray(usageSummary.items)
          ? usageSummary.items.filter((item) => item && item.label && item.value)
          : [];

        if (items.length === 0) {
          slots.usage.hidden = true;
          slots.usage.innerHTML = "";
          return;
        }

        const title = usageSummary.title || "Gemini usage estimate";
        const model = usageSummary.model ? ` <span>(${escapeHtml(usageSummary.model)})</span>` : "";
        const note = usageSummary.note
          ? `<p class="az-agentic__usage-note">${escapeHtml(usageSummary.note)}</p>`
          : "";

        slots.usage.innerHTML = `
          <p class="az-agentic__usage-title"><strong>${escapeHtml(title)}</strong>${model}</p>
          <ul class="az-agentic__usage-list">
            ${items
              .map((item) => `<li><strong>${escapeHtml(item.label)}:</strong> ${escapeHtml(item.value)}</li>`)
              .join("")}
          </ul>
          ${note}
        `;
        slots.usage.hidden = false;
      };

      const setExamples = (scenario) => {
        exampleButtons.forEach((button) => {
          button.classList.toggle("is-active", button.dataset.azExample === scenario);
        });
      };

      const setWorking = (isWorking) => {
        analyseButton.disabled = isWorking;
        resetButton.disabled = isWorking;
        analyseButton.textContent = isWorking ? "Analysing..." : "Analyse";
        status.textContent = isWorking ? "Reading the scenario through the fixed lenses." : "";
      };

      // Primary source: plugin-owned server endpoint.
      // If that contract is unavailable, fall back to the preloaded response shape
      // so the UI remains readable without changing the presentation layer.
      const fetchScenarioAnalysis = async (scenario) => {
        const endpointUrl = typeof config.endpointUrl === "string" ? config.endpointUrl : "";

        if (endpointUrl === "") {
          return buildFallbackAnalysis(scenario);
        }

        const response = await fetch(endpointUrl, {
          method: "POST",
          headers: {
            "Content-Type": "application/json",
            Accept: "application/json",
          },
          credentials: "same-origin",
          body: JSON.stringify({ scenario }),
        });

        if (!response.ok) {
          if (response.status === 400) {
            let payload = null;

            try {
              payload = await response.json();
            } catch (error) {
              payload = null;
            }

            const validationError = new Error(payload && payload.message ? payload.message : invalidScenarioMessage);
            validationError.isValidationError = true;
            throw validationError;
          }

          throw new Error(`Analysis endpoint returned ${response.status}.`);
        }

        const analysis = await response.json();

        if (!analysis || typeof analysis !== "object") {
          throw new Error("Analysis endpoint returned an invalid payload.");
        }

        return analysis;
      };

      const analyseScenario = async () => {
        const scenario = textarea.value.trim();

        if (scenario === "") {
          results.hidden = true;
          emptyState.hidden = false;
          renderUsageSummary(null);
          status.textContent = "Add one short scenario first.";
          return;
        }

        const validation = validateSingleScenarioInput(scenario);

        if (!validation.valid) {
          results.hidden = true;
          emptyState.hidden = true;
          renderUsageSummary(null);
          status.textContent = validation.message;
          return;
        }

        setWorking(true);
        setExamples(scenario);

        let finalStatus = "";

        try {
          const analysis = await fetchScenarioAnalysis(scenario);
          renderAnalysis(analysis);
        } catch (error) {
          if (error && error.isValidationError) {
            results.hidden = true;
            emptyState.hidden = true;
            renderUsageSummary(null);
            finalStatus = error.message || invalidScenarioMessage;
            return;
          }

          console.warn("Agentic AI analysis fallback in use.", error);
          renderAnalysis(buildFallbackAnalysis(scenario));
          finalStatus = "Analysis endpoint unavailable. Showing fallback reading.";
        } finally {
          setWorking(false);
          status.textContent = finalStatus;
        }
      };

      form.addEventListener("submit", (event) => {
        event.preventDefault();
        analyseScenario();
      });

      resetButton.addEventListener("click", () => {
        textarea.value = "";
        status.textContent = "";
        results.hidden = true;
        emptyState.hidden = false;
        renderUsageSummary(null);
        setExamples("");
        textarea.focus();
      });

      exampleButtons.forEach((button) => {
        button.addEventListener("click", () => {
          const scenario = button.dataset.azExample || "";
          textarea.value = scenario;
          status.textContent = "Example loaded. Analyse to inspect it.";
          setExamples(scenario);
          textarea.focus();
        });
      });

      emptyState.hidden = true;
      textarea.value = config.defaultScenario;
      setExamples(config.defaultScenario);
      analyseScenario();
    })();
  </script>
</article>
</section>

<p>The post <a href="https://alessandrozulberti.com/field-note/agentic-ai-reading-instrument-shortcode/">Agentic AI Reading Instrument</a> appeared first on <a href="https://alessandrozulberti.com">Alessandro Zulberti</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
