<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[UX Research in the Wild]]></title><description><![CDATA[Want reliable resources from reputable UX researchers? Join our community to access carefully curated articles, templates, tutorials, and tools proven to work in the real world.]]></description><link>https://trevorcalabro.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!pKsW!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fee87cc4f-5c9a-40f0-9c25-8a7df25bf2e1_1067x1067.png</url><title>UX Research in the Wild</title><link>https://trevorcalabro.substack.com</link></image><generator>Substack</generator><lastBuildDate>Sun, 02 Aug 2026 12:07:58 GMT</lastBuildDate><atom:link href="https://trevorcalabro.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Trevor Calabro]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[UXResearchInTheWild@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[UXResearchInTheWild@substack.com]]></itunes:email><itunes:name><![CDATA[Trevor Calabro]]></itunes:name></itunes:owner><itunes:author><![CDATA[Trevor Calabro]]></itunes:author><googleplay:owner><![CDATA[UXResearchInTheWild@substack.com]]></googleplay:owner><googleplay:email><![CDATA[UXResearchInTheWild@substack.com]]></googleplay:email><googleplay:author><![CDATA[Trevor Calabro]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Statistically Significant or Not?]]></title><description><![CDATA[Common Quant Misconceptions]]></description><link>https://trevorcalabro.substack.com/p/statistically-significant-or-not</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/statistically-significant-or-not</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 01 Aug 2026 17:46:54 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/46889629-615c-4566-a49b-49f1bf64abe2_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>I&#8217;ve noticed a common misconception in quant research that an entire study is considered either statistically significant or it is not. This article explains why statistical significance applies to individual findings within a study, not to the study as a whole. It details how effect size, variability, sample size, and confidence level work together to determine whether a particular finding reaches an orgs statistical threshold.</p><div><hr></div><p>A little while ago, I was talking with a UX researcher from another company who had been working in the field for about 8 or 9 years. He had a ton of experience with different research methods and described himself as knowledgeable about quant research. He even used the mixed-methods moniker to describe his work a few times during our conversation.</p><p>Specifically, we were discussing a quant study he had recently completed and whether the sample was large enough to support the findings.<em> (Sound familiar? Hahahaha)</em> Early in his career, he had been taught that an entire study was either statistically significant or it was not. That idea shaped the question he asked me during our conversation. Was the study statistically significant? His confusion was not caused by a lack of research experience or a broad unfamiliarity with quant methods. It came from treating statistical significance as a label for the entire study rather than something applied to individual findings within it.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xENv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xENv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xENv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xENv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xENv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xENv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg" width="231" height="234.91176470588235" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1141,&quot;width&quot;:1122,&quot;resizeWidth&quot;:231,&quot;bytes&quot;:357990,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/209390800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xENv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xENv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xENv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xENv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa38e0859-84ee-468e-84e2-55ac428fc6a0_1122x1141.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>I then explained that statistical significance usually applies to a specific result within a study. One comparison may meet the statistical threshold while another comparison from the same study may not. Both results can come from the same participants, the same survey, and the same overall sample.</p><p>The researcher then asked the question that revealed the real source of the confusion. If the sample size stayed the same, how could one result be statistically significant while another was not? To answer that, we needed to look beyond the number of participants. We needed to discuss the size of each result and the amount of variation in the data. That&#8217;s the catalyst for this week&#8217;s post.</p><h1>Statistical Significance</h1><p>The value of statistical significance is that it helps us judge whether an observed result is unlikely to be explained by normal sampling variation alone and may reflect a real pattern in the broader population. It usually applies to one specific comparison, difference, or relationship in the data, not to the entire study.</p><p>Suppose we compare 2 versions of an experience and observe a difference in task-completion rates. A statistical test helps us evaluate how unusual a difference that large would be if there were no real difference between the designs in the broader population. When the evidence meets the threshold selected for the research, we call that particular result statistically significant. That conclusion is narrower than many people realize. </p><div class="pullquote"><p>A survey with 10 important findings could contain 3 results that meet the statistical significance threshold and 7 that do not. Somehow, this fact was missed in the training of many UX research pros, and I say it is time we self-correct.</p></div><p>This distinction matters because statistical significance does not tell us how large or useful a finding is. In fact, the <a href="https://www.amstat.org/">American Statistical Association</a> has warned researchers against treating statistical significance as a measure of the size or importance of an effect. The observed difference, uncertainty, research design, and practical consequences all need to be considered together.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0D9r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0D9r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0D9r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0D9r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0D9r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0D9r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg" width="504" height="113.53846153846153" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:328,&quot;width&quot;:1456,&quot;resizeWidth&quot;:504,&quot;bytes&quot;:123610,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/209390800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0D9r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0D9r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0D9r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0D9r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0592cf-a6bc-40b5-bc01-f05c6db1859f_1475x332.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>In my last 5 orgs, I advocated for using a 90% confidence level for our quant research. Compared with a 95% confidence level, this accepts slightly more uncertainty and can reduce the sample size required to achieve the same level of precision, making it a practical tradeoff among confidence, recruiting effort, time, and cost. A 95% confidence level is the most commonly used convention across many research fields, including academia. Higher-stakes research may require different or stricter standards, but the appropriate threshold should reflect the decision being made and the relative consequences of false positives and false negatives. But for my orgs, at those points in time, 90% was a better, more practical default. I made sure everyone understood the tradeoffs and socialized the idea before any studies were run.</p><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; Disclaimer:</strong> Of course, I reserved the right to use, and often did use, a higher and more rigorous confidence level for specific high-impact studies.</p></div><p>Every org is different, and you&#8217;ll need to determine the appropriate threshold based on your specific situation. And keep in mind, using a 90% confidence standard does not make every finding in a study statistically significant by default. It simply establishes the threshold your org will use when evaluating each result.</p><div class="pullquote"><p>You need to work with your stakeholders upfront to agree on your org&#8217;s default confidence threshold. Establishing that standard places the burden of proof on anyone who later argues that a larger sample was required for a particular study.</p></div><p>An org-wide standard also makes research decisions more transparent and collaborative. It prevents researchers from keeping the reasoning behind sample-size decisions to themselves. If a stakeholder questions a study&#8217;s validity based on a common sample-size misconception, you can refer back to the standard everyone agreed to before the research began. As a best practice, the threshold should also be selected before analyzing the data because changing it after seeing the results would allow the desired outcome to influence the analytical standard.</p><h1>Effect Size</h1><p>Once we cleared up the idea that significance applies to individual findings, the rest of the conversation became <em>wayyyyyyy </em>easier. The concept that resolved the confusion was effect size.</p><p>Effect size describes how large an observed difference is. For example, a 2-percentage-point change in task completion is a much smaller effect than a 20-percentage-point change. Larger effects are generally easier to distinguish from normal variation, while smaller effects usually require more participants to evaluate confidently.</p><p>For example, consider a study comparing 2 versions of the same GUI. One result shows that average satisfaction increased from 5.1 to 5.2 on a 7-point scale. Another result shows that task completion increased from 55% to 85%.</p><p>Both findings came from the same study and the same group of participants. The difference in satisfaction is very small, while the difference in task completion is much larger. The completion result may meet the statistical threshold even when the satisfaction result does not. Is this all making more sense now? </p><p>The exact answer would also depend on how consistent the responses were and which statistical test was appropriate.</p><p><strong>4 factors work together when we evaluate a quant result:</strong></p><ul><li><p><strong>Sample size:</strong> How much information the study contains</p></li><li><p><strong>Effect size:</strong> How large the observed difference is</p></li><li><p><strong>Variability:</strong> How consistent or spread out the results are</p></li><li><p><strong>Confidence level:</strong> How much uncertainty the study is willing to accept</p></li></ul><p>Sample size matters, but it cannot answer the question by itself. Two findings from the same sample can produce different statistical conclusions because the effects and the amount of variation may be different.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mD9l!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mD9l!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mD9l!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mD9l!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mD9l!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mD9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg" width="370" height="256.8024861878453" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1005,&quot;width&quot;:1448,&quot;resizeWidth&quot;:370,&quot;bytes&quot;:655424,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/209390800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mD9l!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mD9l!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mD9l!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mD9l!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47d3da8d-78b4-4642-90c9-66ba2c10bddc_1448x1005.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is where the common recommendation of 30 participants often causes confusion. MeasuringU addressed this issue masterfully in its article, <a href="https://measuringu.com/do-statistics-really-require-30-participants/">&#8220;Do Statistics Really Require 30 Participants?&#8221;</a> That article explains that 30 is not a universal minimum for conducting statistical analysis. Statistical methods can be used with smaller samples, although small samples usually provide less precision and make smaller effects harder to detect.</p><div class="pullquote"><p>A sample of around 30-32 respondents can sometimes be enough for a quant UX study, particularly when the org uses a 90% confidence standard and the observed effect is large. That same sample may provide strong evidence for one result while leaving several smaller differences inconclusive.</p></div><p>And remember, a result that does not meet the statistical threshold can <em><strong>still </strong></em>provide useful information. We all know this to be true, but the term statistical significance often confuses people and muddies the waters, making the problem even worse. It may suggest a possible direction, support evidence from another research method, or show that a larger sample would be needed before making a confident claim.</p><div class="pullquote"><p>The key is to report each result accurately. We should explain what we observed, how large the effect was, whether it met the statistical threshold, and whether the difference is large enough to influence a decision.</p></div><p>That was my answer to my researcher friend&#8217;s original question. The sample size did not make the entire study statistically significant or insignificant. It gave us a certain amount of information, and each result had to be evaluated based on the size of the effect, the variation in the data, and the confidence standard we had selected.</p><p></p><h1>Different Methods, Different Samples</h1><p>The conversation also reminded me why sample-size guidance becomes confusing so quickly in UX research. We use the term UX research to describe methods that answer very different questions, so the same sample-size logic cannot be applied to all of them.</p><p><a href="https://www.linkedin.com/in/crohrer/">Christian Rohrer</a>&#8217;s framework organizes UX research methods in a 2 &#215; 2 matrix, which I absolutely love. One dimension separates what people say from what people do. The other separates qual understanding from quant measurement.</p><p><strong>I&#8217;m sure you&#8217;ve seen this before in Christian&#8217;s Nielsen Norman Group article, <a href="https://www.nngroup.com/articles/which-ux-research-methods/">&#8221;When to Use Which User-Experience Research Methods&#8221;</a>:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ik0E!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ik0E!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png 424w, https://substackcdn.com/image/fetch/$s_!ik0E!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png 848w, https://substackcdn.com/image/fetch/$s_!ik0E!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!ik0E!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ik0E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png" width="1456" height="965" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:965,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:127713,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/209390800?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ik0E!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png 424w, https://substackcdn.com/image/fetch/$s_!ik0E!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png 848w, https://substackcdn.com/image/fetch/$s_!ik0E!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png 1272w, https://substackcdn.com/image/fetch/$s_!ik0E!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb12a7b00-453c-4304-ad12-78e4904d9282_1902x1260.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Question types across the research-methods landscape. &#169; 2022 Christian Rohrer. Source: <a href="https://www.nngroup.com/articles/which-ux-research-methods/">&#8220;When to Use Which User-Experience Research Methods,&#8221;</a> Nielsen Norman Group.</figcaption></figure></div><h2>Qual Attitudinal</h2><p>For qual attitudinal research, I usually think about <strong>data saturation</strong> rather than statistical significance. Data saturation occurs when new interviews mostly repeat themes we have already heard and stop changing our understanding in a meaningful way.</p><p>The results from this type of research are often directional. They can give us enough evidence to make a reasonable decision or identify what should be investigated next, but they do not tell us exactly what percentage of the full population holds each opinion.</p><h2>Qual Behavioral </h2><p>Qual behavioral research follows different logic. For example, in a moderated usability test, the purpose is often to find interface problems that the team can fix. A large sample is usually unnecessary when that is the research objective.</p><p>That means it doesn&#8217;t matter if only 1 of 8 participants cannot find the button needed to complete an important task. The session does not tell us how frequently the full user population will encounter a usability problem, but that&#8217;s because frequency and severity are separate considerations. When you find a usability problem in a qual behavioral research study, you fix it no matter how many participants encountered that problem. </p><h2>Quant Attitudinal and Behavioral </h2><p>The 2 quant quadrants are where statistical significance becomes more relevant. Even within these quadrants, the type of question affects what we can measure, compare, and conclude.</p><p>Remember the earlier example comparing two versions of the same GUI. Satisfaction increased from 5.1 to 5.2, while task completion increased from 55% to 85%. The same participants produced both results, but the much larger difference in task completion was more likely to meet the statistical threshold.</p><p><strong>This shows why different types of quant data need to be interpreted differently:</strong></p><ul><li><p><strong>Rating scales</strong> let us compare how people evaluated an experience. We need to consider both the difference between the ratings and how much individual responses varied.</p></li><li><p><strong>Rankings</strong> show the order in which people preferred several options. They do not tell us how much more the first-ranked option was preferred over the second.</p></li><li><p><strong>Behavioral measures</strong> let us compare results such as task completion, errors, time on task, and conversion. Each measure must be analyzed separately because the size and consistency of the differences may vary.</p></li><li><p><strong>Open-ended questions</strong> still produce qual data, even when they appear in a large survey. We can categorize and count the responses, but statistical significance does not apply directly to the original written comments.</p></li></ul><p>This brings us back to the main point from earlier.</p><div class="pullquote"><p>A single quant study can produce strong statistical evidence for one comparison and much weaker evidence for another. That is why an entire survey, benchmark, or experiment should not be given the overarching label of statistically significant.</p></div><h1>How I Report Mixed Results</h1><p>Once we accept that significance applies to individual results, reporting a quant study becomes more specific. Instead of announcing that the study was significant, I describe what happened for each important measure.</p><p><strong>For every major result, I try to report four things:</strong></p><ol><li><p><strong>What we observed:</strong> The scores, percentages, or differences found in the sample.</p></li><li><p><strong>How large the effect was:</strong> The actual size of the difference between the results.</p></li><li><p><strong>How confident we are:</strong> Whether the result met the statistical threshold and how much uncertainty remains.</p></li><li><p><strong>Why the result matters:</strong> Whether the difference is large enough to affect a user or business decision.</p></li></ol><p>A report might explain that participants completed a task more often with Design B and that the difference met our 90% confidence threshold. The same study might show a small improvement in satisfaction that did not meet the threshold.</p><p>Those findings should be reported separately. The task-completion result may provide strong enough evidence to influence the decision, while the satisfaction result may remain directional or require a larger sample. For example, a result that does not reach statistical significance still contains valuable information. The observed difference may suggest a direction, support findings from interviews or usability testing, or help the team estimate the sample needed for another study.</p><div class="pullquote"><p>The language used to report that result matters. Saying that there was no difference makes a stronger claim than the data may support. A more accurate explanation would say that we saw a difference, but we did not have enough data to know whether it reflected a real pattern or just normal real world variation in the results.</p></div><p>Statistical thresholds should support the interpretation rather than replace it. Again, the <a href="https://www.amstat.org/">American Statistical Association</a> advises against making scientific, business, or policy decisions based only on whether a result crosses a statistical threshold. The study design, effect size, assumptions, uncertainty, and consequences of the decision all contribute to the conclusion.</p><h1>Conclusion</h1><p>By the end of our conversation, the researcher I was talking to no longer needed one answer about whether the entire study was statistically significant or not. We could now look at each important finding and discuss the effect size of the result, the amount of uncertainty, and whether the evidence was strong enough to support a decision.</p><p>The bottom line is that a study with only 32 respondents may produce statistically significant findings when the effects are large, while smaller effects within the same study may remain statistically unresolved and be treated as directional.</p><p><strong>If you take away only one thing from this article, it should be this:</strong></p><div class="pullquote"><p>Increasing the sample size can improve precision and make smaller effects easier to detect, but no participant count automatically makes every finding statistically significant.</p></div><p>The most important analytical skill in this situation was knowing that statistical significance describes evidence for a particular result. Effect size helps us understand how large that result is, and our research context helps us decide whether it matters.</p><p>I hope this help clarify things. As always, thanks for reading.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Microsoft Forms Did Me Dirty]]></title><description><![CDATA[Validating Third-Party Tool&#8217;s Data Analysis]]></description><link>https://trevorcalabro.substack.com/p/microsoft-forms-did-me-dirty</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/microsoft-forms-did-me-dirty</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 25 Jul 2026 17:25:21 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/254c7f30-9e87-4fdb-b7f9-2e9a24f1ad55_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p><strong>Summary: </strong>After MS Forms produced a questionable winner from a 32-person force-ranking exercise, I exported the raw data and compared the default output with Borda scoring, pairwise wins, and the Schulze method. The analysis showed that different methods can produce different winners, which is why UX researchers need enough statistical knowledge to recognize when a tool&#8217;s default calculation does not match the question they are trying to answer.</p><div><hr></div><p>A couple of weeks ago, I used MS Forms to run a stack-ranking exercise at work. 32 participants ranked 8 items from most important to least important. When I opened the results, Forms had already calculated the rankings, as it should, and identified a winner.</p><p>The result did not look wrong to the untrained eye, but within minutes of looking at the raw data, I knew something was off. For example, the item Forms ranked 1st appeared consistently near the top of everyone&#8217;s lists, but another item received<strong> </strong><em><strong>far more</strong></em> first-place rankings and performed better when compared directly with most of the other options. So I knew what I needed to do. I needed to determine the most appropriate way to reanalyze the data because Forms&#8217; default analysis sucked for this scenario. Thanks Microsoft.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!WNqR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!WNqR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WNqR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WNqR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WNqR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!WNqR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg" width="357" height="170.12463343108504" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:650,&quot;width&quot;:1364,&quot;resizeWidth&quot;:357,&quot;bytes&quot;:124045,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/208464289?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!WNqR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg 424w, https://substackcdn.com/image/fetch/$s_!WNqR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg 848w, https://substackcdn.com/image/fetch/$s_!WNqR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!WNqR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F96375c5f-eea6-445a-904a-4249f62e23ac_1364x650.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h1>Study Design Constraints</h1><p>Let&#8217;s back up a little. Stack ranking was the best approach here because the stakeholders needed to understand relative preference across a short list of comparable items. Think of a study asking users to prioritize 8 common tasks they might complete through a self-service portal:</p><ol><li><p>Check the status of a request</p></li><li><p>Update account information</p></li><li><p>Download a document</p></li><li><p>Make a payment</p></li><li><p>Contact support</p></li><li><p>Review recent activity</p></li><li><p>Manage notification settings</p></li><li><p>Add or remove an authorized user</p></li></ol><p>These are concise, distinct tasks that participants can reasonably compare. Ranking them forces people to make tradeoffs that a standard rating scale might not reveal. Someone could reasonably rate all 8 tasks as important, but a forced ranking shows which ones they would prioritize when everything cannot be treated equally.</p><p>Another factor was the deadline was <em><strong>super </strong></em>tight, aren&#8217;t they all. <em>Hahahaha.</em> Based on our previous recruiting and survey conversion rates, I expected between 30 and 50 completed responses within the timeline we had to work in. I would have preferred a larger sample because it would have provided greater precision and made smaller differences between items easier to interpret. A larger sample would also have reduced the likelihood that a few individual responses could change the final order.</p><p>The 32 responses were still very helpful, relevant and statistically valid within the guardrails established for the study. I presented the findings as directional evidence, avoided claims about small differences and did not use the results for subgroup comparisons. And here&#8217;s the important takeaway, I explained those limits before launching the survey. The stakeholders agreed upfront that the study would still provide enough evidence to guide the immediate decision.</p><p>This upfront conversation is a very mature research step that many UX Researchers flat out skip. Getting agreement on the strength of the evidence before collecting it reduces arguments about the method during the final readout. It also gives the research team credibility because the standard for interpreting the results is established before anyone knows which item will win.</p><h1>The Real World Requires Judgment</h1><p>MS Forms produced an aggregate ranking automatically. Based on the output, it appeared to be applying a basic positional weighting method. Items received more value when participants placed them near the top and progressively less value in each lower position.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZJwK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZJwK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png 424w, https://substackcdn.com/image/fetch/$s_!ZJwK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png 848w, https://substackcdn.com/image/fetch/$s_!ZJwK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJwK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZJwK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png" width="321" height="302.403743315508" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1057,&quot;width&quot;:1122,&quot;resizeWidth&quot;:321,&quot;bytes&quot;:998804,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/208464289?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ZJwK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png 424w, https://substackcdn.com/image/fetch/$s_!ZJwK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png 848w, https://substackcdn.com/image/fetch/$s_!ZJwK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png 1272w, https://substackcdn.com/image/fetch/$s_!ZJwK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F553e35b1-32cd-403e-bd5b-fb56f78577f1_1122x1057.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I could not confirm the exact formula because Forms did not explain the calculation and I don&#8217;t have the patience to go look it up. The charts Forms pooped out weren&#8217;t necessarily wrong but they didn't pass the sniff test. This type of scoring can work well when you want to find the item that most people ranked near the top. But that does not always mean it was the item people preferred most strongly or chose over the other options most often. This kind of nuanced and expert judgement is something I see missed by most UXers in the field today.</p><div class="pullquote"><p>UX researchers do not need to be as statistically fluent as data analysts. But, we do need enough basic statistical understanding to recognize when a default analysis may not fit the question, the sample or the decision being made.</p></div><p>Third-party research platforms have to select a default calculation that can work across many use cases. Even a product from a company such as Microsoft cannot determine the most appropriate interpretation for every study.</p><p>This type of discernment will become more important as automated and AI-generated analysis becomes common. The output may be polished and mathematically correct while still answering a different question from the one the research was designed to address.</p><h1>Testing Alternatives</h1><p>So what did I do about it? First, I downloaded the individual responses into Excel and kept one row for each participant. I converted each answer into a numerical ranking from one through eight and confirmed that every respondent had used each rank once. I then tested two alternative approaches.</p><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; Disclaimer: </strong>I did not immediately know how to do all of this by accident. I spent almost 9 years working for Minitab, one of the most sophisticated desktop statistical analysis products available. That experience helped me recognize that the default calculation might not fit this particular dataset and research question.</p><p>For those who are not confident they would have spotted the issue, there is no need to worry. I tested the same question with 3 different large language models, and all three gave me useful responses. This is exactly the kind of task LLMs can be great at: helping you identify possible analysis methods, understand what each one measures and determine when a tool&#8217;s default output deserves a closer look.</p><p>Here is the prompt I used:</p><p><code>I conducted a forced-ranking survey in which 32 participants ranked 8 items from most important to least important. The survey platform automatically produced an overall ranking, but it does not explain the exact calculation it used.</code></p><p><code>After reviewing the individual responses, I noticed that the item ranked first by the platform was consistently placed near the top, while another item received substantially more first-place rankings and appeared to beat most of the other items in direct comparisons.</code></p><p><code>Help me determine the most appropriate way to analyze this dataset. Explain, in straightforward language.</code></p></div><p>The first method I tried was a combined Borda scoring with pairwise wins. Borda assigns points according to where an item appears in each participant&#8217;s ranking. Pairwise analysis compares every item directly with each of the other seven items.</p><p>For example, the analysis would compare &#8220;check the status of a request&#8221; with &#8220;contact support&#8221; and count how many participants placed each task higher. The same comparison would then be completed for every possible pair.</p><p>I used the number of pairwise wins as the primary measure and the Borda score as the tie-breaker. This approach emphasized direct preference while still recognizing items that participants placed consistently near the top.</p><p>The second approach was the Schulze method. Schulze also begins with pairwise comparisons, but it considers the strength of the paths connecting the items. This allows it to resolve situations where preferences form cycles and no item defeats every alternative cleanly.</p><p>Schulze is a strong method when the analysis needs to produce one formal winner from complicated pairwise results. Its practical weakness is explainability. The calculation is more difficult for stakeholders to review, understand and reproduce.</p><h1>Different Methods, Different Stories</h1><p>The following example uses fictional tasks and a reconstructed response pattern. It illustrates the analytical issue without using any company information or reproducing the actual study content.</p><p><strong>Something like this: </strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/VngrR/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f605b8a6-cffb-44c4-bb9e-1a90782277f3_1220x530.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea967f45-2fe4-4beb-a80a-08eaceb85a5c_1220x530.png&quot;,&quot;height&quot;:260,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/VngrR/1/" width="730" height="260" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><h2><strong>Method #1: MS Forms</strong></h2><p>The default weighted method, the MS Form&#8217;s method, selected &#8220;check request status&#8221; because participants consistently placed it near the top. It had broad support and relatively few low rankings.</p><h2><strong>Method #2: </strong>Schulze</h2><p>Schulze selected &#8220;contact support.&#8221; It received the most 1st votes and performed strongly in the direct comparisons. The method looked at how often participants ranked &#8220;contact support&#8221; above each of the other 7 tasks, then considered the strength of those head-to-head wins across the full set of comparisons. That gave it the strongest overall path through the rankings, even though it did not have the highest positional score.</p><h2><strong>Method #3: </strong>Borda and Pairwise Combo</h2><p>The pairwise-plus-Borda approach produced a tie between &#8220;download a document&#8221; and &#8220;contact support.&#8221; Each defeated six of the other seven tasks. &#8220;Download a document&#8221; then won the Borda tie-break because participants placed it more consistently across the complete rankings.</p><p>A similar problem appears in the <a href="https://www.forcerank.it/blog/counting-votes-is-hard?utm_source=chatgpt.com">ForceRank.it article &#8220;Counting Votes Is Hard.&#8221;</a> Four people ranked 9 possible topics for a technical presentation. Three people placed Item 1 first, but ForceRank&#8217;s original point-based scoring method selected Item 2. Item 2 performed consistently well across all four rankings, while Item 1 was the majority favorite but was placed last by one participant. ForceRank eventually replaced its original method with the Schulze method because the original calculation failed the Majority Criterion. Schulze evaluates the items through pairwise comparisons and produces a winner that better reflects the group&#8217;s overall preferences.</p><div class="pullquote"><p>So in short, the original calculation had not failed. It just had used a different definition of winning in the same way MS Forms did.</p></div><h1>Conclusion</h1><p>For this study, I chose pairwise wins with Borda as the tie-breaker. That combo method was understandable, reproducible and appropriate for a directional sample of 32 respondents. It also made it possible to explain why the methods produced different results without presenting one calculation as universally correct.</p><p>I compared every item directly with the other seven and counted how many comparisons it won. When two items had the same number of wins, I used the Borda score as the tie-breaker. I also reported first-place votes and the full rank distributions so stakeholders could see the preference pattern behind the final order.</p><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; Disclaimer: </strong>I would still use Schulze when the pairwise relationships contained complex cycles and the study required one formal winner. It solves that specific mathematical problem well.</p></div><p>MS Forms collected the responses and provided a reasonable default summary. My responsibility was to determine whether that summary matched the stakeholder&#8217;s question.</p><p>The most important analytical skill in this project was knowing when the default answer needed a second look. The tools will keep getting better, but our responsibility stays the same. We need to understand the method well enough to know when the default output does not fit the research question. I hope sharing this story was helpful. Thanks for reading.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[5 Things UXers Need to Stop Doing]]></title><description><![CDATA[Bad Practices We Should Stop Accepting]]></description><link>https://trevorcalabro.substack.com/p/5-things-uxers-need-to-stop-doing</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/5-things-uxers-need-to-stop-doing</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 18 Jul 2026 14:25:39 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/92424d9f-29f1-4c77-875d-b61ae401a2ea_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary:</strong> These 5 articles cover UX practices I regularly see creating problems in the real world. I pulled them together because I think that if we, as a discipline, stopped doing these 5 things, it would make a positive impact moving forward.</p><div><hr></div><p>Over the past couple years, I have written many articles about UX ideas that sound reasonable in theory but get used <em><strong>very</strong></em><strong> </strong>differently in the real world. I realized these 5 articles fit together because they all address the same underlying issue. Many UXers take something valuable, strip away its original intent, and use their own bastardized version to defend bad UX work.</p><p>This week&#8217;s post is a reference list for 5 articles that push back on that pattern. Each one attempts to bring the conversation back to the user, where it belongs. I hope you enjoy it and consider sharing the link with others.</p><h1>5 Things UXers Need to Stop Doing</h1><h2>1. <a href="https://trevorcalabro.substack.com/p/stop-weaponizing-jakobs-law">Stop Weaponizing Jakob&#8217;s Law</a></h2><p>This article explains what Jakob&#8217;s Law actually means and how it gets twisted during real-world UX discussions. UXers often find one product that uses a pattern they already like, or point to something Google does, and claim that users must already understand it. </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y6_r!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y6_r!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Y6_r!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Y6_r!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Y6_r!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y6_r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg" width="321" height="162.92513736263737" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:739,&quot;width&quot;:1456,&quot;resizeWidth&quot;:321,&quot;bytes&quot;:529618,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/207550883?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y6_r!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Y6_r!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Y6_r!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Y6_r!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd1eb75ec-b9a8-4684-83f8-85e9e3ad6d8a_2560x1300.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>This post offers a more rigorous exercise for identifying patterns across comparable products so teams can distinguish a genuinely familiar convention from a novel design idea.</p><h2>2. <a href="https://trevorcalabro.substack.com/p/stop-weaponizing-conversational-ux">Stop Weaponizing Conversational UX</a></h2><p>This article pushes back on the idea that Conversational UX simply means making interface copy sound casual or friendly. I hear this misinterpretation more and more every day in the context of chatbots. Instead, Conversational UX is about how interactions unfold in the real world. You know, rather than giving UX charlatans an excuse to make deals with the marketing dark-pattern devil.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kr_i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kr_i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kr_i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kr_i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kr_i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kr_i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg" width="323" height="278.73703703703706" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1165,&quot;width&quot;:1350,&quot;resizeWidth&quot;:323,&quot;bytes&quot;:574754,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/207550883?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kr_i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kr_i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kr_i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kr_i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3e7e15f8-319d-4494-8fa3-e94ec4087d1c_1350x1165.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This article includes a practical content-testing exercise that helps UXers identify when a GUI is supporting the user&#8217;s task and when supposedly conversational language is being used to interrupt, manipulate, shame, or push an upsell. </p><h2>3. <a href="https://trevorcalabro.substack.com/p/stop-throwing-away-time-on-task-data">Stop Throwing Away Time-on-Task Data</a></h2><p>This article is about using time-on-task data responsibly in small-sample usability studies.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UGIl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UGIl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UGIl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UGIl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UGIl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UGIl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg" width="321" height="251.77335164835165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1142,&quot;width&quot;:1456,&quot;resizeWidth&quot;:321,&quot;bytes&quot;:280372,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/207550883?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UGIl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UGIl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UGIl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UGIl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F661d08aa-d4ab-452c-9563-5dcd730dff7f_1782x1398.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>It explains why the median is usually a better starting point than the average, especially when one participant experiences a severe delay that skews the data. Instead of throwing out the extreme case or allowing it to redefine the typical experience, the article recommends reporting the median, range, individual cases, and observed behavior together so teams understand both the general experience and the specific failure paths.</p><h2>4. <a href="https://trevorcalabro.substack.com/p/weaponized-institutional-knowledge">Weaponized Institutional Knowledge in UX</a></h2><p>This article looks at what happens when institutional knowledge stops being useful context and starts being used to shut down UX work.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XKNF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XKNF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XKNF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XKNF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XKNF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XKNF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg" width="319" height="325.0920138888889" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1174,&quot;width&quot;:1152,&quot;resizeWidth&quot;:319,&quot;bytes&quot;:331258,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/207550883?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XKNF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XKNF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XKNF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XKNF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0407b575-c725-4d57-a62b-30d75bf1a6ec_1152x1174.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Claims like &#8220;our users are different&#8221; frequently become conversation enders that allow teams to ignore established best practices without providing any evidence for the exception. The post argues that best practices should remain the starting point and that the burden of proof should fall on the person making the counterclaim, not on the researcher being asked to disprove an unsupported belief.</p><h2>5. <a href="https://trevorcalabro.substack.com/p/why-your-style-guide-sucks">Why Your UI Style Guide Sucks</a></h2><p>This article is about the difference between documenting how a UI control looks and defining how it <em><strong>actually </strong></em>works. Using button design as an example, it walks through the interaction states and attributes that are routinely missing from modern style guides, leaving developers to make important UX decisions on their own.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DwpJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DwpJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DwpJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DwpJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DwpJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DwpJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg" width="385" height="273.8258426966292" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:633,&quot;width&quot;:890,&quot;resizeWidth&quot;:385,&quot;bytes&quot;:172542,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/207550883?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DwpJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg 424w, https://substackcdn.com/image/fetch/$s_!DwpJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg 848w, https://substackcdn.com/image/fetch/$s_!DwpJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!DwpJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34cd62b4-b9a3-42f2-b4f3-2766818d3f7d_890x633.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The broader point is that UXers need to understand and document the functional behavior behind the controls they use, not just their colors, spacing, and visual appearance.</p><h1>Conclusion</h1><p>I think these articles work well as a set because they all challenge practices that have become too easy for UX teams to accept.</p><div class="pullquote"><p>UXers should be willing to push back before weak practices become part of how an organization works.</p></div><p>These posts are not about making UX more complicated or demanding research for every minor decision. They are about maintaining a reasonable standard and refusing to let convenient shortcuts replace evidence and a clear understanding of user behavior.</p><p>Thanks for reading. I hope having these articles in one place makes them easier to use and share. I would love to hear about the bad UX practices you regularly encounter and believe our profession should stop accepting.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OgtW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OgtW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OgtW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OgtW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OgtW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OgtW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg" width="305" height="234.4059065934066" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1119,&quot;width&quot;:1456,&quot;resizeWidth&quot;:305,&quot;bytes&quot;:162395,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/207550883?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OgtW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OgtW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OgtW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OgtW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fddccda5d-9028-4394-8af6-49368e376b49_1713x1316.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Top 10 UX Misunderstandings]]></title><description><![CDATA[What I See in the Real World]]></description><link>https://trevorcalabro.substack.com/p/top-10-ux-misunderstandings</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/top-10-ux-misunderstandings</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Fri, 10 Jul 2026 13:15:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/bd6ac643-19b7-46fd-a60d-242d0dde1982_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>These are the 10 common UX misunderstandings I see most often in the real world. In this article, I&#8217;ll walk you through why each one causes problems in actual products and use research-based support from NN/g, Baymard Institute, and MeasuringU to back up the counterclaims.</p><div><hr></div><p>I don&#8217;t know about you, but I <em>still </em>see a surprising amount of UX debates around things we figured out decades ago. Do any of these sound familiar?</p><ul><li><p>&#8220;Fewer clicks are always better.&#8221;</p></li><li><p>&#8220;Text is clutter and makes the design look less clean.&#8221;</p></li><li><p>&#8220;These icons don&#8217;t need labels.&#8221;</p></li><li><p>&#8220;We don&#8217;t need to do any IA testing; we&#8217;ll just add search.&#8221;</p></li><li><p>&#8220;The AI chatbot will handle all of this.&#8221;</p></li><li><p>&#8220;Let&#8217;s not run research unless we can get a bigger sample.&#8221;</p></li></ul><p>None of these statements are automatically incorrect by default, but each is certainly misguided. They are based on common misinterpretations and misrepresentations of replicated, well-established HCI behavioral research. And what&#8217;s worse is that they <em>sound</em> just enough like the truth to sneak by a design review or stakeholder conversation without sounding obviously wrong. That is what makes them dangerous.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NPF6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NPF6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NPF6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NPF6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NPF6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NPF6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg" width="334" height="312.1110254433308" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1212,&quot;width&quot;:1297,&quot;resizeWidth&quot;:334,&quot;bytes&quot;:525025,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/206314018?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NPF6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NPF6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NPF6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NPF6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F81a0b4ca-bb9d-43c7-932e-c53cf8ab7548_1297x1212.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Common misunderstandings can be extra dangerous in the real world.</figcaption></figure></div><p>Over the last 20+ years, I&#8217;ve seen these 10 things come up time and time again. I wanted to write them out here to inform those of you who may hold these misunderstandings. I also wanted to help those of you who know the facts but need support identifying them in the real world and combating them before they cause trouble in your own day-to-day work.</p><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; Disclaimer: </strong>The ideas in this article are not just my personal UX pet peeves, although, to be fair, they are also absolutely my personal UX pet peeves. hahaha. They are grounded in research and guidance from NN/g, MeasuringU, and the Baymard Institute. </p></div><p>So, drumroll please&#8230; with that in mind, here are the 10 most common UX misunderstandings I see in the real world, in no particular order.</p><h1>1. Believing search or an AI chatbot can compensate for bad navigation</h1><p>The common misunderstanding for this is that users will &#8220;just search,&#8221; or now, &#8220;just ask the chatbot.&#8221; That sounds modern and user-centered, but it often becomes an excuse to avoid the harder work of information architecture.</p><p><strong>These 3 sources together help explain what we already know about this:</strong></p><ol><li><p>MeasuringU&#8217;s article, <a href="https://measuringu.com/search-browse/">Search vs. Browse on Websites</a>, frames search as something that supports navigation, not something that replaces it. Their point is practical: even with good navigation and a user-refined taxonomy, some items will still be difficult to find, and some users will still prefer to search. The stronger pattern is not search instead of navigation, but good search supporting good navigation.</p></li><li><p>Baymard Institute's article titled <a href="https://baymard.com/blog/ecommerce-search-query-types">Ecommerce Search UX 2026</a> makes the same broader point from another direction. Across their ecommerce testing, roughly half of participants turned to search as their preferred product-finding strategy, while the other half used the main navigation. That means product finding has to support both behaviors well.</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/site-ai-chatbot/">What Is Your Site&#8217;s AI Chatbot for? Users Can&#8217;t Tell</a>, adds the newer version of this mistake. Users often do not know what site-specific AI chatbots are for, and chatbots have to prove they solve problems that existing site features do not already solve.</p></li></ol><p>For example, think about a financial platform that buries critical wire transfer limit information under a vague settings menu and assumes users will search with the right query on the first try. (<strong>Side note: </strong>we also know that users have trouble writing good queries, but don&#8217;t tell your chief AI officer. hahaha) Or think about a healthcare admin tool that hides provider eligibility logic in help documentation and assumes the chatbot will answer in a way that maps to the user&#8217;s specific plan.</p><div class="pullquote"><p>The research-based recommendation for this is to treat search and chatbots as additional access paths, not primary navigation methods.</p></div><p>Traditional navigation bars should be built to match the user&#8217;s mental models and use terms they are familiar with at a glance. Search should support known-item finding, recovery, and cross-category lookup. AI should have a clear job, clear boundaries, and obvious value beyond what normal navigation and search already provide.</p><h1>2. Optimizing for click count instead of information scent</h1><p>This misunderstanding claims that fewer clicks automatically mean better UX. This is the old three-click rule popularized by charlatan PMs who are relying only on a few A/B test studies run in Silicon Valley a decade ago. During the prime &#8220;move fast and break things&#8221; era, no less. It keeps coming back because it is easy to understand, easy to measure, and easy to say in a meeting, but it is built on flimsy data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_A1V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_A1V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_A1V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_A1V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_A1V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_A1V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg" width="338" height="259.76935483870966" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/eef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:953,&quot;width&quot;:1240,&quot;resizeWidth&quot;:338,&quot;bytes&quot;:131693,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/206314018?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_A1V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_A1V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_A1V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_A1V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Feef27291-4a07-4068-a4f7-203315a1c307_1240x953.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Stop chasing click count.</figcaption></figure></div><p><strong>Check out these sources for a better explanation:</strong></p><ol><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/3-click-rule/">The 3-Click Rule for Navigation Is False</a>, directly rejects the idea that every important piece of information must be reachable within three clicks. Their point is not that click count never matters. It is that click count is a weak proxy for usability. A longer path with clear labels and a strong sense of direction can work better than a shorter path full of vague choices.</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/information-scent/">Information Scent: How Users Decide Where to Go Next</a>, explains the deeper principle. Users decide where to go based on the cues they get from link labels, surrounding context, and their prior experience. The real question is not &#8220;How many clicks does this take?&#8221; The better question is &#8220;Can users confidently predict where this path will lead?&#8221;</p></li><li><p>MeasuringU&#8217;s article, <a href="https://measuringu.com/tree-testing-ia/">Using Tree-Testing To Test Information Architecture</a>, gives teams a practical way to evaluate this. Tree testing helps measure whether users can find items in a navigation structure, which is much more useful than simply counting the number of steps in a proposed flow.</p></li></ol><p>This shows up when a product team combines several workflow steps into one crazy dense screen because the task becomes &#8220;shorter.&#8221; Think the typical bad dashboards we&#8217;ve all been seeing lately. hahahaha. A design like that may collapse several task flows into a single overloaded menu because it technically reduces navigation depth.</p><div class="pullquote"><p>For example, an analytics dashboard may collapse filtering, segmentation, export, chart configuration, and date ranges into one overloaded top bar because it keeps the data &#8220;above the fold.&#8221; But for what? </p></div><p>The research-based recommendation here is to optimize for task-path clarity, not shortness. Clicks still matter, but they are not the main unit of usability. A click with strong information scent is cheap. A click into uncertainty is expensive. Think about how much better it is to file your taxes one field at a time via TurboTax compared to one long, scrolling tax web form. Wayyyyyy more clicks, but a wayyyyyy better experience.</p><h1>3. Misusing progressive disclosure to hide essential choices</h1><p>This one claims that hiding information automatically makes an interface simpler. It&#8217;s a misinterpretation of the &#8220;less is more&#8221; idea. Progressive disclosure is a real and useful UX standard, but it is often misused as a way to make the screen look cleaner while pushing important decision-making work onto the user.</p><p><strong>These 4 NN/g articles explain it well:</strong></p><ol><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/progressive-disclosure/">Progressive Disclosure</a>, defines the pattern as a way to defer advanced or rarely used features so interfaces are easier to learn and less error-prone. That is the key phrase: advanced or rarely used. Progressive disclosure works when the hidden information is secondary. It breaks down when the hidden information is essential to the user&#8217;s decision.</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/tooltip-guidelines/">Tooltip Guidelines</a>, makes this boundary very clear. Tooltips should not contain information that is vital to task completion. Users should not have to discover a tooltip in order to understand a requirement, a consequence, a fee, a permission rule, or a decision-critical explanation. (You hear that, Adobe? Hahaha.)</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/split-buttons-navigation/">Don&#8217;t Use Split Buttons for Navigation Menus</a>, shows another version of the same problem. Split buttons often create ambiguity because one part of the control does one thing and another part does something else. That may look compact, but it can make the user slow down, hesitate, or misunderstand what the control will do.</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/accordions-on-desktop/">Accordions on Desktop: When and How to Use</a>, is also useful here because it frames accordions as a pattern that requires care. Accordions can help organize long or complex content, but users should have control over what is expanded, and the content structure needs to support the task rather than hide what people came to find.</p></li></ol><p>Have you ever seen critical information hidden behind an &#8220;i&#8221; icon, required policy rules revealed only on hover, pricing caveats tucked into a tooltip, advanced filters buried in collapsed panels, or an accordion that contains the exact information users need before they can make a choice? If so, that&#8217;s this misunderstanding&#8217;s impact in the real world. It also shows up in split buttons where the visible action does one thing, the caret does another thing, and the user has to understand that distinction before safely using the control. I think you get it.</p><p>The recommendation here is to make decision-critical information visible at the moment of decision. (Just-in-time and contextual.) Use progressive disclosure for advanced options, supporting details, definitions, examples, or extra configuration.</p><div class="pullquote"><p>Do not use progressive disclosure for eligibility rules, consequences, required constraints, destructive-action warnings, fee explanations, permission impacts, or any info the user needs before taking their next step in your flow.</p></div><h1>4. Thinking form &#8220;simplicity&#8221; means fewer labels or fewer steps, rather than less user effort</h1><p>This misunderstanding is that a form is simpler when it looks cleaner, shorter, or less text-heavy. In reality, forms are simple when users can complete them with low uncertainty, low memory load, and low recovery effort.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IPgg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IPgg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IPgg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IPgg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IPgg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IPgg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg" width="376" height="378.0659340659341" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1464,&quot;width&quot;:1456,&quot;resizeWidth&quot;:376,&quot;bytes&quot;:482315,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/206314018?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IPgg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IPgg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IPgg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IPgg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F54d9b36e-3332-4877-aa92-2f0f5856528b_1543x1552.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#8220;I cleaned <em>everything </em>off this GUI&#8217;s display. Why can&#8217;t anyone figure out how to use it?&#8221;</figcaption></figure></div><p><strong>Check these sources out:</strong></p><ol><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/mobile-forms-avoid-inline-labels">Mobile Form Usability: Never Use Inline Labels</a>, calls inline labels a prime example of false simplicity. They look simple because the screen appears less cluttered, but they become harder to use once the user starts typing, reviewing, or correcting information. Baymard observed users deleting their own input just to see the label again.</p></li><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/false-simplicity">3 Types of False Simplicity</a>, explains the broader pattern. Some design choices appear simpler at first glance but actually make the interface more complicated to use. This is one of the most common form-design traps: reducing what is visible on the screen while increasing the amount of work users have to do in their heads.</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/form-design-placeholders/">Placeholders in Form Fields Are Harmful</a>, makes the same point from another angle. Placeholder text inside a form field makes it harder for users to remember what belongs in the field, check their answers, and fix errors. This is especially important in longer or more complex forms.</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/required-fields/">Marking Required Fields in Forms</a>, adds a related recommendation: required fields should be clearly marked. A form should not make users infer which fields matter, guess what they can skip, or discover requirements only after submission.</p></li></ol><p>In complex interfaces, this gets painful quickly. Think about onboarding a B2B onboarding experience. The form may ask for IDs, dates, roles, plan types, addresses, exceptions, documents, thresholds, and routing logic. When placeholder labels disappear, input instructions are hidden under a hover, fields have no groupings, or required-field logic is unclear, users are left managing the form in their heads. </p><div class="pullquote"><p>The research-based recommendation is to reduce user effort as the first priority, and then, and only then, adjust visual density.</p></div><p>Function before style. Keep all labels persistent. Group related fields. Put instructional text where users need it. Mark required fields clearly. Break complicated tasks into meaningful sections when that supports comprehension, but do not split or compress steps just to create the illusion of simplicity. These are the attributes of an easy-to-use form.</p><h1>5. Designing validation as a gate instead of a recovery system</h1><p>The common misunderstanding for this is that validation exists to catch users when they make a mistake. That framing is not totally wrong, but it is very, very incomplete. Validation should help users recover, not merely block them from moving forward. </p><p><strong>Read more here:</strong></p><ol><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/error-message-guidelines/">Error-Message Guidelines</a>, says effective error messages should be highly visible, constructive, and respectful of user effort. That last part matters. The user already did work. A good error message should help preserve that work and guide them toward repair.</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/errors-forms-design-guidelines/">10 Design Guidelines for Reporting Errors in Forms</a>, gives a more specific form-level recommendation. Error messages should be placed next to the field causing the problem, and they should be explicit, human-readable, polite, precise, and constructive. The user should not have to hunt for the problem or translate the system&#8217;s complaint into an action.</p></li><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/inline-form-validation">Usability Testing of Inline Form Validation</a>, adds the timing issue. Inline validation can save users time and effort, but it has to be implemented carefully. Avoiding premature validation, removing errors once input is corrected, and using positive inline validation can all improve the experience.</p></li><li><p>Baymard Institute&#8217;s checkout guidance, <a href="https://baymard.com/learn/checkout-flow-ux-optimization">Ecommerce Checkout UX Guide</a>, also calls out a critical recovery issue: if submission fails, preserve all entered data and guide users directly to the error. Clearing the form after an error is a major failure because it forces the user to redo work they already completed.</p></li></ol><p>UI component validation often has to handle complex rulesets. For example, a payment field may fail because of a card type, billing address, account status, or fraud rule.</p><div class="pullquote"><p>If your system only tells users &#8220;Invalid input&#8221; when they encounter an error, that is not validation. That&#8217;s a &#8220;good luck, sucker, you figure it out&#8221; with a red outline taunting them.</p></div><p>The recommendation here is to design validation around error recovery. Show the problem near the source. Explain what went wrong in human language. Preserve the user&#8217;s work. Validate at the right time, not too early and not too late. (Again, just-in-time and contextual.) Confirm success when that confirmation helps the user move forward.</p><h1>6. Treating filters and sorting as nice-to-haves</h1><p>This one states that once a list, table, catalog, or search-results page exists, filtering and sorting are optional enhancements. (Spoiler, they are not. hahaha.) For many tasks, filtering and sorting are the main way users turn a large information space into something manageable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aWP5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aWP5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aWP5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aWP5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aWP5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aWP5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg" width="284" height="246.28520499108734" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:973,&quot;width&quot;:1122,&quot;resizeWidth&quot;:284,&quot;bytes&quot;:427782,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/206314018?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aWP5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aWP5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aWP5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aWP5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F712f7dbf-10e2-4f84-b6e4-165ac1492409_1122x973.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">&#8220;Did someone ask for a sort?&#8221;</figcaption></figure></div><p><strong>These 4 sources detail this well:</strong></p><ol><li><p>Baymard Institute&#8217;s research page, <a href="https://baymard.com/research/ecommerce-product-lists">E-Commerce Product Lists &amp; Filtering UX</a>, frames filters and sorting as central to product finding. With the right filters and a clear filtering interface, users can narrow a huge list down to a smaller set of relevant options. With solid sorting, users can order items by the attributes they care about.</p></li><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/5-essential-filters">Filtering UX: 5 Essential Filter Types</a>, makes the point even more directly. If users cannot adequately filter product lists, their ability to tailor the list to their needs is severely restricted, and they may be unable to find what they need.</p></li><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/essential-sort-types">4 Essential Sort Types</a>, covers the other half of the problem. Sorting helps users manipulate product lists in a way that supports exploration and selection. Missing or poorly chosen sort options can make users work harder to compare the options that matter to them.</p></li><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/filters-vs-facets/">Filters vs. Facets: Definitions</a>, is especially helpful for complex interfaces. Filters and faceted navigation both reduce a large set of content to a narrower display, but facets add more power by letting users narrow content across multiple aspects of the information space.</p></li></ol><p>In complex interfaces, this is not just an ecommerce problem. It shows up in admin consoles, data tables, CRMs, analytics tools, document repositories, audit logs, claims queues, security event lists, and research repositories. Users may need to narrow by status, date, owner, segment, severity, region, product line, policy type, plan type, or exception reason. If the interface gives them a massive list and a weak search box, it is asking them to manually do what the system should help them do. (Again, users are not experts in writing queries, and they need your help with the context.) </p><p>The recommendation here is to treat filtering and sorting as core task infrastructure. Identify the criteria users actually use to make decisions. </p><div class="pullquote"><p>It&#8217;s simple; support hard elimination criteria with filters, and support ordering and prioritization with sorting.</p></div><p>Display applied filters clearly and make them easy to remove. For large or complex content sets, use facets that reflect how users think about the domain, not just how the database happens to be structured.</p><h1>7. Forcing account creation before the user completes the main task</h1><p>The misunderstanding is that account creation is a harmless step because the user will need an account anyway. From the business side, that may feel quasi-reasonable, but it&#8217;s really not. From the user side, it often feels like an interruption that happens before the task they actually came to do.</p><p><strong>Check out these 3 Baymard Institute articles to learn more:</strong></p><ol><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/make-guest-checkout-prominent">Make &#8220;Guest Checkout&#8221; Prominent</a>, explains that promoting guest checkout reassures users who are resistant to creating an account while still allowing returning users to sign in. Baymard also recommends limiting the account-selection step to &#8220;Checkout as Guest&#8221; and &#8220;Sign In to My Account&#8221; rather than presenting several competing options at once.</p></li><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/delayed-account-creation">Save Account Creation for the Confirmation Step</a>, explains why timing matters. Saving account creation for the confirmation step removes one additional decision from checkout until the user has finalized the order. That reduces friction during the primary task.</p></li><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/post-checkout-ux-best-practices">4 Ways to Improve the Post-Checkout UX</a>, adds that users may be more willing to create an account after checkout because much of the necessary information has already been entered. At that point, account creation can often be reduced to creating a password rather than completing a whole new workflow.</p></li></ol><p>Examples of this are when a user tries to download a document and gets forced into account creation. Or a B2B buyer wants to view implementation documentation and gets a lead form instead. Cringe. </p><p>The research-based recommendation is to delay account creation until it is necessary, or until the user has received enough value to understand why it is being requested.</p><div class="pullquote"><p>Where possible, let users complete the main task first. Where that is not possible, explain why the account is required, keep the step focused, and avoid adding unrelated profile, marketing, or preference questions at the same time.</p></div><h1>8. Assuming icon-only controls are self-explanatory</h1><p>This misunderstanding claims that the meaning of an icon is always obvious and that users will learn your unique icon language over time. UXers, PMs, engineers, and stakeholders often become fluent in their own product language, which makes this one seem true, even though there are decades&#8217; worth of research proving this is not the case. Users do not automatically share that fluency.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zKo6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zKo6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zKo6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zKo6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zKo6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zKo6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg" width="437" height="429.5198198198198" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1091,&quot;width&quot;:1110,&quot;resizeWidth&quot;:437,&quot;bytes&quot;:115273,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/206314018?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zKo6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg 424w, https://substackcdn.com/image/fetch/$s_!zKo6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg 848w, https://substackcdn.com/image/fetch/$s_!zKo6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!zKo6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51368126-3ee5-415e-b446-30f3139fd2d9_1110x1091.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>These 3 NN/g sources detail the foundational findings:</strong></p><ol><li><p>NN/g&#8217;s article, <a href="https://www.nngroup.com/articles/icon-usability/">Icon Usability</a>, explains that truly universal icons are rare. Only a very, very, very small number of icons have relatively broad recognition with most users. Outside of those extremely rare instances, most icons remain ambiguous because the same symbol can mean different things in different interfaces.</p></li><li><p>NN/g&#8217;s video, <a href="https://www.nngroup.com/videos/icon-text-labels/">Yes, Icons Need Text Labels</a>, makes the practical recommendation clear. Because most icons are ambiguous, a text label should be present alongside the icon to clarify its meaning. Labels reduce guesswork.</p></li><li><p>NN/g&#8217;s video, <a href="https://www.nngroup.com/videos/icon-usability/">Tips for Icon Usability</a>, adds a broader testing point. Teams should not assume users recognize an icon just because the icon is visually clean, common inside the product, or familiar to the design team. Icons need to be understandable to the actual people using the interface.</p></li></ol><p>In complex interfaces, this gets especially painful because the actions are often abstract. A trash icon is one thing. A &#8220;reconcile variance&#8221; icon, or &#8220;map field&#8221; icon are other beasts entirely.</p><div class="pullquote"><p>The more domain-specific the action, the less likely an icon alone will carry the meaning.</p></div><p>The recommendation here is clear as day, and still, many of you will try to disregard it. It is a best practice to label all icons. Period. Full stop. It&#8217;s best for usability, accessibility, and code compliance standards.</p><h1>9. Making hover menus appear instantly because it feels responsive</h1><p>The common misunderstanding for this is that instant hover behavior is better because it makes the interface feel fast. But fast is not always the same as usable. When hover behavior triggers too easily, the interface can feel jumpy, fragile, and distracting. </p><p><strong>These 3 Baymard Institute articles are all you&#8217;ll need for this one:</strong></p><ol><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/dropdown-menu-flickering-issue">Provide a Hover Delay of 300&#8211;500 MS for Hover-Based Drop-Down Menus</a>, explains the issue directly. Hover-based drop-down menus can be useful for exposing categories and subcategories, but they are prone to flickering when they trigger too quickly. Baymard recommends a 300&#8211;500 ms hover delay to reduce accidental triggering.</p></li><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/product-finding-2024-launch">2024 Product Finding Research Update</a>, shows that this is not just an old or theoretical problem. Baymard notes that menu flickering was first identified as a main navigation issue in 2014 and still appeared in their latest product-finding testing ten years later.</p></li><li><p>Baymard Institute&#8217;s article, <a href="https://baymard.com/blog/drop-down-usability">Drop-Down Usability</a>, is useful for the broader pattern. Drop-downs can be appropriate, but they need to match the user&#8217;s task and the structure of the available options. Just because something can be hidden behind a triggered menu does not mean that is the best interaction pattern.</p></li></ol><div class="pullquote"><p>Hover-only patterns suck.</p></div><p>They show up in side navigation, data-table row actions, dense dashboards, chart controls, map layers, nested settings menus, and toolbars. A user trying to move from one area of the screen to another accidentally opens a panel that covers the thing they were trying to inspect. A user trying to select a menu item has to steer diagonally through a narrow activation path. A user with less precise pointer control gets punished for moving like a human. We&#8217;ve all done these things ourselves, yet we keep designing hover-only stuff. Why?</p><p>The design recommendation here is to treat hover as fragile. Add an appropriate delay and avoid large accidental-trigger zones. Preserve the user&#8217;s path to the submenu. Do not cover important content unnecessarily. Make sure the same action can be completed without relying on hover alone, especially for touch, keyboard, and assistive technology users. When in doubt, don&#8217;t hide it under a hover.</p><h1>10. Believing UX findings are invalid unless the sample size is large</h1><p>This common misunderstanding claims that usability findings do not count unless the study has a large sample. Some teams hear &#8220;five users&#8221; and immediately dismiss the study as anecdotal. Other teams go too far in the other direction and treat five users as a magic number that works for every research question.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-OqZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-OqZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-OqZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-OqZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-OqZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-OqZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg" width="418" height="290.1174033149171" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1005,&quot;width&quot;:1448,&quot;resizeWidth&quot;:418,&quot;bytes&quot;:655424,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/206314018?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-OqZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-OqZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-OqZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-OqZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbfe52f5a-fd47-4054-99c9-53e0f438b136_1448x1005.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Read these 4 MeasuringU articles for a better understanding:</strong></p><ol><li><p>MeasuringU&#8217;s article, <a href="https://measuringu.com/do-statistics-really-require-30-participants/">Do Statistics Really Require 30 Participants?</a>, addresses another common myth: that statistics automatically require at least 30 participants. Their point is that rigid sample-size rules are often misapplied. The appropriate sample size should come from the study goal, metric, method, and intended claim.</p></li><li><p>MeasuringU&#8217;s article, <a href="https://measuringu.com/specific-sample-sizes-in-discovery-studies/">Sample Sizes for Usability Studies: One Size Does Not Fit All</a>, gives the most useful framing. Sample size depends on the type of study. MeasuringU separates usability studies into problem discovery, estimation, and comparison. Those are different research goals, and they require different sample-size logic.</p></li><li><p>MeasuringU&#8217;s article, <a href="https://measuringu.com/five-users/">Why You Only Need to Test with Five Users Explained</a>, explains the well-known small-sample argument with important caveats. Five users are more likely to reveal common problems than rare ones. The point is not that five users will find everything. The point is that small formative studies can be useful when the goal is to identify common usability problems and iterate.</p></li><li><p>MeasuringU&#8217;s article, <a href="https://measuringu.com/larger-sample-usability-tests/">What Do You Gain from Larger-Sample Usability Tests?</a>, explains when larger samples matter. It is easy to see common problems with a small sample, but larger samples are needed to detect uncommon issues, estimate performance more precisely, or support stronger summative claims.</p></li></ol><p>In real product orgs, this mistake often becomes a convenient veto. A researcher brings evidence that users cannot find a setting, misunderstand a filter, miss an error, or misinterpret an icon.</p><div class="pullquote"><p>When someone says, &#8220;But that was only 12 people.&#8221; The issue then gets treated as unproven, even when the pattern is obvious, repeated, and tied to a plausible interaction problem.</p></div><p>The research-based recommendation here is to match the method to the claim. Small formative studies are appropriate when the goal is to identify and understand usability problems, especially common ones. Larger samples are appropriate when the goal is benchmarking, estimating rates, comparing designs, or detecting less common issues. Do not pretend &#8220;small-<em><strong>n</strong></em> research&#8221; can answer every question. Also do not pretend every UX question requires survey-scale data before the team is allowed to fix a broken interaction.</p><h1>Conclusion</h1><p>I hope you can see the bigger pattern across all 10 of these misunderstandings is that teams often mistake reduced visible complexity for reduced user effort. That is the trap!</p><p>Complexity does not disappear because we collapsed it, renamed it, or hid it behind an icon. It either gets handled by the interface, or it gets handed to the user. And users already have enough work to do, so let&#8217;s stop being aesthetically and ego-driven and put their needs first for a change, shall we? Thanks for reading!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Cleaning CRM Data for UXR 101]]></title><description><![CDATA[Building Study Participant Lists in the Real World]]></description><link>https://trevorcalabro.substack.com/p/cleaning-crm-data-for-uxr-101</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/cleaning-crm-data-for-uxr-101</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Fri, 03 Jul 2026 19:46:03 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a9171b6d-3a2f-430d-88ea-dbfbd8b61331_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>This article explains why UXRs need to know how to clean operational data from CRMs, and how to make that data usable for study participant recruiting, sampling, screening, and outreach. I&#8217;ve also included 14 Cleaning Formula Templates that you can copy/paste, and adapt in your own spreadsheets.</p><div><hr></div><p>As UX researchers, we almost always need data that lives in systems we do not own. <em>&#127925;Tale as old as time.&#127925;</em> Unfortunately, many CRMs are structured from the sales team&#8217;s point of view, which is not always useful when we are building study participant lists. Endless fields for accounts, territories, renewal dates, account owners, and deal stages may work well for sales because they are often managing relationships at the account level. But us researchers need a different structure. Depending on the study, a useful dataset might need one row per person, one row per survey response, one row per support issue, or one row per task, session, or behavior. The data can be accurate in the source system and still require cleaning before it can support the research work.</p><p>This is a big reason basic data cleaning skills are critical for being a pro UX researcher. </p><div class="pullquote"><p>We need to know how to reshape operational data so it can support recruiting, sampling, screening, outreach, analysis, and responsible participant management.</p></div><p>When the structure of the data does not match the research need, you want the confidence to clean it yourself instead of waiting for someone else to find the time to do it for you. Lucky for us, it is not that hard. so, that is what this week&#8217;s article is all about.</p><h1>What&#8217;s in Your Rows?</h1><p>One of the first cleaning decisions is deciding what one row should represent. This sounds basic, but it affects almost every cleaning choice that follows. Before removing duplicates, splitting cells, standardizing categories, or fixing missing values, the research team needs to understand the unit of the dataset.</p><p>In business data, one row can mean many different things. It might represent one company, one account, one household, one support ticket, one purchase, one product event, one survey response, or one person. None of those structures is automatically wrong. The right structure depends on the research purpose.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!A6lk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!A6lk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A6lk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A6lk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A6lk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!A6lk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg" width="307" height="214.9643605870021" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:334,&quot;width&quot;:477,&quot;resizeWidth&quot;:307,&quot;bytes&quot;:73487,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/204948583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!A6lk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg 424w, https://substackcdn.com/image/fetch/$s_!A6lk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg 848w, https://substackcdn.com/image/fetch/$s_!A6lk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!A6lk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F68bdfcfa-b209-41d8-8362-b61fee4e4804_477x334.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>For us UX research recruiting, one row usually needs to represent one individual person. That person may need to be invited, screened, scheduled, tracked, thanked, and excluded from future outreach for a period of time.</p><div class="pullquote"><p>If the row represents a company instead of a person, those recruiting tasks become harder. The team may know that a company is a good fit, but it may not know which individual contact is appropriate for the study.</p></div><p>This issue comes up often in B2B2C orgs. A CRM export may have one row per customer company, with several contacts stored inside that same row. That can make sense for sales because the account is the main unit of work. It is less useful for UX research when the team needs to contact individual people for study participation.</p><p><strong>For example, a CRM export might look like this:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/hmWAK/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f9d6eed-e9c8-4f29-a912-dc308c05b2fe_1220x446.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d2921568-543f-4003-9d6e-935b5ae7102e_1220x446.png&quot;,&quot;height&quot;:233,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/hmWAK/1/" width="730" height="233" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>That row contains useful info, but it is not yet structured for recruiting. Maria, James, and Priya are three different people. They may have different roles, different product experiences, and different levels of fit for a study. If they remain bundled inside one company row, the research team cannot easily track outreach, screening status, participation history, or eligibility at the person level.</p><p><strong>A research-ready version would look more like this:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/fzUYh/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5b2b8c2-07d0-4799-a89d-35c67033cb8b_1220x530.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c54d7f0b-20ea-45a3-b9ec-73bb81d96bb4_1220x530.png&quot;,&quot;height&quot;:275,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/fzUYh/1/" width="730" height="275" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>See the difference? This change is small in the spreadsheet, but meaningful for the research workflow. The company-level info still matters, so it stays attached to each person. The difference is that the cleaned file now supports the way the research team needs to work. Each row can be treated as a possible participant rather than as part of a bundled account record.</p><h1>Keep It Traceable</h1><p>Once the team knows what the cleaned data needs to become, the next step is to keep the cleaning work traceable. An important best practice that I see <em>soooooo </em>many UX researchers dismiss is keeping the original export untouched. The cleaning should happen in a separate workspace, and the final cleaned version should be easy to compare back to the source data.</p><p><strong>In your spreadsheet, you might use tabs like this:</strong></p><ul><li><p><code>Raw Export</code> for the untouched source data.</p></li><li><p><code>Cleaning Workspace</code> for the active cleanup work.</p></li><li><p><code>Cleaned Data</code> for the version that is ready for recruiting or analysis.</p></li><li><p><code>Review Needed</code> for records that require human judgment.</p></li><li><p><code>Removed Records</code> for records that were excluded.</p></li><li><p><code>Duplicate Records</code> for records that may appear more than once.</p></li><li><p><code>Cleaning Notes</code> for decisions, rules, and changes made during the cleanup process.</p></li></ul><p>This structure matters because cleaning involves judgment. You&#8217;ll need to decide whether two rows are duplicates, whether a category should be standardized, whether a contact should be excluded, whether a name and email address appear to belong together, stuff like that. Those decisions should not disappear into one final spreadsheet.</p><div class="pullquote"><p>In our spreadsheets, other researchers and stakeholders may need to understand what changed and why, and so will you when you revisit your own work!</p></div><p>Traceability is especially important when UX is using data from a system owned by another department. If a stakeholder asks where a contact came from, the team should be able to point back to the original CRM row. If an account owner questions why a person was included or excluded, the team should be able to explain the cleaning decision. If the same source data needs to be refreshed later, the team should be able to repeat the process without starting over.</p><p><strong>A few simple fields can make this easier:</strong></p><ul><li><p><code>Original Row ID</code> connects each cleaned record back to the source export.</p></li><li><p><code>Cleaning Notes</code> explains unusual decisions or changes.</p></li><li><p><code>Review Needed</code> separates records that are ready to use from records that require human judgment.</p></li></ul><p>These fields may feel administrative, but they make the cleaned data easier to trust.</p><p>The goal is to avoid creating a file that only one person understands. Cleaned research data should be usable by the person who made it, but it should also be understandable to another researcher who opens it later. That is part of making data cleaning a research practice rather than a private spreadsheet task.</p><h1>Make Each Field Usable</h1><p>Once the overall structure of the dataset is defined, the next step is making sure each field contains the type of info it is supposed to contain. This sounds obvious, but many business exports contain fields that have gradually accumulated formatting inconsistencies over years of use. Those inconsistencies may not bother the team that owns the system, but they often create unnecessary work for researchers trying to filter, sort, join, or segment the data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Nv7M!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nv7M!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nv7M!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nv7M!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nv7M!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nv7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg" width="321" height="251.01257861635222" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:373,&quot;width&quot;:477,&quot;resizeWidth&quot;:321,&quot;bytes&quot;:38319,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/204948583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nv7M!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Nv7M!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Nv7M!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Nv7M!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb463d442-60f8-4c13-85e2-d152850f4cc4_477x373.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Many of these problems are small on their own. Together, they make the spreadsheet harder to work with and increase the chance of mistakes during recruiting or analysis. Before doing anything more advanced, it helps to standardize the basic building blocks of the dataset.</p><p><strong>Common cleanup tasks include:</strong></p><ul><li><p>Removing extra spaces before or after values.</p></li><li><p>Standardizing capitalization where appropriate.</p></li><li><p>Converting email addresses to lowercase.</p></li><li><p>Fixing inconsistent date formats.</p></li><li><p>Removing hidden line breaks or non-printable characters.</p></li><li><p>Splitting fields that contain several pieces of information into separate fields.</p></li><li><p>Making sure every column contains one type of information.</p></li></ul><p>For example, an email column should contain email addresses. A segment column should contain one segment value. A date column should contain dates that Excel recognizes as dates. If a field contains several different kinds of info, it becomes much harder to filter the data, compare records, or identify patterns.</p><p>This is also a good point to standardize delimiters before doing more advanced cleaning. One export may separate multiple values with commas, another with semicolons, and another with line breaks. Choosing one consistent delimiter early makes the remaining cleaning work much simpler.</p><div class="pullquote"><p>The goal here is to make each field predictable. When every column behaves consistently, the rest of the cleaning process becomes easier and less error-prone.</p></div><h1>Expanding Rows</h1><p>As discussed earlier, one of the more common problems in CRM exports is finding several related values stored inside the same row. Let&#8217;s use the same example as before to illustrate this point. </p><p><strong>Suppose a CRM export contains this info:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/hmWAK/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d086e779-7385-466e-a233-c8798f2dd528_1220x446.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/346aa48d-91ea-491a-9c47-8f5409ff134c_1220x446.png&quot;,&quot;height&quot;:233,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/hmWAK/1/" width="730" height="233" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p><strong>The research team will eventually needs three rows instead of one, like this:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/fzUYh/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c73a3e60-c81f-4afd-8c8b-d6a9ed912c26_1220x530.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/417ff1fd-8688-4d35-8eef-3a74b9f6ccc7_1220x530.png&quot;,&quot;height&quot;:275,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/fzUYh/1/" width="730" height="275" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>The important part of this transformation is preserving the relationships between the values. Maria&#8217;s email should stay with Maria. James&#8217;s email should stay with James. The company, segment, and any other account-level info should remain attached to all three contacts because that info still applies to each person. This is where I see <em>many </em>cleaning mistakes happen. Don&#8217;t worry, I mess this stuff up all the time too!  It is easy to split one column and accidentally lose the relationship to another column. If the names are separated first and the emails are separated independently, there is no guarantee they will still align correctly. Once that relationship is lost, it often requires manual work to reconstruct it.</p><p>When I perform this type of cleaning, I usually think about whether the values belong together before deciding how to split them apart. If two fields describe the same person, they should be expanded together. The goal is to create rows that still represent real people with the correct info attached to them.</p><h1>Missing &amp; Unclear Data</h1><p>Spoiler alert, no dataset is perfect and records will be incomplete. Others will contain info that is difficult to interpret with confidence. Both situations deserve attention because they affect recruiting decisions.</p><p>In almost all cases, it is better to leave uncertainty visible than to replace it with info that may be wrong.</p><p><strong>Simple review fields can make these situations much easier to manage:</strong></p><ul><li><p><code>Missing Email</code></p></li><li><p><code>Missing Role</code></p></li><li><p><code>Unknown Segment</code></p></li><li><p><code>Needs Review</code></p></li><li><p><code>Unclear Name-Email Match</code></p></li></ul><p><strong>Consider a CRM row like this:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/9p1gY/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c01f9b0-01fa-42d4-a59d-9bb5f47d14f5_1220x282.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9055a4f-8096-4336-94bc-4ed351c3e170_1220x282.png&quot;,&quot;height&quot;:132,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/9p1gY/1/" width="730" height="132" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>James and Priya can probably be matched with reasonable confidence. Maria is much less obvious because the remaining email appears to be a shared mailbox rather than an individual contact. That record should be flagged for review instead of being assigned automatically.</p><p>The same thinking applies to missing info. A contact without an email address may still belong in the cleaned dataset if another team can supply the missing info later. A contact without a job title may still be useful if the study includes a screener that verifies the participant&#8217;s role. The point is to make the uncertainty easy to identify so the research team can make informed decisions during recruiting.</p><h1>Dedupe 101</h1><p>Duplicates are one of the most common problems in data. They are also one of the easiest problems to underestimate. A spreadsheet may look like it contains hundreds of possible participants, but that number can shrink quickly once duplicate people, companies, accounts, or email addresses are removed.</p><div class="pullquote"><p>For us researchers, duplicates create practical and ethical problems. </p></div><p>The same person might be invited twice. One company might be overrepresented in a study. A team might think it has a larger sample than it really does. Duplicate records can also make it harder to track who has already participated, who has already declined, and who should not be contacted again for a while.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YFEO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YFEO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YFEO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YFEO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YFEO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YFEO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg" width="336" height="306.6923076923077" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1329,&quot;width&quot;:1456,&quot;resizeWidth&quot;:336,&quot;bytes&quot;:399076,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/204948583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YFEO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg 424w, https://substackcdn.com/image/fetch/$s_!YFEO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg 848w, https://substackcdn.com/image/fetch/$s_!YFEO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!YFEO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51004f0e-0c6d-43ed-9444-fd48aba4a494_2048x1869.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Common duplicate patterns to look out for:</strong></p><ul><li><p>The same email address appearing in multiple rows.</p></li><li><p>The same person listed with slightly different names.</p></li><li><p>The same company listed under different spellings.</p></li><li><p>A parent company and subsidiary both appearing as separate accounts.</p></li><li><p>The same participant appearing in several old recruit lists.</p></li><li><p>The same contact appearing once in a CRM export and once in a marketing list.</p></li></ul><p>Email address is often the strongest field for deduping individual contacts, but it should not be the only field the team checks. People can have more than one email address. Companies can change domains. Some records may use a generic inbox instead of an individual email. Exact matches are helpful, but they do not catch every duplicate.</p><p>This is why deduping should include both automatic checks and human review. Excel can highlight repeated emails, repeated company names, or repeated combinations of name and company. The team should then move questionable records to a review tab instead of deleting them immediately.</p><p><strong>A practical deduping pass might include these steps:</strong></p><ol><li><p>Standardize email addresses by trimming spaces and converting them to lowercase.</p></li><li><p>Highlight duplicate email addresses.</p></li><li><p>Check duplicate combinations of name and company.</p></li><li><p>Review similar company names before merging them.</p></li><li><p>Move uncertain duplicates to a separate review tab.</p></li><li><p>Document which records were removed or kept.</p></li></ol><h1>Match the Real World</h1><p>A cleaned contact list still needs to match the reality of the study. A person can have a valid name, a valid email address, and a company attached to the record, but still be wrong for the research. This is why cleaning has to connect back to the recruiting criteria.</p><p>If a study needs healthcare administrators from enterprise accounts, the spreadsheet needs consistent fields that support that filter. The segment field should not contain several versions of the same category. The role field should not mix job titles, departments, notes, and guesses. The customer tier field should be clear enough that the team can tell which accounts belong in the sample.</p><p><strong>Useful fields for recruiting might include:</strong></p><ul><li><p>Cleaned segment</p></li><li><p>Cleaned role</p></li><li><p>Customer tier</p></li><li><p>Product line</p></li><li><p>Region</p></li><li><p>Account owner</p></li><li><p>Likely eligibility</p></li><li><p>Eligibility confidence</p></li><li><p>Account owner approval needed</p></li><li><p>Do not contact status</p></li></ul><p>The cleaned fields should support the recruiting decision without hiding the original data. It is often better to create a cleaned version of a field than to overwrite the source value. For example, the original CRM value might say <code>ENT</code>, while the cleaned segment field says <code>Enterprise</code>. That makes the data easier to use while still preserving the source context.</p><p><strong>For example, a simple mapping table might look like this:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/tCHcq/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1462803c-7057-432b-92ee-72f26b3e5837_1220x472.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c103104a-bed7-4d9b-990e-1bebdd5f5dfc_1220x472.png&quot;,&quot;height&quot;:265,&quot;title&quot;:&quot;[ Insert title here ]&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/tCHcq/1/" width="730" height="265" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>The research team should also be careful with company-level signals. Even when a company is in the right segment or owns the right product, that does not mean every contact at that company is a &#8220;good&#8221; study participant. Some contacts may not use the workflow being studied, and others, like senior sponsors, may be important to the account without being close enough to the day-to-day experience. We all know, this is where a good screener comes into play.</p><div class="pullquote"><p>Clean data can help the team find likely participants, but it does not prove that each person is eligible. A good screener can confirm role, product experience, workflow involvement, and recent usage before the person is scheduled.</p></div><p>The same logic applies to outreach appropriateness. Some contacts should not be used even if the record looks complete. Generic inboxes, distribution lists, former employees, personal email addresses, and contacts who require account owner approval should be flagged before outreach begins.</p><p><strong>A useful recruiting-ready status field might include:</strong></p><ul><li><p>Ready for outreach</p></li><li><p>Needs screener</p></li><li><p>Needs account owner approval</p></li><li><p>Needs data review</p></li><li><p>Do not contact</p></li><li><p>Not eligible for this study</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lY5n!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lY5n!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lY5n!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lY5n!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lY5n!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lY5n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg" width="430" height="273.2044198895028" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:920,&quot;width&quot;:1448,&quot;resizeWidth&quot;:430,&quot;bytes&quot;:547862,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/204948583?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lY5n!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lY5n!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lY5n!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lY5n!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f157537-f0ce-491b-bed1-8151091fcb64_1448x920.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This keeps the cleaned file connected to the real recruiting workflow. The final spreadsheet should help the team decide who can be contacted, who needs more review, and who should be excluded from the current study.</p><h1>14 Cleaning Formula Templates</h1><blockquote><p><strong>&#9888;&#65039; Disclaimer: </strong>These examples assume your CRM export has been converted into an Excel table named <code>CRM</code>. Replace the table name and column names with the names used in your own spreadsheet.</p></blockquote><h3>1. Create an original row ID</h3><p>Use this when you want every cleaned record to trace back to the original export row.</p><pre><code><code>="CRM-"&amp;TEXT(ROW()-ROW(CRM[#Headers]),"00000")</code></code></pre><p><strong>Example result:</strong></p><pre><code><code>CRM-00001
CRM-00002
CRM-00003</code></code></pre><p>This is useful before splitting one CRM row into several person-level rows.</p><h3>2. Clean a contact name</h3><p>Use this to remove extra spaces and hidden characters from a name field.</p><pre><code><code>=TRIM(CLEAN([@[Contact Name]]))</code></code></pre><p><strong>Example:</strong></p><pre><code><code>"  Maria Lopez  " &#8594; "Maria Lopez"</code></code></pre><h3>3. Clean an email address</h3><p>Use this to remove extra spaces, remove hidden characters, and convert the email address to lowercase.</p><pre><code><code>=LOWER(TRIM(CLEAN([@Email])))</code></code></pre><p><strong>Example:</strong></p><pre><code><code>"  Maria.Lopez@Acme.com  " &#8594; "maria.lopez@acme.com"</code></code></pre><h3>4. Flag missing recruiting fields</h3><p>Use this when you want to quickly identify records that are not ready for outreach.</p><pre><code><code>=TEXTJOIN("; ",TRUE,
IF([@[Clean Email]]="","Missing email",""),
IF([@[Clean Role]]="","Missing role",""),
IF([@[Clean Segment]]="","Missing segment",""))</code></code></pre><p><strong>Example result:</strong></p><pre><code><code>Missing email; Missing role</code></code></pre><p>If the result is blank, none of those fields are missing.</p><h3>5. Create a simple ready-for-review status</h3><p>Use this when you want a cleaner status field instead of a long list of missing fields.</p><pre><code><code>=IF(OR([@[Clean Email]]="",[@[Clean Role]]="",[@[Clean Segment]]=""),"Needs Review","Ready")</code></code></pre><p><strong>Example result:</strong></p><pre><code><code>Ready</code></code></pre><p>or</p><pre><code><code>Needs Review</code></code></pre><h3>6. Flag generic inboxes</h3><p>Use this to identify email addresses that may not belong to an individual person.</p><pre><code><code>=IF(OR(
ISNUMBER(SEARCH("info@",[@[Clean Email]])),
ISNUMBER(SEARCH("support@",[@[Clean Email]])),
ISNUMBER(SEARCH("admin@",[@[Clean Email]])),
ISNUMBER(SEARCH("billing@",[@[Clean Email]])),
ISNUMBER(SEARCH("contact@",[@[Clean Email]]))
),"Generic Inbox","Likely Individual")</code></code></pre><p><strong>Example result:</strong></p><pre><code><code>Generic Inbox</code></code></pre><blockquote><p><strong>&#9888;&#65039; Disclaimer: </strong>This formula  does not prove the contact is unusable, but it tells the research team to review it before outreach. It is only a quick review aid. A blank email may still need to be caught by a separate missing-field check, and a generic inbox list should be adjusted for your organization. You may want to add other patterns like <code>hello@</code>, <code>team@</code>, <code>customerservice@</code>, or department-specific shared inboxes that show up often in your data.</p></blockquote><h3>7. Flag duplicate email addresses</h3><p>Use this to identify repeated email addresses in a cleaned contact list.</p><pre><code><code>=IF([@[Clean Email]]="","Missing Email",IF(COUNTIF(CRM[Clean Email],[@[Clean Email]])&gt;1,"Duplicate Email","Unique"))</code></code></pre><p><strong>Example result:</strong></p><pre><code><code>Duplicate Email</code></code></pre><p>This is one of the fastest ways to catch repeated contacts before recruiting begins.</p><h3>8. Flag duplicate name-and-company combinations</h3><p>Use this when email is missing or when you want a second deduping check.</p><pre><code><code>=IF(OR([@[Clean Contact Name]]="",[@[Clean Company]]=""),"Needs Review",IF(COUNTIFS(CRM[Clean Contact Name],[@[Clean Contact Name]],CRM[Clean Company],[@[Clean Company]])&gt;1,"Possible Duplicate","Unique"))</code></code></pre><p><strong>Example result:</strong></p><pre><code><code>Possible Duplicate</code></code></pre><p>This is useful because the same person can sometimes appear with different email addresses.</p><h3>9. Standardize messy category labels with a lookup table</h3><p>Create a small mapping table named <code>SegmentMap</code>.</p><p>Raw ValueClean ValueENTEnterpriseEnterprise CustomerEnterpriseHealth CareHealthcareMedicalHealthcare</p><p>Then use this formula in your cleaned segment column.</p><pre><code><code>=XLOOKUP(TRIM([@Segment]),SegmentMap[Raw Value],SegmentMap[Clean Value],"Review Needed")</code></code></pre><p><strong>Example result:</strong></p><pre><code><code>ENT &#8594; Enterprise</code></code></pre><p>This keeps the original CRM value visible while giving the research team a cleaner field for filtering and sampling.</p><h3>10. Split multiple names into separate rows with TEXTSPLIT</h3><p>Use this when a cell contains several names separated by semicolons.</p><pre><code><code>=TEXTSPLIT(SUBSTITUTE(A2,"; ",";"),,";")</code></code></pre><p><strong>Example input:</strong></p><pre><code><code>Maria Lopez; James Chen; Priya Shah</code></code></pre><p><strong>Example output:</strong></p><pre><code><code>Maria Lopez
James Chen
Priya Shah</code></code></pre><p>This is helpful for quick cleanup, but it only splits the names. If the row also has multiple emails that need to stay matched to the right names, Power Query is usually safer.</p><h3>11. Split multiple emails into separate rows with TEXTSPLIT</h3><p>Use this when a cell contains several emails separated by semicolons.</p><pre><code><code>=TEXTSPLIT(SUBSTITUTE(B2,"; ",";"),,";")</code></code></pre><p><strong>Example input:</strong></p><pre><code><code>maria.lopez@acme.com; jchen@acme.com; priya@acme.com</code></code></pre><p><strong>Example output:</strong></p><pre><code><code>maria.lopez@acme.com
jchen@acme.com
priya@acme.com</code></code></pre><p>This is useful for inspection, but be careful. Splitting names and emails separately can break the relationship between the person and the email address.</p><h3>12. Power Query pattern for splitting names and emails together</h3><p>Use this when a CRM row has multiple names in one cell and multiple emails in another cell, and you need one row per person.</p><p><strong>For this example, let&#8217;s assume your Excel table is named </strong><code>CRM </code><strong>and starts with a row like this:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/9q1h9/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0df835d9-7696-41d6-89af-bfb3935865e5_1220x350.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/96fd487b-04e4-4805-9de3-5a15f1a7bca9_1220x350.png&quot;,&quot;height&quot;:168,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/9q1h9/1/" width="730" height="168" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><blockquote><p><strong>&#9888;&#65039; Disclaimer: </strong>This template assumes the names and emails are separated by semicolons. If your data uses a different delimiter, change the <code>";" </code>in the code to whatever your file uses.</p></blockquote><p><strong>Power Query M example:</strong></p><pre><code>let
    Source = Excel.CurrentWorkbook(){[Name="CRM"]}[Content],

    AddIndex = Table.AddIndexColumn(
        Source,
        "Original Row Number",
        1,
        1,
        Int64.Type
    ),

    AddOriginalRowID = Table.AddColumn(
        AddIndex,
        "Original Row ID",
        each "CRM-" &amp; Text.PadStart(Text.From([Original Row Number]), 5, "0"),
        type text
    ),

    RemoveOriginalRowNumber = Table.RemoveColumns(
        AddOriginalRowID,
        {"Original Row Number"}
    ),

    SplitCleanList = (value as any, optional makeLower as nullable logical) as list =&gt;
        let
            RawText = if value = null then "" else Text.From(value),
            Parts = List.Transform(
                Text.Split(RawText, ";"),
                each Text.Trim(_)
            ),
            NonBlank = List.Select(
                Parts,
                each _ &lt;&gt; ""
            ),
            Cleaned = if makeLower = true
                then List.Transform(NonBlank, each Text.Lower(_))
                else NonBlank
        in
            Cleaned,

    AddPersonTable = Table.AddColumn(
        RemoveOriginalRowNumber,
        "Person Rows",
        each
            let
                Names = SplitCleanList([Contact Names], false),
                Emails = SplitCleanList([Contact Emails], true),
                NameCount = List.Count(Names),
                EmailCount = List.Count(Emails),
                MaxRows = List.Max({NameCount, EmailCount}),
                SplitReview =
                    if MaxRows = 0 then
                        "Review Needed: missing names and emails"
                    else if NameCount &lt;&gt; EmailCount then
                        "Review Needed: name-email count mismatch"
                    else
                        "Split Complete",
                PersonTable =
                    if MaxRows = 0 then
                        #table(
                            {"Contact Name", "Email", "Split Review"},
                            {{null, null, SplitReview}}
                        )
                    else
                        Table.FromColumns(
                            {
                                Names,
                                Emails,
                                List.Repeat({SplitReview}, MaxRows)
                            },
                            {"Contact Name", "Email", "Split Review"}
                        )
            in
                PersonTable
    ),

    ExpandPersonRows = Table.ExpandTableColumn(
        AddPersonTable,
        "Person Rows",
        {"Contact Name", "Email", "Split Review"},
        {"Contact Name", "Email", "Split Review"}
    ),

    KeepUsefulColumns = Table.SelectColumns(
        ExpandPersonRows,
        {
            "Original Row ID",
            "Company",
            "Contact Name",
            "Email",
            "Segment",
            "Tier",
            "Account Owner",
            "Split Review"
        }
    )

in
    KeepUsefulColumns</code></pre><p>This keeps the first name with the first email, the second name with the second email, and so on. It also keeps the company-level fields attached to each new person row.</p><p><strong>Example output:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/pQxtP/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ab6c1a8d-6e38-49f3-af37-369bd908be38_1220x530.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87f6447f-8c55-436f-8fd8-456069d80ac7_1220x530.png&quot;,&quot;height&quot;:275,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/pQxtP/1/" width="730" height="275" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>If the number of names and emails does not match, the template keeps the available values and marks the row with <code>Review Needed: name-email count mismatch</code>. If both the names and emails are missing, it keeps one review row instead of silently dropping the original CRM record.</p><blockquote><p><strong>&#9888;&#65039; Disclaimer: </strong>This template assumes that names and emails are listed in the same order when the counts match. It does not prove that the name and email belong together. Use the match-confidence formula after this step as a review aid.</p></blockquote><h3>13. Add a match-confidence flag after splitting names and emails</h3><p>Use this after the rows have been expanded. It gives the team a quick signal about whether the contact name and email address appear to belong together.</p><pre><code><code>=LET(
name,LOWER(TRIM([@[Contact Name]])),
email,LOWER(TRIM([@[Email]])),
handle,IFERROR(TEXTBEFORE(email,"@"),email),
first,IFERROR(TEXTBEFORE(name," "),name),
last,IFERROR(TEXTAFTER(name," ",-1),""),
IF(OR(name="",email=""),"Review Needed",
IF(OR(
AND(LEN(first)&gt;=3,ISNUMBER(SEARCH(first,handle))),
AND(LEN(last)&gt;=3,ISNUMBER(SEARCH(last,handle)))
),"Likely Match","Review Needed"))
)</code></code></pre><p><strong>Example:</strong></p><pre><code><code>Maria Lopez + maria.lopez@acme.com &#8594; Likely Match
James Chen + jchen@acme.com &#8594; Likely Match
Maria Lopez + teamlead@acme.com &#8594; Review Needed</code></code></pre><blockquote><p><strong>&#9888;&#65039; Disclaimer: </strong>This formula checks the part of the email address before the <strong>@</strong> symbol and looks for the person&#8217;s first name or last name. It also avoids checking very short name fragments because those can create false matches. This should still be treated as a review aid, not final proof that the name and email belong together.</p></blockquote><h3>14. Create a recruiting-ready status</h3><p>Use this when you want one field that tells the team what to do next.</p><pre><code><code>=IF([@[Do Not Contact]]="Yes","Do Not Contact",
IF([@[Generic Inbox]]="Generic Inbox","Needs Review",
IF([@[Missing Fields]]&lt;&gt;"","Needs Data Review",
IF([@[Eligibility Confidence]]="Low","Needs Screener",
"Ready for Outreach"))))</code></code></pre><p><strong>Example results:</strong></p><pre><code><code>Ready for Outreach
Needs Screener
Needs Data Review
Do Not Contact</code></code></pre><blockquote><p><strong>&#9888;&#65039; Disclaimer: </strong>This kind of field helps turn a cleaned spreadsheet into a working recruiting list. The formula assumes you already have helper columns such as <code>Do Not Contact</code>, <code>Generic Inbox</code>, <code>Missing Fields</code>, and <code>Eligibility Confidence</code> in your table. You can rename those fields or change the status logic to match your own recruiting process. Treat the output as a workflow flag, not as a final decision about whether someone should be contacted.</p></blockquote><h1>Conclusion</h1><p>Us researchers often talk about study design, moderation, synthesis, and storytelling, but some studies are shaped much earlier. The quality of the research can be affected by the quality of the data used to find, select, and contact participants. This matters in our orgs because researchers depend on systems owned by sales, support, customer success, product, or marketing. and <em>alllllllll </em>that data still needs to be cleaned before it can support recruiting, sampling, screening, or outreach.</p><p>Basic data cleaning helps the team understand what one row represents, which contacts are duplicated, which fields are usable, and which records need review. It also helps prevent outreach mistakes that can damage trust with participants and internal partners. This is why data cleaning should be treated as part of ResearchOps. In all orgs, UX research often starts with data someone else owns, and the useful work is turning that data into something research can responsibly use.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[This Is Really a Book About UX]]></title><description><![CDATA[A Review of Leadership Unblocked by Muriel Wilkins]]></description><link>https://trevorcalabro.substack.com/p/this-is-really-a-book-about-ux</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/this-is-really-a-book-about-ux</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 27 Jun 2026 16:03:42 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7ac36b51-a565-4fcd-8af1-6a424fb56805_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>Muriel M. Wilkins&#8217; <em>Leadership Unblocked</em> offers a research-based self-coaching framework for identifying the hidden beliefs that can limit our impact at work. Although the book is not written for UX, I thought the content mapped directly to what UXers face in our day-to-day work, so I wanted to write about that.</p><div><hr></div><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039;NOTE: </strong>This article is based on part of the opening keynote I gave at the <a href="https://uxpa2026.org/">2026 UXPA International Conference in Las Vegas</a>. The keynote went much deeper, but this article offers a shorter look at the core ideas from that talk. enjoy!</p></div><p>For the record, I am usually allergic to self-help type books. But Muriel M. Wilkins&#8217; <em><a href="https://www.murielwilkins.com/book/leadership-unblocked">Leadership Unblocked: Break Through the Beliefs That Limit Your Potential</a></em> landed differently with me. This book is not about UX in any way, but as I read it, I could not stop thinking, &#8220;This is really a book about UX.&#8221; I was doing the transference in my head the whole time.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!T0AT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T0AT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png 424w, https://substackcdn.com/image/fetch/$s_!T0AT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png 848w, https://substackcdn.com/image/fetch/$s_!T0AT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!T0AT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T0AT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png" width="265" height="409.65065502183404" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7240bb01-f930-4309-812d-b500b9727b10_687x1062.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1062,&quot;width&quot;:687,&quot;resizeWidth&quot;:265,&quot;bytes&quot;:653427,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/203842816?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T0AT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png 424w, https://substackcdn.com/image/fetch/$s_!T0AT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png 848w, https://substackcdn.com/image/fetch/$s_!T0AT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png 1272w, https://substackcdn.com/image/fetch/$s_!T0AT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7240bb01-f930-4309-812d-b500b9727b10_687x1062.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Wilkins is writing about the negative self-talk that limits leadership potential. But I&#8217;ve noticed these same patterns of negative self-talk show up all over UX work as well. What made the book especially useful to me is that the framework did not feel like generic self-help advice. The ideas are grounded in peer-reviewed research across psychology, neuroscience, cognitive science, behavioral science, and change management research, with references to work from reputable institutions like Harvard and Stanford. That made the &#8220;self-help&#8221; side of the book feel more connected to the real world, which I really appreciated. It is not just a book about leadership in the formal sense. It is a self-coaching framework for noticing the beliefs that shape how we respond when work gets frustrating, ambiguous, political, or hard. And that makes it highly transferable to UX. Here&#8217;s a breakdown of the book.</p><h1>The Book&#8217;s Core Idea</h1><p>Wilkins describes 7 hidden blockers:</p><ol><li><p>I need to be involved.</p></li><li><p>I need it done now.</p></li><li><p>I know I&#8217;m right.</p></li><li><p>I can&#8217;t make a mistake.</p></li><li><p>If I can do it, so can you.</p></li><li><p>I can&#8217;t say no.</p></li><li><p>I don&#8217;t belong here.</p></li></ol><p>Like I said, the book is research-based, drawing from the author&#8217;s decades of coaching conversations and research from a bunch of different fields of study. That matters to me because these blockers are not presented as random personality quirks or case study anecdotes. They are treated as learned patterns that can shape how people interpret situations, protect themselves, and respond under pressure in the real world. </p><p>That is where the self-coaching framework comes in. The work is not just to name the &#8220;blocker,&#8221; the intrusive negative self-talk. It is to notice it, understand how that blocker might have benefited you in the past, challenge the current cost of still carrying it, reframe it, and practice a different behavior.</p><p>Wilkins provides reframing examples for each of the 7 blockers in the book. That part especially caught my attention because reframing is also one of the most practical moves UX professionals can make. UX work constantly requires us to reframe vague requests, problem statements, stakeholder assumptions, product risks, and team conversations.</p><p>So I started asking myself a different question. What would these reframes look like if they were written specifically for UX?</p><h1>The 4 Traps</h1><p>As I transferred the book into UX-speak, the 7 blockers started to organize into 4 larger traps in my head:</p><ol><li><p>The Over-Functioning Trap</p></li><li><p>The Pacing and Perfection Trap</p></li><li><p>The Partnership Trap</p></li><li><p>UX Leader Identity Trap</p></li></ol><p>These traps are not about UX executives or people who formally run UX teams. They are about UX professionals at any level who are trying to create better product decisions through research, design, content, accessibility, systems thinking, and user understanding.</p><p>The traps are not signs that a UX professional is doing anything wrong. That is the tricky part to explain, and the book does a great job exploring how most of these blockers start with something valuable that once served or protected you, but now can block you.</p><p>Wanting to be involved can come from knowing that UX is often brought in too late. Wanting work done quickly can come from knowing that teams need timely input. Wanting to avoid mistakes can come from caring about quality. Knowing you are right can come from having strong evidence. Saying yes can come from wanting to be collaborative. Feeling out of place can come from years of being treated as support instead of a strategic contributor.</p><div class="pullquote"><p>The blocker is not the value itself. The blocker is what happens when that value turns into an automatic reaction.</p></div><h1>The Over-Functioning Trap</h1><p>The Over-Functioning Trap combines 2 blockers:</p><ol><li><p>I need to be involved.</p></li><li><p>I can&#8217;t say no.</p></li></ol><p>This trap shows up when UX tries to personally carry too many decisions. This is where we confuse being included with providing value. We confuse being responsive with being valuable.</p><h3>The Reframes:</h3><blockquote><p>&#8220;I need to be involved&#8221; becomes:</p><p><strong>I need to be involved where I add the most value.</strong></p></blockquote><p><em>and</em></p><blockquote><p>&#8220;I can&#8217;t say no&#8221; becomes:</p><p><strong>I can&#8217;t say no when the work truly matters.</strong></p></blockquote><p>That is a hard shift because many UX professionals have been trained by their organizations to equate access with progress. If we finally get invited, we go. If someone finally asks for UX input, we provide it. If a team finally wants help, we say yes. But the more mature move is not always more involvement. The key takeaway here is sometimes the mature move is better involvement.</p><h1>The Pacing and Perfection Trap</h1><p>The Pacing and Perfection Trap combines 2 blockers:</p><ol><li><p>I need it done now.</p></li><li><p>I can&#8217;t make a mistake.</p></li></ol><p>This trap shows up when UX is either rushing from panic or waiting for perfect clarity before acting. On one side, urgency can make every decision feel equally important. A stakeholder asks for something quickly, the roadmap is moving, the release date is close, and suddenly UX is reacting at the speed of everyone else&#8217;s anxiety. We confuse moving quickly with contributing meaningfully.</p><p>On the other side, the fear of mistakes can make our credibility feel like something we have to protect at all costs. We want the research plan to be perfect. We want the design rationale to be airtight. We want the recommendation to be fully defensible. We want the artifact to be polished before anyone sees it. We confuse being careful with being untouchable within our orgs sometimes.</p><h3>The Reframes:</h3><blockquote><p>&#8220;I need it done now&#8221; becomes:</p><p><strong>I need it done with intention, not reaction.</strong></p></blockquote><p><em>and</em></p><blockquote><p>&#8220;I can&#8217;t make a mistake&#8221; becomes:</p><p><strong>I can make a mistake and still have impact.</strong></p></blockquote><p>With this pairing, both sides can create real problems, and I&#8217;m sure you can see how these two go hand in hand. If you rush, you will make more mistakes. But if you strive for pixel perfection, you may wait too long to influence the work while it is still flexible enough to change.</p><h1>The Partnership Trap</h1><p>The Partnership Trap combines 2 blockers:</p><ol><li><p>I know I&#8217;m right.</p></li><li><p>If I can do it, so can you.</p></li></ol><p>This trap shows up when UX assumes being right is enough to create influence. We all know that is a very easy trap to fall into because UX often does know something important. We may have the research. We may have watched the usability sessions. We may best understand the workflow. We may see the content problem, the accessibility risk, the broken mental model, or the disconnect between what the team thinks and what users actually do. But evidence and knowledge does not automatically create alignment.</p><p>Sometimes evidence can make our conclusions feel obvious before other people even begin to understand them.</p><div class="pullquote"><p>We forget that user-centered thinking has become familiar to us because we have practiced it for years. What feels like common sense to us may be completely new to someone else.</p></div><p>We commonly confuse having knowledge with already having alignment, and we also confuse what we have learned with what others should already know. Confirmation bias can make the evidence feel obvious because it supports what we already believe, while the false consensus effect can make us assume other people will interpret the situation the same way we do.</p><h3>The Reframes:</h3><blockquote><p>&#8220;I know I&#8217;m right&#8221; becomes:</p><p><strong>I might be right, but I still need to translate.</strong></p></blockquote><p><em>and</em></p><blockquote><p>&#8220;If I can do it, so can you&#8221; becomes:</p><p><strong>If I can do it, I can help others learn it.</strong></p></blockquote><p>This is one of the most important UX lessons in the book. Let me clarify: this does not mean the dreaded &#8220;democratizing UX&#8221; meme. I am not talking about teaching others to do UX. I am talking about teaching people how to best utilize UXers in the real world. Our value is not proving that UX has the better answer. Our value is helping people understand what our expertise means for the decision. Bottom line: translation is part of the job. UX expertise becomes more useful when other people can act on it.</p><h1>UX Leader Identity Trap</h1><p>The UX Leader Identity Trap Trap connects to the final blocker:</p><ul><li><p>I don&#8217;t belong here.</p></li></ul><p>This trap shows up when UX waits for permission to contribute to strategic work. A strategic room can make UX professionals feel like they are there to support, not contribute. The conversation may be about revenue, roadmap tradeoffs, operational efficiency, engineering constraints, sales pressure, market positioning, or delivery commitments. Because the language is not always explicitly about users, it can be tempting to wait until someone asks a UX-shaped question.</p><div class="pullquote"><p>But many strategic conversations are inherently UX conversations. We just need to bring that UX lens to the table.</p></div><p>If a decision affects adoption, behavior, trust, comprehension, usability, accessibility, retention, or customer effort, UX has something to contribute. UX may not own the final decision, but that does not mean UX has no authority to shape it.</p><h3>The Reframe:</h3><blockquote><p>&#8220;I don&#8217;t belong here&#8221; becomes:</p><p><strong>I do belong here because my work impacts outcomes.</strong></p></blockquote><p>Our value is not waiting to be invited into strategy. Our value is bringing UX expertise into strategic work across the organization.</p><p>Again, this is not only for people with formal leadership titles. A researcher can bring evidence into a roadmap conversation. A designer can make a product risk visible before a solution is locked. A content designer can show how language affects comprehension and trust. An accessibility specialist can explain how an experience creates exclusion or risk. Design systems folks can connect pattern decisions to speed, consistency, and quality.</p><p>We need to internalize that UX belongs anywhere the decision depends on how people will understand, use, trust, or experience the product. In other words, basically every strategic decision. Hahahaha</p><h1>Repeatable Self-Coaching Loop</h1><p>The practical value of the book is that it gives you a way to work with these blockers instead of just feeling bad about them.</p><p>For UX, I would make the loop (the framework) very simple:</p><p><strong>Notice. Name. Reframe. Practice. Unblocked.</strong></p><ul><li><p>Notice the reaction.</p></li><li><p>Name the blocker.</p></li><li><p>Reframe the belief.</p></li><li><p>Practice a different behavior.</p></li><li><p>Get a little more unblocked, Rinse and repeat</p></li></ul><h3>Loop Triggers:</h3><ul><li><p>Before saying yes to another request, notice whether you are trying to be helpful or trying to prove UX has value.</p></li><li><p>Before joining another meeting, ask whether your presence will change the quality of the decision.</p></li><li><p>Before pushing evidence harder, ask whether people understand what the evidence means.</p></li><li><p>Before waiting for perfect confidence, ask whether a useful next step would create more learning.</p></li><li><p>Before staying quiet in a strategic conversation, ask whether user behavior, experience quality, or product risk is actually part of the decision.</p></li></ul><p>That is the usefulness of this book for UX. It gives us a way to slow down the automatic reaction and choose a more intentional move.</p><h1>Conclusion</h1><p><em>Leadership Unblocked</em> is not a UX book, but you should buy it and read it as if it were one.</p><p>The book gave me language for patterns I see all the time in my day-to-day work. But more importantly, it gave me a way to reframe things and center my efforts around what is actually within my control.</p><div class="pullquote"><p>The outside world does not dictate how you have to react, and this book gives you the tools to identify when an old belief is shaping your response, question whether that belief is still serving you, and choose a more intentional next best move.</p></div><p>UX professionals are often working inside systems that really do bring UX in late, undervalue discovery, misuse data, reward speed over learning, and treat experience quality as something to clean up after the real decisions have already been made. But even in those systems, our beliefs shape our next move. That is why the self-coaching frame works in the real world. And that is how UX gets unblocked.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Top 5 A/B Testing Articles]]></title><description><![CDATA[My Thoughts on A/B Testing in One Place]]></description><link>https://trevorcalabro.substack.com/p/top-5-ab-testing-articles</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/top-5-ab-testing-articles</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 20 Jun 2026 15:56:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0a4db51a-8175-4072-bf87-2312e1308352_694x619.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>This is a one-stop shop for my articles on A/B testing and related statistical comparisons. I pulled these links together so they are easier to find, read together, and share among teams. You won&#8217;t find this info, organized in this way, anywhere else on the web. Check it out!</p><div><hr></div><p>I recently wrote a couple of articles about A/B testing, and after publishing them, subscribers started reaching out with a bunch of follow-up questions. I responded to a handful of them until I realized I had already talked about this stuff in older posts! </p><p>So rather than keep sending people five different links in separate replies, I wanted to put everything in one place. This post is basically a reference list for my thoughts on A/B testing, sample sizing, multivariate testing, chi-squared testing, and the ways experiment results can mislead teams when they are read too narrowly. The shared theme across these articles is that A/B testing is useful when it is framed well, sized for the real world, and the data isn&#8217;t weaponized or misinterpreted. Enjoy!</p><h1>Top 5 A/B Testing Articles</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!M0rw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M0rw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png 424w, https://substackcdn.com/image/fetch/$s_!M0rw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png 848w, https://substackcdn.com/image/fetch/$s_!M0rw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png 1272w, https://substackcdn.com/image/fetch/$s_!M0rw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M0rw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png" width="323" height="147.74587912087912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:666,&quot;width&quot;:1456,&quot;resizeWidth&quot;:323,&quot;bytes&quot;:1143078,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/202854327?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M0rw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png 424w, https://substackcdn.com/image/fetch/$s_!M0rw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png 848w, https://substackcdn.com/image/fetch/$s_!M0rw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png 1272w, https://substackcdn.com/image/fetch/$s_!M0rw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6c238653-d174-4e5b-a661-f95d2d4b3412_1854x848.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><ol><li><p><strong><a href="https://trevorcalabro.substack.com/p/ab-test-strategies-that-work"><span data-color="#04557e" style="color: rgb(4, 85, 126);">A/B Test Strategies That Work</span></a></strong><br>This article is about making A/B tests more useful before the test ever goes live. It focuses on the strategy behind the comparison, including how to define a better hypothesis, choose a meaningful outcome, and avoid running tests that look rigorous but do not actually help the team make a better product decision.<br></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!502Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!502Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!502Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!502Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!502Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!502Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg" width="297" height="221.34497816593887" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:687,&quot;resizeWidth&quot;:297,&quot;bytes&quot;:105224,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/202854327?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!502Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!502Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!502Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!502Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf09e61a-1d0e-4854-97b9-2d585bd75809_687x512.jpeg 1456w" sizes="100vw"></picture><div></div></div></a></figure></div></li><li><p><strong><a href="https://trevorcalabro.substack.com/p/ab-test-sample-sizing"><span data-color="#04557e" style="color: rgb(4, 85, 126);">A/B Test Sample Sizing</span></a></strong><br>This post is a companion piece to the A/B Test Strategies That Work article above. It explains why sample size matters, what inputs shape it, and how concepts like baseline rate, minimum detectable effect, confidence, and power connect back to the decision the team is trying to make.<br></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!EGa1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!EGa1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EGa1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EGa1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EGa1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!EGa1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg" width="283" height="147.66749688667497" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:419,&quot;width&quot;:803,&quot;resizeWidth&quot;:283,&quot;bytes&quot;:101481,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/202854327?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!EGa1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg 424w, https://substackcdn.com/image/fetch/$s_!EGa1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg 848w, https://substackcdn.com/image/fetch/$s_!EGa1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!EGa1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7756fb72-c489-4499-a83b-3088e57fbe2a_803x419.jpeg 1456w" sizes="100vw"></picture><div></div></div></a></figure></div></li><li><p><strong><a href="https://trevorcalabro.substack.com/p/another-way-ab-tests-mislead"><span data-color="#04557e" style="color: rgb(4, 85, 126);">Another Way A/B Tests Mislead</span></a></strong><br>This article looks at how A/B tests can still mislead teams even when the test itself seems reasonable. It is mostly about interpretation, especially the risk of treating a winning variation as automatically better without asking what changed, what the metric actually captured, and what the result does not explain.<br></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H89I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H89I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H89I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H89I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H89I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H89I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg" width="169" height="144.6555323590814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:410,&quot;width&quot;:479,&quot;resizeWidth&quot;:169,&quot;bytes&quot;:78423,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/202854327?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H89I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H89I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H89I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H89I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6147aef0-8b2a-4d76-bb04-49f18be38b15_479x410.jpeg 1456w" sizes="100vw"></picture><div></div></div></a></figure></div></li><li><p><strong><a href="https://trevorcalabro.substack.com/p/how-to-conduct-a-multivariate-test"><span data-color="#04557e" style="color: rgb(4, 85, 126);">How to Conduct a Multivariate Test Using Excel or Google Sheets</span></a></strong><span data-color="#1155cc" style="color: rgb(17, 85, 204);"><br></span>This post is a practical walkthrough for comparing multiple variables instead of forcing every product question into a simple A/B structure. It shows how a multivariate test can help separate the effects of different design elements, and it keeps the method approachable by using tools many teams already have access to.<br></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s3tk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s3tk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s3tk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s3tk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s3tk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s3tk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg" width="179" height="139.9727463312369" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:373,&quot;width&quot;:477,&quot;resizeWidth&quot;:179,&quot;bytes&quot;:38319,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/202854327?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s3tk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg 424w, https://substackcdn.com/image/fetch/$s_!s3tk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg 848w, https://substackcdn.com/image/fetch/$s_!s3tk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!s3tk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F59b9e938-e6e3-4a15-bb1e-bb0a359e8637_477x373.jpeg 1456w" sizes="100vw"></picture><div></div></div></a></figure></div></li><li><p><strong><a href="https://trevorcalabro.substack.com/p/more-meaningful-comparisons-with"><span data-color="#056697" style="color: rgb(5, 102, 151);">More Meaningful Comparisons With Chi-squared Testing</span></a></strong><br>This article is about using chi-squared testing to make better comparisons when the data is categorical. That matters for A/B testing because a lot of product and UX outcomes show up as counts, choices, completions, failures, clicks, selections, or other patterns that are usually compared too casually with percentages alone.</p></li></ol><h1>Conclusion</h1><p>I think these articles work well as a set because they cover different parts of the same broader problems I see in my day-to-day work. Knowing this stuff better is where UX researchers can really add a lot of value.</p><div class="pullquote"><p>UXRs can help teams think through what is actually being tested and make sure our &#8220;move fast and break things&#8221; PM partners are not using A/B testing in ways that cause more harm than good.</p></div><p>If your team uses A/B testing, is trying to use it more often, or is trying to get better at interpreting experiment results, these 5 posts are a good place to start. They are not meant to make experimentation feel more complicated for the sake of it. They are meant to make the method more useful in the real-world conditions where product decisions actually happen.</p><p>Thanks for reading, and I hope having these articles in one place makes them easier to use. If any of them help you have a better conversation about A/B testing, sample sizing, or statistical comparisons in your org, I would love to hear about it.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[UX Research as a Service]]></title><description><![CDATA[Hear Me Out Please]]></description><link>https://trevorcalabro.substack.com/p/ux-research-as-a-service</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/ux-research-as-a-service</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 13 Jun 2026 18:38:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0da9ea7b-f839-48dd-bec2-08269acbd5eb_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary:</strong> UX research should think more explicitly about service, but not in the weak sense of taking orders or waiting for study requests. I mean something more like a professional service model that puts user research closer to the decisions that shape the product, which is exactly what makes it more strategic.</p><div><hr></div><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; Disclaimer:<br></strong>Two and a half years ago, I wrote about my <a href="https://trevorcalabro.substack.com/p/introducing-the-opt-in-approach-for?utm_source=publication-search">Opt-In Approach philosophy</a> for having impact and influence in our orgs. After some confusion and criticism, I then wrote about how the <a href="https://trevorcalabro.substack.com/p/applying-the-opt-in-approach-to-building?utm_source=publication-search">Opt-In Approach could be implemented in the real world</a>. </p><p>I haven&#8217;t touched the subject since because people kept misunderstanding and misquoting what I said in those articles. So over the last two and a half years, I said I would not post about the topic again until I had a better way to communicate my thoughts. This article is me finally doing that.</p></div><p>When I talk to other UX researchers about the idea that research should operate more like a service, I often get the same kind of pushback. People hear &#8220;service&#8221; and assume I mean something passive. They think I am talking about researchers waiting for requests, taking orders from other disciplines, and producing whatever study someone asks for. <strong>That is not what I mean.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SzbS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SzbS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SzbS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SzbS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SzbS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SzbS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg" width="217" height="297.7184713375796" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1077,&quot;width&quot;:785,&quot;resizeWidth&quot;:217,&quot;bytes&quot;:341088,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/201896911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SzbS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SzbS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SzbS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SzbS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa108edc0-0b99-4a04-99ba-f43cb9b01800_785x1077.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>When I say UX research should think of itself as a service, I mean service in the professional sense. A good service has judgment, standards, expertise, and responsibility for helping the people around it get better outcomes. It does not simply fulfill requests. It helps clarify what is actually needed.</p><p>This distinction matters because UX research can drift into some unhelpful patterns that I know you are all familiar with. One version is too removed from the work and only appears when a formal study is needed. Another version is too reactive and mostly responds to the next incoming request. Neither version is ideal for building digital products in the real world, where uncertainty is constant and decisions are being made long before a formal research plan exists.</p><p>The service model I am talking about is much closer to <a href="https://www.nsls.org/blog/what-is-servant-leadership-and-how-to-apply-it">servant leadership</a> than order-taking. The researcher is there to help the team do better work. That includes helping other UXers think through tradeoffs, helping Product folks understand uncertainty, and helping the broader team avoid building too much confidence around things they have not actually learned yet.</p><h1><strong>Service Makes Research More Strategic</strong></h1><p>The main argument is that service does not make research less strategic. It makes research more strategic because it puts research closer to the decisions that shape the product.</p><p>Over the last 20+ years, I&#8217;ve noticed that the researchers who have the most influence are often the ones who are useful throughout the work. They are close enough to see how decisions are forming, where assumptions are hardening, and where evidence would actually change direction. That kind of influence rarely comes from waiting until someone asks for a formal study. It comes from being involved early enough to shape the questions the team is asking in the first place.</p><p>And once you demonstrate this, your influence is likely to grow organically because, by serving others up real-world results, you place yourself front and center in the minds of your colleagues as someone who can help them succeed with your research knowledge.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!HJzJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HJzJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HJzJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HJzJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HJzJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HJzJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg" width="300" height="300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:384,&quot;width&quot;:384,&quot;resizeWidth&quot;:300,&quot;bytes&quot;:55403,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/201896911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HJzJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HJzJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HJzJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HJzJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06851a1a-4984-40a6-bb23-d34d618c764a_384x384.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This is where I think researchers sometimes get trapped by the language of strategy. We can start to believe that strategic research has to be big, formal, highly visible, or removed from the day-to-day mess of product work. In my experience, the opposite is often true. Research becomes more strategic when it is close to the real decisions, close to the people making those decisions, and close to the moments where uncertainty could send the work in the wrong direction.</p><div class="pullquote"><p>That does not mean every project needs more research. A service mindset should not make the process heavier. The point is to help the team spend its learning effort where it matters most.</p></div><h1><strong>Service Starts During Shaping</strong></h1><p>The best place for research to become useful is usually earlier than people think. Before there is a prototype, before the design direction has hardened, and sometimes before the team has fully agreed on the problem, there is already research work to do.</p><p>Project shaping is where Product, UX strategy, UX Design, and UX research should be working together. Product may be thinking about value, priority, constraints, and business direction. UX strategy and design may be thinking about experience direction, workflow implications, information architecture, and how the work fits into the broader product ecosystem. Research can add another layer by making user uncertainty visible before it gets buried inside requirements.</p><p><strong>During project shaping, researchers can help the team answer practical questions:</strong></p><ul><li><p>Which problem are we actually trying to solve?</p></li><li><p>Who is affected by it?</p></li><li><p>Which decisions have already been made?</p></li><li><p>Where does the team still have room to change direction?</p></li><li><p>What evidence do we already have from our own past research, foundational secondary research, usage analytics, support tickets, sales feedback, or previous usability issues?</p></li><li><p>Which assumptions are being carried forward mainly because the project needs momentum?</p></li></ul><p>This work is easy to undervalue because it does not always look like a formal research method. But, in my experience it can be one of the most important research contributions in the project.</p><div class="pullquote"><p>A researcher can help the team name the riskiest assumptions before those assumptions turn into requirements. Not every unknown needs a study, but every project benefits from knowing which unknowns matter.</p></div><h1><strong>Pairing Closely With Other UXers</strong></h1><p>Once a project moves from shaping into design, the UX researcher&#8217;s role should change in its nature. More close pairing with UX design and strategy professionals can be especially useful at this stage because they are usually among the first people who have to make the project real.</p><p>This is often where bad assumptions start showing up inside the actual experience. Many of those assumptions are reasonable, but reasonable assumptions can still be wrong.</p><p><strong>You can see this translation happen in small ways:</strong></p><ul><li><p>A vague idea becomes a workflow.</p></li><li><p>A strategic goal turns into a screen.</p></li><li><p>A loose requirement becomes decisions about hierarchy, sequence, content, layout, and interaction behavior.</p></li></ul><p>A researcher paired closely with other UXers can help make those assumptions easier to see. The value comes from understanding the design direction, the tradeoffs being considered, and the moments where user evidence would actually change the work.</p><p><strong>The researcher&#8217;s contribution might include:</strong></p><ul><li><p>Running a formal study when the risk is high enough to justify one.</p></li><li><p>Running a lightweight study that will still help the team make a better decision without changing the current pace of work.</p></li><li><p>Reviewing prior findings when the team already has relevant evidence.</p></li><li><p>Holding a quick working session to pressure-test a workflow.</p></li><li><p>Reframing a preference debate around usability, user behavior, or product risk.</p></li><li><p>Recommending that the team move forward because the existing evidence is already strong enough.</p></li></ul><div class="pullquote"><p>That last point matters because researchers can also help by saying, &#8220;We already have enough evidence to make this decision.&#8221; That is an important part of the job, but people do not talk about it enough.</p></div><p>This is an example of the service mindset in practice. The researcher is not trying to own the UX decision. The researcher is helping other UXers make the decision with better information and fewer hidden assumptions.</p><h1><strong>See Uncertainty Earlier</strong></h1><p>Research can also serve the project by helping Product see uncertainty more clearly. A lot of software planning treats uncertainty as if it is mostly a scope or timeline issue. Those things matter, but user uncertainty can be just as disruptive.</p><p><strong>User uncertainty shows up in practical ways:</strong></p><ul><li><p>Unclear primary users can distort scope.</p></li><li><p>Competing workflows can create sequencing problems.</p></li><li><p>Weak concept understanding can affect both design and development.</p></li><li><p>Low confidence in whether the new experience improves the old one can affect launch decisions.</p></li></ul><p>A researcher can help sort these questions into practical categories. Some need to be answered before design moves too far. Others can be explored while UX is working through options. For example, prototype testing may be the right place for interaction-level concerns, while post-launch measurement may be better for adoption or behavior questions. There will also be questions that are interesting, but not important enough to slow the project.</p><p>For a product manager, this can mean clearer decision-making around priority and release confidence. For a project manager, it can mean a better understanding of which unknowns may affect sequencing, dependencies, or rework. For the broader team, it means uncertainty becomes something visible and manageable instead of something everyone quietly works around.</p><div class="pullquote"><p>Good UX research as a service does not mean adding extra research work to every project. It is about helping the team learn the right things at the right time.</p></div><p>And if you do this enough times in a row, you will be seen as a go-to person who needs to be in the room to ensure quality work goes out the door.</p><p>I hope you are starting to see how this service model works in a show-not-tell way? Once you see your stakeholders reaching out to you to contribute, you will understand the true power you hold when it is their idea to bring you to the table.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NDoN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NDoN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NDoN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NDoN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NDoN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NDoN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg" width="268" height="333.2883211678832" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1363,&quot;width&quot;:1096,&quot;resizeWidth&quot;:268,&quot;bytes&quot;:451338,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/201896911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NDoN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NDoN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NDoN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NDoN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6287b2c7-c5f1-45b0-98a5-e219cf6fde1f_1096x1363.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1><strong>Prototype, Testing, and Build</strong></h1><p>As the work moves into formal prototyping, the user researcher can help make sure the prototype can answer the team&#8217;s real questions. For example, A prototype built for stakeholder review is not always the same as a prototype built for user testing. For research, the prototype needs enough realism around the task, the context, and the important decision points. It does not need to be perfect. It needs to support the learning the team actually needs.</p><p>Close pairing with UX designers matters here as well because the UX researcher can help define the tasks, identify the moments that need attention, and keep the study focused on decisions instead of general reactions. (You know, the data-based decisions every org raves about but few actually use. hahahaha.)<em> </em>That focus becomes much easier when the researcher has been involved since project shaping and understands what the team is trying to learn.</p><p>When evaluative research happens, the study should be stronger because the researcher already understands the project. They know the constraints, (technical and strategic) the reason certain decisions were made, the parts of the design that can still change, and the findings that would affect the next decision.</p><p><strong>That context changes the output. Instead of producing a generic list of findings, the researcher can connect findings to the project&#8217;s actual choices:</strong></p><ul><li><p>A primary workflow issue may need to be fixed before release.</p></li><li><p>A language issue may need a content change rather than a structural redesign.</p></li><li><p>A mismatch between the team&#8217;s model and the user&#8217;s model may require rethinking the flow.</p></li><li><p>A real usability issue may still be small enough to monitor after launch instead of delaying the release.</p></li></ul><p>After the study, the researcher should stay close enough to help the team use what was learned. This does not mean the researcher becomes the designer, strategist, product manager, or project manager. It means the researcher stays in the work long enough for the findings to influence the decisions they were meant to inform.</p><h1><strong>Post-Launch</strong></h1><p>And of course, your service should not end when the design is handed off or when the readout is delivered. After launch, the team still needs to learn whether the work actually helped.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OofS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OofS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OofS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OofS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OofS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OofS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg" width="189" height="241.52727272727273" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:492,&quot;width&quot;:385,&quot;resizeWidth&quot;:189,&quot;bytes&quot;:94911,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/201896911?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OofS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg 424w, https://substackcdn.com/image/fetch/$s_!OofS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg 848w, https://substackcdn.com/image/fetch/$s_!OofS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!OofS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F201f9404-cf61-4d4c-93c5-34c1403f57b7_385x492.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Post-launch learning can focus on practical questions:</strong></p><ul><li><p>Are users completing the workflow more easily?</p></li><li><p>Have support tickets changed?</p></li><li><p>Are people even using the feature?<em> Hahahaha</em></p></li><li><p>Did a problem move somewhere else?</p></li><li><p>Was the original project goal actually addressed?</p></li></ul><p>Post-launch learning closes the loop and gives the next project a stronger starting point. Research becomes part of how the organization remembers what happened, what worked, what did not, and what should be watched next time.</p><h1><strong>Conclusion</strong></h1><p>My broader appeal here is quite simple. I&#8217;m convinced that UX research can be a service that helps software teams move through uncertainty with more honesty and less waste. That user research as a service starts in project shaping, pairs closely with UX design and strategy, supports Product, informs testing, stays connected through build, and helps the team learn after launch.</p><p>This is not the version of an all-too-typical UX research department where researchers either become order takers, stay too far removed from the work until a formal study is requested, or have little to no autonomy. It is a more embedded version of UX research where the goal is to help the team through your own expertise, judgment, and understanding of user behavior.</p><div class="pullquote"><p>The goal is not to make researchers more passive. The goal is to make research more useful at the moments, just-in-time, where product decisions are actually being made.</p></div><p>That is why I keep coming back to service as the frame. Insights and influence matter, but they are incomplete without usefulness. If UX research wants to matter more inside software orgs, it needs to be close enough to serve the work as it is taking shape. That might be the most strategic version of research we can possibly have. Thanks for reading my rant!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[The Rules of AI Chat History]]></title><description><![CDATA[A Real-World Framework for Designing Good Chatbot Experiences]]></description><link>https://trevorcalabro.substack.com/p/the-rules-of-ai-chat-history</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/the-rules-of-ai-chat-history</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 06 Jun 2026 13:00:34 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/0a0ade38-bcac-47c0-901b-ea97a471b216_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>This is a practical guide that explains how to design chatbot history around separate tasks, scannable interaction records, and persistent output workspaces, so users can understand chat context and continue their workflows.</p><div><hr></div><p>I was recently asked whether we have any data on how best to design an AI chatbot&#8217;s history by a team that was adding one to its website. Aren&#8217;t we all doing this these days? <em>Hahahaha</em>. This week&#8217;s article goes through what I learned while diving into the topic and is formatted somewhat like the documentation I originally wrote for the team that asked.</p><p>Of course, we&#8217;ll cover the basics, like how AI chatbots commonly generate <em>looooooong </em>responses and use multiple data sources, both of which pose a bunch of challenges. We&#8217;ll also look at how, over time, the standard back-and-forth chat format has proven to be confusing for users. But then we&#8217;ll talk about how these facts help us understand the best way to design the interface, the navigation system, the model&#8217;s context, the activity log, and the place where finished work is stored in a strategically designed AI chatbot.</p><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; Disclaimer:</strong> This guidance was originally developed for complex, product-specific AI chatbots that support substantial tasks or produce detailed outputs. So, it might be a little overkill for a simple site chatbot that answers short, one-off questions. With that said, following these recommendations for any AI chatbot will help ensure a gold-standard experience for your users.</p></div><h1>The Recommended History Model</h1><p>My default recommendation is to design AI chatbot history as three connected layers. Each layer supports a different part of the user&#8217;s work and prevents the standard chat transcript from carrying the full weight of the experience.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Z4zV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Z4zV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Z4zV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Z4zV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Z4zV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Z4zV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg" width="465" height="345.22727272727275" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:931,&quot;width&quot;:1254,&quot;resizeWidth&quot;:465,&quot;bytes&quot;:594495,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/200801171?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Z4zV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Z4zV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Z4zV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Z4zV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8bc8cf4c-3729-496c-9a62-829396c792bd_1254x931.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Layer 1: Task history - </strong>This is the highest-level history view. It contains separate conversations, tasks, or background jobs that users can reopen independently.</p></li><li><p><strong>Layer 2: Interaction history - </strong>This is the sequence of instructions, clarifications, system actions, and responses within a task. Older interactions should become easier to scan as the history grows.</p></li><li><p><strong>Layer 3: Output workspace - </strong>This is where substantial results live. Reports, drafts, tables, analyses, and other detailed outputs should remain accessible without forcing users to find them inside the conversation timeline.</p></li></ul><p>These layers may appear together in a single interface, but they should not be treated as the same thing. A list of tasks helps users decide where to go, the interaction history explains what happened, and the output workspace contains the work they actually need.</p><h1>Layer 1: Task History</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gMgi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gMgi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gMgi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gMgi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gMgi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gMgi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg" width="465" height="345.22727272727275" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:931,&quot;width&quot;:1254,&quot;resizeWidth&quot;:465,&quot;bytes&quot;:433968,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/200801171?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gMgi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gMgi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gMgi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gMgi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5838431b-db02-4168-9975-c53a9b3eaa3c_1254x931.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Define Task Boundaries</h2><p>Before deciding how chat history should look, the team needs to define what counts as a separate task. This is the most important design decision because it determines when the product should reuse existing context and when it should begin with a clean context.</p><p>In the context of a chatbot, a task is a self-contained request that a user asks the system to complete. It has a specific goal and a clear point at which it can be considered finished. The user should also be able to return to the task later and review its result without needing to revisit unrelated conversations.</p><p>An example of this could be if a user asks an account-support chatbot to reset their account-access privileges, or something like that. Then, imagine after resolving that issue, the user asks to update their personal info in that account. Both requests relate to the same account, but they involve different goals, system actions, and completion states.</p><div class="pullquote"><p>Placing both tasks inside one continuous history may seem like a convenient design choice at first. It also creates opportunities for context from the completed access issue to influence the profile update task in ways the user does not expect.</p></div><p><strong>Use the following questions when deciding whether a new instruction belongs in the current task:</strong></p><ul><li><p>Is the user still working toward the same outcome?</p></li><li><p>Does the new instruction modify or refine the existing output?</p></li><li><p>Will the same source material and context remain relevant within this task?</p></li><li><p>Would the user reasonably want to reopen both parts of the work together later?</p></li><li><p>Does the current task need to remain active for the new request to make sense?</p></li></ul><p>A new task is usually appropriate when the user changes the desired outcome, introduces substantially different source material, or starts work that will be reviewed separately. A new task may also be safer when earlier context could distort the system&#8217;s response.</p><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>A subject change does not always mean the user has started a new task. The system needs to recognize the difference between refining an existing goal and introducing an independent goal. This is an extremely important nuance that you&#8217;ll need to define upfront to create a successful chat experience.</p></div><h2>Use Task-Separated Threads</h2><p>Once you have defined what counts as a separate task, you need to decide how those tasks will appear within the chat experience.</p><div class="pullquote"><p>In most cases, each distinct task should receive its own thread, task space, or background instance, while refinements and follow-up questions should remain connected to the original task.</p></div><p>This structure turns the task boundaries you defined earlier into something users can see and navigate. It gives each task its own context, outputs, and completion state while preventing unrelated work from accumulating inside one enormous conversation.</p><p>Users often remain inside an existing chat because it is already open. Starting a new thread requires an additional decision, and the consequences of staying in the current thread are usually invisible to the end user. The chat may appear to work normally even as irrelevant context continues to accumulate. We know that long conversations increase the amount of context the system must process. Depending on the base LLM&#8217;s architecture, this will almost certainly increase response time and cost. It can also make it harder for the system to determine which earlier information still matters.</p><p><code>Long sessions = more context = more tokens = more time, more cost, degraded results</code></p><p>Task separation gives the system a cleaner working context. It also gives users a more useful history because each item represents a recognizable piece of work instead of an arbitrary portion of one enormous transcript.</p><h3>Recommended Baseline</h3><p><strong>Begin with the following structure:</strong></p><ul><li><p>Create one top-level thread for each distinct user goal.</p></li><li><p>Keep refinements and follow-up questions inside the original task thread.</p></li><li><p>Start a separate thread when the user begins an independent task.</p></li><li><p>Preserve a clear relationship between related tasks when users may need to move between them.</p></li><li><p>Allow users to rename task threads using language that reflects their work.</p></li></ul><p>The interface may still use the familiar language of &#8220;chats&#8221; or &#8220;conversations.&#8221; Behind that label, the product should treat each history item as a task container with its own context, outputs, and status.</p><div class="pullquote"><p>All of this means we need to help our users recognize when starting a new task would be better.</p></div><p>The chatbot should not rely entirely on users to understand context management. Research has proven that many users will continue typing into whichever conversation is open, even after the goal has changed. This is when the system itself can suggest starting a new task when it detects a substantial shift. That suggestion should explain the practical benefit in user-centered language.</p><p><strong>For example:</strong></p><p><code>This looks like a separate account task. Start a new task so the information and progress for each request stay separate?</code></p><p>And if possible, the chatbot should let the user decline that suggestion. Automatically splitting a conversation without explanation may cause users to lose track of where their work went.</p><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE:</strong> Test the wording carefully. Language about tokens, context windows, or model limitations explains the system&#8217;s problem rather than helping the user understand the benefit.</p></div><h2>Isolate Things with Background Instances</h2><p>Users tend to think about AI chatting differently from a normal back-and-forth conversation. When they ask the system to search multiple sources, run an analysis, use several tools, or produce a detailed report, they often think of it as a task they have started and can return to later. The design should support this mental model by separating substantial background work from the main conversation and giving each task its own clear context, status, and result.</p><p>For these tasks, consider creating a dedicated task instance. Depending on the work involved, this may be a separate chat session or a background agent that can complete the task independently.</p><p>This approach helps keep unrelated instructions from entering the same working context. It also creates a natural task-history model because users start work, leave it running, and return to review the result.</p><h3>When a Background Instance Is Appropriate</h3><p><strong>A dedicated background instance is most useful when:</strong></p><ul><li><p>The task can run independently after the user provides the initial instructions.</p></li><li><p>The task uses a defined set of files, account data, or external sources.</p></li><li><p>The output has its own completion state.</p></li><li><p>The user may want to review or revise the result later.</p></li><li><p>Multiple tasks may run at the same time.</p></li><li><p>The system needs to preserve a record of the tools or sources used.</p></li></ul><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE:</strong>  Short, simple question prompts usually do not need their own background instance. For these types of questions, creating new task objects too liberally can clutter the history and make simple work feel overdesigned.</p></div><p>The useful distinction is whether the system is continuing a conversation or beginning a separately reviewable piece of work. When a task will have its own status and output, a dedicated instance often makes sense.</p><h2>Design the Task List Around Review</h2><p>A background-task history should help users understand what requires attention. A chronological list alone may not be enough because recently completed work can be more important than a task that is still running.</p><p><strong>Useful task states may include:</strong></p><ul><li><p>Needs clarification</p></li><li><p>In progress</p></li><li><p>Ready for review</p></li><li><p>Completed</p></li><li><p>Failed or partially completed</p></li><li><p>Archived</p></li></ul><p>These states should be visible without opening every task. Users also need a clear path back into the work when the system requires clarification or when the result is ready to review.</p><h1>Layer 2: Interaction History</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!R9Pk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!R9Pk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!R9Pk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!R9Pk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!R9Pk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!R9Pk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg" width="464" height="344.4848484848485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:931,&quot;width&quot;:1254,&quot;resizeWidth&quot;:464,&quot;bytes&quot;:172632,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/200801171?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!R9Pk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!R9Pk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!R9Pk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!R9Pk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F339ac75b-fd80-435c-a29e-b2c42714a5e4_1254x931.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Transcript is Not History</h2><p>The typical chat layout presents each user message followed by a system response. This pattern is familiar and easy to build, but it becomes difficult to use when responses are long or the conversation contains repeated revisions.</p><p>Imagine a user who asks an AI chatbot to analyze several documents and draft a report. The user then asks for a different structure, requests a revised table, and changes the intended audience. The latest report may be useful, but it now sits underneath several earlier versions and a large amount of explanatory text. The problem with this is that although the transcript accurately records what happened, it does not help users find or interact with the current result.</p><div class="pullquote"><p>Chat history should support retrieval and review, not merely preserve the chronological exchange. Users need to locate important instructions, understand how an output changed, and return to the latest useful version without rereading the whole conversation.</p></div><h2>Separate Events from Results</h2><p><strong>Within a task, the history may contain several different types of info:</strong></p><ul><li><p>User instructions</p></li><li><p>Clarifying questions</p></li><li><p>Tool activity</p></li><li><p>Intermediate findings</p></li><li><p>Errors and recovery actions</p></li><li><p>Completed outputs</p></li></ul><p>These items should not necessarily receive equal visual weight. The user&#8217;s original instruction and the final output may be central to the work, while a routine tool action may only matter when something goes wrong.</p><p>The design should preserve enough history to support trust and recovery. It should also reduce the amount of low-value detail that users must scan during normal use.</p><h2>Surface Meaningful Milestones</h2><p>This is the last frame of reference you&#8217;ll need to consider when matching your users&#8217; default mental models for chatbots. Consider turning important moments in the interaction into recognizable milestones. A milestone could represent the initial request, a major change in direction, a user-approved decision, or a completed output.</p><p>Milestones make the history easier to navigate because they reflect the structure of the work. They also help users understand why two outputs differ when the conversation contains several rounds of revision.</p><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>Milestones should come from meaningful changes in the task. Creating a milestone after every message would simply reproduce the transcript in a different visual format.</p></div><h2>Collapse and Expand</h2><p>Collapsing older question-and-answer pairs can make long histories easier to scan. Instead of displaying every previous exchange at full length, the interface shows each earlier interaction as a compact, consistently sized block.</p><div class="pullquote"><p>In a well-designed history feature, the user can select an earlier interaction to expand it. Other interactions can collapse automatically so the user can focus on one portion of the history without losing the broader sequence.</p></div><p>This pattern is especially useful when individual system responses are long. It reduces the amount of scrolling required to move between earlier interactions and makes the overall structure of the task more visible.</p><h3>What a Collapsed Item Should Show</h3><p>A collapsed interaction needs enough information to help the user decide whether opening it will be useful.</p><p><strong>Depending on the product, that may include:</strong></p><ul><li><p>A concise version of the user&#8217;s instruction</p></li><li><p>A short description of the resulting action or output</p></li><li><p>The interaction time</p></li><li><p>The output type</p></li><li><p>A status or warning indicator</p></li><li><p>A clear expand control</p></li></ul><p>Avoid generating vague labels such as &#8220;Follow-up question&#8221; or &#8220;Updated response.&#8221; Those labels describe the mechanics of the conversation without helping the user recognize the content.</p><p><strong>A useful collapsed item might read:</strong></p><p><code>Compare current account activity with the previous quarter<br></code><em><strong>or</strong></em><br><code>Completed analysis with 4 flagged changes</code></p><p>That description gives the user enough context to recognize the work without displaying the full response.</p><h3>Preserve Important Context While Collapsing</h3><p>Collapsing content introduces its own usability risks. Users may miss information when the system hides too much, and repeatedly opening several sections increases interaction cost.</p><p>To account for this, keep the active interaction expanded by default. Important warnings, unresolved questions, and actions that require the user&#8217;s attention should also remain visible.</p><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>The chatbot should remember which history item the user was viewing when possible. Returning users should not have to reconstruct their place each time they reopen the task.</p></div><h2>Visible and Verifiable</h2><p>Users need to understand what information influenced an AI-generated response. This becomes especially important when the chatbot uses account data, uploaded documents, previous instructions, or external market sources.</p><p>A response can sound confident even when it relies on outdated, incomplete, or irrelevant context. Showing the underlying sources gives users a better chance of noticing these problems before they act on the output.</p><p><strong>Context transparency should answer practical questions:</strong></p><ul><li><p>Which files or data sources did the system use?</p></li><li><p>Did the answer use current account data?</p></li><li><p>Which user-provided goals or constraints influenced the result?</p></li><li><p>Did the system use information from an earlier task?</p></li><li><p>Can the user inspect the specific source supporting an important claim?</p></li></ul><p>The interface should make these answers available without requiring the user to understand the system architecture.</p><h2>Add Useful Context Automatically</h2><p>A chatbot can improve an instruction by retrieving relevant context before generating the response. For example, an account-support chatbot may add the user&#8217;s current plan, permissions, and recent activity to a request when those details are necessary.</p><p>Automatic retrieval reduces the amount of information users must repeatedly provide. It also introduces a responsibility to show what the system added, especially when that context changes the answer.</p><p>The interface may show a small set of context indicators near the instruction or response. A more detailed context view can be available when the number of sources becomes too large for a few compact indicators.</p><h2>Make Citations Part of the Interaction</h2><p>For source-based responses, citations should appear near the claims they support. Users should be able to open a citation and reach the relevant part of the source instead of landing at the beginning of a long document.</p><p>Streaming citations can help users see where information is coming from as the response develops. They also make retrieval visible, which may help people understand the value and boundaries of the chatbot.</p><p>Citations still require careful design and validation. A citation creates the appearance of evidence, but it is only useful when the source exists, supports the claim, and is presented with enough context for the user to verify it.</p><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>Context transparency does not mean displaying every technical input by default. Make important context easy to inspect without requiring users to review it during every interaction. Show the sources and constraints that help users interpret or verify the answer, then provide deeper detail when needed.</p></div><h1>Layer 3: Output Workspace</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xT8I!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xT8I!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xT8I!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xT8I!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xT8I!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xT8I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg" width="464" height="344.4848484848485" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:931,&quot;width&quot;:1254,&quot;resizeWidth&quot;:464,&quot;bytes&quot;:380104,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/200801171?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xT8I!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg 424w, https://substackcdn.com/image/fetch/$s_!xT8I!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg 848w, https://substackcdn.com/image/fetch/$s_!xT8I!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!xT8I!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff9e20c44-f9dd-4373-8b50-8068842e63c7_1254x931.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Chatbot outputs should not live only inside chat messages. Reports, editable drafts, tables, plans, and data-heavy analyses need a persistent place where users can review and act on them.</p><div class="pullquote"><p>Research has proven that, in these cases, a split layout is a strong solution. The conversation and task history remain on one side, while the detailed output appears in a separate interactive panel.</p></div><p>This layout lets users keep the instruction and relevant process visible while working with the result. It also prevents the output from disappearing inside the timeline as the conversation continues.</p><h3>What Belongs in the Output Workspace</h3><p><strong>Use a dedicated output workspace when the result:</strong></p><ul><li><p>Is long enough that reading it inside a message bubble would be difficult.</p></li><li><p>Needs editing, filtering, sorting, or another form of interaction.</p></li><li><p>Has multiple versions that users may compare.</p></li><li><p>Will be exported, shared, or used outside the chatbot.</p></li><li><p>Remains useful after the conversation that produced it has ended.</p></li><li><p>Represents the main value of the task.</p></li></ul><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>The interaction history and output workspace should serve different purposes, but they need to remain clearly connected. Users should be able to understand which instructions, decisions, and system actions produced the artifact, how later revisions changed it, and where to review the process behind the result.</p></div><h2>Keep the Latest Output Easy to Find</h2><p>The output workspace should make the current version obvious. Earlier versions can remain available when they support review, comparison, or recovery.</p><p>A useful pattern is to keep the current artifact open in the output panel while the interaction timeline records the instructions that changed it. This allows the conversation to support the work without becoming the work itself.</p><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>Do not require users to identify the latest version by searching through several similarly worded assistant messages. The system already knows which output is current and should make that status visible.</p></div><h1>Evaluate the History Design</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GvsW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GvsW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GvsW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GvsW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GvsW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GvsW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg" width="472" height="351.61959654178673" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:517,&quot;width&quot;:694,&quot;resizeWidth&quot;:472,&quot;bytes&quot;:114277,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/200801171?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GvsW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GvsW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GvsW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GvsW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0e026ef5-2018-4c8e-b686-549f509f3d75_694x517.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>As UX researchers, we should always evaluate the designs we create. Chat history, as a task-management and retrieval system, is no exception. A standard chatbot usability study focused only on prompting and response quality will miss many of the problems described in this article. I&#8217;ve seen this mistake made dozens of times already.</p><div class="pullquote"><p>The full chat experience must be accounted for, or your chatbot will go unused like everyone else&#8217;s. This is the differentiator your stakeholders don&#8217;t know they need.</p></div><h2>Study Design</h2><p>Give participants histories that already contain several tasks, long responses, revised outputs, and mixed source types. Then observe whether they can understand the structure without receiving an explanation first.</p><p><strong>Ask participants to complete these tasks:</strong></p><ul><li><p>Return to a task they started several days earlier.</p></li><li><p>Locate the final output from a conversation with several revisions.</p></li><li><p>Determine which sources informed a specific response.</p></li><li><p>Start an unrelated task without contaminating the current one.</p></li><li><p>Find a task that is waiting for their review.</p></li><li><p>Compare the current output with an earlier version.</p></li><li><p>Explain what information the system is currently using as context.</p></li></ul><p>These tasks reveal whether the history supports real use over time. They also uncover whether the interface matches the user&#8217;s mental model of tasks, conversations, and outputs.</p><h2>Useful Measures and Observations</h2><p><strong>During evaluative research, consider tracking:</strong></p><ul><li><p>Time required to locate a previous output</p></li><li><p>First-click accuracy when reopening work</p></li><li><p>Frequency of users continuing unrelated work in an existing task</p></li><li><p>Ability to identify the active context correctly</p></li><li><p>Missed items requiring review or clarification</p></li><li><p>Unnecessary creation of new task threads</p></li><li><p>User confidence in the sources supporting an answer</p></li></ul><p>Qualitative follow-up is especially important. A participant may complete the task successfully while still feeling unsure about what the system remembered or why a particular output appeared.</p><h1>Chat-History Design Checklist</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x2BQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x2BQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg 424w, https://substackcdn.com/image/fetch/$s_!x2BQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg 848w, https://substackcdn.com/image/fetch/$s_!x2BQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!x2BQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x2BQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg" width="211" height="269.64155844155846" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:492,&quot;width&quot;:385,&quot;resizeWidth&quot;:211,&quot;bytes&quot;:94911,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/200801171?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!x2BQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg 424w, https://substackcdn.com/image/fetch/$s_!x2BQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg 848w, https://substackcdn.com/image/fetch/$s_!x2BQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!x2BQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd734e596-f680-4cff-a172-a1db861271d4_385x492.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Use this checklist during design reviews, requirements gathering, or concept evaluation.</p><ul><li><p>Define what counts as a discrete task for the product.</p></li><li><p>Identify when the system should recommend starting a new task.</p></li><li><p>Decide which tasks require dedicated background instances.</p></li><li><p>Keep each task&#8217;s context and outputs separate where possible.</p></li><li><p>Design the top-level history around recognizable user goals.</p></li><li><p>Make long interaction histories scannable.</p></li><li><p>Keep unresolved questions and important warnings visible.</p></li><li><p>Show which data, files, and constraints informed each important response.</p></li><li><p>Ensure citations lead users to relevant supporting content.</p></li><li><p>Give substantial outputs a persistent workspace outside the transcript.</p></li><li><p>Make the current version of an output obvious.</p></li><li><p>Test the design using populated histories and returning-user scenarios.</p></li></ul><h1>Conclusion</h1><p>Well, there you have it. Designing an AI chatbot&#8217;s history properly requires more than saving old messages and displaying them in chronological order.</p><p>The main challenge is deciding how the product should represent work. Teams need to define where one task ends, when a new context should begin, how earlier interactions become scannable, and where substantial outputs should live.</p><p>To design a good chatbot, I would begin with task-separated histories and dedicated background instances for independently reviewable work. I would then use collapse-and-expand patterns to manage long interaction histories, make important context verifiable, and move detailed outputs into a persistent workspace.</p><div class="pullquote"><p>This strategy affects more than just usability. It shapes how much irrelevant context enters a task, how easily users can verify the system&#8217;s work, and whether people can return to useful outputs after the conversation has moved on.</p></div><p>The traditional chat transcript can remain part of the experience. It just should not be responsible for the entire experience. I hope some of you find these documentation posts helpful!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[In-App Surveys Need Lot's of Guardrails]]></title><description><![CDATA[How-to Documentation]]></description><link>https://trevorcalabro.substack.com/p/in-app-surveys-need-lots-of-guardrails</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/in-app-surveys-need-lots-of-guardrails</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 30 May 2026 12:54:14 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/7abcac0f-031c-4737-9cae-3337ee8a8933_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>In-app, single-question, 1&#8211;5 rating pop-up surveys are often overused by PM-type folks because they are easy to launch and feel like a quick way to collect user feedback. This documentation post covers practical guardrails for using these types of surveys in the real world.</p><div><hr></div><p>I&#8217;ve written a lot about <a href="https://trevorcalabro.substack.com/p/pendo-rollout-playbook">how to roll out Pendo, or platforms like Pendo, across an entire tech org</a> with many different lines of business. But I&#8217;ve spent less time writing about what happens after the rollout, when teams start using those tools to communicate with users and collect feedback inside the product experience itself.</p><p>Pendo can support all kinds of in-app pop-ups, from onboarding messages and product announcements to feature prompts, guides, and feedback requests. Today, though, I want to focus on one specific use case that can be especially valuable when it is handled carefully. That use case is short, task-based in-app feedback. I see these <em>wayyyyy </em>overused and grossly misunderstood.  So, lucky for you, I recently wrote this guide on best practices for single-question, 1&#8211;5 rating pop-up surveys, so I thought I should share a version.</p><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; HUGE Disclaimer:</strong> This guidance was originally written for complex, lower-frequency digital products where users may only complete certain workflows a few times a year. So the recommendations below are<em><strong> intentionally conservative </strong></em>in some places and intentionally practical in others. </p><p>For higher-traffic consumer products, teams may be able to collect larger samples faster, use shorter cooldown windows, and raise the confidence level from 90% to 95% when estimating task-level survey scores. The same is true for products with frequent repeat usage, lower-risk feedback moments, or large user populations where survey fatigue is easier to manage.</p><p>In my experience, 90% is usually a reasonable practical standard for complex enterprise apps and lower-frequency workflows. Often the alternative is leaving pop-ups live too long, over-surveying the same users, or waiting months to collect a sample that looks more statistically precise than is really needed. It is at least a good starting point, but you can redo the calculations below with 95% confidence if that would be more appropriate for your orgs recommendation guide.</p><p>Lastly, as a rule of thumb, I don&#8217;t really <em>love</em> this method of gathering feedback too much. But if you need to use these surveys in the real world, this doc will address how to make them the least terrible.</p></div><h1><strong>In&#8209;App Task Survey Recommendations</strong></h1><p>This document provides guidance for deploying single question, in&#8209;app surveys within digital products. It is intended for technology, product, UX, and engineering teams who want to collect timely, contextual, actionable user feedback while minimizing disruption and survey fatigue.</p><p>The guidance focuses on:</p><ul><li><p>When task&#8209;level in&#8209;app surveys should be used</p></li><li><p>How and when surveys should be triggered</p></li><li><p>Recommended sample sizes and stop rules</p></li><li><p>Exposure and frequency limits</p></li><li><p>Prioritization when multiple surveys are active</p></li><li><p>Best practices for comparing results over time</p></li></ul><h1>1. When to Use In&#8209;App Task Surveys</h1><p>Short, single&#8209;question in&#8209;app pop&#8209;up surveys (such as CSAT, ASAT, effort or ease&#8209;style questions) are best used as task&#8209;level measurement tools, not as broad indicators of overall product satisfaction.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Va5v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Va5v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!Va5v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!Va5v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!Va5v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Va5v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png" width="387" height="290.25" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1086,&quot;width&quot;:1448,&quot;resizeWidth&quot;:387,&quot;bytes&quot;:901878,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/199803049?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Va5v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png 424w, https://substackcdn.com/image/fetch/$s_!Va5v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png 848w, https://substackcdn.com/image/fetch/$s_!Va5v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png 1272w, https://substackcdn.com/image/fetch/$s_!Va5v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4125c2dc-43f5-49a3-9e4e-4426fa7bf64c_1448x1086.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>Overall sentiment, loyalty, or benchmarking should instead be measured using separate, periodic surveys (for example, a standard benchmarking survey like NPS, SUS, SUPR&#8209;Q, or similar instruments). These survey types are not addressed in this document. </p></div><h2>Strong Use Cases</h2><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/uHVDQ/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/758d6425-9e6b-44bc-8917-ce6228b05818_1220x1280.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fbc37f56-a5eb-47f4-bae3-990b8a3092c1_1220x1280.png&quot;,&quot;height&quot;:648,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/uHVDQ/1/" width="730" height="648" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>Before launching any in&#8209;app survey instance, define:</p><ul><li><p>The purpose of the survey</p></li><li><p>The target audience segment</p></li><li><p>A target sample size</p></li><li><p>Other active in&#8209;app surveys</p></li><li><p>Clear stop rules for removal</p></li></ul></div><h1>2. Triggering In&#8209;App Surveys</h1><p>In&#8209;app surveys are often triggered only after successful completion of a workflow. While useful, completion&#8209;only triggers provide an incomplete picture of the experience.</p><p>A completion-only trigger tells us how easy the workflow felt to users who made it all the way to the end. It does not fully capture users who:</p><ul><li><p>Started but abandoned the workflow</p></li><li><p>Hit errors</p></li><li><p>Could not find the next step</p></li><li><p>Needed help</p></li><li><p>Took an unusually long time</p></li><li><p>Left and returned later</p></li><li><p>Gave up before reaching the completion event</p></li></ul><p>For this reason, surveys should target meaningful workflow attempts, not just completions.</p><h2>Recommended Trigger Strategy</h2><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/Q0qSI/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3b593978-9145-4438-9961-65f6d0e08313_1220x1056.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f86a211f-9681-42a2-9abc-12466eac5198_1220x1056.png&quot;,&quot;height&quot;:532,&quot;title&quot;:&quot;| Created with Datawrapper&quot;,&quot;description&quot;:&quot;Create interactive, responsive &amp; beautiful charts &#8212; no code required.&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/Q0qSI/2/" width="730" height="532" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><div class="callout-block" data-callout="true"><p><strong>&#128273; Key principle: </strong>The goal is to capture feedback from users who meaningfully attempted the task.</p></div><h1>3. Sample Size and Stop Rules</h1><p>In-app surveys should be removed once the target sample size has been reached or once additional responses are unlikely to change the decision the team needs to make.</p><h2>Recommended Sample Size Guidelines</h2><ul><li><p>Baseline target: <strong>~55 </strong>completed responses per audience segment</p></li><li><p>Hard cutoff: <strong>100+</strong> responses per segment (This is usually more than most teams need unless they are doing formal benchmarking, deep segment comparisons, or trying to detect small changes over time.)</p></li></ul><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>These guidelines assume large user populations; the limiting factor is usually workflow usage frequency, not total population size.</p></div><h2>Practical Sample Size Tiers</h2><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/WwEdg/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/985b8d93-5b42-42a9-b2c3-5dca8f6a60be_1220x610.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/aca05c93-4fb6-420b-aec0-d624b418ea97_1220x610.png&quot;,&quot;height&quot;:300,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/WwEdg/2/" width="730" height="300" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><div class="callout-block" data-callout="true"><p><strong>&#128202; Statistical assumptions:</strong></p><ul><li><p>Confidence level: 90%</p></li><li><p>Margin of error: &#177;0.4</p></li><li><p>Standard deviation: &#8776;1</p></li></ul><p><em>This is where the minimum of ~17 responses per user type + plan type comes from.</em></p></div><h1>4. Frequency and Exposure Limits</h1><p>In&#8209;app surveys should be rare enough that they do not feel like part of normal product usage.</p><h2>Recommended Exposure Limits</h2><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/HexaI/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/65b1126f-3a48-4da3-b0f5-e5db38f4b3b3_1220x578.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/12444635-c0ee-4a64-9717-b95bd737ab02_1220x648.png&quot;,&quot;height&quot;:283,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/HexaI/2/" width="730" height="283" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><div class="callout-block" data-callout="true"><p><strong>&#128161; Additional guidance:</strong></p><ul><li><p>Protect highly engaged or high&#8209;value user groups more aggressively.</p></li><li><p>Suppress lower&#8209;priority surveys when multiple are eligible.</p></li></ul><p><strong>&#9888;&#65039; Disclaimer:</strong> These exposure limits are recommended defaults, not universal rules. Teams with high-traffic products, frequent repeat usage, or lower-risk survey contexts may be able to use shorter cooldown windows. For complex or low-frequency workflows, these limits should usually stay conservative to avoid over-surveying the same users.</p></div><h1>5. Survey Instance Prioritization</h1><p>When multiple survey instances are active, users should not become eligible for all of them at once. If a user qualifies for more than one instance in the same session, only show the highest-priority survey.</p><p>If multiple instances qualify, show only the highest&#8209;priority survey.</p><h2>Recommended Priority Order</h2><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/JJvy4/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41446238-ca7b-4459-854e-b9f037bf6d56_1220x546.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e02818a-abb5-4122-99e6-a4c51446784f_1220x546.png&quot;,&quot;height&quot;:266,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/JJvy4/1/" width="730" height="266" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><h1>6. Comparing Results Over Time</h1><p>Comparisons are only valid when the underlying measurement conditions are similar.</p><p>Before comparing results, confirm:</p><ul><li><p><strong>Same workflow: </strong>Do not compare scores across different workflows</p></li><li><p><strong>Same user types: </strong>Do not mix audience type, user segments, or different persona&#8217;s scores</p></li><li><p><strong>Similar trigger logic: </strong>Do not compare completion-only data with broader attempt-based data</p></li><li><p><strong>Similar workflow version:</strong> Changes to the UI or flow may reset the benchmark</p></li><li><p><strong>Sample size &#8805; ~30: </strong>Small samples can make normal variation look meaningful</p></li></ul><div class="callout-block" data-callout="true"><p><strong>&#9999;&#65039; NOTE: </strong>If these conditions aren&#8217;t met, treat the results as directional, not definitive.</p></div><h1>Conclusion</h1><p>Well, there you have it. In-app surveys can be useful, but only when they are treated like a research tool instead of a messaging feature someone happens to turn on. The fact that a platform makes it easy to launch a pop-up does not mean every workflow needs one, every user should see one, or every score should be treated like a clean benchmark.</p><p>The real world needs guardrails. Teams need to decide what is worth measuring, when the user has meaningfully attempted the task, how many responses are enough, how often the same user should be exposed, and when the survey should come back down. None of that is especially glamorous, but it is the difference between collecting feedback people can actually use and slowly teaching users to dismiss everything that appears in the product.</p><p>My general rule is pretty simple. Ask fewer questions, ask them at better moments, and stop asking once the data is good enough to support the decision in front of you.</p><p>That might not give you a perfect measurement system, but in most real-world product environments, it will give you a much better one. Thanks all!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[A/B Test Sample Sizing]]></title><description><![CDATA[Calculating Sample Size in the Real World]]></description><link>https://trevorcalabro.substack.com/p/ab-test-sample-sizing</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/ab-test-sample-sizing</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 23 May 2026 17:13:06 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/ce2aaa9c-1964-4357-9b83-43e9a30748aa_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary:</strong> Proper A/B test sample sizing requires some strategic thought. It should come from the decision the team is trying to make, not from a generic rule of thumb. This article walks through the basic steps for calculating sample size in a practical way, including how to define the current baseline, choose the smallest improvement worth detecting, select the right test settings, and explain the final number to stakeholders.</p><div><hr></div><p>A few weeks ago, I wrote about <a href="https://trevorcalabro.substack.com/p/ab-test-strategies-that-work">how to make A/B tests more useful</a> from a UX research perspective. That article was mostly about an overarching A/B test strategy. I focused on things like writing a clear hypothesis, designing a meaningful variation, choosing better metrics, and not overstating what the result proves.</p><div class="callout-block" data-callout="true"><p>&#9888;&#65039; <strong>Disclaimer:</strong> In my older article, <a href="https://trevorcalabro.substack.com/p/sample-sizing-cheat-sheet-for-startups">Sample Sizing Cheat Sheet for Startups</a>, I recommended much smaller A/B test samples for startup and MVP contexts. That article was about fast directional learning, while this article is about more defensible A/B testing in a live product.</p></div><p><strong>This week&#8217;s article is about the next practical question teams usually ask:</strong></p><p>What sample size do we need?</p><p>That question sounds simple, but it can get confusing quickly. Some people expect there to be one standard A/B test sample size. Others start with the number of users they think they can get and work backward from there. &#8220;We always A/B with 200.&#8221; Something like that sound familiar? Others use whatever default number their experimentation platform gives them without understanding what went into the calculation.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!F2u2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!F2u2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F2u2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F2u2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F2u2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!F2u2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg" width="251" height="211.58677685950414" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:510,&quot;width&quot;:605,&quot;resizeWidth&quot;:251,&quot;bytes&quot;:188071,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/198981347?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!F2u2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg 424w, https://substackcdn.com/image/fetch/$s_!F2u2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg 848w, https://substackcdn.com/image/fetch/$s_!F2u2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!F2u2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2ae6943-3b5a-4c2b-8291-2b905f2efe0b_605x510.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>I do not think UX researchers need to become statisticians to have this conversation. But I do think we need to understand the basic inputs well enough to explain what the number means. This basic calculation needs contextual inputs that only you, as the UX researcher, and your stakeholders can provide because of your knowledge of your org. That includes the design improvements that would matter most to the business, the quality of the hypothesis, the strength of the variation, and the behavior being measured.</p><p>The goal of this article is to show the basic inputs that go into an A/B test sample-size calculation, explain what they mean in plain language, and walk through a real example.</p><h1>The Basic Inputs You Need</h1><p>Before you calculate anything, you need to know what you are measuring and what kind of change would matter. To calculate sample size, you need a few inputs.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/bS14r/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ce7a0293-f3f3-4e8c-93ce-e80c0d86a16b_1220x706.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afdeb3c4-a55d-4ccc-b763-ebd36c3406de_1220x706.png&quot;,&quot;height&quot;:350,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/bS14r/2/" width="730" height="350" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>These inputs matter because the calculation is only as useful as the numbers you put into it. If the inputs are unrealistic, the sample-size recommendation will be unrealistic too. This is where teams often get into trouble. They want the equation to poop out the perfect number, even though they have not made any decisions based on their own real-world context. Lazy, lazy, lazy. But in the real world, the sample size should come from the decision the team is trying to make.</p><h1>Start With Current Rate</h1><p>The two most important inputs are the baseline rate and the smallest improvement the team cares about detecting.</p><ol><li><p><strong>Baseline rate =</strong> What is happening today. For example, if 18 out of 100 users complete the action, the baseline is 18%. If 5 out of 100 users click the call to action, the baseline is 5%. You get the idea.</p><p>The baseline tells the calculation what normally happens before you change anything.</p><p>Sometimes you will have a clean baseline from usage analytics. That is ideal. Other times, you may have to make a reasonable estimate. That is not perfect, but it is better than not taking baseline into account at all. (Unfortunately, I see this misunderstood and dismissed most of the time in the real world.)</p><p>After that, you need to decide on the smallest improvement worth detecting. This is called the Minimum Detectable Effect, or MDE.</p></li><li><p><strong>MDE = </strong>The smallest performance improvement the team would actually care about. For example, let&#8217;s say 18% of users complete the task today. The team probably would not want to redesign the workflow, run an A/B test, and change the product just to move that number from 18% to 19%. That improvement may be real, but it may not be big enough to justify the work.</p><p><strong>So the team has to ask a practical question:<br></strong>&#8220;How much better would the new version need to perform for this change to be worth making?&#8221;</p><p>Maybe 20% is not enough because that is only a small improvement over the current 18%. Maybe 25% feels close, but the team wants the test to be planned around a slightly larger, cleaner target.</p></li></ol><p>In this example, the team decides that moving from 18% to about 26% would be a large enough improvement to justify the change.</p><p><strong>3 main points here:</strong></p><ul><li><p>That 26% is strategic and comes from adding the improvement the team cares about to the current baseline:</p></li><li><p>18% current completion rate + 8 percentage point improvement = 26% target completion rate</p></li><li><p>In sample-size terms, that means the team is planning the test around an 8 percentage point improvement.</p></li></ul><div class="pullquote"><p>The MDE is not just a statistics decision. It is a product decision.</p></div><p>This is why I usually want stakeholders involved in the MDE conversation. The researcher can explain the tradeoffs, but the product team needs to be honest about what size improvement would actually change the decision.</p><p>And as a last resort, if all this MDE talk is still confusing, try asking an LLM to help you estimate a reasonable starting point. Do not ask it to &#8220;calculate the perfect MDE.&#8221; Ask it to help you think through what size improvement would be meaningful based on the product context, the type of change, the current baseline, and the decision the team is trying to make.</p><p><strong>Here is a prompt template you could use:</strong></p><div class="callout-block" data-callout="true"><p>I am planning an A/B test and need help estimating a practical Minimum Detectable Effect, (MDE).</p><p><strong>Here is the context:</strong></p><ul><li><p>Current baseline rate: <em>{fill in your context here}</em></p></li><li><p>Describe what users are trying to do: <em>{fill in your context here}</em></p></li><li><p>Describe what Version A is: <em>{fill in your context here}</em></p></li><li><p>Describe what Version B changes: <em>{fill in your context here}</em></p></li><li><p>Whether this is a small change, moderate change, or large workflow change: <em>{fill in your context here}</em></p></li><li><p>How risky the change is to the business: <em>{fill in your context here}</em></p></li><li><p>Whether the change is easy to reverse: <em>{fill in your context here}</em></p></li><li><p> What size improvement would make the team feel the change is worth shipping: <em>{fill in your context here}</em></p></li><li><p>Any other business, UX, or operational reasons this improvement would matter: <em>{fill in your context here}</em></p></li></ul><p>Based on this context, recommend a practical MDE in percentage points. Explain why that MDE seems reasonable, what a smaller MDE would imply for sample size, and what a larger MDE would imply for sample size. Keep the explanation simple enough for a non-statistician to understand.</p></div><p>I would still treat the LLM&#8217;s answer as a starting point and not the final decision. The team should review the recommendation and decide whether the improvement is actually meaningful in the real-world context of the product. This is one of the safer and more targeted ways Gen AI can be useful in our work, and the human in the loop is built into the approach. Try it for yourself and tell me how it goes! </p><h1>Small Improvements Need Larger Samples</h1><p>The smaller the improvement you want to detect, the more users you need.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fxXB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fxXB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fxXB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fxXB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fxXB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fxXB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg" width="373" height="159.60096153846155" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:623,&quot;width&quot;:1456,&quot;resizeWidth&quot;:373,&quot;bytes&quot;:528478,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/198981347?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!fxXB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fxXB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fxXB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fxXB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa4cc67da-dd91-47a4-b03d-395a2f3d9543_1854x793.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>A small performance improvement can get lost in normal variation. (signal vs. noise.) A larger improvement is easier to detect because the difference between Version A and Version B is bigger.</p><div class="pullquote"><p>This is why teams should not start with, &#8220;Can we test this with 200 users?&#8221;<br>The better question is: What size difference are we trying to detect?</p></div><p><strong>Here is the basic tradeoff:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/I0Dzi/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/40aa1e26-a82a-4779-b93e-aaf325cb4de3_1220x636.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac69da2e-324e-4d0f-bd3e-0598311eb09f_1220x636.png&quot;,&quot;height&quot;:314,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/I0Dzi/1/" width="730" height="314" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>If the team does not have enough traffic to detect a small improvement, they have a few options. They can run the test longer, accept a larger MDE, choose a different method, or admit that the A/B test is not practical.</p><div class="pullquote"><p>That does not mean lowering rigor randomly. It means matching the test to the decision.</p></div><p>For a tiny button copy change, expecting an 8 percentage point improvement may be unrealistic. For a larger workflow change, an 8 percentage point improvement may be a reasonable threshold.</p><p>The simple version is this: if the team wants to detect small behavioral differences in a design change, they need more data. If the team only cares about larger behavioral differences in a design change, the test can usually have a smaller sample size.</p><h1>Test Settings</h1><p>After the baseline and MDE, you need to choose a few test settings.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9NYS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9NYS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9NYS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9NYS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9NYS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9NYS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg" width="301" height="224.32605531295488" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:687,&quot;resizeWidth&quot;:301,&quot;bytes&quot;:105224,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/198981347?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9NYS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9NYS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9NYS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9NYS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4abf307e-c390-4e3b-a801-da2035f332d2_687x512.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>These are usually confidence level, power, and split. </p><ul><li><p><strong>Confidence level</strong> is about how much risk you are willing to accept that the result is just noise. A 95% confidence level is more cautious and usually requires more users. A 90% confidence level accepts a little more uncertainty and usually requires fewer users. I usually consider 90% confidence for lower-risk, reversible product decisions. I would use 95% for higher-risk decisions, especially if the decision is expensive, hard to reverse, or related to high-risk user interactions.</p></li><li><p><strong>Power </strong>is the chance that the test will detect the improvement if the improvement is really there. I usually use 80% power because it is a common default.</p></li><li><p><strong>Split </strong>is how users are divided between the two versions. Most of the time, I assume a 50/50 split. Half of users see Version A. Half of users see Version B.</p></li></ul><p><strong>Here&#8217;s how I think of it:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/KBb1x/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/769e3a7a-a661-44da-aabb-fc1a427aaf28_1220x494.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a9e2557e-e5da-43f9-a38d-c6cf952cd61d_1220x494.png&quot;,&quot;height&quot;:241,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/KBb1x/1/" width="730" height="241" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p><strong>My default planning assumptions are almost always:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/hKo4S/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/898e1b5d-f6cb-4e8e-b0ed-f0f9ae580c51_1220x398.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/54956d36-68cb-4b4a-81f8-2421b2c91680_1220x398.png&quot;,&quot;height&quot;:191,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/hKo4S/1/" width="730" height="191" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><h1>Real-World Example</h1><p><strong>Scenario -</strong> A product team wants to A/B test a changed workflow. The current workflow starts from a dashboard card. The card includes a call to action that sends users into a multi-step flow. The team wants to know whether the revised experience gets more users to complete the intended action.</p><p>The team does not have a perfect baseline, but based on what we know, we estimate that about 18% of users currently complete the action.</p><p>Because this is a larger workflow change, not a tiny copy tweak, the team decides that an 8 percentage point improvement would be meaningful. In other words, the new version would need to move the completion rate from 18% to about 26%.</p><p>We decide to use 90% confidence because this is a lower-risk product decision and the team does not need 95% confidence to make the call.</p><p>We use 80% power because that is the standard default I usually use.</p><p>We use a 50/50 split because there is no strong reason to send more users to one version than the other.</p><p><strong>Here are the calculation inputs:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/EleVS/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/15b59c2d-9c96-4515-9b48-4f768faba077_1220x620.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41d56959-281a-46de-949d-86bebd8c3213_1220x620.png&quot;,&quot;height&quot;:304,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/EleVS/1/" width="730" height="304" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p><strong>In the real world, I just use this calculator:</strong></p><h4><a href="https://samplesizecalculator.net/ab-test-sample-size-calculator/">https://samplesizecalculator.net/ab-test-sample-size-calculator/</a></h4><p>For most UX-related A/B tests, the outcome is usually a yes/no behavior. The user completed the workflow or did not. The user clicked the call to action or did not. The user submitted the form or did not. </p><p>Assuming yes/no behavior, and with the inputs shown above, the sample size is about <strong>331 </strong>users per version. So that means I would plan for about <strong>331 </strong>users in <strong>Version A </strong>and <strong>331</strong> users in <strong>Version B</strong>. </p><p>And remember, because today, about 18% of users complete the task. We want to know if the new version can raise that to about 26%. That&#8217;s how we get to <strong>331</strong> users per version.</p><p><strong>Base formula:</strong></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\frac{(\\text{Baseline variability} + \\text{Expected change effect})^2}{(\\text{Minimum detectable change})^2}&quot;,&quot;id&quot;:&quot;LREUGMTVMA&quot;}" data-component-name="LatexBlockToDOM"></div><p><strong>For this example, the calculation looks like this:</strong></p><div class="latex-rendered" data-attrs="{&quot;persistentExpression&quot;:&quot;\\frac{(0.964 + 0.490)^2}{0.08^2}\n=\n\\frac{2.114}{0.0064}\n\\approx 330.31&quot;,&quot;id&quot;:&quot;ZKWNKNDZBS&quot;}" data-component-name="LatexBlockToDOM"></div><p></p><p>You do not need to memorize that formula. The important thing to understand is that the calculation uses the current behavior, the amount of change you want to detect, and the amount of uncertainty you are willing to accept.</p><p>The sample-size calculation does not mean the test is automatically good. It just means that, given these assumptions, this is roughly how many users the team needs to compare the two versions.</p><p>I would also not treat that number as perfect. If the baseline estimate changes, the sample size can change. If the team wants to detect a smaller improvement, the sample size will go up. If the team wants 95% confidence instead of 90%, the sample size will also go up.</p><div class="pullquote"><p>That is why I try to make the assumptions visible. The sample-size number is only useful when the team understands what it is based on.</p></div><h1>Sample-Size Checklist</h1><p>Use this checklist before you calculate the sample size.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oGyz!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oGyz!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oGyz!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oGyz!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oGyz!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oGyz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg" width="191" height="167.36826783114992" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:602,&quot;width&quot;:687,&quot;resizeWidth&quot;:191,&quot;bytes&quot;:97944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/198981347?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oGyz!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oGyz!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oGyz!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oGyz!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F85f0fb53-ef73-4fd9-a367-84f842edda38_687x602.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><ul><li><p><strong>Define the behavior you are measuring. </strong>Be specific. &#8220;Users completed the four-step workflow&#8221; is clearer than &#8220;engagement.&#8221;</p></li><li><p><strong>Get the current baseline rate. </strong>Use analytics if you have them. If not, use the best estimate you have and say clearly that it is an estimate.</p></li><li><p><strong>Decide the smallest improvement that would matter. </strong>This is the Minimum Detectable Effect, or MDE. Decide whether the team cares about a 2 percentage point improvement, a 5 percentage point improvement, an 8 percentage point improvement, or something else.</p></li><li><p><strong>Choose the confidence level. </strong>I usually consider 90% confidence for lower-risk, reversible product decisions and 95% confidence for higher-risk decisions.</p></li><li><p><strong>Use 80% power unless there is a strong reason not to. </strong>This is the standard I typically use.</p></li><li><p><strong>Use a 50/50 split unless there is a reason to do something else. </strong>Half of users see Version A. Half of users see Version B.</p></li><li><p><strong>Calculate the sample size per version. </strong>Do not only report the total sample size. Teams need to know how many users are needed in each version.</p></li><li><p><strong>Round up. </strong>If the calculator says 330.31, do not plan for 330. Plan for 331 or more.</p></li><li><p><strong>Decide the stopping point before the test starts. </strong>Do not wait until the results look good and then stop the test. Set the target sample size ahead of time.</p></li><li><p><strong>Do not overstate what the result proves. </strong>The test can tell you whether one version performed differently from another version under the conditions of the test. It does not automatically explain why the difference happened. <a href="https://trevorcalabro.substack.com/p/ab-test-strategies-that-work">Read more about A/B Testing strategy here.</a></p></li></ul><h1>Conclusion</h1><p>The big takeaway here is that A/B test sample sizing is mostly about making the team&#8217;s assumptions visible.</p><div class="pullquote"><p>The hard part is not doing the calculation. The hard part is agreeing on what behavior you are measuring, what improvement would matter, and how much uncertainty the team is willing to accept.</p></div><p>That is why UX researchers should lead these conversations within our orgs. We must help others to think in terms of sample size being connected to study design by default. It depends on the hypothesis, the variation, the outcome metric, and the decision the team is trying to make.</p><p>A correctly sized A/B test can still be interpreted badly. It can tell you whether one version performed differently from another, but it does not automatically explain why. So use the calculator. Get the number. Round up. Then make sure the test is designed clearly, sized realistically, and interpreted carefully. Thanks for reading!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[How Primary Nav Bars Should Work]]></title><description><![CDATA[A Comprehensive Best Practices Document]]></description><link>https://trevorcalabro.substack.com/p/primary-navigation-interaction-guide</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/primary-navigation-interaction-guide</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 16 May 2026 13:03:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a5d7674b-bb97-4da2-b38d-a7596c5ddb3d_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>This week&#8217;s article is based on official documentation that explains how primary navigation bars should work. This is all you&#8217;ll ever need to know about proper interaction design for primary navigation bars.</p><div><hr></div><p>Over the last 10+ years, I&#8217;ve written essentially the same series of documents for different orgs around interaction design and accessibility best practices for primary navigation bars.</p><p>I finally sat down and combined all those documents into this master best-practice guide. This is intended to be more of a reference guide, and I&#8217;m happy to share it because, if you&#8217;re anything like me, you hate wasting time going back and forth with your front-end devs on all the little nuances that go into doing something as foundational as a nav bar.</p><p>My hope is that many of you bookmark this article, just like I will, and send the link anytime you need to share guidance with others.</p><p><strong>This guide details the following topics:</strong></p><ul><li><p>Navigation bar interaction behavior</p></li><li><p>Dropdowns, mega menus, and mobile menus</p></li><li><p>How to think about hover</p></li><li><p>How to handle parent-child relationships</p></li><li><p>All the different UI component interaction states</p></li><li><p>Keyboard and screen-reader navigation</p></li><li><p>Proper semantic HTML and ARIA execution</p></li></ul><div class="callout-block" data-callout="true"><h3>&#128204;<strong> 2 Ways to Use This Document</strong></h3><ol><li><p><strong>As a reference document:</strong> The best way to use this document is to press <strong>Control + F</strong> and find specific guidance around the primary navigation bar topics you care about.</p></li><li><p><strong>As source material for Gen AI tools:</strong> This kind of document has also been used as source material for <strong>Gen AI</strong> tools that generate UI designs, interaction specs, or front-end code.<br>When the tool has clear guidance up front, the first output is more likely to follow better primary navigation bar behavior around links, buttons, hover, focus, keyboard interaction, semantic HTML, and ARIA.</p></li></ol><p>If you want more general information about how to design a primary navigation bar, start with this article: <a href="https://trevorcalabro.substack.com/p/why-your-navigation-sucks">Why Your Navigation Stinks</a>.</p></div><div><hr></div><h1>The Purpose of This Guide</h1><p>This document defines interaction design standards for the UI pattern <strong>primary navigation bar.</strong> Primary navigation bars must help users move between major feature areas, understand where they are, and predict what will happen when they activate an item. The interaction model should remain consistent across desktop and mobile, even when the layout changes across breakpoints.</p><div class="pullquote"><p>The goal is to make primary navigation predictable, scannable, keyboard operable, and understandable without requiring users to guess how each item behaves.</p></div><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; Disclaimer: </strong>For this pattern guide, <strong>&#8220;</strong><em><strong>activate&#8221; </strong></em>means an intentional user action using a mouse, touchpad, touch gesture, Enter key, Space key, or similar input method, depending on the item type.</p><p><strong>Hover is not activation. </strong>Hover may provide visual feedback, but in this navigation pattern, hover must not open, close, reveal, or dismiss navigation menus.</p><p>This is intentionally stricter than some general web guidance because this navigation system prioritizes predictable behavior across cursor, keyboard, and touch input.</p></div><h1>2. Core Principles</h1><h3>2.1 Use clear information scent</h3><p>Items must help users predict what they will find or what will happen after activating them.</p><p><strong>A primary navigation item should clearly communicate one of the following:</strong></p><ul><li><p>A destination</p></li><li><p>A major feature area</p></li><li><p>A user task</p></li><li><p>A meaningful content category</p></li><li><p>A parent category that exposes related child destinations</p></li></ul><p>Item labels should match the language users expect within the web application. They should not rely on internal team names, implementation structure, roadmap language, or terminology that only makes sense to the organization.</p><div class="callout-block" data-callout="true"><p>&#10060; Avoid labels that are too broad, abstract, or internally meaningful to create a clear expectation for users. If a label could reasonably mean several different things, it likely does not provide enough information scent.</p></div><p>A user should be able to scan the primary navigation and make a confident choice without needing to pause and interpret what the item might contain.</p><h3>2.2 Support recognition over recall</h3><p>Primary navigation should not require users to remember where something lives from prior experience.</p><p><strong>Users should be able to recognize available paths by scanning:</strong></p><ul><li><p>Visible labels</p></li><li><p>Group headings</p></li><li><p>Dropdown indicators</p></li><li><p>Parent-child relationships</p></li><li><p>Current page indicators</p></li><li><p>Visual grouping inside dropdown menus or mega menus</p></li></ul><p>Do not rely on hidden meaning, icon familiarity, or prior training. If an item opens a child menu, the UI should make that behavior visible. If an item sends the user directly to a page, the UI should make that behavior feel different from a Menu item.</p><h3>2.3 Maintain consistent interaction behavior</h3><p>Items with the same function must behave the same way throughout the application.</p><p><strong>Primary navigation items should follow one of two interaction models:</strong></p><ol><li><p>Destination behavior: The item takes the user directly to a page or route.</p></li><li><p>Disclosure behavior: The item opens or closes a child menu.</p></li></ol><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Destination items use link behavior.</p></li><li><p>Menu items use button behavior.</p></li><li><p>Menu items include a dropdown indicator.</p></li><li><p>Destination items do not include a dropdown indicator.</p></li><li><p>Parent items that expose child menus should not also act as direct destination links.</p></li><li><p>Parent landing pages should be represented as child overview links when needed.</p></li><li><p>Menus must open only through intentional activation.</p></li><li><p>Menus must close only through intentional dismissal behavior.</p></li><li><p>Hover must not open, close, reveal, or dismiss a menu in this navigation pattern.</p></li></ul><div class="callout-block" data-callout="true"><p>&#10060; Avoid interaction ambiguity. A user should not have to determine whether activating the label does one thing and activating the dropdown indicator does another.</p></div><h3>2.4 Keep the hierarchy as flat as practical</h3><p>Primary navigation should reduce unnecessary hierarchy.</p><p>Each additional level creates more interaction cost and more abstraction for the user to understand. A flatter structure makes it easier for users to scan available destinations and make a confident choice.</p><div class="callout-block" data-callout="true"><p>&#10060; This does not mean every destination must appear at the top level. It means child menus should expose terminal nodes clearly and avoid unnecessary nested categories.</p></div><p><strong>A good primary navigation structure should:</strong></p><ul><li><p>Make major feature areas visible.</p></li><li><p>Group related destinations under meaningful parent items.</p></li><li><p>Expose terminal nodes inside dropdown menus or mega menus.</p></li><li><p>Avoid forcing users through multiple nested levels before they can reach a destination.</p></li></ul><h1>3. Primary Navigation Anatomy</h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mzCb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mzCb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mzCb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mzCb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mzCb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mzCb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg" width="1456" height="110" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:110,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:18872,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mzCb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mzCb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mzCb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mzCb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb03ce81d-80d4-40cc-96d7-a100f0e7abaa_1766x134.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><h3>3.1 Navigation landmark</h3><p>Primary navigation must be represented as a semantic navigation landmark.</p><p>From an interaction design perspective, this matters because users of assistive technology need a predictable way to identify and move to the primary navigation region.</p><p><strong>&#10004;&#65039; Recommended default:</strong></p><pre><code><code>&lt;nav&gt;
  &lt;!-- Primary navigation items --&gt;
&lt;/nav&gt;</code></code></pre><p>If the page includes only one navigation landmark, an accessible name is optional. If the page includes more than one navigation landmark, each landmark should have a clear accessible name.</p><p>Use distinct names when navigation landmarks serve different purposes, such as Primary, Utility, Breadcrumb, or Footer.</p><p>If the same navigation is repeated in more than one place with identical links, the repeated landmarks may use the same accessible name.</p><p><strong>&#10004;&#65039; Preferred naming order:</strong></p><ol><li><p>Use a visible or visually hidden heading with <code>aria-labelledby</code>.</p></li><li><p>Use <code>aria-label</code> only when no visible or referenceable label is available.</p></li></ol><p><strong>Example when a referenceable heading exists:</strong></p><pre><code><code>&lt;h2 id="primary-navigation-heading" class="visually-hidden"&gt;Primary&lt;/h2&gt;

&lt;nav aria-labelledby="primary-navigation-heading"&gt;
  &lt;!-- Primary navigation items --&gt;
&lt;/nav&gt;</code></code></pre><p><strong>Example when no visible or referenceable label exists:</strong></p><pre><code><code>&lt;nav aria-label="Primary"&gt;
  &lt;!-- Primary navigation items --&gt;
&lt;/nav&gt;</code></code></pre><p>Do not use <code>aria-label=&#8221;Primary navigation&#8221; </code>as the default. This is usually redundant rather than a severe accessibility failure, because screen readers already announce the landmark as navigation. The accessible name should usually identify which navigation it is, not repeat the word navigation.</p><h3>3.2 Navigation list</h3><p>Primary navigation should use a list structure when presenting a set of related items.</p><p><strong>&#10004;&#65039; Recommended structure:</strong></p><ul><li><p><code>&lt;nav&gt; </code>for the navigation landmark</p></li><li><p><code>&lt;ul&gt; </code>and<code> &lt;li&gt; </code>for the item collection</p></li><li><p><code>&lt;a&gt; </code>for destination items</p></li><li><p><code>&lt;button type=&#8221;button&#8221;&gt; </code>for Menu items</p></li></ul><p><strong>The interaction design rule is straightforward:</strong></p><ul><li><p>If the item moves the user to a destination, it is a link.</p></li><li><p>If the item opens or closes a child menu, it is a button.</p></li></ul><p>This distinction should be reflected in both the interaction behavior and the visual design.</p><h3>3.3 Item types</h3><p>Primary navigation items must be one of two types.</p><h4><strong>1. Destination item</strong></h4><p>A destination item takes the user directly to a page or route.</p><p><strong>&#10004;&#65039; Interaction requirements:</strong></p><ul><li><p>Activating the item navigates to the destination.</p></li><li><p>The item does not open a child menu.</p></li><li><p>The item does not include a dropdown indicator.</p></li><li><p>The item may show current page state if it represents the currently displayed page or route.</p></li><li><p>Hover may show an over state, but it must not trigger navigation.</p></li></ul><p><strong>&#10004;&#65039; Implementation requirement:</strong></p><ul><li><p>Use an<code> &lt;a&gt; </code>element.</p></li></ul><p><strong>Example:</strong></p><pre><code><code>&lt;a href="/path"&gt;Item label&lt;/a&gt;</code></code></pre><h4><strong>2. Menu item</strong></h4><p>A Menu item opens or closes a child menu.</p><p><strong>&#10004;&#65039; Interaction requirements:</strong></p><ul><li><p>Activating the item opens the child menu.</p></li><li><p>Activating the same item again closes the child menu.</p></li><li><p>Hovering over the item must not open the child menu in this pattern.</p></li><li><p>Hovering out of the item must not close the child menu in this pattern.</p></li><li><p>The item includes a dropdown indicator.</p></li><li><p>The item has distinct expanded and collapsed states.</p></li><li><p>The child menu appears in a predictable spatial relationship to the item.</p></li><li><p>The child menu can be dismissed through expected dismissal behaviors.</p></li></ul><p><strong>&#10004;&#65039; Implementation requirements:</strong></p><ul><li><p>Use a<code> &lt;button type=&#8221;button&#8221;&gt; </code>element.</p></li><li><p>Use <code>aria-expanded</code>.</p></li><li><p>Use <code>aria-controls</code> only when the control-to-menu relationship needs to be explicit. <code>aria-expanded</code> is the essential ARIA state for the Menu item.</p></li></ul><p>Example:</p><pre><code><code>&lt;button type="button" aria-expanded="false"&gt;
  Item label
&lt;/button&gt;</code></code></pre><h3>3.4 Stronger code example</h3><p>The following example shows the preferred structure for a primary navigation landmark, one current destination item, and one Menu item with a child menu.</p><pre><code><code>&lt;h2 id="primary-navigation-heading" class="visually-hidden"&gt;Primary&lt;/h2&gt;

&lt;nav aria-labelledby="primary-navigation-heading"&gt;
  &lt;ul class="primary-nav"&gt;
    &lt;li&gt;
      &lt;a href="/dashboard" aria-current="page"&gt;Dashboard&lt;/a&gt;
    &lt;/li&gt;

    &lt;li&gt;
      &lt;button
        type="button"
        aria-expanded="false"
        aria-controls="reports-menu"
      &gt;
        Reports
        &lt;span aria-hidden="true"&gt;&#9662;&lt;/span&gt;
      &lt;/button&gt;

      &lt;ul id="reports-menu" hidden&gt;
        &lt;li&gt;&lt;a href="/reports/overview"&gt;Reports overview&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="/reports/activity"&gt;Activity reports&lt;/a&gt;&lt;/li&gt;
        &lt;li&gt;&lt;a href="/reports/compliance"&gt;Compliance reports&lt;/a&gt;&lt;/li&gt;
      &lt;/ul&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;</code></code></pre><p><strong>This example demonstrates the expected implementation model:</strong></p><ul><li><p>The navigation region uses a semantic <code>&lt;nav&gt;</code> landmark.</p></li><li><p>The landmark is named by a referenceable heading.</p></li><li><p>The item collection uses a list structure.</p></li><li><p>Destination items use native links.</p></li><li><p>Menu items use native buttons.</p></li><li><p>The disclosure button uses <code>type=&#8221;button&#8221;</code>.</p></li><li><p>The disclosure button exposes its open or closed state with <code>aria-expanded</code>.</p></li><li><p>This example includes <code>aria-controls</code> because the controlled submenu has a stable id. <code>aria-expanded</code> remains the essential ARIA state for the disclosure button. If <code>aria-controls</code> is used, it must reference the menu controlled by the disclosure button.</p></li><li><p>The closed child menu uses hidden so it is removed from the visual interface and the accessibility tree.</p></li><li><p>When toggling a menu, update hidden, keyboard focusability, and <code>aria-expanded </code>together so the visual state, keyboard state, and accessibility tree stay synchronized.</p></li><li><p>If the menu is animated, the transition must not leave focusable content hidden from sighted users or visible content hidden from assistive technologies. Animation cannot break synchronization between visual state, focusability, hidden, and <code>aria-expanded</code>.</p></li><li><p>The dropdown indicator is decorative and hidden from assistive technology with<code> aria-hidden=&#8221;true&#8221;</code>.</p></li></ul><h2>4. Information Architecture Standards</h2><h3>4.1 Parent-child relationships</h3><p>A parent item must represent a meaningful category. Child items must belong logically under that parent.</p><p>The parent-child relationship should be clear from the user&#8217;s point of view, not just from the organization&#8217;s point of view.</p><p><strong>Good parent-child relationships are based on:</strong></p><ul><li><p>User tasks</p></li><li><p>User goals</p></li><li><p>Feature areas users recognize</p></li><li><p>Common workflows</p></li><li><p>Expected content groupings</p></li></ul><div class="callout-block" data-callout="true"><p>&#10060; Avoid using the primary navigation to mirror internal departments, feature team ownership, or implementation structure.</p></div><h3>4.2 Terminal nodes</h3><p>A terminal node is an item that takes the user to a page or route.</p><p>In a dropdown menu or mega menu, the primary activatable child items should usually be terminal nodes. This lets users move from the menu to a destination without needing to understand additional hidden layers.</p><p><strong>Terminal nodes may include:</strong></p><ul><li><p>Landing pages</p></li><li><p>Overview pages</p></li><li><p>Feature areas</p></li><li><p>Filtered results pages</p></li><li><p>Task-specific pages</p></li><li><p>Settings pages</p></li><li><p>Reports or dashboard views</p></li></ul><div class="callout-block" data-callout="true"><p>&#10060; Avoid menu structures that require users to move through several abstract layers before finding a destination.</p></div><p><strong>&#10004;&#65039; Preferred pattern:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FZl1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FZl1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FZl1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FZl1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FZl1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FZl1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg" width="1456" height="462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:462,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83032,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FZl1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FZl1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FZl1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FZl1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb158ee0e-8aa1-40ef-ae75-c3c2ad2d209d_1726x548.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><pre><code><code>Primary navigation item
  Child destination
  Child destination
  Child destination</code></code></pre><p></p><p><strong>&#10060; Avoid:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lIz0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lIz0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lIz0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lIz0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lIz0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lIz0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg" width="1456" height="413" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:413,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:109431,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lIz0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg 424w, https://substackcdn.com/image/fetch/$s_!lIz0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg 848w, https://substackcdn.com/image/fetch/$s_!lIz0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!lIz0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa83c521f-9240-4f4a-89cd-d08a037144f2_1726x490.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><pre><code><code>Primary navigation item
  Category
    Subcategory
      Sub-subcategory
        Destination</code></code></pre><h3>4.3 Parent landing pages</h3><p>If a parent category has a landing page, do not use split-button behavior.</p><p><strong>The parent item should not behave as both:</strong></p><ul><li><p>A link to the parent landing page</p></li><li><p>A Menu item that opens a child menu</p></li></ul><p>That interaction model creates ambiguity because the same row appears to have two different functions.</p><p>For this navigation system, hybrid parent link plus disclosure behavior is not allowed. The restriction is a design-system rule intended to preserve one clear interaction purpose per row.</p><p><strong>&#10004;&#65039; Required pattern:</strong></p><ul><li><p>Make the parent item a Menu item.</p></li><li><p>Add a child destination item labeled <code>[Parent Category]</code> Overview.</p></li></ul><p><strong>Example structure:</strong></p><pre><code><code>Parent Category
  Parent Category Overview
  Child Destination
  Child Destination</code></code></pre><p><strong>In this pattern:</strong></p><ul><li><p>Activating the parent item expands or collapses the child section.</p></li><li><p>Activating the overview item navigates to the parent landing page.</p></li><li><p>The row has one interaction target.</p></li><li><p>The dropdown indicator is not a separate interaction target.</p></li><li><p>The user does not need to understand a split-button interaction.</p></li></ul><p>This pattern should apply consistently across levels of the primary navigation hierarchy. Do not use the split-button UI control. </p><h3>4.4 Duplicate destinations</h3><p>A destination should generally appear only once in primary navigation.</p><p>Duplicating the same destination in multiple navigation areas can make users question whether the items lead to the same place or different places.</p><div class="callout-block" data-callout="true"><p>&#10060; Avoid duplicate destination items unless user research shows users strongly expect the same destination in more than one category.</p></div><p>When a destination could reasonably belong in more than one place, choose the location that best matches the user&#8217;s mental model.</p><h3>4.5 Child item grouping</h3><p>Child items should be grouped by user expectations.</p><p><strong>&#10060; Do not group items by:</strong></p><ul><li><p>Internal team ownership</p></li><li><p>Feature architecture</p></li><li><p>System architecture</p></li><li><p>Department names</p></li><li><p>Release structure</p></li><li><p>Roadmap structure</p></li></ul><p><strong>&#10004;&#65039; Groups should be:</strong></p><ul><li><p>Descriptive</p></li><li><p>Mutually distinct</p></li><li><p>Medium-granularity</p></li><li><p>Ordered intentionally</p></li></ul><div class="callout-block" data-callout="true"><p>&#10060; Use medium-granularity groups. Avoid very large groups that take too long to scan. Also avoid very small groups that create too many headings and make the menu feel fragmented.</p></div><p><strong>Group order may be based on:</strong></p><ul><li><p>Task frequency</p></li><li><p>Workflow sequence</p></li><li><p>User importance</p></li><li><p>Natural conceptual order</p></li></ul><p>If none of those apply, place the most commonly used or most important group in the top-left area of the mega menu.</p><h2>5. Navigation Labeling Standards</h2><h3>5.1 Label clarity</h3><p>Item labels must clearly describe the destination, task, or category.</p><p><strong>A strong label should answer the user&#8217;s basic question:</strong></p><blockquote><p>What will I find if I activate this?</p></blockquote><div class="callout-block" data-callout="true"><p>&#10060; Avoid labels that are too broad to create a clear expectation. Labels should not require users to know internal terminology, team ownership, feature history, or implementation details.</p></div><p>A label is too vague when it could plausibly contain several unrelated destinations or when users would need to open it just to understand what it means.</p><h3>5.2 Label consistency</h3><p>Use the same term for the same concept across the application.</p><p>Do not alternate between similar labels unless each term has a distinct user-facing meaning.</p><p>If multiple related terms are needed, each term should represent a distinct concept and appear in the navigation only where that distinction is meaningful to users.</p><h3>5.3 Label differentiation</h3><p>Items in the same set should be easy to distinguish from one another.</p><div class="callout-block" data-callout="true"><p>&#10060; Avoid placing labels near each other if users are likely to read them as overlapping categories.</p></div><p>Each label should create a distinct information scent trail.</p><h3>5.4 Icon labels</h3><p>Icons in primary navigation must include visible text labels.</p><p><a href="https://trevorcalabro.substack.com/p/every-icon-needs-a-label?utm_source=publication-search">Do not use icon-only</a> primary navigation items. (buttons/links)</p><p>Icons may support recognition, but they should not carry the meaning on their own. This applies to desktop and mobile navigation.</p><p>For mobile primary navigation, the menu control should include a visible text label such as Menu. The menu icon may appear with the label, but the icon should not be the only visible cue.</p><h2>6. Desktop Primary Navigation Behavior</h2><h3>6.1 Opening menus</h3><p>Dropdown menus and mega menus must open only by intentional activation.</p><p>For this primary navigation pattern, hover must not open, close, reveal, or dismiss dropdown menus, mega menus, or child navigation items.</p><p><strong>&#10004;&#65039; Required behavior:</strong></p><ul><li><p>Activate a Menu item: open the child menu.</p></li><li><p>Activate the same Menu item again: close the child menu.</p></li><li><p>Activate another Menu item: close the current menu and open the activated menu.</p></li><li><p>Activate a destination item: navigate to the destination.</p></li><li><p>Hover over an item: show only the visual over state.</p></li><li><p>Hover out of an item: remove only the visual over state.</p></li></ul><p>This interaction model gives users control because menus open based on intentional activation, not cursor movement.</p><h3>6.2 Hover behavior</h3><p>Hover state may indicate that an item is interactive.</p><p><strong>&#10004;&#65039; Hover may change:</strong></p><ul><li><p>Background</p></li><li><p>Text decoration</p></li><li><p>Border</p></li><li><p>Color</p></li><li><p>Elevation</p></li><li><p>Dropdown indicator styling</p></li></ul><p><strong>&#10060; In this pattern, hover must not:</strong></p><ul><li><p>Open a menu</p></li><li><p>Close a menu</p></li><li><p>Reveal child items</p></li><li><p>Dismiss child items</p></li><li><p>Replace focused state</p></li><li><p>Replace current page state</p></li><li><p>Trigger behavior that changes the available navigation structure</p></li></ul><p>Hover is visual feedback only. It should communicate that an item is interactive, but it must not change menu visibility.</p><h3>6.3 Hover out behavior</h3><p>Hover out removes the hover state.</p><p>Hover out must not close a dropdown menu or mega menu in this pattern.</p><p>Users must be able to dismiss an open menu through deliberate actions, not through cursor movement. This prevents fragile interaction paths where a menu closes unexpectedly because the cursor moved slightly outside the menu boundary.</p><p><strong>&#10004;&#65039; Required rule:</strong></p><ul><li><p>If a menu was opened by activation, it remains open until the user intentionally dismisses it.</p></li></ul><h3>6.4 Menu dismissal</h3><p>Users must be able to close an open dropdown menu or mega menu by using deliberate dismissal methods.</p><p><strong>&#10004;&#65039; Required dismissal methods:</strong></p><ul><li><p>Activate the Menu item again.</p></li><li><p>Activate outside the menu.</p></li><li><p>Press the <code>Esc </code>key.</p></li><li><p>Move focus out of the open navigation region, when this dismissal behavior is intentionally defined. Moving focus from the Menu item into its child menu must not dismiss the menu.</p></li><li><p>Activate another Menu item.</p></li><li><p>Activate a destination item.</p></li></ul><p>When the <code>Esc </code>key closes the menu, focus must return to the Menu item that opened it.</p><p>This keeps the user oriented and prevents keyboard users from losing their place in the navigation.</p><h3>6.5 Animation timing</h3><p>Dropdown and mega menu animations should be brief.</p><p><strong>&#10004;&#65039; Recommended duration:</strong></p><ul><li><p>100 to 150 milliseconds</p></li></ul><p>Animation may help users understand that a menu has opened or closed, but it should not slow down navigation.</p><p><strong>&#10060; Avoid animations that:</strong></p><ul><li><p>Delay access to child items</p></li><li><p>Make the interface feel less responsive</p></li><li><p>Create unnecessary motion</p></li><li><p>Interfere with focus visibility</p></li><li><p>Make it harder to track the current state</p></li><li><p>Ignore user motion preferences</p></li><li><p>Desynchronize hidden, keyboard focusability, and <code>aria-expanded</code> during open or close transitions</p></li></ul><h3>6.6 Motion preferences and reduced motion</h3><p>Navigation animation must not create unnecessary motion or make the interface harder to use.</p><p>If menu animation is used, implementation should respect user motion preferences, including prefers-reduced-motion.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Animations must not delay access to child items.</p></li><li><p>Animations must not interfere with visible focus indicators.</p></li><li><p>Animations must not be required for users to understand whether a menu is open or closed.</p></li><li><p>When users request reduced motion, non-essential menu animation should be reduced or removed.</p></li><li><p>Open, closed, expanded, collapsed, focused, and current page states must remain clear even when animation is reduced or removed.</p></li><li><p>When animation is used, visual visibility, keyboard focusability, hidden, and <code>aria-expanded</code> must remain synchronized throughout the open and close behavior.</p></li></ul><p>Reduced motion should not change the interaction model. Menus still open by activation and close through defined dismissal behavior.</p><h2>7. Dropdown Menu and Mega Menu Behavior</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7YKX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7YKX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7YKX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7YKX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7YKX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7YKX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg" width="1456" height="462" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:462,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:83032,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7YKX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7YKX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7YKX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7YKX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0ea2988-0c3f-4f3a-9c5d-4c057e9c7fe3_1726x548.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>7.1 Dropdown indicators</h3><p>Menus must include a dropdown indicator.</p><p><strong>Acceptable indicators include:</strong></p><ul><li><p>Down chevron</p></li><li><p>Disclosure arrow</p></li><li><p>Caret</p></li></ul><p>The dropdown indicator communicates that activating the item will expose child navigation items.</p><p>Destination items must not include dropdown indicators.</p><p><strong>This distinction helps users tell the difference between:</strong></p><ul><li><p>Items that navigate directly</p></li><li><p>Items that open child menus</p></li></ul><p>Dropdown indicators should be visually consistent across the primary navigation system.</p><p>The dropdown indicator should not behave as a separate interaction target. Activating the label area or the indicator area should perform the same disclosure action.</p><h3>7.2 Open state</h3><p><strong>When a dropdown menu or mega menu is open:</strong></p><ul><li><p>The Menu item must show an open visual state.</p></li><li><p>The Menu item must use <code>aria-expanded=&#8221;true&#8221;</code>.</p></li><li><p>The child menu must be visible.</p></li><li><p>The child menu must appear in a predictable spatial relationship to the Menu item.</p></li><li><p>The dropdown indicator should visually reflect the expanded state.</p></li><li><p>The menu should remain open until intentionally dismissed.</p></li></ul><p>The open state should make it clear which top-level item controls the visible menu.</p><p>Opening a menu must be triggered by activation, not hover.</p><h3>7.3 Closed state</h3><p><strong>When a dropdown menu or mega menu is closed:</strong></p><ul><li><p>The Menu item must show a collapsed visual state.</p></li><li><p>The Menu item must use <code>aria-expanded=&#8221;false&#8221;</code>.</p></li><li><p>The child menu must be hidden visually.</p></li><li><p>The child menu should be hidden from assistive technology unless there is an intentional reason not to do so.</p></li><li><p>The dropdown indicator should visually reflect the collapsed state.</p></li></ul><p>The closed state should communicate that child items are available, but not currently visible.</p><p>Closing a menu must be triggered by intentional dismissal behavior, not hover out.</p><h3>7.4 Esc key behavior</h3><p><strong>When the user presses the </strong><code>Esc </code><strong>key while a menu is open:</strong></p><ul><li><p>The menu closes.</p></li><li><p>Focus returns to the Menu item that opened the menu.</p></li><li><p>The Menu item updates to <code>aria-expanded=&#8221;false&#8221;</code>.</p></li><li><p>The visual state updates from expanded to collapsed.</p></li></ul><p>This behavior should be consistent for all dropdown menus and mega menus in the primary navigation.</p><h3>7.5 Focus behavior</h3><p>When a menu opens, focus behavior must be predictable and consistent.</p><p>The design team should choose one focus model and apply it consistently across primary navigation menus.</p><p><strong>Acceptable patterns:</strong></p><ol><li><p>Focus remains on the Menu item: The menu opens, and the user can continue forward through the tab order into the child items.</p></li><li><p>Focus moves into the opened menu: Focus moves to the first focusable item inside the opened menu.</p></li></ol><p><strong>In either pattern:</strong></p><ul><li><p>Open menu items must be reachable by keyboard.</p></li><li><p>Users must be able to move focus out of the menu.</p></li><li><p>Focus should not be trapped inside standard desktop dropdown menus or mega menus.</p></li><li><p>Focus order must follow the visual and logical order of the menu.</p></li><li><p><code>Esc </code>must close the menu and return focus to the Menu item.</p></li><li><p>Focus movement may dismiss the menu only when that dismissal behavior is intentionally defined. Moving focus from the Menu item into the opened child menu must not dismiss the menu.</p></li></ul><p>Focus behavior should not depend on hover.</p><h3>7.6 Mega menu layout</h3><p>Mega menus should organize terminal nodes into visible groups.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!jYM6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!jYM6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jYM6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jYM6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jYM6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!jYM6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg" width="1456" height="413" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:413,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:148416,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!jYM6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg 424w, https://substackcdn.com/image/fetch/$s_!jYM6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg 848w, https://substackcdn.com/image/fetch/$s_!jYM6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!jYM6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ff9c409-806a-4200-9cbe-f618dc545414_1909x541.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Each group should include:</strong></p><ul><li><p>Descriptive group heading</p></li><li><p>Related destination items</p></li><li><p>Clear visual separation from other groups</p></li><li><p>Logical reading order</p></li></ul><p><strong>&#10004;&#65039; Preferred structure:</strong></p><pre><code><code>Primary navigation item
  Mega menu
    Group heading
      Destination item
      Destination item
      Destination item</code></code></pre><p><strong>&#10060; Avoid deep nested structures inside mega menus:</strong></p><pre><code><code>Primary navigation item
  Mega menu
    Category
      Subcategory
        Sub-subcategory
          Destination item</code></code></pre><p>Mega menus work best when they expose meaningful destination choices in a scannable layout. They should not become a complete site map or a visual representation of the full feature architecture.</p><h3>7.7 Current page inside a dropdown or mega menu</h3><p>If the currently displayed page is represented by a child item inside a dropdown or mega menu, the child item should receive the current page indicator.</p><p><strong>Example structure:</strong></p><pre><code><code>Parent Item
  Child Destination
  Child Destination &#8592; current page
  Child Destination</code></code></pre><p><strong>In this pattern:</strong></p><ul><li><p>The current child destination receives the current page indicator.</p></li><li><p>The current child destination uses <code>aria-current=&#8221;page&#8221;</code>.</p></li><li><p>The parent item may receive a visual parent-active treatment.</p></li><li><p>The parent item should not use <code>aria-current=&#8221;page&#8221;</code> unless the parent item itself is the current page.</p></li></ul><p>The parent-active treatment helps users understand which primary navigation section contains the current page. It should be visually distinct from the child item&#8217;s current page indicator.</p><h2>8. Mobile Primary Navigation Behavior</h2><h3>8.1 Menu control</h3><p>The mobile primary navigation control must include a visible text label.</p><p><strong>&#10004;&#65039; Preferred label:</strong></p><ul><li><p>Menu</p></li></ul><p>The menu icon may appear with the label, but the visible text label must remain present.</p><div class="callout-block" data-callout="true"><p>&#10060; Avoid icon-only mobile primary navigation controls. The menu control should not rely on users recognizing the hamburger icon or remembering what it means.</p></div><p>The control should clearly communicate that activating it opens the primary navigation.</p><p>The Menu control and any close control must provide a target area large enough for accurate cursor and tap activation. Use at least 24 by 24 CSS pixels unless a valid exception applies. This is a minimum, not the ideal target size. In practice, mobile menu controls, close controls, and accordion rows should be larger than the minimum whenever layout allows.</p><h3>8.2 Opening and closing mobile navigation</h3><p>Mobile navigation must open and close by intentional activation or defined keyboard dismissal.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BbT8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BbT8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png 424w, https://substackcdn.com/image/fetch/$s_!BbT8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png 848w, https://substackcdn.com/image/fetch/$s_!BbT8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png 1272w, https://substackcdn.com/image/fetch/$s_!BbT8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BbT8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png" width="1388" height="878" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:878,&quot;width&quot;:1388,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:741902,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BbT8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png 424w, https://substackcdn.com/image/fetch/$s_!BbT8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png 848w, https://substackcdn.com/image/fetch/$s_!BbT8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png 1272w, https://substackcdn.com/image/fetch/$s_!BbT8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ffe0690-30de-4490-978e-769dc9f5f0d3_1388x878.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>&#10004;&#65039; Required behavior:</strong></p><ul><li><p>Activate Menu: open primary navigation.</p></li><li><p>Activate Menu again or activate a close control: close primary navigation.</p></li><li><p>Press Esc: close primary navigation when keyboard focus is inside the menu.</p></li><li><p>Focus returns to the menu control when the menu is dismissed.</p></li></ul><p>Hover must not open, close, reveal, or dismiss mobile navigation or child navigation sections in this pattern.</p><p>The open and closed states should be visually clear.</p><p><strong>When the mobile menu is open:</strong></p><ul><li><p>The menu control should show an open state or be replaced by a clear close control.</p></li><li><p>The navigation panel or menu region should be visible.</p></li><li><p>The first available item should be reachable through the expected tab order.</p></li><li><p>The user should be able to dismiss the menu without activating a destination.</p></li></ul><p>If the mobile navigation panel blocks interaction with the rest of the page, treat it as a modal-style experience: prevent background interaction, provide a clear close control, support <code>Esc</code>, and restore focus to the Menu control when dismissed. If the panel does not block interaction with the rest of the page, focus should remain free to move through the page and should not be trapped inside the navigation.</p><h3>8.3 No split-button behavior</h3><p>Mobile navigation rows must not use split-button behavior.</p><p><strong>&#10060; Avoid this pattern:</strong></p><ul><li><p>Text label navigates to a parent landing page.</p></li><li><p>Adjacent chevron opens a child menu.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UQjW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UQjW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UQjW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UQjW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UQjW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UQjW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg" width="443" height="226.06387362637363" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:743,&quot;width&quot;:1456,&quot;resizeWidth&quot;:443,&quot;bytes&quot;:267698,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UQjW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg 424w, https://substackcdn.com/image/fetch/$s_!UQjW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg 848w, https://substackcdn.com/image/fetch/$s_!UQjW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!UQjW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F67ca965b-06ea-4768-81c9-dc649bd819c5_1619x826.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This creates two interaction targets within what appears to be one navigation row. Users may not understand that the label and chevron perform different actions.</p><p><strong>&#10004;&#65039; Required pattern:</strong></p><ul><li><p>Each row has one interaction target.</p></li><li><p>A row either navigates to a destination or opens a child section.</p></li><li><p>A row must not do both.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8nMa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8nMa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8nMa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8nMa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8nMa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8nMa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg" width="400" height="436.457437661221" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1269,&quot;width&quot;:1163,&quot;resizeWidth&quot;:400,&quot;bytes&quot;:305044,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8nMa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8nMa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8nMa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8nMa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a2e0f56-d2cf-4047-bfe4-8232eedb81ad_1163x1269.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If the row opens a child section, the whole row should operate as the Menu item. The dropdown indicator may remain visible, but it should not be a separate interaction target.</p><h3>8.4 Parent category with landing page</h3><p>If a parent category has a landing page, include that landing page as a child destination item.</p><p><strong>&#10004;&#65039; Required pattern:</strong></p><ul><li><p>The parent row opens or closes the child section.</p></li><li><p>The parent landing page appears as the first child destination item.</p></li><li><p>The parent landing page uses an explicit overview label.</p></li></ul><p><strong>Example structure:</strong></p><pre><code><code>Parent Category
  Parent Category Overview
  Child Destination
  Child Destination</code></code></pre><p>This keeps the parent row&#8217;s interaction simple and gives users a clear way to reach the parent landing page.</p><h3>8.5 Accordion behavior</h3><p>Mobile child navigation should use disclosure or accordion behavior.</p><p><strong>&#10004;&#65039; Required behavior:</strong></p><ul><li><p>Activate parent row: expand child section.</p></li><li><p>Activate the same parent row again: collapse child section.</p></li><li><p>Expanded state is visually indicated.</p></li><li><p>Expanded state is programmatically exposed with <code>aria-expanded</code>.</p></li><li><p>Child items appear directly under the parent row.</p></li><li><p>The dropdown indicator visually reflects expanded or collapsed state.</p></li></ul><p>Accordion behavior should preserve the parent-child relationship visually. Child items should appear close enough to the parent row that users can understand the relationship without relying on memory.</p><p>Hover must not expand or collapse accordion sections in this pattern.</p><h3>8.6 Mobile current page indication</h3><p>The currently displayed page, section, or route must have a visible current page indicator in mobile navigation.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>The current page indicator must be visible when the relevant navigation section is displayed.</p></li><li><p>The indicator must be persistent and not depend on hover or focus.</p></li><li><p>The current destination item must use <code>aria-current=&#8221;page&#8221;</code>.</p></li><li><p>If the current page is inside a collapsed parent section, the parent row may receive a visual parent-active treatment.</p></li><li><p>The parent row should not use<code> aria-current=&#8221;page&#8221;</code> unless the parent row itself represents the current page.</p></li></ul><p>This allows users to reopen the mobile navigation and understand where they are within the application structure.</p><h2>9. Keyboard Interaction Requirements</h2><h3>9.1 Tab order</h3><p>Tab order must follow the visual and logical order of the primary navigation.</p><p>The goal is for keyboard users to experience the navigation in the same order that sighted cursor users visually scan it.</p><p><strong>&#10004;&#65039; Recommended order:</strong></p><ol><li><p>Logo or home link, if present</p></li><li><p>Top-level primary navigation items</p></li><li><p>Open child menu items</p></li><li><p>Utility items, if present</p></li><li><p>Main page content</p></li></ol><p>When a dropdown menu or mega menu is closed, its child items should not be included in the tab order.</p><p>When a dropdown menu or mega menu is open, its child items must be reachable through the keyboard.</p><p>Tab order should not jump unexpectedly between unrelated areas of the page. Users should be able to move through the navigation predictably and understand where they are at each step.</p><p>Hover must not affect tab order. Child items should enter or leave the tab order based on the menu&#8217;s activated open or closed state, not cursor position.</p><h3>9.2 Keyboard commands</h3><p>Primary navigation must support standard keyboard behavior.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/1CbEO/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34c9821e-a260-46db-9c89-4a9475e0a29f_1220x578.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0ad2a428-9fa7-4492-b4dc-1e6034771056_1220x578.png&quot;,&quot;height&quot;:283,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/1CbEO/1/" width="730" height="283" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>Keyboard behavior should match the item type.</p><p><strong>Destination items behave like links:</strong></p><ul><li><p>Enter activates the item.</p></li><li><p>The user is taken to the destination.</p></li></ul><p><strong>Menu items behave like buttons:</strong></p><ul><li><p>Enter activates the item.</p></li><li><p>Space activates the item.</p></li><li><p>The child menu opens or closes.</p></li></ul><p>Keyboard activation is intentional activation. A menu may open or close through Enter or Space on a Menu item. A menu must not open or close because the cursor is hovering over the item while it has focus.</p><h3>9.3 Focused state</h3><p>Every interactive item must have a visible focused state.</p><p>The focused state tells keyboard users where they are in the navigation. It should be treated as a required interaction state, not a visual enhancement.</p><p><strong>Focused state must be:</strong></p><ul><li><p>Clearly visible</p></li><li><p>Persistent while the item has focus</p></li><li><p>Distinct from hover state</p></li><li><p>Distinct from current page state</p></li><li><p>Distinct from expanded and collapsed states</p></li><li><p>Distinct from active / pressed state</p></li><li><p>Not dependent on color alone</p></li></ul><p>Do not remove browser focus styling unless it is replaced with an equally clear or stronger focused state.</p><p><strong>The focused state should work across:</strong></p><ul><li><p>Top-level items</p></li><li><p>Child items</p></li><li><p>Dropdown indicators when they are part of the same disclosure control</p></li><li><p>Menu controls</p></li><li><p>Close controls, if present</p></li></ul><p>Focused state must not automatically open a dropdown menu or mega menu. If a Menu item receives focus, it should show focused state only. The menu opens only when the user activates the Menu item.</p><h3>9.4 Focus management</h3><p>Focus behavior should help users stay oriented.</p><p>When a menu is opened by activation, the team should choose one focus model and apply it consistently.</p><p><strong>Acceptable patterns:</strong></p><ol><li><p>Focus remains on the Menu item: The menu opens, and the user can continue forward through the tab order into the child items.</p></li><li><p>Focus moves into the opened menu: Focus moves to the first focusable child item inside the opened menu.</p></li></ol><p><strong>In both patterns:</strong></p><ul><li><p>Child items must be keyboard reachable.</p></li><li><p>Users must be able to move focus out of the menu.</p></li><li><p>Focus should not be trapped inside standard dropdown menus or mega menus.</p></li><li><p><code>Esc </code>must close the menu and return focus to the Menu item that opened it.</p></li><li><p>Focus order must match the visual and logical order of the menu.</p></li><li><p>Focus behavior must not depend on hover.</p></li></ul><p>Focus should only be trapped when the navigation is intentionally presented as a modal experience, such as a full-screen mobile menu that blocks interaction with the rest of the page. In that case, prevent background interaction, provide a clear close control, support <code>Esc</code>, and return focus to the Menu control when dismissed. If the mobile menu does not block the page, do not trap focus inside the navigation.</p><p>If focus movement is used as a dismissal method, it must be intentionally defined and consistent. Moving focus out of the open navigation region may dismiss the menu; moving focus from the Menu item into its child menu must not dismiss it.</p><h2>10. Cursor Interaction Requirements</h2><h3>10.1 Hover / over state</h3><p>Hover state may indicate that an item is interactive.</p><p><strong>Hover state may change:</strong></p><ul><li><p>Background</p></li><li><p>Text decoration</p></li><li><p>Border</p></li><li><p>Color</p></li><li><p>Elevation</p></li><li><p>Indicator styling</p></li></ul><div class="callout-block" data-callout="true"><p>&#9888;&#65039;<strong> Hover is visual feedback only.</strong></p></div><p><strong>In this pattern, hover must not:</strong></p><ul><li><p>Open a menu</p></li><li><p>Close a menu</p></li><li><p>Reveal child items</p></li><li><p>Dismiss child items</p></li><li><p>Change expanded or collapsed state</p></li><li><p>Change tab order</p></li><li><p>Replace focused state</p></li><li><p>Replace current page state</p></li><li><p>Trigger behavior that changes the available navigation structure</p></li></ul><p>The user may hover over an item and see an over state, but the navigation structure must not change until the user intentionally activates an item.</p><h3>10.2 Hover out</h3><p>Hover out removes the hover state.</p><p>Hover out must not close a dropdown menu or mega menu in this pattern.</p><p>Users should not have to move the cursor through a narrow path or maintain exact cursor placement to keep a menu open. That creates fragile navigation behavior and increases accidental dismissal.</p><p><strong>&#10004;&#65039; Required rule:</strong></p><ul><li><p>If a menu was opened by activation, it remains open until the user intentionally dismisses it.</p></li></ul><p><strong>Open menus should close through deliberate dismissal methods, such as:</strong></p><ul><li><p>Activating the Menu item again</p></li><li><p>Activating outside the menu</p></li><li><p>Pressing the <code>Esc </code>key</p></li><li><p>Moving focus out of the menu, when defined</p></li><li><p>Activating another Menu item</p></li><li><p>Activating a destination item</p></li></ul><h3>10.3 Activate outside</h3><p>Activating outside an open menu should dismiss the menu.</p><p><strong>This applies to:</strong></p><ul><li><p>Dropdown menus</p></li><li><p>Mega menus</p></li><li><p>Mobile navigation panels, when appropriate</p></li></ul><p>Activate outside behavior should not interfere with destination activation. If the user activates a valid destination item, the destination action should take priority.</p><p>Activating outside is intentional dismissal. Hovering outside the menu is not dismissal.</p><h3>10.4 Cursor movement</h3><p>Menus must not depend on precise cursor movement.</p><div class="callout-block" data-callout="true"><p>&#10060; Avoid interaction paths where minor cursor movement causes the menu to close unexpectedly.</p></div><p><strong>This is especially important when:</strong></p><ul><li><p>A child menu appears below or beside the parent item</p></li><li><p>The menu has multiple columns</p></li><li><p>The user must move the cursor across spacing between the parent item and child menu</p></li><li><p>The menu contains visual groups</p></li></ul><p>The user should be able to move from the parent item into the child menu without fighting the interaction model.</p><p>Cursor movement may change hover / over state. Cursor movement must not change whether the menu is open or closed.</p><h3>10.5 Target size</h3><p>Interactive targets in primary navigation must be large enough to activate accurately with cursor and touch input.</p><p><strong>Minimum target guidance:</strong></p><ul><li><p>Primary navigation links, disclosure buttons, mobile menu controls, close controls, and accordion rows should provide a target area of at least 24 by 24 CSS pixels unless a valid exception applies. Treat this as the minimum threshold, not the preferred size. For mobile menu controls, close controls, and accordion rows, aim larger than the minimum whenever layout allows.</p></li><li><p>Adjacent targets should have enough spacing that users are not likely to activate the wrong item by accident.</p></li><li><p>The visible label, icon, or dropdown indicator may be smaller than the target area, but the interactive target area itself must be large enough.</p></li><li><p>Do not rely on tiny chevrons or icons as the only practical target for expanding or collapsing navigation sections.</p></li></ul><p>This requirement supports cursor, tap, motor accessibility, and general usability. It is especially important for mobile navigation, dense desktop navigation bars, and any close or menu control.</p><h2>11. Interaction States</h2><p>Each interactive item should define the following states as applicable.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K9vS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K9vS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K9vS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K9vS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K9vS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K9vS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg" width="1456" height="919" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:919,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:259648,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K9vS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K9vS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K9vS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K9vS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcc8d8510-cd06-45b8-9436-2ed106a53ada_1460x922.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The visual system must also define how states combine. A single item can be focused and hovered, focused and active, focused and current, hovered and current, focused and expanded, or focused and disabled. Combined states should not be treated as new semantic roles. They are visual combinations of existing states.</p><p>For example, focused + active means the item has keyboard focus and is currently being activated. It does not mean the item has a special hybrid role. focused + current page means the item represents the current page and currently has focus. It does not mean the current page state and focused state are the same thing.</p><h3>11.1 Default state</h3><p>Default state is the base visual treatment for an available item before temporary interaction states such as hover, focus, active, or pressed are applied.</p><p>For Menu items, the default visual treatment may appear together with collapsed state. A collapsed Menu item can still be in its default visual presentation.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Default state should make the item readable.</p></li><li><p>Default state should make the item appear available.</p></li><li><p>Default state should not visually compete with current page state.</p></li><li><p>Default state should not be confused with disabled state.</p></li><li><p>Default state should not imply that a child menu is open.</p></li></ul><h3>11.2 Hover / over state</h3><p>The cursor is over the item.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Hover state must visually indicate interactivity.</p></li><li><p>Hover state must be visually distinct from focused, current page, expanded, and active / pressed states.</p></li><li><p>Hover state must be subtle enough that it does not compete with the current page indicator.</p></li><li><p>Hover state must not open, close, reveal, or dismiss a menu in this pattern.</p></li><li><p>Hover state must not change expanded or collapsed state.</p></li></ul><p>Hover state is visual feedback only.</p><h3>11.3 Focused state</h3><p>The item has keyboard focus.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Every interactive item must have a visible focused state.</p></li><li><p>Focused state must be clearly visible.</p></li><li><p>Focused state must not rely on color alone.</p></li><li><p>Focused state must be visually distinct from hover, current page, expanded, and active / pressed states.</p></li><li><p>Focus must follow the defined tab order.</p></li><li><p>Focused state must not automatically open a menu.</p></li></ul><p><strong>Focused state should always answer the user&#8217;s question:</strong></p><blockquote><p>Where am I right now?</p></blockquote><p>A focused Menu item opens or closes its child menu only when the user activates it with Enter or Space.</p><h3>11.4 Active / pressed state</h3><p>The item is actively being activated.</p><p>This state occurs during intentional activation, such as when the user presses the mouse buttons, Enter, or Space.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Active or pressed state should provide immediate visual feedback.</p></li><li><p>Active or pressed state should be temporary.</p></li><li><p>Active or pressed state should not be used to represent the current page.</p></li><li><p>Active or pressed state should not be confused with focused state.</p></li><li><p>Active or pressed state should not be confused with current page state.</p></li></ul><p>This state communicates that the user&#8217;s input has been received.</p><p>Hover does not create active or pressed state. The item enters active or pressed state only during intentional activation.</p><h3>11.5 Current page state</h3><p>The item representing the currently displayed page, section, or route must have a visible current page indicator.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>The current page indicator must be visually persistent.</p></li><li><p>The current page indicator must be visible without hover or focus.</p></li><li><p>The current page indicator must be visually distinct from hover, focused, expanded, and active / pressed states.</p></li><li><p>The current page indicator must not rely on color alone.</p></li><li><p>The current destination item must use <code>aria-current=&#8221;page&#8221;</code>.</p></li><li><p>Only one item in the same navigation set should use <code>aria-current=&#8221;page&#8221;</code>.</p></li></ul><p><strong>Example:</strong></p><pre><code><code>&lt;a href="/current-path" aria-current="page"&gt;Current item&lt;/a&gt;</code></code></pre><p>If the current page is represented by a child item inside a dropdown menu or mega menu, the child item should receive the current page indicator.</p><p><strong>Example structure:</strong></p><pre><code><code>Parent Item
  Child Destination
  Child Destination &#8592; current page
  Child Destination</code></code></pre><p><strong>In this pattern:</strong></p><ul><li><p>The current child destination receives the current page indicator.</p></li><li><p>The current child destination uses <code>aria-current=&#8221;page&#8221;</code>.</p></li><li><p>The parent item may receive a visual parent-active treatment.</p></li><li><p>The parent item should not use <code>aria-current=&#8221;page&#8221;</code> unless the parent item itself is the current page.</p></li></ul><p>The parent-active treatment helps users understand which top-level section contains the current page. It should be visually distinct from the child item&#8217;s current page indicator.</p><p>Current page state must not depend on hover, focus, or menu open state.</p><h3>11.6 Selected state</h3><p>Selected state should not be used as the normal way to represent the current page in primary navigation.</p><p>Use selected state only when the component supports selection as a state separate from navigation.</p><p><strong>Examples of appropriate selected state:</strong></p><ul><li><p>A selected item inside a picker</p></li><li><p>A selected item inside a switcher</p></li><li><p>A selected item inside an application-style component</p></li><li><p>A selected tab in a tablist</p></li></ul><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Selected state must be visually distinct from hover, focused, current page, expanded, and active / pressed states.</p></li><li><p>Selected state must not be used as a substitute for current page state.</p></li><li><p>Do not use <code>aria-selected</code> for standard primary navigation links.</p></li><li><p>Use <code>aria-selected</code> only for components with true selection semantics, such as tabs, listboxes, grids, or tree views.</p></li></ul><p>For standard primary navigation, the user is usually not selecting an item into a persistent selection set. They are navigating to a location. In that case, use current page state instead.</p><p>If a visual state guide uses the phrase Selected (Current Page), the implementation should still treat that state as current page state and expose it with <code>aria-current=&#8221;page&#8221;</code>, not <code>aria-selected</code>.</p><h3>11.7 Expanded state</h3><p>The Menu item&#8217;s child menu is open.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Expanded state must be visually indicated.</p></li><li><p>The Menu item must use <code>aria-expanded=&#8221;true&#8221;</code>.</p></li><li><p>The dropdown indicator should visually reflect the expanded state.</p></li><li><p>Expanded state must be visually distinct from hover, focused, current page, and active / pressed states.</p></li><li><p>Expanded state must result from intentional activation, not hover.</p></li></ul><p><strong>Expanded state should answer the user&#8217;s question:</strong></p><blockquote><p>Which item opened this menu?</p></blockquote><h3>11.8 Collapsed state</h3><p>The Menu item&#8217;s child menu is closed.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Collapsed state must be visually indicated.</p></li><li><p>The Menu item must use <code>aria-expanded=&#8221;false&#8221;</code>.</p></li><li><p>The dropdown indicator should visually reflect the collapsed state.</p></li></ul><p>Collapsed state should still communicate that child items are available, usually through the dropdown indicator.</p><p>Collapsed state must result from initial page state or intentional dismissal behavior, not hover out.</p><h3>11.9 Disabled state</h3><p>The item is visible but not currently available.</p><p>Use disabled navigation items sparingly.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Disabled items must not be activatable.</p></li><li><p>Disabled state must be visually distinct from default state.</p></li><li><p>Disabled state must not rely on color alone.</p></li><li><p>Disabled items should not receive keyboard focus unless there is a specific accessibility reason.</p></li><li><p>Disabled items must not open, close, reveal, or dismiss menus.</p></li><li><p>Hover over a disabled item may show a disabled visual treatment, but it must not trigger behavior.</p></li></ul><div class="callout-block" data-callout="true"><p><strong>&#128221; Implementation note: </strong>Standard links do not support the native disabled attribute. If a destination is unavailable, prefer removing it, explaining the unavailable state nearby, or implementing an intentionally disabled pattern with clear visual, keyboard, and screen reader behavior. If <code>aria-disabled=&#8221;true&#8221;</code> is used, the implementation must still prevent activation and communicate the disabled state visually.</p></div><p>When possible, avoid showing disabled items unless the unavailable option helps users understand status, permissions, or workflow constraints.</p><p>If users cannot do anything with the item and do not need to know it exists, consider removing it from the navigation instead of showing it as disabled.</p><h3>11.10 Combined interaction states</h3><p>Interaction states can combine. The design system should document these combinations visually so implementation teams know which cue takes priority.</p><p><strong>Common combinations include:</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mCD4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mCD4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mCD4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mCD4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mCD4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mCD4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg" width="1456" height="601" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:601,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:270918,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197846073?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mCD4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mCD4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mCD4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mCD4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2068b1e-ba9d-4499-99b8-9fd4f6121b0a_1484x613.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Combined states must preserve focus visibility.</p></li><li><p>Combined states must preserve the current page indicator.</p></li><li><p>Combined states must not imply that focus, current page, active, or selected are the same concept.</p></li><li><p>Combined states must not create a hybrid interaction model.</p></li><li><p>Combined states must not change whether an item behaves as a destination item or Menu item.</p></li><li><p>If the dropdown indicator is present for a Menu item, it should remain visible across applicable states.</p></li></ul><p>The attached primary navigation item state guide should be treated as a visual reference for documenting state combinations. The language in this pattern should describe these as combinations, such as Focused + Hover or Focused + Active + Current Page, not as single blended states.</p><h2>12. Accessibility Requirements</h2><h3>12.1 Semantic HTML first</h3><p>Use semantic HTML before ARIA.</p><p>From the interaction design perspective, semantic HTML matters because it gives users expected behavior for free. Links behave like links. Buttons behave like buttons. Navigation landmarks behave like navigation landmarks.</p><p><strong>&#10004;&#65039; Required:</strong></p><ul><li><p>Use <code>&lt;nav&gt;</code> for the primary navigation landmark.</p></li><li><p>Use <code>&lt;a&gt;</code> for destination items.</p></li><li><p>Use <code>&lt;button type=&#8221;button&#8221;&gt;</code> for Menu items.</p></li><li><p>Use<code> &lt;ul&gt;</code> and <code>&lt;li&gt; </code>for item collections when appropriate.</p></li><li><p>Use visible text labels wherever possible.</p></li></ul><p>&#10060; <strong>Avoid:</strong></p><ul><li><p>Styling<code> &lt;div&gt;</code> or <code>&lt;span&gt;</code> elements as links or buttons.</p></li><li><p>Adding <code>role=&#8221;button&#8221; </code>to non-button elements unless there is no native option.</p></li><li><p>Adding redundant ARIA to native HTML elements.</p></li><li><p>Using ARIA as a substitute for correct HTML structure.</p></li></ul><p><strong>The interaction rule should come first:</strong></p><ul><li><p>If the item navigates, use a link.</p></li><li><p>If the item opens or closes something, use a button.</p></li></ul><p>Menu items must be activated intentionally. Do not create custom hover-triggered disclosure behavior for this pattern.</p><h3>12.2 ARIA use</h3><p>ARIA should only be used when semantic HTML does not provide the required name, state, or relationship.</p><p>Use ARIA to communicate missing information, not to recreate native behavior that already exists.</p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/eF5IE/3/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d38062d6-4960-4f2c-a1e6-4a62cd28ba3d_1220x536.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4327049-9367-46eb-82b8-20c1351e254c_1220x606.png&quot;,&quot;height&quot;:262,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/eF5IE/3/" width="730" height="262" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>ARIA must stay synchronized with the visual state.</p><p><strong>For example:</strong></p><ul><li><p>If the menu is visually open, the Menu item should use <code>aria-expanded=&#8221;true&#8221;</code>.</p></li><li><p>If the menu is visually closed, the Menu item should use <code>aria-expanded=&#8221;false&#8221;</code>.</p></li></ul><p>Hover must not change ARIA state in this pattern. <code>aria-expanded</code> should change only when the menu is opened or closed through activation or defined dismissal behavior.</p><p>When a menu opens or closes, hidden, keyboard focusability, and <code>aria-expanded</code> should be updated together so users do not encounter hidden focusable content or visible content that is missing the correct expanded state.</p><h3>12.3 Accessible names</h3><p>Every interactive item must have an accessible name.</p><p><strong>&#10004;&#65039; Preferred order:</strong></p><ol><li><p>Visible text label</p></li><li><p>Visible text referenced with <code>aria-labelledby</code></p></li><li><p><code>aria-label</code> only when no visible label or referenceable text is available</p></li></ol><p>Do not use <code>aria-label</code> as the default labeling method.</p><p>Visible labels are preferred because they create the same cue for sighted users and screen reader users. This keeps the interaction model consistent across users.</p><h3>12.4 Menu roles</h3><p>Do not use <code>role=&#8221;menu&#8221; </code>or <code>role=&#8221;menuitem&#8221;</code> for standard primary navigation unless the component intentionally follows application menu behavior.</p><p>Most primary navigation should use native links, buttons, lists, and disclosure behavior.</p><p>Use application menu roles only when the component behaves like an application menu and supports the expected keyboard model for that pattern.</p><p>For standard web application primary navigation, application menu roles usually add unnecessary complexity.</p><p>Menu roles must not be used to justify hover-triggered behavior. The interaction model must still support intentional activation, keyboard operation, clear focus behavior, and predictable dismissal.</p><h3>12.5 Target size</h3><p>Frontend implementation must provide cursor and tap targets that are large enough to activate accurately.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Interactive navigation targets should be at least 24 by 24 CSS pixels unless a valid exception applies. This is the minimum threshold, not the preferred size. Mobile menu controls, close controls, and accordion rows should be larger than the minimum whenever layout allows.</p></li><li><p>Adjacent interactive targets should include enough spacing to reduce accidental activation.</p></li><li><p>The whole disclosure row should usually be the target when a row expands or collapses a child section.</p></li><li><p>Dropdown indicators should communicate state, but they should not become the only small target users must hit.</p></li><li><p>Mobile menu controls, close controls, accordion rows, top-level links, and disclosure buttons must all be reviewed for target size.</p></li></ul><h3>12.6 Reduced motion</h3><p>Navigation must remain understandable and usable when motion is reduced or removed.</p><p><strong>&#10004;&#65039; Requirements:</strong></p><ul><li><p>Non-essential animation should respect prefers-reduced-motion.</p></li><li><p>Reduced motion should reduce or remove menu, panel, accordion, and indicator animations when appropriate.</p></li><li><p>State changes must still be clear without relying on animation.</p></li><li><p>Focus visibility must not be weakened by animation or by reduced-motion behavior.</p></li><li><p>Reduced-motion behavior must not change the underlying keyboard, cursor, or tap interaction model.</p></li></ul><h2>13. Responsive Behavior</h2><h3>13.1 Preserve interaction logic</h3><p>Interaction logic should remain consistent across breakpoints.</p><p>The layout may change from a horizontal desktop navigation bar to a mobile menu, but the meaning of each item should not change.</p><p><strong>Across desktop and mobile:</strong></p><ul><li><p>Destination items navigate directly.</p></li><li><p>Menu items open child menus.</p></li><li><p>Menu items include indicators.</p></li><li><p>Destination items do not include indicators.</p></li><li><p>Parent landing pages appear as overview child items.</p></li><li><p>Split-button behavior is avoided.</p></li><li><p>Menus and child sections open by activation only.</p></li><li><p>Hover does not open, close, reveal, or dismiss navigation content in this pattern.</p></li></ul><p>A user should not need to relearn what an item does because the viewport changed.</p><h3>13.2 Preserve navigation meaning</h3><p><strong>Responsive layouts must preserve:</strong></p><ul><li><p>Label clarity</p></li><li><p>Parent-child relationships</p></li><li><p>Destination availability</p></li><li><p>Current page indication</p></li><li><p>Keyboard access</p></li><li><p>Screen reader access</p></li></ul><p><strong>When primary navigation collapses into a mobile menu, users should still be able to understand:</strong></p><ul><li><p>Which section they are in</p></li><li><p>Which parent item contains the current page</p></li><li><p>Which items navigate directly</p></li><li><p>Which items expose child items</p></li><li><p>How to open and close child sections</p></li></ul><p>Do not simplify the mobile version by removing important destinations unless there is a clear, user-centered reason.</p><h3>13.3 Preserve current page indication</h3><p>The current page indicator must work across breakpoints.</p><p><strong>On desktop:</strong></p><ul><li><p>The current destination item should show the current page indicator.</p></li><li><p>If the current item is inside a dropdown or mega menu, the parent item may receive a parent-active treatment.</p></li></ul><p><strong>On mobile:</strong></p><ul><li><p>The current destination item should show the current page indicator when visible.</p></li><li><p>If the current item is inside a collapsed section, the parent row may receive a parent-active treatment.</p></li><li><p>Opening the parent section should reveal the child item with the current page indicator.</p></li></ul><p>The user should be able to open primary navigation and understand where they are in the application.</p><p>Current page indication must be persistent. It must not depend on hover, focus, or whether the user has recently interacted with the menu.</p><h3>13.4 Preserve dismissal behavior</h3><p>Menu dismissal behavior should remain predictable across breakpoints.</p><p><strong>Users should be able to dismiss open navigation UI by:</strong></p><ul><li><p>Activating the menu control again, when applicable</p></li><li><p>Activating a close control, when provided</p></li><li><p>Activating outside the navigation panel, when appropriate</p></li><li><p>Pressing the <code>Esc </code>key</p></li><li><p>Activating a destination item</p></li></ul><p>When dismissal occurs through the <code>Esc </code>key, focus should return to the item that opened the menu or panel.</p><p>Hover out must not dismiss open navigation UI on any breakpoint in this pattern.</p><h2>14. Common Anti-Patterns</h2><h3>14.1 Hover-triggered dropdown menus</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where the menu opens, closes, reveals, or dismisses based on hover interactions. </p></li></ul><p><strong>Why this fails in this pattern:</strong></p><ul><li><p>The menu can open unintentionally.</p></li><li><p>The menu can close unintentionally.</p></li><li><p>Touch users cannot rely on hover.</p></li><li><p>Keyboard users may not receive equivalent access.</p></li><li><p>Users have less control over when the menu opens or closes.</p></li><li><p>Cursor movement becomes part of the interaction logic instead of simple visual feedback.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Use activation-triggered disclosure behavior for this navigation pattern.</p></li><li><p>Keep hover as visual feedback only.</p></li><li><p>Do not use hover to change menu visibility in this pattern.</p></li></ul><h3>14.2 Icon-only mobile menu control</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where the primary navigation on mobile is hidden behind an unlabeled icon.</p></li></ul><p><strong>Why this fails in this pattern:</strong></p><ul><li><p>The icon may not be recognized by all users.</p></li><li><p>The control depends on recall or learned convention.</p></li><li><p>The interaction has weaker information scent.</p></li><li><p>The accessible name may not match the visible UI.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Use a visible Menu label.</p></li><li><p>The icon may remain as a supporting visual cue.</p></li></ul><h3>14.3 Split-button navigation row</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where one row contains separate targets for navigation and submenu expansion.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>Users may not understand that the label and indicator perform different actions.</p></li><li><p>The row appears to have one function but actually has two.</p></li><li><p>The smaller target is easier to miss.</p></li><li><p>Behavior becomes less predictable on mobile.</p></li><li><p>The pattern makes users determine whether the text, icon, or surrounding row is the correct target.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Use one interaction target per row.</p></li><li><p>If the parent category has a landing page, include it as an overview child item.</p></li><li><p>Activating the parent row should either navigate or disclose child items, not both.</p></li><li><p>The dropdown indicator should communicate disclosure state, not act as a separate control.</p></li></ul><h3>14.4 Vague item labels</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where the item label does not clearly communicate the destination, task, or category.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>Users have to interpret the label before activating it.</p></li><li><p>The item may appear to overlap with other items.</p></li><li><p>Users may open the item only to understand what it means.</p></li><li><p>The navigation becomes harder to scan.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Use plain, descriptive, user-recognizable labels.</p></li><li><p>Use labels that describe what the user will find or do after activating the item.</p></li><li><p>Avoid labels that depend on internal terminology or feature team language.</p></li></ul><h3>14.5 Duplicated destinations</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where the same destination appears in multiple primary navigation areas.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>Users may wonder whether the items lead to the same place or different places.</p></li><li><p>The structure becomes harder to learn.</p></li><li><p>The navigation may appear larger and more complex than it is.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Place each destination in the most user-expected location.</p></li><li><p>Duplicate destinations only when research shows users strongly expect the same destination in more than one category.</p></li></ul><h3>14.6 Deep nested navigation</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where users must move through multiple levels before reaching a destination.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>Each level adds interaction cost.</p></li><li><p>Each level requires users to interpret another abstraction.</p></li><li><p>The path becomes easier to abandon or misunderstand.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Flatten the hierarchy where practical.</p></li><li><p>Expose terminal nodes more directly.</p></li><li><p>Use grouped mega menu layouts when many destinations need to be visible.</p></li></ul><h3>14.7 Non-semantic controls</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where non-interactive element is styled to behave like a link or button.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>Keyboard behavior may not work correctly.</p></li><li><p>Screen reader behavior may be incorrect or incomplete.</p></li><li><p>Focus behavior may be missing.</p></li><li><p>Users may receive false cues about what the item does.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Use native<code> &lt;a&gt; </code>elements for destination items.</p></li><li><p>Use native <code>&lt;button type=&#8221;button&#8221;&gt;</code> elements for Menu items.</p></li><li><p>Use ARIA only when semantic HTML does not provide the required name, state, or relationship.</p></li></ul><h3>14.8 Missing expanded state</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where the menu opens visually but does not expose expanded or collapsed state.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>Screen reader users may not know whether the child menu is open.</p></li><li><p>The state of the item becomes unclear.</p></li><li><p>The visual UI and programmatic UI are out of sync.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Use <code>aria-expanded </code>on the Menu item.</p></li><li><p>Keep<code> aria-expanded</code> synchronized with the visual state.</p></li><li><p>Update expanded state only when the menu is opened or closed through intentional activation or dismissal.</p></li></ul><h3>14.9 Defaulting to ARIA instead of semantic HTML</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where ARIA is used to recreate behavior that native HTML already provides.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>The implementation becomes more fragile.</p></li><li><p>Native keyboard behavior may be lost.</p></li><li><p>Assistive technology behavior may become less predictable.</p></li><li><p>The team may accidentally create a custom component with incomplete interaction support.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Use semantic HTML first.</p></li><li><p>Use ARIA only to communicate missing names, states, or relationships.</p></li></ul><h3>14.10 Misusing selected state</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where selected state is used to represent the current page in standard primary navigation.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>Selection and current location are different concepts.</p></li><li><p><code>aria-selected </code>communicates selection semantics, not current page location.</p></li><li><p>Users of assistive technology may receive the wrong cue.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Use current page state for the current route.</p></li><li><p>Use<code> aria-current=&#8221;page&#8221;</code> on the current destination item.</p></li><li><p>Reserve selected state and <code>aria-selected</code> for components with true selection semantics.</p></li></ul><h3>14.11 Treating combined states as new interaction types</h3><p>&#10060; <strong>Problem:</strong></p><ul><li><p>Do not design patterns where a combined visual state is documented as though it were a new standalone interaction type.</p></li></ul><p><strong>Why this fails:</strong></p><ul><li><p>It can blur the difference between focus, hover, active, current page, expanded, collapsed, selected, and disabled.</p></li><li><p>It can make implementation teams think the component needs additional semantic states.</p></li><li><p>It can make accessibility state management more complicated than it needs to be.</p></li></ul><p><strong>&#10004;&#65039; Correction:</strong></p><ul><li><p>Document combined states as combinations of existing states.</p></li><li><p>Preserve the semantic meaning of each state.</p></li><li><p>Use <code>aria-current=&#8221;page&#8221; </code>for current page state.</p></li><li><p>Use <code>aria-expanded</code> for disclosure state.</p></li><li><p>Do not use <code>aria-selected</code> for standard primary navigation links.</p></li><li><p>Do not treat focus combinations as hybrid interaction patterns.</p></li></ul><h2>15. Validation Checklist</h2><h3>15.1 Information architecture</h3><ul><li><p>Parent-child relationships are clear.</p></li><li><p>Child items belong logically under their parent items.</p></li><li><p>Terminal nodes are easy to identify.</p></li><li><p>The hierarchy is as flat as practical.</p></li><li><p>Child items are grouped by user expectations.</p></li><li><p>Duplicate destinations are avoided.</p></li><li><p>Parent landing pages are represented as overview child items.</p></li></ul><h3>15.2 Desktop behavior</h3><ul><li><p>Menus open by activation only.</p></li><li><p>Hover does not open menus in this pattern.</p></li><li><p>Hover does not close menus in this pattern.</p></li><li><p>Hover does not reveal child items in this pattern.</p></li><li><p>Hover does not dismiss child items in this pattern.</p></li><li><p>Hover state is visual feedback only.</p></li><li><p>Menu items include dropdown indicators.</p></li><li><p>Destination items do not include dropdown indicators.</p></li><li><p>Menus can be dismissed by <code>Esc</code>, activate outside, moving focus out of the open navigation region when defined, trigger toggle, or activating another item.</p></li><li><p>Animations are brief and do not delay access to child items.</p></li><li><p>Non-essential animation respects reduced-motion preferences.</p></li><li><p><code>Esc </code>returns focus to the item that opened the menu.</p></li></ul><h3>15.3 Mobile behavior</h3><ul><li><p>Mobile menu control has a visible Menu label.</p></li><li><p>Icon-only primary navigation controls are not used.</p></li><li><p>Mobile navigation opens by activation only.</p></li><li><p>Mobile navigation closes by activation or defined dismissal behavior.</p></li><li><p>Split-button behavior is not used.</p></li><li><p>Each row has one interaction target.</p></li><li><p>Parent landing pages are included as overview child items.</p></li><li><p>Accordion sections expand and collapse by activation only.</p></li><li><p>Accordion state is visually and programmatically exposed.</p></li><li><p>Current page indication is preserved in the mobile menu.</p></li><li><p>Menu and close controls meet target-size requirements and are larger than the minimum whenever layout allows.</p></li><li><p>Accordion rows provide a target area large enough for touch input and are larger than the minimum whenever layout allows.</p></li><li><p>Panel and accordion animation respects reduced-motion preferences.</p></li><li><p>If a mobile navigation panel blocks background interaction, it is treated as a modal-style experience with intentional focus management, <code>Esc </code>support, background-interaction prevention, and focus restoration.</p></li></ul><h3>15.4 Keyboard behavior</h3><ul><li><p>Tab order follows the visual and logical structure.</p></li><li><p>Every interactive item has a visible focused state.</p></li><li><p>Enter activates links and buttons.</p></li><li><p>Space activates buttons.</p></li><li><p><code>Esc </code>dismisses open menus.</p></li><li><p>Focus returns to the triggering item after dismissal.</p></li><li><p>Focus is not trapped inside standard dropdown menus or mega menus.</p></li><li><p>Focused state alone does not open a menu.</p></li></ul><h3>15.5 Cursor behavior</h3><ul><li><p>Hover / over state is visual feedback only.</p></li><li><p>Cursor movement does not open menus.</p></li><li><p>Cursor movement does not close menus.</p></li><li><p>Cursor movement does not reveal child items.</p></li><li><p>Cursor movement does not dismiss child items.</p></li><li><p>Hover out removes only the hover state.</p></li><li><p>Activate outside dismisses open menus when appropriate.</p></li><li><p>Interactive targets are at least 24 by 24 CSS pixels unless a valid exception applies, with larger mobile targets used whenever layout allows. The 24 by 24 size is the minimum threshold, not the preferred target size.</p></li><li><p>Adjacent targets include enough spacing to reduce accidental activation.</p></li></ul><h3>15.6 Interaction states</h3><ul><li><p>Default state is defined as the base visual treatment for an available item.</p></li><li><p>Hover / over state is defined as visual feedback only.</p></li><li><p>Focused state is defined.</p></li><li><p>Active / pressed state is defined.</p></li><li><p>Current page state is defined.</p></li><li><p>Selected state is defined only where selection semantics apply.</p></li><li><p>Expanded state is defined.</p></li><li><p>Collapsed state is defined.</p></li><li><p>Disabled state is defined only where needed.</p></li><li><p>Common combined states are documented visually.</p></li><li><p>Combined states preserve focus visibility.</p></li><li><p>Combined states preserve the current page indicator.</p></li><li><p>Combined states do not create new semantic roles.</p></li><li><p>Combined states do not imply hybrid interaction behavior.</p></li><li><p>Current page state is visually distinct from hover, focused, selected, expanded, and active / pressed states.</p></li><li><p>The currently displayed page, section, or route has a visible current page indicator.</p></li><li><p>The current page indicator is persistent and does not depend on hover or focus.</p></li><li><p>Parent items may receive visual parent-active treatment when the current page belongs to their child menu.</p></li><li><p>Expanded and collapsed states change only through activation or defined dismissal behavior.</p></li></ul><h3>15.7 Accessibility</h3><ul><li><p>Primary navigation uses semantic HTML by default.</p></li><li><p>Destination items use native <code>&lt;a&gt; </code>elements.</p></li><li><p>Menu items use native <code>&lt;button type=&#8221;button&#8221;&gt;</code> elements.</p></li><li><p>Visible labels are used wherever possible.</p></li><li><p><code>aria-labelledby</code> is preferred when a visible or visually hidden label needs to be referenced.</p></li><li><p><code>aria-label</code> is used only when no visible or referenceable text is available.</p></li><li><p><code>aria-label=&#8221;Primary&#8221;</code> is preferred over <code>aria-label=&#8221;Primary navigation&#8221;</code> when labeling the primary navigation landmark directly.</p></li><li><p>Current page state uses <code>aria-current=&#8221;page&#8221;</code>.</p></li><li><p>Menu items use<code> aria-expanded</code>.</p></li><li><p><code>aria-controls</code> is optional and used only when an explicit control-to-menu relationship is needed.</p></li><li><p><code>aria-expanded</code> changes only when the visual menu state changes.</p></li><li><p>Hover does not change ARIA state in this pattern.</p></li><li><p><code>aria-selected</code> is not used for standard primary navigation links.</p></li><li><p>ARIA does not replace semantic HTML.</p></li><li><p>Visual state and programmatic state stay synchronized.</p></li><li><p>When menus open or close, hidden, keyboard focusability, and <code>aria-expanded</code> stay synchronized.</p></li><li><p>Animated menu transitions do not leave focusable content hidden from sighted users or visible content hidden from assistive technologies.</p></li><li><p>Disabled links are not implemented with a native disabled attribute. Unavailable destinations are removed, explained, or intentionally implemented with clear disabled behavior.</p></li><li><p>Interactive navigation controls meet target-size requirements, with larger mobile controls used whenever layout allows.</p></li><li><p>Non-essential navigation animation respects reduced-motion preferences.</p></li><li><p>Navigation remains understandable when animation is reduced or removed.</p></li></ul><h2>16. Final Acceptance Criteria List</h2><p><strong>The primary navigation bar meets these specifications when:</strong></p><ol><li><p>Users can distinguish destination items from Menu items.</p></li><li><p>Dropdown menus and mega menus open only by intentional activation.</p></li><li><p>Hover does not open, close, reveal, or dismiss dropdown menus, mega menus, or child navigation items in this pattern.</p></li><li><p>Hover / over state is visual feedback only.</p></li><li><p>Menu items include dropdown indicators.</p></li><li><p>Destination items do not include dropdown indicators.</p></li><li><p>The dropdown indicator is not a separate interaction target.</p></li><li><p>Open menus can be dismissed through <code>Esc</code>, activate outside, trigger toggle, moving focus out of the open navigation region when defined, or activating another item.</p></li><li><p>Pressing <code>Esc </code>closes the menu and returns focus to the item that opened it.</p></li><li><p>The currently displayed page, section, or route has a persistent visible current page indicator.</p></li><li><p>The current page indicator is visually distinct from hover, focused, selected, expanded, and active / pressed states.</p></li><li><p>The current destination item uses <code>aria-current=&#8221;page&#8221;</code>.</p></li><li><p>Parent Menu items may receive visual parent-active treatment when the current page belongs to their child menu.</p></li><li><p>Parent Menu items do not use<code> aria-current=&#8221;page&#8221; </code>unless the parent item itself is the current page.</p></li><li><p>The mobile menu control includes a visible Menu label.</p></li><li><p>Mobile navigation opens by activation only.</p></li><li><p>Mobile navigation does not use split-button behavior.</p></li><li><p>If a mobile navigation panel blocks background interaction, it is treated as a modal-style experience with intentional focus management and focus restoration.</p></li><li><p>Parent landing pages are available as overview child items.</p></li><li><p>Accordion sections expand and collapse by activation only.</p></li><li><p>All interactive items are keyboard operable.</p></li><li><p>All interactive items have visible focused states.</p></li><li><p>All interactive navigation targets provide at least 24 by 24 CSS pixels of target area unless a valid exception applies, with larger mobile targets used whenever layout allows. The 24 by 24 size is treated as the minimum threshold, not the preferred target size.</p></li><li><p>Adjacent interactive targets include enough spacing to reduce accidental activation.</p></li><li><p>Focused state alone does not open a menu.</p></li><li><p>Disclosure state is exposed with <code>aria-expanded</code>.</p></li><li><p><code>aria-controls</code> is optional and used only when an explicit control-to-menu relationship is needed.</p></li><li><p><code>aria-expanded</code> stays synchronized with the visual open or closed state.</p></li><li><p>When menus open or close, hidden, keyboard focusability, and<code> aria-expanded</code> stay synchronized.</p></li><li><p>Animated menu transitions do not leave focusable content hidden from sighted users or visible content hidden from assistive technologies.</p></li><li><p>Hover does not change <code>aria-expanded</code> in this pattern.</p></li><li><p>Item labels are clear, consistent, and user-recognizable.</p></li><li><p>The navigation hierarchy avoids unnecessary nesting.</p></li><li><p>Terminal nodes are clearly exposed within child menus.</p></li><li><p>Primary navigation uses semantic HTML by default.</p></li><li><p>aria-label is used only when no visible or referenceable label is available.</p></li><li><p><code>aria-label=&#8221;Primary&#8221;</code> is preferred over <code>aria-label=&#8221;Primary navigation&#8221; </code>when directly labeling the primary navigation landmark.</p></li><li><p>ARIA is only used to communicate missing names, states, or relationships that semantic HTML does not provide on its own.</p></li><li><p>Non-essential navigation animation respects prefers-reduced-motion.</p></li><li><p>Navigation state remains clear when animation is reduced or removed.</p></li><li><p>Selected state is not used as a substitute for current page state.</p></li><li><p><code>aria-selected </code>is not used for standard primary navigation links.</p></li><li><p>Combined visual states are documented as combinations of existing states, not as new semantic states.</p></li><li><p>Focus combinations do not imply a hybrid interaction pattern.</p></li><li><p>Disabled navigation items are used sparingly and only when they help users understand status, permissions, or workflow constraints.</p></li><li><p>Disabled links are not implemented with a native disabled attribute. Unavailable destinations are removed, explained, or intentionally implemented with clear disabled behavior.</p><div><hr></div></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[A/B Test Strategies That Work]]></title><description><![CDATA[Why Winning Isn&#8217;t the Same as Learning]]></description><link>https://trevorcalabro.substack.com/p/ab-test-strategies-that-work</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/ab-test-strategies-that-work</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 09 May 2026 17:08:23 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1396df01-9001-4f80-99f6-7e959f7c26a3_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>A/B testing can be useful, but only when the variations being tested are grounded in a clear user problem, a strong hypothesis, and a realistic understanding of what the test can prove. UX researchers should help teams shape better A/B testing strategy by clarifying the problem, improving the variation, adding guardrail metrics, and making sure &#8220;winning&#8221; does not get confused with meaningful learning.</p><div><hr></div><div class="callout-block" data-callout="true"><p>&#9888;&#65039; <strong>Disclaimer: </strong>This article is for situations where you <em><strong>absolutely must</strong></em> run an A/B test. I typically prefer other, more robust methods for learning about design variations. If you are interested in alternatives to A/B testing, start with these articles:</p><ul><li><p><a href="https://trevorcalabro.substack.com/p/how-to-conduct-a-multivariate-test">How to Conduct a Multivariate Test Using Excel or Google Sheets</a></p></li><li><p><a href="https://trevorcalabro.substack.com/p/more-meaningful-comparisons-with">More Meaningful Comparisons With Chi-squared Testing</a></p></li><li><p><a href="https://trevorcalabro.substack.com/p/another-way-ab-tests-mislead">Another Way A/B Tests Mislead</a></p></li></ul></div><p>Have you ever been in a meeting where everyone on the team starts debating a call to action, a dashboard card, an onboarding step, standard form field behavior, or some other part of a design, and everyone seems to have a strong opinion? One person thinks the button label should be more direct. Someone else thinks the page needs more explanatory text. Someone else wants to move the action higher on the screen because they are worried users will miss it. Then someone says that dreaded question, &#8220;Why don&#8217;t we just A/B test it?&#8221;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!etxT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!etxT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg 424w, https://substackcdn.com/image/fetch/$s_!etxT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg 848w, https://substackcdn.com/image/fetch/$s_!etxT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!etxT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!etxT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg" width="1456" height="562" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:562,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:643135,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197026193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!etxT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg 424w, https://substackcdn.com/image/fetch/$s_!etxT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg 848w, https://substackcdn.com/image/fetch/$s_!etxT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!etxT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bcca5dd-c027-44b9-ae9f-4eda9b42e4d5_3000x1158.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>To all the non-UX researchers in the room, that sounds like a valid question. It feels objective and data-driven. I get the appeal. Instead of arguing, the team can let users decide through behavior. Easy peasy. Done and done.</p><p>We all know that in the right context, that can be a good instinct. A/B testing can be useful because it gives teams a way to compare real behavior in a live product. It can reduce opinion-driven decision-making, help teams avoid endless internal debates, and sometimes reveal that the version everyone loved in a meeting is not the version users actually respond to in practice.</p><p>The problem starts when the team treats the test itself as the thing that creates rigor.</p><div class="pullquote"><p>The A/B mechanics can produce clean results while the thing being tested is still weak as hell. I see teams often randomly assign users, define a success metric, run the test long enough, and still end up with a result that does not teach them much.</p></div><p>A/B testing only compares the variations the team puts into the test. It does not make those variations are any good. If the variation is shallow, the learning will probably be shallow too. If the variation is based on a misunderstanding of the user problem, the result may only tell the team which version of the misunderstanding performed better.</p><p>In this article, I want to help reframe the way UX professionals respond to the question, &#8220;Why don&#8217;t we just A/B test it?&#8221; Instead of shutting the idea down outright, a better response is to slow the team down just enough to ask what the variation is actually testing. That is where UX research can add a lot of value before the test ever goes live.</p><h1>What A/B Data Leaves Out</h1><p>To run good A/B tests, you need to focus on the work that happens before the traffic split. The team has to clearly define what problem they believe exists, what user behavior they are trying to learn about, and what design variation would best test that belief. You guessed it: this is called strategy and study design. If your strategy sucks, the test can still produce clean-looking data, but it can also be super misleading.</p><p>The example I like to use is what I call the &#8220;make it more obvious&#8221; variation. You know the type of test. Let&#8217;s say Version A has a standard button at the bottom of a screen. Version B has a larger, higher-contrast button with more urgent language. The team runs the test, and Version B gets more clicks, so the result gets interpreted as proof that the new design is better. That may be true in one narrow sense. Version B produced more clicks on the metric the team selected.</p><p><strong>Here are several different explanations packed into that result:</strong></p><ul><li><p>The button may have been easier to find.</p></li><li><p>The copy may have been clearer.</p></li><li><p>The visual treatment may have pulled attention away from other information.</p></li><li><p>The urgent language may have pushed users to act before they fully understood the decision.</p></li></ul><p>Those are not small differences. They point to different design problems and different next steps. If the real issue was discoverability, the team might need a better layout hierarchy. If the real issue was unclear copy, the team might need a better label. If the improvement came from pressure, the team may have increased short-term clicks at the expense of trust or downstream success.</p><div class="pullquote"><p>The A/B test by itself does not sort all of that out. It tells the team what happened between two variations under the conditions of the test. That&#8217;s it. Full stop.</p></div><p>In UX research, we are usually trying to understand how people make sense of a system, where they struggle, what they need to know before acting, and whether the design helps them complete the task with confidence. A/B testing can support that work, but it does not replace the thinking needed to create a meaningful variation. This is where I see the method misused the most. In the overuse and overinterpretation of the data.</p><h1>Strong Variations</h1><p>I see too many of these misleading and weak A/B test strategies in the real world. A weak A/B test often starts with a super vague hypothesis. &#8220;We think this version will perform better&#8221; is technically a prediction, but it does not give the team much to go off of. It does not explain what user problem the team thinks it is solving, what part of the design is expected to change behavior, or what the team will learn if the variation wins or loses.</p><p>A stronger UX hypothesis is much more specific. For example, &#8220;We believe users are missing the primary action because the current button label is vague and visually disconnected from the task. If we make the label more specific while keeping the button placement, size, and color the same, more users will continue to the next step.&#8221; The value in this reframing is that it forces the team to be clear about the link between the user problem, the design change, and the expected behavior change.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pGhG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pGhG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png 424w, https://substackcdn.com/image/fetch/$s_!pGhG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png 848w, https://substackcdn.com/image/fetch/$s_!pGhG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png 1272w, https://substackcdn.com/image/fetch/$s_!pGhG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pGhG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png" width="485" height="221.84752747252747" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/af5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:666,&quot;width&quot;:1456,&quot;resizeWidth&quot;:485,&quot;bytes&quot;:1143078,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197026193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!pGhG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png 424w, https://substackcdn.com/image/fetch/$s_!pGhG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png 848w, https://substackcdn.com/image/fetch/$s_!pGhG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png 1272w, https://substackcdn.com/image/fetch/$s_!pGhG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Faf5975dc-1c75-4b83-8a2e-9d3269234f2a_1854x848.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This is where we can make our A/B testing strategies much stronger. Before the team creates a variation, research can help explain what is actually happening in the current experience:</p><ul><li><p><strong>Usability testing</strong> can show where users hesitate, misread the interface, or misunderstand the next step.</p></li><li><p><strong>Interviews</strong> can reveal concerns users have before committing to an action.</p></li><li><p><strong>Behavioral analytics</strong> can show repeated backtracking, abandonment, or drop-off patterns.</p></li><li><p><strong>Session replay</strong> can reveal behaviors like misclicks or repeated attempts to use unavailable or hidden controls.</p></li></ul><p>Those findings lead to better variations because they ground the design change in observed behavior. The team is no longer guessing if the button needs to be a brighter color because someone in the room thinks bright colors buttons perform better. Instead, they are responding to a specific problem within the experience, in the real world.</p><p>This is an overly simplistic example, but I hope you can see how this changes the quality of the test. Instead of comparing two versions of a screen because the team has two opinions, the team is testing a specific explanation for user behavior. The A/B test becomes a way to measure whether a research-informed design change improves the outcome the team cares about.</p><p>To be clear, that does not guarantee the variation will win. In some cases, the research-informed version will underperform. That data is still useful if the original hypothesis was clear. Losing variations can teach us as much as winning ones, and in many cases, they are more insightful because they unearth institutionalized bias.</p><h1>How to Think About Claims</h1><p>The phrase &#8220;A/B test&#8221; is powerful in many orgs, especially product-led ones that have taken a page out of the debunked Silicon Valley &#8220;move fast and break things&#8221; playbook. The power comes for the misunderstanding I&#8217;ve been talking about.</p><div class="pullquote"><p>A/B tests commonly make almost any comparison sound more precise and definitive than it really is.</p></div><p>In the real world, teams often use A/B testing to compare two designs that differ in several ways at once. That can be useful, but the team needs to be honest about what kind of claim the test can support, and we, as UX researchers, should be there to help them with that.</p><p>Imagine Version A has a button labeled &#8220;Continue&#8221; at the bottom of the page. Help text is hidden behind an icon. The page has three sections, and users have to scroll to review everything before moving forward.</p><p>Version B changes the button label to &#8220;Review and Submit,&#8221; makes the button sticky, adds visible help text, reduces the page to two sections, and introduces a progress indicator.</p><p>If Version B performs better, the team has learned something. The new version, as a full design package, performed better than the old version. That may be enough if the team&#8217;s goal is simply to decide whether to ship the redesigned flow.</p><p>The problem comes when the team tries to make a narrower claim than the test design supports. If five things changed, the result does not prove that the button label caused the improvement. Any of those changes may have helped. Several may have worked together. One may have helped while another made the experience worse.</p><p><strong>Here are some examples:</strong></p><ul><li><p><strong>One button label changes, while placement, size, color, and flow stay the same</strong> - Reasonable claim: evidence about the effect of the label change.</p></li><li><p><strong>A full-page redesign changes layout, copy, hierarchy, and interaction patterns - </strong>Reasonable claim: comparison between two design packages, not proof that one specific element caused the result.</p></li><li><p><strong>Several elements change at once without a clear hypothesis - </strong>Reasonable claim: the team may know which version won, but interpretation will be weak.</p></li><li><p><strong>Multiple variables need to be studied separately - </strong>Better fit: <a href="https://trevorcalabro.substack.com/p/how-to-conduct-a-multivariate-test">a multivariate test</a> or staged testing plan that can isolate the contribution of each variable.</p></li></ul><p>This is why the learning goal has to match the variation. If the team wants to know whether clearer button copy reduces hesitation, the variation should isolate the button copy as much as possible. Keep the placement, visual treatment, surrounding content, and flow stable. That gives the result a cleaner interpretation.</p><p>If the team wants to compare two broader design directions, a bundled variation may be fine. A larger redesign often changes layout, information hierarchy, interaction patterns, content, and visual emphasis together because those pieces are connected. In that case, the test is answering whether this complete version performs better than that complete version.</p><p>Both types of tests can be useful. They just answer different questions. A focused variation supports a focused claim. A bundled variation supports a broader comparison. Trouble starts when a team runs the second kind of test and talks about the result as if it came from the first.</p><p>For UX researchers, this is one of the most important places to push for clarity. The goal is to help the team understand what they will actually be able to learn. Sometimes that means isolating one variable. Other times it means testing a larger design direction. Either way, the variation should match the decision the team needs to make.</p><h1>These Metrics in Context</h1><p>A/B testing gets especially tricky when the success metric is too narrow. A variation can win on the primary metric and still make the overall experience worse. That is one of the easiest ways teams accidentally turn A/B testing into a machine for optimizing local behavior instead of improving the actual user experience.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Gf3t!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gf3t!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gf3t!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gf3t!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gf3t!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gf3t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg" width="432" height="225.41469489414695" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:419,&quot;width&quot;:803,&quot;resizeWidth&quot;:432,&quot;bytes&quot;:101481,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197026193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Gf3t!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gf3t!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gf3t!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gf3t!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff39396d6-1159-4a3b-af5f-b483f277d7a0_803x419.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>This happens a lot with clicks. Clicks are easy to measure, so they often become the thing the team optimizes for. If Version B gets more clicks than Version A, the dashboard looks good. The test has a winner. The team can point to a number and say the variation worked.</p><p>But more clicks are not always better. A user can click because the next step is clearer. A user can also click because the design pressured them, distracted them, interrupted them, or made one action more visually dominant than everything else on the screen. Those are very different outcomes, even if they produce the same short-term metric.</p><p>This is where guardrail metrics matter. A team should know what the variation is supposed to improve, but they should also know what they do not want to make worse. Otherwise, the team may optimize one behavior while quietly damaging another part of the experience.</p><p><strong>Some common examples:</strong></p><ul><li><p>More clicks, but lower downstream completion</p></li><li><p>More signups, but more support contacts</p></li><li><p>More feature activation, but more abandonment later</p></li><li><p>More engagement, but lower trust</p></li><li><p>More interaction, but worse accessibility</p></li></ul><p>The point is not that every A/B test needs a giant measurement framework. That would be overkill for many product decisions. The point is that the team should think beyond the one number that declares the winner.</p><p>A modal that increases feature activation might also increase dismissals, frustration, and support questions. A more aggressive confirmation message might push more users through a flow while making them less confident in what they just agreed to. A redesigned call to action might improve one user segment while creating problems for another segment with different goals, permissions, or prior knowledge.</p><p>In complicated software, this gets even messier because the thing being tested is often part of a larger workflow. A design change can make one screen perform better while creating confusion two steps later. The test result may look positive if the team stops measuring at the first click, but the user experience may not actually be better.</p><p>This is another place where UX researchers can add useful context. The question is not only, &#8220;Did the number go up?&#8221; The better question is, &#8220;What else might this variation affect?&#8221; That one question can change the quality of the test. It can push the team to look at completion, error rates, backtracking, support clicks, time on task, accessibility concerns, or downstream abandonment. It can also prevent the team from declaring victory too early, just because the easiest metric moved in the right direction.</p><div class="pullquote"><p>A/B testing is useful because it measures behavior. But behavior still needs interpretation. A winning variation should be judged by whether it improves the experience in a way the org can responsibly defend, not just by whether it wins one metric in one part of the flow.</p></div><h1>Don&#8217;t Skip Step 1</h1><p>UX researchers do not need to own the experimentation platform to improve the quality of A/B testing. In many orgs, the platform, instrumentation, traffic allocation, and statistical setup will sit with product analytics, engineering, data science, or growth teams. That does not mean UX research has nothing to contribute.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!y6f7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!y6f7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y6f7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y6f7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y6f7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!y6f7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg" width="212" height="236.60714285714286" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:448,&quot;resizeWidth&quot;:212,&quot;bytes&quot;:119027,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197026193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!y6f7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!y6f7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!y6f7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!y6f7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda19c9fd-08ad-4596-863d-7b628eb4d407_448x500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>The most valuable UX contribution often happens before the test launches. That is when the team is still deciding what problem they are solving, what variation should be created, and what the result will actually mean. Once the test is live, a lot of the important decisions have already been made.</p><p>A researcher can help the team slow down just enough to make the test more meaningful. That does not have to mean a long research project. It might mean a quick usability check, a review of prior findings, a look at session behavior, or a conversation about whether the proposed variation actually matches the problem the team says they are trying to solve.</p><p><strong>The practical UXR role often looks like this:</strong></p><ul><li><p>Clarify the user problem before the variation is designed.</p></li><li><p>Turn a vague idea into a testable hypothesis.</p></li><li><p>Identify whether the proposed change matches the observed problem.</p></li><li><p>Flag when too many things are changing at once.</p></li><li><p>Recommend guardrail metrics.</p></li><li><p>Run a quick prototype or usability check before the test goes live.</p></li><li><p>Help the team interpret the result without overstating what it proves.</p></li></ul><p>This is a playbook for how UX research can help keep the interpretation grounded. The team can say, &#8220;In this flow, for this user population, under these conditions, this variation improved this metric.&#8221; That may sound less exciting, but it is usually more accurate. It also makes the finding more useful because future teams can understand when the result might apply and when it probably does not.</p><p>Also, in a perfect world, A/B testing should not be the first time users encounter a variation, especially in complicated enterprise software. If the design has obvious usability issues, the live experiment will measure those issues along with everything else. A quick round of UX evaluation before launch can remove problems that would otherwise muddy the test. Literally, try anything to help put context around a problem before running an A/B test. That additional evaluation does not need to be elaborate. For some changes, a short prototype review with a few users may be enough. The goal is to make sure the variation is coherent before it gets measured at scale.</p><h1>Better Variation Design Examples</h1><p>Let&#8217;s say your team started with the old &#8220;let&#8217;s test a more prominent button&#8221; hypothesis. A better version of the conversation starts with questions that you, as the researcher, should be asking.</p><p><strong>Questions like:</strong></p><ul><li><p>Why does the button need to be more prominent?</p></li><li><p>Are users missing it altogether?</p></li><li><p>Are they unsure what it does?</p></li><li><p>Are they afraid of committing to the next step?</p></li><li><p>Are they distracted by competing actions on the page?</p></li></ul><p>The answers to these questions lead to a different variation. That is why the design change should come after the problem is understood, not before. Otherwise, the team is just picking a visual change and hoping the test makes it meaningful.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FVSF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FVSF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FVSF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FVSF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FVSF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FVSF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg" width="269" height="235.71761280931585" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:602,&quot;width&quot;:687,&quot;resizeWidth&quot;:269,&quot;bytes&quot;:97944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/197026193?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FVSF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!FVSF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!FVSF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!FVSF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1b96108f-46b2-4fb4-a1e7-96a2ed4f5e29_687x602.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>Example questions worth asking before the test:</strong></p><ul><li><p><strong>What user behavior are we trying to change? - </strong>Keeps the test focused on a real behavior, not just a design preference.</p></li><li><p><strong>What do we think is causing the current behavior? - </strong>Forces the team to name the assumption behind the variation.</p></li><li><p><strong>What exactly are we changing? - </strong>Makes the variation easier to interpret later.</p></li><li><p><strong>What are we keeping the same? - </strong>Helps isolate the design variable when possible.</p></li><li><p><strong>What is the primary metric? - </strong>Defines how the team will judge the result.</p></li><li><p><strong>What are the guardrail metrics? - </strong>Helps catch harm outside the primary metric.</p></li><li><p><strong>What will we know after the test? - </strong>Keeps the test connected to a learning goal.</p></li></ul><p>That structure does not need to become a formal template every team fills out before every test. It is more useful as a thinking tool. If the team cannot answer those questions in plain language, the variation probably is not ready.</p><p><strong>Weak variation vs. stronger variation examples:</strong></p><ul><li><p>&#10060; <strong>Weak:</strong> &#8220;Make the button more noticeable.&#8221;</p></li><li><p>&#10004;&#65039; <strong>Stronger:</strong> &#8220;Increase visual prominence while keeping the label, placement, and flow unchanged to test whether discoverability is the issue.&#8221;</p></li></ul><ul><li><p>&#10060; <strong>Weak:</strong> &#8220;Try different copy.&#8221;</p></li><li><p>&#10004;&#65039; <strong>Stronger:</strong> &#8220;Change the label to clarify what happens next because users are hesitating before a commitment-heavy action.&#8221;</p></li></ul><ul><li><p>&#10060; <strong>Weak:</strong> &#8220;Test the new design against the old one.&#8221;</p></li><li><p>&#10004;&#65039; <strong>Stronger:</strong> &#8220;Test whether exposing required information earlier reduces abandonment before the confirmation step.&#8221;</p></li></ul><ul><li><p>&#10060; <strong>Weak:</strong> &#8220;Add help text.&#8221;</p></li><li><p>&#10004;&#65039; <strong>Stronger:</strong> &#8220;Add one line of contextual help under the field users misinterpret most often.&#8221;</p></li></ul><p>Note that the stronger versions are not necessarily more complicated, but they are more specific. They connect the design change to a user problem and a learning goal. That makes the result easier to interpret, even when the result is not what the team expected.</p><p>This also helps with stakeholder conversations. When the variation is specific, the result is easier to explain. The team can say what changed, why it changed, what metric moved, and what the result suggests. That is much more useful than saying, &#8220;The new version won,&#8221; especially when the new version changed several things at once.</p><p>Better variation design does not mean every test has to be small. Some tests should compare broader design directions. The important thing is to be honest about the level of learning. A focused variation can tell the team something focused. A broader variation can help the team choose between broader directions. The test design should match the decision the team needs to make.</p><h1>Conclusion</h1><p>So, when a product team says, &#8220;Let&#8217;s just A/B test it,&#8221; the instinct to shut them down is reasonable, but we need to do better. As UX researchers, part of our job is to help shape how our orgs use user data, and A/B testing is a perfect example of where that responsibility shows up in practice. We need to lead A/B testing conversations as sense makers, not blockers. We have the opportunity to show how real users respond to real changes in the real world, and we should take those opportunities when they come.</p><p>But A/B tests are only as good as the thing being tested. If the variation is shallow, messy, or disconnected from the actual user problem, the result will inherit those weaknesses. It may still produce a winner, but winning is not the same thing as learning. That is the part I wish more teams took seriously. Better A/B testing does not start in the experimentation platform. It starts when the team asks a better question about the variation.</p><p>How do you help with A/B testing strategy in your org? Any tactics I missed? If so, comment here or DM me with the details. I&#8217;m always happy to add more things to my toolkit, especially when it comes to this misused and misunderstood method. Thanks for reading!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Stop Throwing Away Time-on-Task Data]]></title><description><![CDATA[The Truth About Small Sample Task Time]]></description><link>https://trevorcalabro.substack.com/p/stop-throwing-away-time-on-task-data</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/stop-throwing-away-time-on-task-data</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 02 May 2026 16:56:11 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/8c02242b-f8c9-440a-9518-f693bba43292_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary:</strong> Time-on-task with small samples is often misunderstood as not useful, but it can still produce meaningful behavioral evidence. This article explains why the median should usually be the default, how to report outliers honestly, and how to avoid overstating what small samples can tell us.</p><div><hr></div><p>A while back, an earlier-career UX researcher came to me with a common time-on-task question. They had just run a moderated usability study with 8 participants. The task was fairly straightforward, and all participants completed the task successfully. Most participants moved through the flow in about 45 to 70 seconds, which lined up with what the researcher saw in the usability study sessions. The task took a little effort, but most folks experienced very little friction. Except for one participant. (Cue the ominous music. &#127925;<strong> Dun Dun Dun </strong>&#127925;) You know the one. The participant who flat-out got stuck had to reread the content, misclicked a lot, ended up backtracking, and eventually recovered to complete the task, but barely. In this case, they completed the task, but it took them 4 minutes.</p><p>After the study, the researcher did what a lot of people are taught to do. They put the task times into a spreadsheet and calculated the average. The spreadsheet gave them a number. The number looked official enough to go into a report. But this earlier-career UX researcher knew that the final calculation didn&#8217;t represent what they had seen with their own eyes. At the same time, she knew the long task time from that one participant who got stuck clearly mattered. It was not random noise. It was one of the most useful moments in the study because it showed a real failure path in the design.</p><div class="pullquote"><p>As UX professionals, we need to understand that when usability issues are found during small-sample research studies, they should be documented, explained, and seriously considered for fixing, even when they only show up once or twice. I see <em>wayyyyyy </em>too many UX professionals misunderstand this in the real world, and that makes me sad.</p></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kwFe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kwFe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!kwFe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!kwFe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!kwFe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kwFe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png" width="173" height="173" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1456,&quot;width&quot;:1456,&quot;resizeWidth&quot;:173,&quot;bytes&quot;:137145,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/196216539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kwFe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png 424w, https://substackcdn.com/image/fetch/$s_!kwFe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png 848w, https://substackcdn.com/image/fetch/$s_!kwFe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png 1272w, https://substackcdn.com/image/fetch/$s_!kwFe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f0012d1-c6a1-438b-b8ec-ac0772e4b47e_2048x2048.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><p>These misguided UX pros believe that if an issue only shows up once or twice, it holds less weight. Even worse, I have seen instances where an outlier like this would be removed from the dataset to make the report look more &#8220;clean.&#8221; This is a huge problem. It is risky and flat-out unethical.</p><p>Back to the story. <strong>So the earlier-career UX researcher came to me with a question that was basically:</strong></p><blockquote><p>I know this average is technically right, but I don&#8217;t think it represents what happened in the study.</p></blockquote><p>That question is why I chose to write about this topic today, specifically, time-on-task calculations with small sample sizes. In this case, the average was pulled upward by that one participant who experienced a serious usability issue. That is the problem with using the mean as the default calculation method here.</p><p>For this kind of study, I would usually start with the median. The median gives a clearer read on the typical observed experience. Then I would report the slower case separately and explain what happened, because that struggle is still meaningful evidence.</p><p>But I know what you are thinking. All that leads us to an even more foundational question. Why would we want to measure time-on-task with a small sample size anyway? Let&#8217;s talk about that a little bit first.</p><h1>Time-on-Task with Small Samples</h1><p>Some UX professionals hear &#8220;small sample size&#8221; and immediately assume time-on-task is not worth calculating. I 100% understand where that comes from.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!BQWj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BQWj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BQWj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BQWj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BQWj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BQWj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg" width="375" height="279.4759825327511" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/df889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:687,&quot;resizeWidth&quot;:375,&quot;bytes&quot;:105224,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/196216539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BQWj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BQWj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BQWj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BQWj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fdf889582-6d55-4cbf-907d-da179bec09b4_687x512.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If we are trying to estimate the exact average task time for an entire user population, 8 participants is a very small number. That kind of claim needs a larger sample, cleaner instrumentation, and a much stronger quantitative design. So yes, there is a real limitation here. The mistake is treating that limitation as a reason to throw out the task time data entirely.</p><p>In a small moderated usability study, time-on-task can still tell us something very very useful. It can show whether most participants moved through the task in roughly the same amount of time. It can reveal whether one or two participants had a very different experience. It can help us separate a generally slow task from a mostly smooth task with one serious failure path. The problem happens when people are confused about the kind of claim we are making.</p><p><strong>For example, with a small sample, I would not say:</strong></p><blockquote><p>The average task time for this workflow is 78 seconds.</p></blockquote><p><strong>I would say something more like:</strong></p><blockquote><p>In this study, the median task time was 56 seconds. Most participants completed the task in about a minute. One participant took 4 minutes after misinterpreting the account-selection step, which points to a real usability issue we should address.</p></blockquote><p>That second version is much more honest and will be less likely to be misinterpreted by stakeholders. What it doesn&#8217;t do is pretend 8 people can give us a precise population estimate. It also does not ignore useful behavioral evidence just because the sample is small. Win/win. I hope you are starting to see my argument here.</p><div class="pullquote"><p>That is the middle ground, I think, that UX researchers need to get better at. Small samples do not give us permission to make inflated claims. They also do not require us to ignore measurable behavior. They require better wording, better summaries, and more care about uncertainty.</p></div><p>That is the basic argument of this article. When UX researchers calculate time-on-task with small sample sizes, which we should be doing, the median should usually be the default starting point, and the reason starts with the shape of the data.</p><h1>Skewed Time-on-Task Data</h1><p>Time-on-task data almost never behaves like the tidy examples we learned in statistics classes.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gvEL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gvEL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gvEL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gvEL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gvEL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gvEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg" width="367" height="287.85302197802196" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1142,&quot;width&quot;:1456,&quot;resizeWidth&quot;:367,&quot;bytes&quot;:280372,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/196216539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gvEL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gvEL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gvEL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gvEL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2130d471-830a-4a47-97f8-6ba05ae64bed_1782x1398.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>Lower Limits - </strong>A user task has a practical lower limit. The user has to read, scan, decide, click, wait for the interface, and move through the flow. Even in a beautifully designed experience, there is some minimum amount of time the task is going to take.</p><p><strong>Upper Limits -</strong>The upper limit is much messier. A user can take a long time because they misunderstand the task. They can miss a label. They can hesitate because two options sound too similar. They can reread the instructions three times. They can get interrupted. They can hit a slow-loading page. They can accidentally go down the wrong path and recover. They can also run into a real usability problem that nobody on the team realized was there.</p><p>That creates a pattern we see all the time in UX research, where most people cluster somewhere near the lower end, while a few slower cases stretch the distribution upward.</p><p><strong>Here is a simple example from an 8 participant usability test:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/6D9hE/2/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/56451369-b277-4b4c-b9a0-262ea0dfe117_1220x1248.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/738bc94b-737a-4bf9-babc-a66d39665f82_1220x1248.png&quot;,&quot;height&quot;:631,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/6D9hE/2/" width="730" height="631" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>But what if we only show the task times? Then the table looks like a small dataset. Once we add what happened, it starts looking like UX research again.</p><p><strong>Now compare the basic summary statistics:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/jsVCR/3/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bb540458-f64e-42ce-a46f-9fc9cc478b0a_1220x1088.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/24799dad-7fb9-4cda-8056-a212dda86452_1220x1088.png&quot;,&quot;height&quot;:306,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/jsVCR/3/" width="730" height="306" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>Both the median and the mean are mathematically correct. The issue is that they answer different questions.</p><p><strong>Median - </strong>Tells us that the typical participant, in this study, completed the task in about a minute. That lines up with the behavior we saw across most usability test sessions. <em>(Note the words &#8220;in this study.&#8221;)</em></p><p><strong>Mean - </strong>Tells us that the average task time was 78 seconds in this study. That number is higher because one participant had a much slower experience.</p><p>That slower experience might be the most important finding in the whole study. We should not ignore it, hide it, or treat it like an inconvenience just because it makes the numbers messy. At the same time, it should not quietly redefine the typical experience for the other seven participants.</p><p>This is the core reason the median is usually a better default for time-on-task. It answers the question UX researchers usually care about in a moderated study; what was the middle experience?</p><p>The mean makes all observed task times and spreads them evenly across everyone. That can be useful in some contexts, especially when you are working with large-scale behavioral analytics or trying to estimate total time burden across a large population. In a small moderated study, though, it is usually not the best starting point.</p><p><strong>Most of the time, we are trying to answer questions like:</strong></p><ul><li><p>Did most users move through the task smoothly?</p></li><li><p>Was the task generally fast but still fragile?</p></li><li><p>Did one severe confusion point create a long delay?</p></li><li><p>Was the experience workable for most people?</p></li><li><p>Was there a risky failure path for users who misunderstood one key label?</p></li></ul><p>But the <strong>median </strong>gives us a better first read on that typical observed experience. It does not explain everything. It does not replace watching the sessions. It does not tell us why someone struggled. It gives us a less fragile summary of what happened, a nd in small-sample UX research, less fragile is usually a very good thing.</p><h1>Report Median</h1><p>The median should usually be the starting point for time-on-task, and it should travel with the surrounding evidence. But a median by itself can still hide too much.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b8Yh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b8Yh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg 424w, https://substackcdn.com/image/fetch/$s_!b8Yh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg 848w, https://substackcdn.com/image/fetch/$s_!b8Yh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!b8Yh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b8Yh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg" width="353" height="264.75" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1092,&quot;width&quot;:1456,&quot;resizeWidth&quot;:353,&quot;bytes&quot;:1127724,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/196216539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!b8Yh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg 424w, https://substackcdn.com/image/fetch/$s_!b8Yh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg 848w, https://substackcdn.com/image/fetch/$s_!b8Yh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!b8Yh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa6ec4dcd-989b-40ca-a229-35608addee1d_6033x4525.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>If all we say is &#8220;the median task time was 56 seconds,&#8221; we have improved the statistic, and we still have not explained the experience. We have a better summary number. We still need the behavior that gives the number meaning.</p><p><strong>For small-sample usability studies, I would usually report time-on-task with a few pieces of context:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/3qqgf/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63af0079-d610-4bb5-b18e-546bd121cd21_1220x822.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1c5e8ef-b5c8-4b3e-a03c-90e3c2eedb19_1220x822.png&quot;,&quot;height&quot;:408,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/3qqgf/1/" width="730" height="408" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>The goal here is pretty simple. We want the number and the observation to support each other.</p><p><strong>A stronger write-up might look like this:</strong></p><blockquote><p>Median task time was 56 seconds. Observed times ranged from 42 seconds to 240 seconds. 6 of 8 participants completed the task in under 70 seconds. The longest task time came from one participant who misunderstood the account-selection label and opened the wrong account panel before recovering. </p></blockquote><p>That gives the reader the summary, the range, and the user behavior. It also helps prevent a common reporting problem. Time-on-task gets treated like a standalone performance score, floating outside the rest of the study. Someone sees the number and assumes the number is the finding. Time-on-task rarely explains itself.</p><p>A slow task time tells us that one participant took longer than the others, and that&#8217;s it. Analyzing the full usability test session tells us everything else that happened. The research synthesis tells us whether that behavior looks like a minor hesitation, a recoverable issue, or a serious failure path.</p><p><strong>This is why I like writing the findings in a way that includes both the statistics and the behavior, like this:</strong></p><blockquote><p>Median task time was 56 seconds. Most participants completed the task in about a minute. One participant took 240 seconds after misinterpreting the account-selection step. This suggests the flow may be efficient for users who understand the account structure, with a clear failure path for users managing multiple accounts.</p></blockquote><p>That version gives stakeholders something they can use in the real world. They can see the typical task time, the slow cases, and the design issue all in one view. This gives you the mechanism needed to ensure your stakeholders understand why the outlier participant matters. Your report should make the shape of the data visible. For very small samples, I often think the simplest option is the best one, show the individual task times.</p><p><strong>Something like this is easy to understand:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/RTDpP/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/50db4ccd-ec85-437d-91f7-e3e099c8f470_1220x800.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b716a27-1cee-430d-9217-aa6dd425aadf_1220x800.png&quot;,&quot;height&quot;:396,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/RTDpP/1/" width="730" height="396" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>I hope you can see how that table does a lot of work. It shows the cluster. It shows the extreme case. It shows why the extreme case happened.</p><div class="pullquote"><p>This is mixed methods thinking at its finest. It lets people understand the data without pretending 8 participants are enough to support a highly precise estimate.</p></div><p>The same idea applies when talking through the readout. Stakeholders often ask for averages because averages are familiar. That is fine. We can answer the real question behind the question.</p><p><strong>A simple explanation might sound like this:</strong></p><blockquote><p>I&#8217;m using the median because time-on-task data is usually skewed, especially with small samples. In this study, most people completed the task in about a minute. One person took much longer because they misunderstood the account-selection step, so I&#8217;m reporting that separately as an important usability issue.</p></blockquote><p>In my experience, that explanation is usually enough. It avoids making the conversation about statistics for the sake of statistics. It brings the conversation back to the user behavior. That is where the research value is.</p><h1>Mean Is Still Useful</h1><p>If you are working with a large analytics dataset, the mean may help answer questions about the total time burden. If a task is completed hundreds of thousands of times per month, long task times may represent real operational cost.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-QPh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-QPh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-QPh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-QPh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-QPh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-QPh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg" width="585" height="251.11607142857142" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:625,&quot;width&quot;:1456,&quot;resizeWidth&quot;:585,&quot;bytes&quot;:560149,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/196216539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-QPh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-QPh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-QPh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-QPh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9661b086-2848-4299-b9b6-98e0b2c15ad5_3258x1398.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>For example, imagine a repetitive common workflow that gets completed 500,000 times per month. If one version of the flow adds 20 seconds on average, that could represent a meaningful amount of user time across the whole system. It could also increase abandonment, support contacts, frustration, or downstream errors.</p><p><strong>In that context, the mean might help answer questions like:</strong></p><div id="datawrapper-iframe" class="datawrapper-wrap outer" data-attrs="{&quot;url&quot;:&quot;https://datawrapper.dwcdn.net/7mABX/1/&quot;,&quot;thumbnail_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/792b0a23-5517-4fa0-94d0-8a1fb970d4ce_1220x600.png&quot;,&quot;thumbnail_url_full&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbda447d-f603-4f6d-a274-64d20ab7d0a8_1220x600.png&quot;,&quot;height&quot;:296,&quot;title&quot;:&quot;Created with Datawrapper&quot;,&quot;description&quot;:&quot;&quot;}" data-component-name="DatawrapperToDOM"><iframe id="iframe-datawrapper" class="datawrapper-iframe" src="https://datawrapper.dwcdn.net/7mABX/1/" width="730" height="296" frameborder="0" scrolling="no"></iframe><script type="text/javascript">!function(){"use strict";window.addEventListener("message",(function(e){if(void 0!==e.data["datawrapper-height"]){var t=document.querySelectorAll("iframe");for(var a in e.data["datawrapper-height"])for(var r=0;r<t.length;r++){if(t[r].contentWindow===e.source)t[r].style.height=e.data["datawrapper-height"][a]+"px"}}}))}();</script></div><p>Those are valid questions. They are also different from the questions we usually ask in a small moderated usability study.</p><p>In a small study, we are usually trying to understand how the experience behaved for the people we observed. We want to know where users moved smoothly, where they hesitated, where the design created confusion, and what moments created delays. For that work, the median is usually the better starting point.</p><p><strong>A helpful sequence is:</strong></p><ol><li><p>Start with the median.</p></li><li><p>Show the range.</p></li><li><p>Explain the slowest cases.</p></li><li><p>Decide whether the mean adds anything useful.</p></li><li><p>Use the mean only when it answers a specific research or business question.</p></li></ol><p>It also helps avoid a common readout problem where one average becomes the center of the conversation. Once that happens, people start debating the number instead of the experience. They ask whether the task was &#8220;fast enough.&#8221; They compare it to some remembered number from another study. They want to know whether 78 seconds is good or bad.</p><p>Trust me on this, the better conversation is much more specific. Most participants completed the task in about a minute. One participant took four minutes because the account-selection label sent them down the wrong path. The risk is not general slowness across the whole task. The risk is a specific failure path for users who interpret that label differently than the team intended.</p><p>That is a much more useful product conversation. The mean may still be worth including in an appendix or supporting detail. I would just avoid making it the headline metric unless it directly supports the decision being made. For small-sample usability studies, the headline should usually be the median <em><strong>plus </strong></em>the observed behavior.</p><h1>Match the Data</h1><p>A lot of UX research gets into trouble when we make the analysis look more precise than the study can actually support. Time-on-task is one of the places I see this error in thinking a lot!</p><div class="pullquote"><p>As a rule of thumb, I always ask myself if the method I&#8217;m using matches the data.</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!26uU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!26uU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png 424w, https://substackcdn.com/image/fetch/$s_!26uU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png 848w, https://substackcdn.com/image/fetch/$s_!26uU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png 1272w, https://substackcdn.com/image/fetch/$s_!26uU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!26uU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png" width="363" height="339.2104857363146" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1212,&quot;width&quot;:1297,&quot;resizeWidth&quot;:363,&quot;bytes&quot;:1040089,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/196216539?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!26uU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png 424w, https://substackcdn.com/image/fetch/$s_!26uU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png 848w, https://substackcdn.com/image/fetch/$s_!26uU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png 1272w, https://substackcdn.com/image/fetch/$s_!26uU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0c3efcf-74a5-4716-873e-1e79c1c23b87_1297x1212.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><strong>For small-sample time-on-task analysis, the practical approach is pretty simple:</strong></p><ul><li><p>Use the <strong>median</strong> as the primary summary.</p></li><li><p>Show the <strong>range</strong>.</p></li><li><p>Show the <strong>individual task times</strong> when the sample is small.</p></li><li><p>Explain the <strong>slowest cases</strong>.</p></li><li><p>Be careful with <strong>p-values</strong> when the sample is tiny.</p></li><li><p>Use <strong>non-parametric methods</strong> when comparing groups and the data is clearly skewed.</p></li><li><p>Consider <strong>bootstrapping</strong> when you need an uncertainty interval around a statistic like the median.</p></li><li><p>Consider <strong>transformations</strong> for highly skewed timing data when you are doing more formal modeling, and explain the results in plain language.</p></li></ul><p>Most UX researchers do not need to turn every time-on-task report into a methods appendix. The practical standard is much simpler.</p><p>Use a method that fits what you actually collected. If you have eight task times and one of them is 240 seconds, show that shape. Do not hide it inside a clean-looking average. If you have a small sample and a skewed distribution, do not write as though you have a stable estimate of normal behavior across the entire user population.</p><div class="pullquote"><p>There is a difference between being quantitative and being precise beyond what the evidence supports.</p></div><p>That distinction matters because stakeholders often want numbers to carry more certainty than they deserve. A number in a report can feel settled. It can feel objective. It can feel like the debate is over.</p><p>UX researchers have to be careful with that power. A good time-on-task write-up should make the strength of the evidence visible. It should help people understand what happened, how often it happened in the study, and how much confidence we should place in the pattern.</p><p><strong>Here is a practical reporting pattern I would trust:</strong></p><blockquote><p>Median task time was 56 seconds across eight participants. Seven participants completed the task between 42 and 67 seconds. One participant took 240 seconds after misinterpreting the account-selection step and navigating into the wrong account panel. Because the task-time data was skewed, the median is a better summary of the typical observed experience than the mean. The slowest case is reported separately because it reflects a meaningful usability issue. Additional quantitative research should be done if you want to better understand the actual time-on-task for the entire user population. </p></blockquote><p><strong>That paragraph does several useful things:</strong></p><ul><li><p>It gives the primary metric.</p></li><li><p>It shows the spread.</p></li><li><p>It names the sample size.</p></li><li><p>It explains the skew.</p></li><li><p>It preserves the slow case.</p></li><li><p>It connects the slow case to a design issue.</p></li><li><p>It clarifies that this does not represent the whole user base.</p></li><li><p>It points to the need for additional quant research.</p></li></ul><p>That is the kind of reporting that helps teams make better decisions.</p><h1>Conclusion</h1><p>Time-on-task is easy to calculate and easy to misuse. That is probably why this problem shows up so often. Averages feel familiar, fit nicely in slides, and make messy behavior look clean. They give teams a number they can compare, track, and, quite frankly, stakeholders are suckers for them, which is why many PMs weaponize this kind of data for manipulation purposes. We need to be the antidote to this trend. We, as UX researchers, need to be the data experts and truth tellers within our organizations.</p><p>For example, when we collect time-on-task in a small usability study, we are measuring people trying to complete a task inside a real interface. Their time reflects comprehension, hesitation, confidence, confusion, recovery, and sometimes failure.</p><p>The median helps us summarize the typical observed experience without letting one extreme case dominate the headline number.</p><ul><li><p>The <strong>range</strong> helps us show the spread.</p></li><li><p>The <strong>individual task times</strong> help us keep the data honest.</p></li><li><p>The <strong>observed behavior</strong> helps us explain what the numbers mean.</p></li></ul><p>Together, these give teams a better read on the experience than a single average ever could. So the next time someone asks for the average time-on-task, I would still answer the question behind the question. Thanks for reading, and I hope this is helpful!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Onboarding & In-App Help Strategy ]]></title><description><![CDATA[A framework for building usable and accessible help systems.]]></description><link>https://trevorcalabro.substack.com/p/onboarding-and-in-app-help-strategy</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/onboarding-and-in-app-help-strategy</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 25 Apr 2026 21:42:45 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/08bc0425-7d39-4aff-aaa7-42308d40f484_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary:</strong> Decades of usability and accessibility data have shown that many common onboarding and in-app help design patterns just don&#8217;t work well in the real world. This post details a reusable framework for how best to display help content in complex applications.</p><div><hr></div><p>I recently wrote a document to help define a reusable set of UX best practices for product onboarding and in-application help. This week&#8217;s post is a generalized version of that document that you can use in your own day-to-day work.</p><p>My goal was to make help content decisions more strategic across products, platforms, and teams, so this guidance is intentionally technology- and domain-agnostic. Everything in this week&#8217;s post focuses on widely accepted usability best practices, helping users complete real world tasks, and giving users guidance at the moment they actually need it.</p><p>And I think this matters because a lot of UXers and product teams don&#8217;t seem to know about these best practices anymore. Products like Pendo make it easy to add UI elements into apps, and I worry that many UXers have started favoring these quick-win methods over foundational user-centered principles.</p><p>If you need a starting point for discussion with your team, I encourage you to share this post. My hope is this info is especially useful for UXers trying to create more consistent guidance across teams without turning every onboarding or help experience into a maze of popups, tours, and misunderstood help widgets.</p><div class="callout-block" data-callout="true"><p><strong>&#9888;&#65039; Disclaimer: </strong>This is meant to be used as a reference guide, so you&#8217;ll notice that a few ideas repeat across some sections.</p></div><h1>Core Strategy Principles</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DBLo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DBLo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!DBLo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!DBLo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!DBLo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DBLo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png" width="273" height="273" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1254,&quot;width&quot;:1254,&quot;resizeWidth&quot;:273,&quot;bytes&quot;:1060281,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!DBLo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!DBLo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!DBLo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!DBLo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff728130c-13ae-4a09-9bea-79a1d685cb73_1254x1254.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ol><li><p><strong>Keep guidance contextual and just-in-time. </strong>When possible, information should appear at the moment a user needs it to make the next decision or take the next action. Avoid front-loading instruction that users must remember for later interactions and decisions.</p></li><li><p><strong>Require only what is necessary up front. </strong>Use step-by-step onboarding only for information the system genuinely needs in order to function, or for required security, compliance, or activation steps. Everything else should be deferred until it becomes relevant and displayed just-in-time in the workflow.</p></li><li><p><strong>Make the next action explicit. </strong>Each step should make it obvious what the user is expected to do next. The goal is not the fewest possible words. The goal is the minimum amount of text needed to make the next action or decision clear and explicit.</p></li><li><p><strong>Show only what is relevant to the current user and context. </strong>Where possible, the experience should adapt based on role, permissions, product access, workflow stage, and device context. Users should not be exposed to features, instructions, or decisions that do not apply to them.</p></li><li><p><strong>Prevent errors and make recovery easy. </strong>Onboarding and self-serve setup or data management should reduce the chance of mistakes through clear structure, validation, and review processes. When errors do occur, the system should make correction options straightforward, visible, and explicit.</p></li><li><p><strong>Keep help inside the workflow whenever possible. </strong>The primary support strategy should be built directly into onboarding, self-service configuration, and the product experience itself. It should not depend on separate documentation systems, long text-heavy help panels, or standalone training content.</p></li></ol><h1>Help &amp; Onboarding Specifics</h1><ul><li><p><strong>Use wizards selectively. </strong>A wizard is appropriate when the task needs a clear sequence of required setup steps. It should not be used to force optional configuration, introduce broad product education, or present every available feature at once.</p></li><li><p><strong>Organize around decisions and tasks, not system structure. </strong>Each onboarding step should support one main action, one main decision, or one coherent group of closely related inputs.</p></li><li><p><strong>Keep progress visible. </strong>Required setup should be broken into clearly named steps so users understand where they are, what remains, and what has already been completed.</p></li><li><p><strong>Defer nonessential setup. </strong>Optional details, secondary preferences, and lower-priority configuration should not be added to upfront onboarding steps. These items should be introduced just-in-time, in context, when they become relevant to the user&#8217;s workflow.</p></li><li><p><strong>Use progressive disclosure carefully. </strong>Show the information most users need directly on the screen. Following the 80/20 Rule, the default view should include the guidance most users need to move forward without extra clicks. Secondary details, exception paths, and less common cases can be placed behind a clearly labeled expand option or another explicit interaction. Do not hide essential guidance by default.</p></li><li><p><strong>Design for exceptions without breaking the primary workflow. </strong>Even when the underlying onboarding work is not literally linear, the experience should still impose a clear sequence whenever that creates a more understandable path through setup. That sequence should accommodate all valid scenarios without blocking users whose path differs from the common case. (This could be implemented using progressive disclosure in the frontend, supported by conditional logic in the backend.) The default flow should be optimized for the 80/20 path, while less common cases can be handled through branching, progressive disclosure, or guided exceptions inside the overall sequence.</p></li><li><p><strong>Support save and return at all cost. </strong>Users should be able to pause and resume onboarding without losing work or losing their place when the process is likely to span multiple decisions or sessions.</p></li><li><p><strong>Validate in place. </strong>Errors and warnings should appear close to the relevant UI control or user action, using plain, user-centered language with explicit guidance on how to correct the issue. However, first look for all possible methods to avoid system errors in the first place. (Allow the system itself to do the bulk of the work.)</p></li><li><p><strong>Provide a review point before commitment. </strong>Users should have a chance to confirm important choices before activation, submission, or any downstream consequence that is difficult to undo.</p></li><li><p><strong>Confirm irreversible actions. </strong>Any choice that is irreversible, or that would require manual support intervention to correct, should trigger an explicit confirmation modal that clearly states the consequence.</p></li></ul><h1>End-User Onboarding Best Practices</h1><p>In general, end-user experiences should focus on fast, confident entry into core product use. The product should not assume that new users want a tour, a lesson, or a lengthy profile setup process before they can begin.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TPj_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TPj_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!TPj_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!TPj_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!TPj_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TPj_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png" width="337" height="337" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1254,&quot;width&quot;:1254,&quot;resizeWidth&quot;:337,&quot;bytes&quot;:1364569,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TPj_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png 424w, https://substackcdn.com/image/fetch/$s_!TPj_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png 848w, https://substackcdn.com/image/fetch/$s_!TPj_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png 1272w, https://substackcdn.com/image/fetch/$s_!TPj_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0ff875-b724-4348-a746-cded83db8bf0_1254x1254.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><ul><li><p><strong>Minimize first-run friction. </strong>Only the steps required for access, security, compliance, or immediate product use should appear up front.</p></li><li><p><strong>Avoid forcing completion of nonessential profile or preference fields. </strong>If information can be added later, it should be deferred and requested just in time, and only when it becomes useful to the user.</p></li><li><p><strong>Introduce features at first meaningful use. </strong>If a user is about to encounter a task or feature for the first time, contextual instruction may be appropriate when delivered just-in-time.</p></li><li><p><strong>Tie guidance directly to the relevant interface components. </strong>When a prompt or instructional message appears, it should point to the exact UI control or choice the user is working with and explicitly explain what to do now in context.</p></li><li><p><strong>Use the same standards on mobile. </strong>A mobile experience should follow the same just-in-time and contextual model. For accessibility and usability reasons, do not rely on hover behavior, hidden affordances, or dense text patterns that are difficult to use on smaller screens.</p></li></ul><h1>System Admin Onboarding Best Practices</h1><p>System admin onboarding should be treated as a guided setup experience, not a general product introduction. These users are usually configuring important parts of the system, making decisions that affect other users, and managing settings that may have downstream consequences. The experience should help them move through required setup tasks with enough structure, context, validation, and review to feel confident before anything is activated or applied.</p><ul><li><p><strong>Prioritize structured setup over broad education. </strong>The setup experience should lead admin users with setup responsibilities through required decisions and setup activities in a deliberate sequence instead of expecting them to learn the system through large amounts of introductory content. Even when the underlying work is not fully linear, the experience should create a clear sequence if one can support all necessary scenarios. That sequence should be designed to work for all such users, while being optimized for the most common (80/20) paths wherever possible.</p></li><li><p><strong>Keep the experience focused on the task at hand. </strong>Do not expose unrelated features, settings, or reference material during setup or configuration tasks if possible.</p></li><li><p><strong>Make system state clear. </strong>Admin users should always be able to tell where they are in the setup process, what has been completed, what is in progress, what still needs review, and where action is required. Also consider including additional push notifications to encourage progress where possible.</p></li><li><p><strong>Design for confidence before activation. </strong>The experience should favor review, preview, validation, and confirmation over workflow speed, especially where configuration choices have impactful downstream effects.</p></li><li><p><strong>Support error prevention and correction as part of the workflow. </strong>The experience should assume that some information will need to be revised during setup. Editing, revisiting earlier decisions, correcting errors, and continuing forward should feel like part of the intended process and be explicit. </p></li><li><p><strong>Use just-in-time embedded help at decision points. </strong>Admin users should receive concise guidance where choices are made, especially during setup moments that require interpretation, review, or error correction. This is especially important for bulk setup actions. Guidance should use language framed from the user&#8217;s task perspective. The system should not send them away to search through general documentation to understand a required setup decision if possible.</p></li><li><p><strong>Respect role and permission context. </strong>Different admin user segments should only see the configuration choices, instructions, and follow-up guidance that apply to their responsibilities where possible.</p></li></ul><h1>Help &amp; In-App Guidance Best Practices</h1><p>Help should be treated as part of the product experience, not as a separate system. The goal is to give people enough information to move forward from the screen they are already on, without requiring them to stop, search, and interpret a large external help system.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gqrA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gqrA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gqrA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gqrA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gqrA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gqrA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg" width="333" height="284.4043062200957" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1071,&quot;width&quot;:1254,&quot;resizeWidth&quot;:333,&quot;bytes&quot;:531127,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gqrA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg 424w, https://substackcdn.com/image/fetch/$s_!gqrA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg 848w, https://substackcdn.com/image/fetch/$s_!gqrA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!gqrA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b0a252f-3e27-48be-addc-963092b4a589_1254x1071.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Remember me?</figcaption></figure></div><ul><li><p><strong>Make embedded guidance the default. </strong>The first choice should be inline instructions, targeted helper text, well-written empty states, clear labels, and task-level prompts placed within the workflow.</p></li><li><p><strong>Write from the user&#8217;s point of view. </strong>Help text should be framed around what the user is trying to do, what action to take, and what happens next. It should not be written from the system&#8217;s perspective.</p></li><li><p><strong>Keep required help visible. </strong>If most users need a piece of guidance in order to proceed correctly, that guidance should appear on the face of the interface. It should not be hidden behind a click, tooltip, or icon-only control.</p></li><li><p><strong>Use progressive disclosure only for secondary help. </strong>Expandable content is appropriate for extra explanation, edge cases, definitions, or deeper detail that only a smaller portion of users will need. All uses of progressive disclosure should be accessed via an explicitly labeled UI component.</p></li><li><p><strong>Avoid icon-only help patterns. </strong>All help-triggering controls should be explicitly labeled. For accessibility and usability reasons, do not rely on question-mark icons or other symbols alone to communicate that useful information is available.</p></li><li><p><strong>Do not put essential help in tooltips alone. </strong>Tooltips and similar patterns may support supplemental explanation, but they are not strong enough to carry required instructions or critical decision support. Also, keep in mind that hover-only controls are deeply inaccessible in all UI context and inherently unusable on mobile.</p></li><li><p><strong>Use empty states as guidance moments. </strong>When a screen or area has no content yet, the empty state should explain what belongs there and what the user can do next.</p></li><li><p><strong>Use error states as guidance moments. </strong>Messages should explain what went wrong, what the user can do now, and whether the issue can be resolved in the product or requires support.</p></li><li><p><strong>Treat external help systems as secondary. </strong>A separate documentation system may still exist, but it should act as backup reference material. It should not be the primary method for explaining how to complete onboarding or common in-product tasks.</p></li><li><p><strong>Design content for reuse across contexts. </strong>Help content should be modular enough to be placed near relevant tasks across the product rather than stored only as long, standalone pages.</p></li></ul><h1>Example Patterns to Avoid </h1><ul><li><p><strong>Avoid showing the full complexity of the system too early.</strong> Sometimes complex products still need sequencing. The right response to complexity is guided structure and contextual disclosure, not exposure of every option at once. See <a href="https://www.nngroup.com/articles/wizards/">Wizards: Definition and Design Recommendations</a>, <a href="https://baymard.com/blog/trigger-indicators">UI: Proper Indicators for Hidden Elements</a>, and <a href="https://www.interaction-design.org/literature/article/design-for-optimal-experience">Design for Optimal Experience</a>.</p></li><li><p><strong>Avoid onboarding carousels or introductory tours.</strong> Do not present users with a sequence of pop-up slides or feature-overview screens at first login as the primary onboarding method. These patterns usually ask users to remember abstract guidance before they have a real task or decision in front of them. See<em> </em><a href="https://erikrunyon.com/2013/07/carousel-interaction-stats/">Carousel Interaction Stats</a><em>, </em><a href="https://www.nngroup.com/articles/onboarding-tutorials/">Onboarding Tutorials vs. Contextual Help</a> and <a href="https://www.nngroup.com/articles/mobile-tutorials/">Mobile Tutorials: Wasted Effort or Efficiency Boost?</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wXSA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wXSA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wXSA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wXSA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wXSA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wXSA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:486708,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wXSA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!wXSA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!wXSA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!wXSA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3e5f503-873a-4ef3-808e-faa9815f0072_1672x941.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>Avoid broad first-run walkthroughs that explain the whole interface.</strong> Even when step-by-step guidance points at specific UI elements, this pattern is often difficult for users. It can interrupt task flow, appear out of context, and force users to memorize instructions they can&#8217;t easily recall or apply when needed. See <a href="https://www.nngroup.com/articles/onboarding-tutorials/">Onboarding Tutorials vs. Contextual Help</a>, <a href="https://www.nngroup.com/articles/mobile-instructional-overlay/">Instructional Overlays and Coach Marks for Mobile Apps</a>, and <a href="https://www.nngroup.com/articles/help-and-documentation/">Help and Documentation (Usability Heuristic #10)</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!S3MX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!S3MX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!S3MX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!S3MX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!S3MX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!S3MX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:527549,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!S3MX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!S3MX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!S3MX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!S3MX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff52058e8-887a-47e3-972c-42e0d50f4632_1672x941.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>Avoid global &#8220;help&#8221; entry points as the main solution.</strong> A global help button, floating chatbot, generic right-side help pane, or detached knowledge base should not carry the primary burden of teaching the workflow. These patterns can be useful as secondary support, but they often force users to leave the task, search for the right answer, interpret generic content, and then apply it back to the screen they were already using. See <a href="https://www.nngroup.com/articles/help-and-documentation/">Help and Documentation (Usability Heuristic #10)</a> and <a href="https://www.nngroup.com/articles/onboarding-tutorials/">Onboarding Tutorials vs. Contextual Help</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nhUP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nhUP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nhUP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nhUP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nhUP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nhUP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:508617,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nhUP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!nhUP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!nhUP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!nhUP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc921566e-24b6-4bfa-af4f-0edfbf543b71_1672x941.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>Avoid non-contextual help panes.</strong> A right-side help panel can be useful when it is tied directly to the current screen, task, role, or decision. It becomes much less useful when it acts like a generic documentation drawer that displays broad reference content without knowing what the user is trying to do. Help should reduce interpretation work, not add another layer of searching inside the product. See <a href="https://www.nngroup.com/articles/help-and-documentation/">Help and Documentation (Usability Heuristic #10)</a> and <a href="https://www.nngroup.com/articles/onboarding-tutorials/">Onboarding Tutorials vs. Contextual Help</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!oc1q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oc1q!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oc1q!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oc1q!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oc1q!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oc1q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:584244,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oc1q!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oc1q!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oc1q!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oc1q!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd473f8d7-dd05-406a-b454-275a815b4034_1672x941.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>Avoid unlabeled icons and ambiguous controls.</strong> If a control is important enough to influence comprehension or decision-making, it should be labeled clearly. Do not hide required guidance behind a &#8220;?&#8221; icon, icon-only button, hover-only tooltip, or any other symbol that users have to discover, interpret, and activate before they know useful help exists. See <a href="https://www.nngroup.com/articles/icon-usability/">Icon Usability</a> and <a href="https://www.nngroup.com/articles/tooltip-guidelines/">Tooltip Guidelines</a>.</p></li><li><p><strong>Avoid putting essential help in tooltips alone.</strong> Tooltips and similar patterns may support supplemental explanation, but they are not strong enough to carry required instructions or critical decision support. They are easy to miss, often depend on hover behavior, and can create serious usability and accessibility problems on mobile, touch devices, and keyboard-only workflows. See <a href="https://www.nngroup.com/articles/tooltip-guidelines/">Tooltip Guidelines</a>, <a href="https://baymard.com/blog/trigger-indicators">UI: Proper Indicators for Hidden Elements</a>, and <a href="https://www.interaction-design.org/literature/article/design-for-optimal-experience">Design for Optimal Experience</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tQuS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tQuS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tQuS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tQuS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tQuS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tQuS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:527409,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tQuS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tQuS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tQuS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tQuS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F47a0c7c0-1909-44e4-9fbf-26cc015d7f97_1672x941.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></li><li><p><strong>Avoid walls of text.</strong> Large blocks of explanatory copy are difficult to scan and are usually a sign that the content is not tightly aligned to the decision the user must make. See <a href="https://www.nngroup.com/articles/plain-language-experts/">Plain Language Is for Everyone, Even Experts</a> and <a href="https://www.nngroup.com/articles/f-shaped-pattern-reading-web-content/">F-Shaped Pattern of Reading on the Web: Misunderstood, But Still Relevant (Even on Mobile)</a>.</p></li></ul><h1>A Pattern That Works</h1><p>At a high-level, onboarding and help should make the next step clear at the moment it matters. Required setup should be structured and guided. Optional setup should be deferred. Help should be embedded, explicit, role-aware, and written from the user&#8217;s point of view.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GxZn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GxZn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GxZn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GxZn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GxZn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GxZn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:461938,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/195474622?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GxZn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GxZn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GxZn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GxZn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe13ff78f-57ed-4523-b0dd-c4e1865f12a8_1672x941.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>This approach is especially important for complex, role-based products. The more the product can tailor onboarding and guidance to the user&#8217;s role, permissions, and current task, the more intuitive and self-sufficient the digital experience becomes.</p><h1>UX Strategy for Key Workflows</h1><p>This section translates the onboarding and in-application help principles into concrete experience direction for high-value workflows across products and platforms. The consistent approach across workflows is to keep the primary screens task-focused, introduce complexity only when it becomes relevant, make the next action explicit, validate in place, provide review before commitment, and keep required help visible within the flow.</p><h2>Reusable Building Blocks</h2><ol><li><p><strong>Guided task flows (wizard only when required): </strong>Use step-by-step guidance when there is a strict sequence (e.g., review &#8594; confirm &#8594; submit). Otherwise, keep users on a single primary screen with clear sectioning and strategic use of conditional logic and progressive disclosure.</p></li><li><p><strong>Workflow checklists + system state: </strong>A persistent checklist showing what&#8217;s complete, what&#8217;s blocked, what&#8217;s next, and what requires attention (especially for multi-session work).</p></li><li><p><strong>Strong empty states: </strong>When there&#8217;s nothing to display yet, explain what belongs here and provide one clear call to action (CTA) to get started.</p></li><li><p><strong>Inline validation and guardrails: </strong>Validate as users type or select, keep errors near controls, and explain how to fix issues in plain language. Reserve blocking errors for truly blocking constraints.</p></li><li><p><strong>Review/confirm screens for consequential actions: </strong>Provide a preview of impacts (what changes, effective timing, downstream consequences) before final submission or activation.</p></li><li><p><strong>Contextual help at decision points: </strong>Short helper text, definitions, examples, and &#8220;what happens next&#8221; messaging embedded in the flow. Use progressive disclosure for edge cases; avoid icon-only help.</p></li><li><p><strong>Save-and-return + drafts: </strong>Support long or multi-stakeholder tasks with drafts, autosave, and clear &#8220;resume where you left off&#8221; entry points.</p></li><li><p><strong>User role- and permission-aware tailoring: </strong>Show only actions and guidance relevant to the user&#8217;s role, access level, and workflow stage.</p></li><li><p><strong>Notifications: </strong>Use in-app and (where applicable) email notifications to drive completion for time-bound or multi-session workflows (missing items, pending approvals, approaching deadlines).</p></li></ol><h1><strong>Conclusion</strong></h1><p>In practice, a lot of teams do not follow these guidelines. Sometimes it is because the product is complex. Sometimes it is because onboarding gets treated like a communication problem, a training problem, or a feature-adoption problem. And sometimes it is because patterns like tours, popups, floating chatbots, generic help panes, and &#8220;?&#8221; icons feel like easy solutions when a complex workflow is hard to design for across multiple teams.</p><p>But the usability and accessibility data gives us a pretty clear reason to reconsider. Required guidance works better when it is visible, contextual, and tied to the task a real user is trying to complete in the real world. Users should not have to remember instructions from five screens ago, hunt through generic help content, or discover hidden guidance before they can move forward.</p><p>So if your team is using this post as a starting point, I hope it helps you push for onboarding and help decisions that are more grounded in evidence, more consistent across products, and more respectful of how people actually use software in the real world. Thanks for reading!</p><div><hr></div><h1>Citations</h1><ul><li><p>Baymard Institute, <em><a href="https://baymard.com/blog/trigger-indicators">UI: Proper Indicators for Hidden Elements</a></em></p></li><li><p>Interaction Design Foundation, <em><a href="https://www.interaction-design.org/literature/article/design-for-optimal-experience">Design for Optimal Experience</a></em></p></li><li><p>University of Notre Dame, <em><a href="https://erikrunyon.com/2013/07/carousel-interaction-stats/">Carousel Interaction Stats</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/onboarding-tutorials/">Onboarding tutorials vs. contextual help</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/wizards/">Wizards: Definition and design recommendations</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/mobile-instructional-overlay/">Instructional overlays and coach marks for mobile apps</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/help-and-documentation/">Help and documentation (Usability Heuristic #10)</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/mobile-tutorials/">Mobile tutorials: Wasted effort or efficiency boost?</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/plain-language-experts/">Plain language is for everyone, even experts</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/tooltip-guidelines/">Tooltip guidelines</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/icon-usability/">Icon usability</a></em></p></li><li><p>Nielsen Norman Group, <em><a href="https://www.nngroup.com/articles/f-shaped-pattern-reading-web-content/">F-Shaped Pattern of Reading on the Web: Misunderstood, But Still Relevant (Even on Mobile)</a></em></p></li></ul><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Top 8 Interaction Design Articles]]></title><description><![CDATA[Content Good UX Researchers Should Know]]></description><link>https://trevorcalabro.substack.com/p/top-8-interaction-design-articles</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/top-8-interaction-design-articles</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sun, 19 Apr 2026 02:00:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/6e7fb934-acf4-4845-8d86-f8e93ce27c57_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary:</strong> Here are 8 of my recent articles that all have to deal with interaction designed best practices. These are the most common things I have UX researchers asking me about when it comes to this kind of stuff.</p><div><hr></div><p>I've noticed a lot of UX research writing here on Substack focuses on methods, quant specific statistics, and researchops process. I write about all that stuff too. But today I wanted to provide a list of recent articles that focus on old-school interaction design foundation.</p><p>So if you are newer to this blog and want a practical place to begin, start here. This list gives you a pretty good sense of how I think about interaction design principles in the real world.</p><h1><strong>Top 8 UI-Focused Reader Picks</strong></h1><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hRkF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hRkF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png 424w, https://substackcdn.com/image/fetch/$s_!hRkF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png 848w, https://substackcdn.com/image/fetch/$s_!hRkF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png 1272w, https://substackcdn.com/image/fetch/$s_!hRkF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hRkF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png" width="1344" height="204" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:204,&quot;width&quot;:1344,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hRkF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png 424w, https://substackcdn.com/image/fetch/$s_!hRkF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png 848w, https://substackcdn.com/image/fetch/$s_!hRkF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png 1272w, https://substackcdn.com/image/fetch/$s_!hRkF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b91556a-2a29-4fc2-b532-2b5e8067b7eb_1344x204.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a></figure></div><h2><strong>1. <a href="https://trevorcalabro.substack.com/p/reframing-accessibility?utm_source=chatgpt.com">Reframing Accessibility</a></strong></h2><p><strong>Summary:</strong> This post argues that accessibility should not be treated like a separate compliance bucket sitting off to the side of usability. In practice, accessibility is often just usability under less forgiving conditions. That framing makes it easier for teams to see why these issues matter before they ship them.</p><blockquote><p>&#9999;&#65039; <strong>Note:</strong> I keep coming back to this one because it gives people a cleaner way to talk about accessibility with product teams that still treat it like an optional add-on.</p></blockquote><p></p><h2><strong>2. <a href="https://trevorcalabro.substack.com/p/make-it-look-like-what-it-does?utm_source=chatgpt.com">Make It Look Like What It Does</a></strong></h2><p><strong>Summary:</strong> This is my plain-language breakdown of affordances and signifiers, and why so many modern interfaces still get them wrong. If a thing is clickable, it should look clickable. If a control does something important, users should not have to guess what will happen next.</p><blockquote><p>&#9999;&#65039; <strong>Note:</strong> This is one of those posts that tends to make people re-look at their own UI work immediately, which is usually a good sign.</p></blockquote><p></p><h2><strong>3. <a href="https://trevorcalabro.substack.com/p/every-icon-needs-a-label?utm_source=chatgpt.com">Every Icon Needs a Label</a></strong></h2><p><strong>Summary:</strong> This post gets into one of the easiest UI shortcuts to defend and one of the easiest to misuse. Icons on their own often assume too much, especially in complex software. Labels reduce ambiguity, improve scanning, and make interfaces easier to learn without forcing users to decode symbols first.</p><blockquote><p>&#9999;&#65039; <strong>Note:</strong> If you&#8217;ve ever had to sit through someone defending an unlabeled icon-only interface with complete confidence, this one may feel familiar.</p></blockquote><p></p><h2><strong>4. <a href="https://trevorcalabro.substack.com/p/the-anatomy-of-an-input-field?utm_source=chatgpt.com">The Anatomy of an Input Field (Part 1)</a></strong></h2><p><strong>Summary:</strong> This post breaks down the input field as an actual interface component instead of a blank box teams barely think about. Labels, helper text, required indicators, defaults, placeholder misuse, field states, all of that stuff matters more than people think.</p><blockquote><p>&#9999;&#65039; <strong>Note:</strong> A lot of form problems start here. This is one of the more practical posts I&#8217;ve written, and probably one of the more reusable ones too.</p></blockquote><p></p><h2><strong>5. <a href="https://trevorcalabro.substack.com/p/the-anatomy-of-an-input-field-part?utm_source=chatgpt.com">The Anatomy of an Input Field (Part 2)</a></strong></h2><p><strong>Summary:</strong> Part 2 keeps going and gets deeper into the decisions teams usually make too casually. Error handling, validation timing, edge cases, and all the little ways forms create unnecessary friction tend to show up once you stop treating field design like decoration.</p><blockquote><p>&#9999;&#65039; <strong>Note:</strong> If Part 1 is the foundation, this is the part where the cracks start to show.</p></blockquote><p></p><h2><strong>6. <a href="https://trevorcalabro.substack.com/p/the-problem-with-split-buttons?utm_source=chatgpt.com">The Problem With Split Buttons</a></strong></h2><p><strong>Summary:</strong> Split buttons look efficient on the surface, but in practice they often create hesitation, accidental actions, or plain old confusion. This post breaks down why that happens and why combining multiple action models inside one control is usually not as elegant as teams think it is.</p><blockquote><p>&#9999;&#65039; <strong>Note:</strong> I like this one because it focuses on a very specific pattern, but the logic behind it applies to a lot of interface design decisions.</p></blockquote><p></p><h2><strong>7. <a href="https://trevorcalabro.substack.com/p/stop-weaponizing-jakobs-law?utm_source=chatgpt.com">Stop Weaponizing Jakob&#8217;s Law</a></strong></h2><p><strong>Summary:</strong> Jakob&#8217;s Law gets cited constantly in UX, but a lot of people use it as a conversation-ending slogan instead of a principle that still requires judgment. This post is about what the law actually helps with, where people misuse it, and why blindly copying familiar patterns is not the same as good design.</p><blockquote><p>&#9999;&#65039; <strong>Note:</strong> This one tends to resonate with anyone who has watched a decent design critique get flattened by someone saying, &#8220;users expect it this way,&#8221; without much real thought behind it.</p></blockquote><p></p><h2><strong>8. <a href="https://trevorcalabro.substack.com/p/how-to-run-a-cognitive-walkthrough?utm_source=chatgpt.com">How To Run A Cognitive Walkthrough</a></strong></h2><p><strong>Summary:</strong> This is a practical guide to using a cognitive walkthrough as an actual evaluation method, not just as a vague UX theater exercise. It helps teams inspect flows step by step and catch points where users are likely to get stuck, hesitate, misread the interface, or lose confidence.</p><blockquote><p>&#9999;&#65039; <strong>Note:</strong> This is probably the most directly useful post on the list if you want something you can apply to design reviews right away.</p></blockquote><p></p><h1><strong>Conclusion</strong></h1><p>A lot of my writing ends up circling the same basic truth from different angles: small interface decisions are rarely small once real users have to deal with them. A missing label, a vague icon, a bad default, a poorly timed validation rule, or a control that tries to do too much can quietly turn a simple task into something slower, riskier, and more frustrating than it needed to be.</p><p>That&#8217;s part of why I wanted to make this list narrower than some of the broader roundup posts I&#8217;ve done before. This version is really for the people who care about the craft side of interface design. The folks who still think details matter because they do.</p><p>If any of these posts helped you think through a design problem, feel free to share them, quote them, I encourage you to share these links. Thank you for reading.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!noV2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!noV2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg 424w, https://substackcdn.com/image/fetch/$s_!noV2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg 848w, https://substackcdn.com/image/fetch/$s_!noV2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!noV2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!noV2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg" width="380" height="291.9322825452423" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:1316,&quot;width&quot;:1713,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:0,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!noV2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg 424w, https://substackcdn.com/image/fetch/$s_!noV2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg 848w, https://substackcdn.com/image/fetch/$s_!noV2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!noV2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7c63befc-b824-451e-b44b-3e18e460f6df_1713x1316.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Fixing Bad Status Design]]></title><description><![CDATA[Reducing Confusion in Complex Workflows]]></description><link>https://trevorcalabro.substack.com/p/fixing-bad-status-design</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/fixing-bad-status-design</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 11 Apr 2026 17:08:55 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/585916ed-8f57-4994-bee3-e3af96bf58f2_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>This week's article argues that enterprise UX teams spend too much time designing a specific interaction point and not enough time designing what happens after that interaction. I show how vague status labels, spinners, toasts, and dashboards create extra work for users, and what UX teams can do instead to make system feedback clearer and easier to trust.</p><div><hr></div><p>In my 20+ year career in UX, I&#8217;ve noticed that a lot of enterprise/complex software does a decent job designing the moments when users take action, but it seems like far less work goes into designing everything that happens after that. Over time, I&#8217;ve seen a lot of the real usability burden shift into that post user action space. Users are trying to understand what the system is doing, what happens next, and whether they can trust what they are seeing in that moment.</p><p>That&#8217;s the topic I want to rant about this week. I believe that in complex software, a lot of the most important UX work starts after the click, because that is the point where users need clear system feedback to stay oriented, make good decisions, and keep the work moving. Let&#8217;s dive in a little.</p><h1>After the Action</h1><p>A lot of the worst user experiences I have seen were not caused by a button being hard to find, a form being impossible to complete, or a navigation model that made no sense. They happened after all of that stuff. You fill out the form, upload the file, submit the request, assign the ticket, or approve the change, and for one brief second, it feels like the hard part is over. Then the system gives you some tiny piece of feedback like &#8220;Submitted&#8221; or &#8220;In Progress,&#8221; and now you are left trying to figure out whether it actually worked or not.</p><p>That is the part I think UX teams underestimate. The action itself may have taken three seconds, but the full experience now stretches across time and whatever mental model the user has constructed. And that guessing becomes the majority of the experience, because the user is no longer thinking about the task at hand. Instead, they are too busy trying to stay oriented inside a process that has suddenly become completely opaque. Not good.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XaM6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XaM6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XaM6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XaM6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XaM6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XaM6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg" width="352" height="225.21871599564744" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:919,&quot;resizeWidth&quot;:352,&quot;bytes&quot;:125230,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193900717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XaM6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg 424w, https://substackcdn.com/image/fetch/$s_!XaM6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg 848w, https://substackcdn.com/image/fetch/$s_!XaM6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!XaM6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F20d126ef-a9f3-4bc5-ade6-1ba00ecfc125_919x588.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">I&#8217;m confused. </figcaption></figure></div><p>Think about all the extra interaction costs we as UXers have caused users of complex systems over time, forcing them to hover over a nondescript UI element, refresh a table, check their email for some kind of update, ping a coworker, and open a second application just to understand whether the first one actually worked. My point is, it does not really matter that the submit button was clear, accessible, and placed exactly where best practices say it should be. The interaction did not end when they clicked it. It just became <em>wayyyyy </em>less visible.</p><h1>Worse in Enterprise Software</h1><p>My main argument is that this is more painful in enterprise environments because enterprise workflows usually unfold over multiple touchpoints over time.</p><p><strong>I think of these touchpoints dealing with these 4 areas:</strong></p><ol><li><p>People</p></li><li><p>Approvals</p></li><li><p>Dependencies</p></li><li><p>Backend Processes</p></li></ol><p>That kind of workflow creates a lot more room for uncertainty if the system does a poor job communicating state.</p><p>That is why I do not think this is really a complexity problem, at least not in the way UXers usually talk about it. In my experience, most enterprise users can handle a fair amount of complexity. They can learn terminology, navigate layered workflows, and deal with not-so-standard processes. But what I see wearing users down the most is system status ambiguity. They can work inside a complicated system if that system is explicit about what just happened, what is happening now, and what comes next. What really drains users is a system that looks simple on the surface but keeps forcing them to infer its actual state from vague labels, partial updates, and a lot of silence.</p><p>This is also why the good old <a href="https://www.nngroup.com/articles/visibility-system-status/">visibility of system status heuristic</a> still matters. The principle sounds basic until you apply it to a real enterprise workflow, where the &#8220;system&#8221; is no longer just one screen responding to one click. It is a chain of events that may involve timing, queueing, routing, review, exception handling, and another person picking up the work later. Once you look at it that way, it becomes obvious that a spinner or a tiny success message is often nowhere near enough.</p><div class="pullquote"><p>The way I see enterprise UX teams talk about this stuff is still very page-level, but we are really dealing with a time-based problem. That mismatch is where a lot of this friction starts.</p></div><h1>Showing Don&#8217;t Tell Status</h1><p>A lot of interfaces technically show status, and that is exactly why this problem gets missed so often. Anyone can point to a badge, banner, icon, or label and claim the state is visible, therefore it&#8217;s communicated to the user. In the narrowest possible sense, that may be technically true, but the leap from &#8220;it&#8217;s visible&#8221; to &#8220;it&#8217;s communicated well&#8221; is a wild one. (It&#8217;s also counter to any basic logic.)</p><p>For example, a status like &#8220;Pending&#8221; might be accurate from the system&#8217;s point of view and still nearly useless from the user&#8217;s point of view, because that single label can hide several completely different realities. It might mean waiting on review, waiting on a sync, waiting on another team, waiting on a nightly process, or sitting in a broken state that nobody has noticed yet. Do any of these hidden ambiguities sound familiar to you?</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9UvZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9UvZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9UvZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9UvZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9UvZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9UvZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg" width="359" height="169.1007556675063" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:561,&quot;width&quot;:1191,&quot;resizeWidth&quot;:359,&quot;bytes&quot;:144417,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193900717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!9UvZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg 424w, https://substackcdn.com/image/fetch/$s_!9UvZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg 848w, https://substackcdn.com/image/fetch/$s_!9UvZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!9UvZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0d822a17-4a27-43ff-ba02-9db26d64eba3_1191x561.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>That is where this starts to become a language problem as much as a status problem.</p><div class="pullquote"><p>One of the oldest usability ideas in the field is that systems should speak the user&#8217;s language rather than their own internal shorthand, and enterprise software violates that rule constantly.</p></div><p>Enterprise systems often expose backend categories, workflow abstractions, and generic state labels, then act as if the user has been meaningfully informed. I&#8217;m looking at you, <a href="https://www.workday.com/">Workday</a>, hahaha! In reality, the user has often just been handed a term that still requires interpretation, and interpretation is work.</p><p><strong>The real question is whether the state it displays helps the user answer what they actually need to know in that moment:</strong></p><ul><li><p>Did my action work?</p></li><li><p>What is happening right now?</p></li><li><p>Do I need to do anything else?</p></li><li><p>Can I safely leave this screen?</p></li><li><p>Is another person responsible now?</p></li><li><p>Should I expect this to update in ten seconds, an hour, or tomorrow morning?</p></li></ul><p>Those are the questions users are carrying around, and a lot of enterprise interfaces answer them very poorly, even when they appear to be full of status signals.</p><p>A status indicator can satisfy the design team because something is present on the screen, while still failing the user because it does not reduce uncertainty in any meaningful way. In my experience, that is where a lot of enterprise friction actually lives. The interface has not gone fully silent. It has done something even worse. It has spoken just enough to sound informative while still leaving the user with the actual cognitive burden of figuring out what the information means.</p><h1>The Hidden Cost</h1><p>When a system does a bad job of communicating system status, the most obvious cost is user confusion. But the bigger cost is the amount of extra user effort that gets layered on top of the workflow just to make the workflow usable. You&#8217;ve seen this before, users start refreshing screens, checking neighboring tabs, reopening records, scanning their email for confirmation messages, and asking coworkers whether something is normal. None of that work is the real job. It is orientation work that only exists because the interface failed to make the process legible.</p><p>Think about how this plays out in the real world. If a user is unsure whether a request actually went through, they are likely to submit it again. If someone can&#8217;t tell whether another team has the next step, they might start following up too early or too often. If a user can&#8217;t make sense of an item&#8217;s status, they might just create their own spreadsheet to track it manually in parallel. (You get the idea.) Over time, those behaviors stop being exceptions and start becoming the actual workflow.</p><div class="pullquote"><p>This is when the official system becomes the place where tasks are technically entered, but the real tracking happens somewhere else outside the system, and that is a big reason why these problems create so much downstream noise within our orgs.</p></div><p>There is also a trust cost that is harder to measure but very easy to overlook. For example, once users learn that a system&#8217;s status indicators are unreliable, they&#8217;ll likely stop taking them at face value. And in my experience, that kind of thing will totally change how users interact with the product over time. That is a bad place for enterprise software to land, especially when the work inside that software is high stakes.</p><h1>Why UX Teams Miss This</h1><p>Part of the reason this problem survives so often is that it hides in plain sight. UX teams spend a lot of time reviewing entry points into workflows because those are the parts that show up cleanly in mocks, prototypes, and design critiques. Team members can comment on layout, labels, form fields, hierarchy, and button placement with a lot of confidence. But the moment after submission is much messier. It involves time, dependencies, handoffs, conditional logic, and states that may only become visible hours later or in another part of the product. My theory is that this kind of design work is harder to capture in a static review, so it simply gets less consideration and attention.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kLvO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kLvO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif 424w, https://substackcdn.com/image/fetch/$s_!kLvO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif 848w, https://substackcdn.com/image/fetch/$s_!kLvO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif 1272w, https://substackcdn.com/image/fetch/$s_!kLvO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kLvO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif" width="394" height="224.92427184466018" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:588,&quot;width&quot;:1030,&quot;resizeWidth&quot;:394,&quot;bytes&quot;:131899,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/gif&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193900717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kLvO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif 424w, https://substackcdn.com/image/fetch/$s_!kLvO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif 848w, https://substackcdn.com/image/fetch/$s_!kLvO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif 1272w, https://substackcdn.com/image/fetch/$s_!kLvO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8fdea01-f915-4fbc-a70b-241966bb8f63_1030x588.gif 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Now I&#8217;m confused <em><strong>and </strong></em>waiting indefinitely&#8230; cool, cool. </figcaption></figure></div><p>I also think product teams regularly underestimate how much of their own understanding comes from being too deep in the weeds. The people building the system usually know what happens after the click because they know the architecture and business rules that drove the original workflow. These folks know that a request enters a queue, gets validated overnight, routes to a specific team, or changes state only after another process runs. Because they already know the story behind the workflow, they can look at a status label like &#8220;Pending&#8221; and mentally fill in the missing detail without noticing that the interface never actually communicated it. And of course, as user advocates, we all know that the user does not have that advantage.</p><p>There is a more structural issue underneath this too. I see a lot of orgs treat post-action states like an afterthought, then try to solve the problem later by blindly throwing a handful of UI components at it and calling it done.</p><p><strong>The most common culprits I see in the real world are:</strong></p><ul><li><p>a badge</p></li><li><p>a toast</p></li><li><p>a status column in a table</p></li><li><p>a filter that lets users sort by state</p></li><li><p>a tooltip</p></li><li><p>a color-coded icon or dot</p></li></ul><p>All of these can be useful, but are often added after the core workflow has already been defined. By that point, the team is not really designing state communication. The result is usually a collection of indicators that reflect technical states or fragments of the process, but do not add up to a coherent explanation of how the work is actually moving. (noise vs. signal.)</p><h1>The 3 Problem Children</h1><p>Here are 3 of the most common UI patterns I see in the real world. All are often used as stand-ins for better status design, even though they usually leave users doing far too much interpretation on their own.</p><h2>1. Progress Indicator Spinners</h2><p>The spinner is probably the most familiar example of this whole issue because it gives the appearance of feedback without always providing much explanation. For very short waits, that is usually fine. People do not need a full narrative when something takes two seconds. The problem starts when teams use the same pattern for situations that are no longer short, simple, or predictable. At that point, the spinner stops functioning like useful feedback and starts functioning more like a placeholder for missing design. Motion is still happening on the screen, but the user has learned very little about what the system is doing, how long it might take, or what they should do if the wait continues.</p><h2>2. Toasts</h2><p>The toast creates a slightly different problem. It is often meant to reassure the user that their action was successful, but in practice, it tends to confirm only the thinnest possible version of success. A message like &#8220;Saved&#8221; or &#8220;Submitted&#8221; can be technically true while still leaving the most important questions unanswered. Saved where? Submitted to who? Finished for now or sent into a longer process. Then, of course, the message disappears, the user is left staring at the same screen or a slightly updated one, and the real burden of interpretation begins. That pattern is especially weak in enterprise systems because the action that just occurred is often not the end of the story. It is the beginning of a larger sequence, and a fleeting little confirmation message is nowhere near enough to orient someone inside that sequence. And of course, we have decades of usage data showing that temporary UI elements like toasts are often completely missed by users, so that&#8217;s still a thing too.</p><h2>3. Dashboards</h2><p>Then there is the dreaded dashboard, the junk drawer for the info your org thinks users need. The logic seems reasonable on the surface. If users need to understand status across time, give them a centralized place to monitor status. Sometimes that does help.</p><div class="pullquote"><p>An enterprise-level dashboard only improves the experience if it turns raw status into something interpretable and actionable.</p></div><p>A table full of badges, timestamps, and vague labels does not automatically do that. In a lot of cases, it just relocates the confusion. The user can now see ten things marked &#8220;Pending&#8221; instead of one, but still has very little help understanding which of those items are healthy, which are stuck, which need intervention, and which are simply waiting their turn.</p><div class="callout-block" data-callout="true"><p><strong>&#128221; NOTE: </strong>What ties all 3 of these patterns together is that they can make a system look responsive while still leaving the user underinformed. That is why teams often feel like they have handled status communication when they really have not. There is motion, there is confirmation, there is a place to view records later, and from a distance that can look like solid coverage. But if the person using the system still has to translate the interface for themselves, then the design has only surfaced state in a shallow sense. </p></div><h1>Better Status Design</h1><p>Despite what many UXers seem to think, better status design does not require turning every workflow into a verbose tutorial. (And it also does not mean adding a Pendo-style pop-up walkthrough, you lazy bums. hahaha.)</p><div class="pullquote"><p>Most users do not need the system to narrate every little event in exhausting detail. What they need is enough explicit context to stay oriented without having to do detective work.</p></div><p>That usually means the interface needs to communicate more than a bare state label. It needs to communicate where the work is, what that state means in practical terms, whether anything is expected from the user right now, and what kind of change they should be watching for next.</p><p>This all sounds obvious when stated plainly, but a lot of enterprise products still stop at the thinnest possible layer of feedback. They tell the user that something exists in a state, but not what that state actually means for the work. A better system closes that gap. If something is under review, say that. If another team has the next step, say that. If processing typically takes until the next business day, say that. If the user is done for now and can safely leave, that should be explicit too. The goal is not to stuff the interface with more words. The goal is to reduce interpretation work.</p><p>This is also where good status design starts to feel more usable. When the system is clear about all of this, users stop floundering. You know the status design is working when users can move on and come back later because the interface has given them a usable explanation of the current situation. That is <em>wayyyyyy </em>more valuable than any generic success message.</p><p>A lot of the strongest examples I have seen do this by clearly separating the current state from the next-step meaning. That distinction matters because it is what turns status from a technical label into something a user can actually work with.</p><p><strong>&#10060; Bad: </strong>&#8220;Submitted&#8221;<br>&#10004;&#65039; <strong>Better: </strong>&#8220;Submitted for manager review&#8221;</p><p><strong>&#10060; Bad: </strong>&#8220;Processing&#8221;<br>&#10004;&#65039; <strong>Better: </strong>&#8220;Processing. No action needed. Expected completion by tomorrow morning.&#8221;</p><p><strong>&#10060; Bad: </strong>&#8220;Pending&#8221;<br>&#10004;&#65039; <strong>Better: </strong>&#8220;Pending legal approval&#8221;</p><p>The better versions do more than report a state. They help the user understand what is happening, who or what owns the next step, and whether they need to do anything right now.</p><p>The other thing better systems do well is make status legible across time instead of only in the moment.</p><p><strong>&#10060; Bad: </strong>&#8220;Saved&#8221; shown only in a disappearing toast<br>&#10004;&#65039; <strong>Better: </strong>&#8220;Changes saved at 2:14 PM&#8221; shown in a stable, visible location</p><p><strong>&#10060; Bad: </strong>a vague status badge with no history<br>&#10004;&#65039; <strong>Better: </strong>a clear status label paired with a timestamp or status history</p><p><strong>&#10060; Bad: </strong>a table update that gives no clue what changed or when<br>&#10004;&#65039; <strong>Better: </strong>a visible update that shows what changed, when it changed, and what happens next</p><p>A user should not get one brief chance to understand what happened and then lose the thread as soon as the screen refreshes, the toast disappears, or the table updates. If the work continues later, the interface should help them come back and quickly figure out where things stand.</p><h1>The Bigger HCI Point</h1><p>What makes this topic interesting to me is that it looks like a small interface issue until you sit with it for a while. On the surface, it can seem like a complaint about wording, spinners, or whether a status badge should be blue or green. But the deeper issue is that enterprise software often fails to help users build an accurate mental model of work that is unfolding across time. That is a much bigger design problem than most teams acknowledge.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ih7R!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ih7R!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ih7R!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ih7R!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ih7R!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ih7R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg" width="349" height="299.807619047619" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:451,&quot;width&quot;:525,&quot;resizeWidth&quot;:349,&quot;bytes&quot;:68055,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193900717?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ih7R!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ih7R!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ih7R!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ih7R!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbd54f4e0-04a9-417a-91f4-4ca9a55c291e_525x451.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A lot of UX conversations still treat interaction as something that happens in a neat little burst between the user and the screen. The person clicks, the interface responds, and the experience is more or less contained inside that exchange. That model breaks down pretty quickly in enterprise environments because the work is often distributed. A request can move through systems, rules, queues, reviewers, exception states, and downstream teams long after the user has stopped actively touching the interface. If the design only accounts for the visible moment of interaction, then it leaves the user in the dark during the part of the workflow where understanding matters most.</p><p>That is why I think poor status communication creates so much unnecessary cognitive load. It forces users to simulate the system in their own heads. They have to infer what happened from partial clues, remember how similar cases behaved last time, and guess which delays are normal and which ones signal a problem.</p><div class="pullquote"><p>Some users eventually learn those patterns through repetition, but that does not mean the design is good. It just means the users have been trained to compensate for missing information.</p></div><p>In complex environments, that compensation can start to look like expertise. (This is the <a href="https://www.nngroup.com/articles/complex-apps-users/">power-user fallacy</a>.) But in reality, it is often just an adaptation to a system that never explained itself clearly enough in the first place.</p><p>This is also one of those places where usability and organizational clarity run directly into each other. When software communicates status and state poorly, it does not just confuse an individual user. It makes it harder to tell whether work is moving, waiting, stuck, or owned by someone else. In other words, the interface stops being a useful representation of the process. And that is where I have seen a huge amount of waste happen, all while UX teams are still debating small UI details in the hope that they will fix the core problem. (Spoiler, they won&#8217;t, no matter how good the UI is.)</p><h1><strong>Conclusion</strong></h1><p>To wrap things up, I&#8217;ve noticed for a long time that in complex and enterprise software, a lot of the most important UX work starts after the user takes action. That is the point where people need the system to clearly communicate what is happening, what comes next, and whether the work is moving the way it should.</p><p>Here&#8217;s an idea. Instead of leaving users to compensate, UX teams can design system feedback that does more real work. We can use clearer status labels, make ownership and next steps explicit, show when no action is needed, add timestamps or status history that help users reorient later, and explain what the system is actually waiting on. That kind of status design reduces interpretation work, makes workflows easier to follow across time, and gives users something they can actually trust in the real world. (e.g., basic old-school UX principles.)</p><p>Have you seen this kind of system-status confusion play out in the complex tools your team uses or builds? If you have, comment here or send me a DM. I&#8217;d be interested to hear where you&#8217;ve seen ambiguous system feedback create extra work and workaround behavior. Thanks for the continued support and for reading this week&#8217;s article.</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Honest UX Artifacts]]></title><description><![CDATA[Why Service Blueprints Work]]></description><link>https://trevorcalabro.substack.com/p/honest-ux-artifacts</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/honest-ux-artifacts</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Fri, 03 Apr 2026 16:17:58 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/85ddb795-2005-4888-a2b5-487a508dd094_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>Journey maps are one of the easiest UX artifacts to misuse because they often let teams simulate user understanding without doing the real user research work. Service blueprints, on the other hand, are often the more honest place to start because they document how user flows actually work before teams begin interpreting what users think or feel about them.</p><div><hr></div><p>I&#8217;m in the middle of facilitating a service blueprint creation workshop at work, and it has had me thinking about a pattern I have seen in more than one past role. Does this sound familiar to you? A product has grown large enough that people across the org no longer share the same understanding of how the experience is actually delivered to end users because teams are somewhat siloed. One team understands the interface. Another understands the policy constraints. Another knows the manual steps happening behind the scenes. The Support team may know where users get stuck, while engineering knows which systems are patched together just well enough to keep the whole thing moving. At that point, the org does not just need design ideas. It needs a reliable picture of how the service currently works holistically.</p><p>In several past orgs, I watched that exact need get answered with a journey-mapping exercise. Stakeholders wanted the workshop version of user understanding. They wanted a Post-it wall full of stages, pain points, emotional states, and sticky notes that translated internal beliefs into something that looked user-centered. The result often felt productive in the moment. It gave people something visible to react to and something easy to circulate afterward. What it usually did not give them was a more accurate look into the root causes behind a disjointed user experience.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TC11!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TC11!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TC11!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TC11!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TC11!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TC11!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg" width="334" height="322.91015625" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:990,&quot;width&quot;:1024,&quot;resizeWidth&quot;:334,&quot;bytes&quot;:356109,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193084927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TC11!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg 424w, https://substackcdn.com/image/fetch/$s_!TC11!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg 848w, https://substackcdn.com/image/fetch/$s_!TC11!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!TC11!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F955bf410-9492-43d8-8a4a-9a8c80acae62_1024x990.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Service blueprints and journey maps are completely different tools, yet they are often conflated in UX circles. <a href="https://www.nngroup.com/articles/service-blueprints-definition/">Nielsen Norman Group has a useful way of defining service blueprints</a>. <em>(<strong>NOTE:</strong> I&#8217;ll be using this definition and framework throughout this article.)</em> They describe them as tools for mapping the relationships between service components, including people, processes, and touchpoints, and note that they are especially useful for cross-functional, multi touchpoint experiences. That is often the kind of understanding enterprise teams are missing. They do not need a workshop that helps everyone imagine what the user is thinking. They need something much more simple and straightforward. They need a way to document what the org is currently doing to create the experience users are having.</p><p>Journey maps can give teams the feeling that they have done that work when they have not. That gap between the feeling of learning and the presence of actual learning is a big part of why I have grown more skeptical of them over time.</p><h1>The Problem</h1><p>This is not a general comparison article about journey maps and service blueprints. (Many, many people have already written that article.) It is also not an article about how to run a better journey-mapping session. (That horse has already been beaten enough as well. hahaha.) I am not trying to rescue any methods or explain the ideal version of how they are supposed to work. Instead, I want to tell the real-world truth about journey maps and service blueprints.</p><p>I want to stay focused on how journey maps are often used in real orgs. In practice, they are frequently done incorrectly, and they are easier to mess up than many UX pros seem comfortable admitting. That becomes even more important in larger enterprise environments, where the system itself is already complicated and where polished internal artifacts can carry more authority than they deserve.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IX_F!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IX_F!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IX_F!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IX_F!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IX_F!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IX_F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg" width="324" height="243.4807121661721" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1013,&quot;width&quot;:1348,&quot;resizeWidth&quot;:324,&quot;bytes&quot;:250406,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193084927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IX_F!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IX_F!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IX_F!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IX_F!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F697fcd3c-4160-4414-80c7-2bc72b27fcd4_1348x1013.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Service blueprints do answer a different question. <a href="https://www.nngroup.com/articles/service-blueprinting-faq/">Nielsen Norman Group makes that distinction clearly</a>. Journey maps focus on understanding the end user&#8217;s journey, including actions, thoughts, and emotions, while service blueprints document how the org creates that experience through frontstage actions, backstage actions, and support processes. I agree with that distinction. I also think it helps explain why service blueprints are often the more useful strategic move in practice.</p><p>In my experience, orgs are not facing a shortage of made-up user emotions, but they are facing a shortage of shared operational understanding. Most orgs need to know who is doing what, where the process breaks down, which teams influence the experience, and where additional research is actually needed. A service blueprint gives them a more grounded way to start that work.</p><p>That is the argument I want to make in this week&#8217;s post. Journey maps are often easier to misuse. Service blueprints are more objective in nature. In large orgs with complicated products and layered service models, that difference starts to matter very quickly.</p><h1>Stop Weaponizing Journey Maps</h1><p>Journey maps are one of the easiest UX artifacts to turn into &#8220;UX Theater&#8221; because they let teams simulate user-centeredness without doing the real work of learning from actual users. And of course, the design thinking workshop format helps create that problem. A group gets together, starts filling in what they think users think and feel, and before long, the output begins to look like insight, whether or not insight is actually present. This is the standard critique that I&#8217;m sure most of you have heard many times.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Msp5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Msp5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Msp5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Msp5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Msp5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Msp5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg" width="345" height="309.9609375" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:920,&quot;width&quot;:1024,&quot;resizeWidth&quot;:345,&quot;bytes&quot;:271201,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193084927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Msp5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Msp5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Msp5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Msp5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe779b331-ffb2-4021-9aab-345f3f46494c_1024x920.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That visual credibility carries a lot of weight inside orgs. A journey map tends to look substantial. It is detailed, well-structured, and full of language that sounds user-centered. Once it is on the wall or turned into a polished deliverable, people can start treating it like research simply because it resembles the kinds of artifacts research teams produce. The format does a lot of persuasive work on its own.</p><p>The first reason this happens is that journey maps invite workshop participants to make up how they think the typical user behaves without actual user data. Once a workshop starts assigning motivations, frustrations, and expectations to users who were never studied, the group is no longer synthesizing evidence. It turns into a baseless projection exercise filled with bias.</p><div class="pullquote"><p>Even when the workshop participants are knowledgeable, close to the product, and genuinely care about the user, internal familiarity is <strong>still not user evidence</strong>, no matter how hard people try to make it seem that way.</p></div><p>A second problem is that the artifact creates confidence too easily. Stakeholders leave the session feeling aligned. Teams feel like progress was made. Leadership sees something concrete that appears to capture the user experience. Those reactions are understandable, but they are not proof that the artifact is accurate. A workshop can create momentum and still produce a distorted view of reality.</p><p>Journey maps also tend to mix different categories of information together until the boundaries disappear. A real process fact can sit next to a stakeholder&#8217;s guess. A present-state observation can sit next to a future-state aspiration. An imagined user pain point can get written in the same format as a finding that actually came from research. Once all of that is arranged into a single visual system, the weaker claims borrow credibility from the stronger ones.</p><p>This becomes more dangerous in enterprise settings because the experience is shaped by a lot of things that do not fit neatly into a simplified user story. Internal policies shape what can happen. Support workflows affect resolution time. Permissions, exceptions, legacy systems, and manual workarounds all influence what the user experiences. When a team tries to compress that kind of environment into a neat narrative about what the user is thinking or feeling, the result can be very misleading while still sounding strategic.</p><p>That is why I use the word weaponized. I do not mean that every journey map is made in bad faith. I mean that the artifact can be used to create the appearance of user understanding, reassure stakeholders that the team is being user-centered, and move decisions forward without doing the harder work of gathering real evidence. At that point, the journey map is no longer functioning as a research artifact. It is functioning as a persuasion artifact.</p><h1>Service Blueprints Are Honest</h1><p>The distinction between service blueprints and journey maps matters a lot because the organizational side of the experience is usually where the end user confusion is derived from.</p><div class="pullquote"><p>The aesthetics of the interface might look simple enough on the surface, but the actual experience is being shaped by siloed team handoffs.</p></div><p>A service blueprint gives you a way to document those handoff thresholds without pretending to know more than you know about the user.</p><p><a href="https://www.nngroup.com/articles/service-blueprints-definition/">Nielsen Norman Group also points out that service blueprints are especially useful for experiences that are omnichannel</a>, involve multiple touchpoints, or require cross-functional coordination. That description fits a huge amount of enterprise work. It also helps explain why service blueprints tend to hold up better in those environments. They are built to make organizational complexity visible.</p><p>That does not make service blueprints perfect. They can still be incomplete and executed in a sloppy way. But, they often <em><strong>still </strong></em>unearth organizational blind spots even if the wrong people are in the room or the wrong inputs are used. And unlike journey mapping, what they are less likely to do is drift into fake empathy-land. The fundamental structure of service blueprints keeps the team closer to observable reality. They ask what happens, who does it, what supports it, and where things break down. That is a much safer place to start than a workshop built around simulated user feelings.</p><p>This is why I keep coming back to the idea that service blueprints are often the more honest strategic move. They do not claim to give you a deep understanding of the user. They just thoroughly document how the end-to-end service actually works in the real world. In a lot of orgs, that is the thing people need before they are ready to make bigger claims about the user experience.</p><h1>Document Then Interpret</h1><p>A lot of teams skip past the documentation step. They start interpreting the experience before they have documented the service that creates it. That mixed-up order of operation causes problems because user experiences do not emerge out of thin air.</p><p><strong>They are shaped by how the org operates in very specific ways, including things like:</strong></p><ul><li><p>users getting inconsistent information from different teams or channels</p></li><li><p>processes feeling disjointed because work moves from one department to another without a clean transition</p></li><li><p>tasks taking longer than they should because approvals, reviews, or manual steps slow them down</p></li><li><p>duplicated work happening across teams</p></li><li><p>unclear ownership over who is responsible for fixing a problem</p></li><li><p>workarounds people rely on because the official process does not work well</p></li><li><p>approval flows that add friction or delay</p></li><li><p>support processes that never show up in a simplified user story</p></li></ul><p>Service blueprints are useful because they force teams to look at those underlying structures directly. <a href="https://www.nngroup.com/articles/service-blueprinting-faq/">Nielsen Norman Group describes blueprinting</a> as a way to discover weaknesses, eliminate redundancy, and coordinate future changes by helping orgs visualize who is doing what and when. That is often the work that needs to happen first. Before a team starts speculating about emotion, it needs to understand the machinery behind the experience.</p><p>That is also why service blueprints tend to be more productive, especially in enterprise environments. They give teams a shared picture of the service as it currently operates. They show where departments intersect, where internal work supports user-facing work, and where breakdowns are happening across the system.</p><div class="pullquote"><p><a href="https://www.nngroup.com/articles/service-blueprinting-practice/">Nielsen Norman Group&#8217;s service-blueprinting research</a> found that practitioners often use blueprints as a shared source of truth across departments, helping teams build common understanding and better project planning.</p></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!4xk7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4xk7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4xk7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4xk7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4xk7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4xk7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg" width="440" height="40.70748299319728" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:68,&quot;width&quot;:735,&quot;resizeWidth&quot;:440,&quot;bytes&quot;:44387,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193084927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4xk7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg 424w, https://substackcdn.com/image/fetch/$s_!4xk7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg 848w, https://substackcdn.com/image/fetch/$s_!4xk7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!4xk7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07a08693-58d3-45f2-9cd1-b8b31433b809_735x68.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>That kind of clarity is a big deal. A lot of enterprise problems survive because each team understands only its own slice of the work. The blueprint does not magically solve that, but it gives people a more grounded way to talk about it. It puts the service itself on the table instead of letting the conversation drift into assumptions about the user.</p><p>I think that is one reason service blueprints feel less theatrical to me. They are still workshops. They still involve collaboration. They still depend on facilitation. The difference is that the output is tied more directly to what the org is actually doing. That makes the conversation more disciplined. It also makes the next steps more useful.</p><div class="pullquote"><p>Ultimately, service blueprints create a more honest sequence for teams that are trying to improve complex experiences. First, document how the service currently works. Then identify where the breakdowns are, where the org lacks clarity, and where user research should go deeper.</p></div><p>That is a much cleaner process than gathering stakeholders in a room and asking them to fill in what they imagine users are thinking.</p><p>It also respects the limits of the artifact. A service blueprint does not need to overclaim in order to be useful. It can simply show what is happening, where support structures are helping or failing, and where more evidence is needed. That kind of restraint is valuable. In my experience, teams make better decisions when the artifact in front of them is honest about what it knows and honest about what it does not.</p><h1>Alignment Is Not Evidence</h1><p>One of the reasons journey maps keep surviving in this form is that they do produce something people genuinely want. They can create stakeholder alignment, a shared language, and make it easier for a room full of people to discuss the same flow together. I understand the appeal. I understand why teams walk out of those sessions feeling like useful work got done.</p><div class="pullquote"><p>The problem is that alignment and evidence are not the same thing, and many times the artifacts produced after a journey-mapping workshop are treated as user data. Rule of thumb: if there are no users in the room, it ain&#8217;t user-centered.</p></div><p>I think this is where a lot of UX pros get themselves into trouble. They confuse the visible outputs of a workshop with the quality of the knowledge behind it. Don&#8217;t get me wrong, a well-facilitated session, a collaborative artifact, and a room full of engaged stakeholders can be useful. Journey mapping workshops are useful as organizational internal alignment tools, but they are not useful for better understanding real users.</p><p>That distinction is worth holding onto because it protects the discipline from drifting into performance. If the artifact makes claims about users, those claims should be grounded in user evidence. If the artifact is documenting how the org works, it should be grounded in operational evidence.</p><p>This is also why I have less patience now for the softer defenses of these workshops. People will sometimes say that the point is not accuracy. The point is conversation. Or alignment. Or ideation. I understand what they mean, but that defense falls apart pretty quickly once the artifact starts getting circulated as if it says something true about the user experience.</p><p>In real orgs, these things rarely stay contained as innocent workshop exercises. They become reference points that influence priorities. They shape how leaders talk about user problems and become part of the decision-making environment, whether they deserve that role or not. A service blueprint is not immune to misuse, but it is less likely to create that same kind of false legitimacy as a journey map because it is anchored in a narrower and more honest claim.</p><p>It is trying to accurately document how the service works. That is a much more defensible job for a collaborative workshop artifact. It stays closer to what a room of stakeholders can actually know, especially when the right people are involved.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7hsY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7hsY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7hsY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7hsY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7hsY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7hsY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg" width="1456" height="724" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:724,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:186900,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/193084927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7hsY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg 424w, https://substackcdn.com/image/fetch/$s_!7hsY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg 848w, https://substackcdn.com/image/fetch/$s_!7hsY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!7hsY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F777251bc-1296-4c21-b756-5d98e8ba0da5_2414x1201.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="pullquote"><p>I think the distinction between performative UX artifacts and artifacts that more honestly document reality matters for the future of UX work in general. Our value does not come from making polished artifacts that feel strategic. It comes from improving the quality of understanding inside orgs.</p></div><p>Sometimes that means doing direct user research. Sometimes that means documenting the service well enough to know where direct user research is needed next. Both are legitimate. Pretending to know what users think because a workshop produced a good-looking map is not.</p><h1>Conclusion</h1><p>The confusion between service blueprints and journey maps has been around for a long time, and I do not think it is going away anytime soon. Journey maps look strategic. They look user-centered. They give people something visible to point at. They give teams a fast way to feel aligned. All of that makes them easy to overvalue, especially in environments where the underlying service is complicated and no one fully understands how all the pieces fit together. That is exactly why I trust them less.</p><p>Service blueprints are not doing the same job, and I am not claiming they should replace every other artifact in UX. I am saying something much simpler. In a lot of enterprise settings, they are the more honest place to start. They stay closer to observable reality. They make operational complexity visible. They help teams document what is actually happening before they start making bigger claims about what users think or feel.</p><p>If a team wants to understand user journeys, it should study its own systems first.</p><p>Have you used service blueprints to bring more clarity to a messy product, service, or internal workflow? If so, comment here or DM me. I&#8217;d love to hear where you&#8217;ve seen service blueprints help teams build shared understanding, uncover operational gaps, or make smarter decisions in complex environments. Thanks for reading!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Missing Brick]]></title><description><![CDATA[Unintentional User Delight]]></description><link>https://trevorcalabro.substack.com/p/missing-brick</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/missing-brick</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 28 Mar 2026 20:47:53 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!NOSQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><br>This week, we go silly. Thanks for reading the blog each week. I have 2 larger posts coming soon, so stay tuned.</p><p>In the meantime, I found a missing brick in this wall...</p><h1>Boom, UX!</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!NOSQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!NOSQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NOSQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NOSQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NOSQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!NOSQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg" width="1456" height="906" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:906,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2202524,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/192454905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!NOSQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg 424w, https://substackcdn.com/image/fetch/$s_!NOSQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg 848w, https://substackcdn.com/image/fetch/$s_!NOSQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!NOSQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd04a294c-f03a-426c-b1e6-0bb0d62bddc0_1947x1211.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!i4-2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i4-2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg 424w, https://substackcdn.com/image/fetch/$s_!i4-2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg 848w, https://substackcdn.com/image/fetch/$s_!i4-2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!i4-2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i4-2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg" width="335" height="257.46222527472526" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1119,&quot;width&quot;:1456,&quot;resizeWidth&quot;:335,&quot;bytes&quot;:162395,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/192454905?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i4-2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg 424w, https://substackcdn.com/image/fetch/$s_!i4-2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg 848w, https://substackcdn.com/image/fetch/$s_!i4-2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!i4-2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F18c6620b-f096-44f2-bbf5-8652eb188dc8_1713x1316.jpeg 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Most ResearchOps Problems Start with Hand-Offs]]></title><description><![CDATA[A Framework for Strategic Ops Audits]]></description><link>https://trevorcalabro.substack.com/p/most-researchops-problems-start-with</link><guid isPermaLink="false">https://trevorcalabro.substack.com/p/most-researchops-problems-start-with</guid><dc:creator><![CDATA[Trevor Calabro]]></dc:creator><pubDate>Sat, 21 Mar 2026 18:43:31 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/1303755f-47f1-4b24-888e-4f69c8914aec_694x619.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Summary: </strong>UX research rarely falls apart because the team lacks methods or talent. It falls apart in the hand-offs, where participant data, scheduling, evidence, synthesis, and storytelling get separated from one another and turn good research into fragmented busywork instead of a connected study.</p><div><hr></div><p>A while back, I was watching a researcher try to get a pretty normal study out the door. Nothing fancy. A handful of participants, a few stakeholder observers, some straightforward user interviews, and a plan to turn the findings around quickly.</p><p>This researcher pulled participant information from one system, cleaned it in Excel, scheduled sessions through a third-party tool, hosted the calls in a different platform, tracked incentives in a spreadsheet, downloaded recordings manually, used an LLM to create transcripts, and then started trying to stitch everything back together for analysis. By the time this person got to synthesis, the study already felt fragmented. Not because the research was bad, but because the workflow around it introduced a lot of noise. Sound familiar to anyone else?</p><p>That&#8217;s when I started thinking that a lot of research pain is not caused by a lack of methods, talent, or rigor. It comes from broken hand-offs between steps within a process.</p><h1>The Problem</h1><p>When I tell others this story, many peeps start solutionizing in their heads, and it is usually about how to reduce the number of tools used in the process. My hot take is that I <em>don&#8217;t </em>think most UXR teams are suffering because they use too many tools in some abstract sense. In practice, most orgs are always going to have some sort of tech stack. Their email, calendar, and meeting systems have been chosen for them. General customer data probably lives in some CRM that the research team does not control. The problem is not that the workflow spans multiple systems. The problem is that the systems do not behave like a single workflow. It&#8217;s the hand-offs between systems that&#8217;s the real problem.</p><p>Any well-designed user research process needs to work across several tools and still feel coherent in the transitions. But when every transition creates more admin work, more duplication, or more opportunities for something to break, the researcher ends up doing tool-to-tool busywork instead of research.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ylrg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ylrg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ylrg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ylrg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ylrg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ylrg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg" width="345" height="257.117903930131" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:687,&quot;resizeWidth&quot;:345,&quot;bytes&quot;:79748,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/191696499?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ylrg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ylrg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ylrg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ylrg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcb0e986b-db77-49e0-9f50-072280141ccd_687x512.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h1>Recruitment &amp; Outreach</h1><p>Recruitment is usually where the cracks in a research process tend to show first. Participant data often lives in CRMs, customer databases, spreadsheets, support systems, or a mix of all of them. That part is normal. What is not normal is how much manual effort researchers are often expected to spend just getting that information into usable shape. Exporting files, cleaning fields, checking for duplicates, verifying preferences, re-uploading lists, and trying not to mishandle sensitive information should not be the hidden cost of running a study.</p><p>This feels more like admin work wrapped around research than valuable research work in and of itself. With a more strategic process, participant data can come from where it already lives, stay reasonably up to date, and be managed without someone rebuilding the pool every time a new study starts.</p><div class="pullquote"><p>A more strategic ResearchOps process saves time, but more importantly, it also reduces the chances of using outdated information or making preventable mistakes with participant records.</p></div><p>And of course, the same thing shows up in outreach. Participants are much more likely to trust and respond to an invitation when it feels legitimate and connected to a real person. We all know that instinctively because we have all ignored emails that looked vague, generic, or slightly off. Yet research teams still end up using awkward workarounds to make outreach happen, especially when the recruitment system and the communication system do not play nicely together. That creates unnecessary friction on both sides. The participant gets less trustworthy communications, and the researcher gets more coordination work. Neither of those helps the study.</p><p>And in a world in which users are less likely to engage than ever, even small signs of friction or illegitimacy in the outreach process can lower response rates before the research even has a chance to start.</p><h1>Scheduling &amp; Incentives</h1><p>Another administrative task that eats away at our time is scheduling research. Real research scheduling is rarely as simple as finding an open hour on a calendar.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K4gP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K4gP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K4gP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K4gP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K4gP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K4gP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg" width="403" height="300.34352256186315" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:687,&quot;resizeWidth&quot;:403,&quot;bytes&quot;:121202,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/191696499?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K4gP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!K4gP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!K4gP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!K4gP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34b175ad-c4a8-4d9a-93a4-0124fb74c456_687x512.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>In my experience, you&#8217;ll likely be juggling these types of constraints:</p><ul><li><p>coordinating a participant, a moderator, a note taker, and multiple observers at the same time</p></li><li><p>limiting how many sessions can happen in a single day</p></li><li><p>building in buffers between interviews so moderators can reset</p></li><li><p>setting notice periods so nobody wakes up to a surprise session the next morning</p></li><li><p>protecting stakeholders from booking themselves into parts of the process they should only observe</p></li></ul><p>These things aren&#8217;t rare edge cases. This is what real research operations look like. When teams try to force research scheduling into generic workflows that were not built for those realities, they end up compensating with manual effort. That manual effort may look small in isolation, but across multiple studies it adds up fast.</p><p>This is the same with incentives. Incentives are one of those things that sound simple until you are the person managing them. Then suddenly you are checking attendance, verifying completion, making sure the right person gets the right amount, tracking who has already been sent something, and following up on exceptions. None of it is intellectually difficult, but all of it takes attention, and it creates yet another opportunity for error in a workflow that already has too many of them.</p><p>That matters because research quality is not only about how well you ask questions or how carefully you synthesize patterns. It is also about whether the operational side is stable enough that the researcher can stay focused on the study itself. Every extra tracking step pulls attention away from the work that actually requires judgment.</p><h1>Method Flexibility</h1><p>Most mature research teams use a mix of methods. In my opinion, that&#8217;s how it should be. Interviews, surveys, usability tests, diary studies, card sorts, and other methods all serve different purposes. The issue is not whether a team uses multiple methods. The issue is whether switching methods breaks the continuity of the study, and that is the part I see even experienced UXR&#8217;s miss.</p><p>Can the researcher keep the participant details, invites, reminders, session logistics, observers, recordings, and follow-up connected as they move between approaches? Or does every method change force the team to rebuild the operational side from scratch?</p><p>I&#8217;ve seen a lot of teams quietly accept that rebuilding is normal. In my experience, that is one of the clearest signals that the workflow is not serving the research.</p><h1>Chains of Evidence Have Momentum</h1><p>Recording and transcription are other places where this shows up in very obvious ways. A surprising number of teams still move evidence through a chain of disconnected steps. Record here. Download there. Upload somewhere else. Wait for a transcript. Move it again. Tag it later. Clip the useful moments once enough time has passed that half the context is already fading. Technically, that works, but in practice, it slows synthesis down and creates distance between the researcher and the evidence.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Em2s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Em2s!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Em2s!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Em2s!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Em2s!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Em2s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg" width="334" height="203.58908780903667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:715,&quot;width&quot;:1173,&quot;resizeWidth&quot;:334,&quot;bytes&quot;:221741,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/191696499?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Em2s!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Em2s!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Em2s!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Em2s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6eda43bc-da97-4d11-86c0-8ee832b1d1cb_1173x715.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>When notes, recordings, transcripts, highlights, and clips stay connected, the study remains alive while it is happening. Researchers can start noticing patterns earlier. They can pull supporting moments while the interviews are still fresh. They can move more naturally from observation to synthesis without having to perform three rounds of file management first.</p><p>That continuity matters because momentum matters. And this is the thing we researchers bring to the table. The ability to hold all of this user-centered context in our heads as we learn is what will be the key differentiator for our discipline moving forward.</p><div class="pullquote"><p>We all know that tech executives are looking to reduce headcount and replace many menial tasks with AI solutions. UX researchers are the human in the loop when it comes to orgs learning about users.</p></div><p>If we concentrate on making these hand-off points a way to carry human context through our development processes, we will have the ultimate level of job security.</p><h1>A Study is not A Single Deliverable</h1><p>This is the part I care about most and the main point of this week&#8217;s article. Too many UXers still act like the final report or readout <em>is</em> the study. Have you ever heard a team, after they get a polished presentation, say, &#8220;Great job, and the work effectively ends there? I know I have, and that has never made much sense to me.</p><p>A single study usually creates several layers of material, and those layers serve different purposes:</p><ul><li><p>the source data</p></li><li><p>the notes and transcripts</p></li><li><p>the tagged moments that start to show patterns</p></li><li><p>the individual clips that make a point visible</p></li><li><p>the highlight reel that helps tell the story quickly</p></li><li><p>the deeper report for people who need the full thinking</p></li><li><p>the presentation deck for stakeholders who need the version that travels well</p></li></ul><p>These are different ways of communicating findings from the same study, because we all know that more than half of our job is telling stories with data.</p><p>Different stakeholders need different kinds of evidence. Sometimes the raw data tells the story best. Other times, it is the synthesis wrapped in context. And some stakeholders do not really understand the issue until they see a short clip of a participant struggling through the workflow in real time. This is where strategic communication matters most. Good research communication is not about forcing every finding into one format. It is about preserving the connection between these layers so the study can do more than one job.</p><p>When those layers get separated from each other, the evidence weakens and the report becomes less reusable. Those powerful clips lose important context, and your readout deck becomes a snapshot in time that feels dated almost immediately after you deliver it. Then the final nail in the coffin is that the raw data disappears into storage, and the team moves on.</p><p>But when those layers stay connected, the opposite happens. Research becomes easier to revisit, easier to share, easier to adapt for different audiences, and much more likely to remain useful after the first presentation is over. This is the big idea. The hand-offs are the critical ops moment for strategic UXR workflows.</p><h1>What Good Looks Like</h1><p>Okay, so that was the bad news. Most research departments are not struggling because they lack methods, smart researchers, or one more feature in a tool. They are struggling because the process keeps breaking between steps.</p><div class="pullquote"><p>I think a lot of UXR teams get distracted by platform feature lists and software sales pages. They start comparing transcription, templates, repositories, incentives, dashboards, and all the other stuff vendors like to compare on a chart on a landing page filled with marketing speak.</p></div><p>Some of those features do matter a lot, but they are not the real standard we should be focusing on. The real standard is much simpler and much more important: does the workflow actually hold together in practice?</p><p>A good ResearchOps system is about connecting the building blocks that make up a cradle-to-grave research study. It keeps recruitment connected to outreach. It keeps outreach connected to scheduling. It keeps scheduling connected to sessions. It keeps sessions connected to evidence. It keeps evidence connected to synthesis. And it keeps synthesis connected to all the different outputs a study may need, instead of letting the work collapse into one static artifact that dies in a folder.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!p3Jy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!p3Jy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!p3Jy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!p3Jy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!p3Jy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!p3Jy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg" width="438" height="249.6931818181818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:602,&quot;width&quot;:1056,&quot;resizeWidth&quot;:438,&quot;bytes&quot;:70459,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/191696499?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!p3Jy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!p3Jy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!p3Jy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!p3Jy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2257e5b-dae9-4721-927e-508f21f1c616_1056x602.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>That is why I do not think researchers need more software; we just need less process fragmentation and a workflow that keeps the study connected from start to finish. This means everything from the raw data to the synthesized insight to the final stakeholder story. If those things stay tied together, you will inevitably reduce the administrative and cognitive drag, compromising your researchers.</p><p>When research turns into a chain of broken hand-offs, teams start losing the things that make the work useful in the first place: clarity, momentum, and time that should have been spent understanding users and helping the org make better decisions. From what I see in the real world, that is often what separates research that gets reused and remembered from research that gets presented once and then fades out over time.</p><h1>Checklist: How to Fix Broken Hand-Offs</h1><p>If you want to improve a research process in the real world, do not start by shopping for a new platform. Start by tracing where the study breaks.</p><p>The easiest way to do that is to follow one recent project from beginning to end and look for the moments where the researcher had to stop doing research and start managing the process instead. That is usually where the hand-off problem lives.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JQt1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JQt1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JQt1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JQt1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JQt1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JQt1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg" width="329" height="288.2940320232897" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:602,&quot;width&quot;:687,&quot;resizeWidth&quot;:329,&quot;bytes&quot;:97944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://trevorcalabro.substack.com/i/191696499?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!JQt1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JQt1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JQt1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JQt1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc18a128b-56d8-430e-9921-be73a6c0844b_687x602.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h3>Here is the checklist I would use:</h3><ul><li><p><strong>Map the full study lifecycle</strong></p><ul><li><p>Write out every step from recruitment to final readout.</p></li><li><p>Include where participant data comes from, how outreach happens, how sessions get scheduled, where recordings live, how transcripts get created, how incentives get tracked, and where findings get turned into deliverables.</p></li><li><p>If the team cannot map the process clearly, that is already a sign the workflow is too fragmented.</p></li></ul></li><li><p><strong>Mark every point where information has to move</strong></p><ul><li><p>Highlight every export, upload, copy-paste, spreadsheet update, file rename, manual reminder, and hand-entered status check.</p></li><li><p>These moments may look small, but they are often where time gets wasted and errors get introduced.</p></li></ul></li><li><p><strong>Look for duplicate effort</strong></p><ul><li><p>Ask where the same information gets recreated in multiple places.</p></li><li><p>Common examples are participant status, calendar details, attendance tracking, incentive logs, transcript files, and study metadata.</p></li><li><p>If the same fact has to be updated in two or three places, the process is fragile.</p></li></ul></li><li><p><strong>Notice where the researcher has to rely on memory</strong></p><ul><li><p>If the workflow depends on someone remembering who got paid, which participant rescheduled, where the latest transcript lives, or which clip matches which finding, the process is carrying too much invisible risk.</p></li><li><p>Good systems do not require researchers to hold the workflow together in their heads.</p></li></ul></li><li><p><strong>Find the steps that slow down momentum</strong></p><ul><li><p>Ask where the study loses energy.</p></li><li><p>Does it stall between interview and transcript?</p></li><li><p>Does synthesis get delayed because files need to be cleaned up first?</p></li><li><p>Does reporting take longer because the clips, notes, and evidence are no longer connected?</p></li><li><p>Wherever momentum drops, the hand-off probably needs work.</p></li></ul></li><li><p><strong>Separate high-judgment work from low-value admin</strong></p><ul><li><p>Be honest about which steps actually require research skills and which ones are just operational maintenance.</p></li><li><p>Moderating an interview requires judgment.</p></li><li><p>Deciding what evidence supports a finding requires judgment.</p></li><li><p>Re-entering attendance into a tracking sheet does not.</p></li><li><p>Broken hand-offs usually show up where too much researcher time is being spent on low-value coordination work.</p></li></ul></li><li><p><strong>Check whether each output stays connected to the evidence</strong></p><ul><li><p>Look at the final deliverables and ask whether they still point back to the source material.</p></li><li><p>Can someone move from the deck to the clip, from the clip to the transcript, and from the transcript to the original study context?</p></li><li><p>If not, the study is already starting to decay the moment it gets shared.</p></li></ul></li><li><p><strong>Fix the highest-friction hand-off first</strong></p><ul><li><p>Do not try to redesign the whole process at once.</p></li><li><p>Pick the one transition that causes the most wasted time, confusion, or risk.</p></li><li><p>In some teams, the recruitment will be for outreach.</p></li><li><p>In others, it will be sessions to evidence, or evidence to synthesis.</p></li><li><p>Start where the pain is most visible and most repeated.</p></li></ul></li><li><p><strong>Use process fixes before platform fixes</strong></p><ul><li><p>Sometimes the answer is a tool change, but often the first improvement is simpler than that.</p></li><li><p>Standardize naming conventions.</p></li><li><p>Create one source of truth for participant status.</p></li><li><p>Define who owns incentive tracking.</p></li><li><p>Set rules for where recordings, transcripts, and clips live.</p></li><li><p>Add a clear hand-off owner for each step so the process does not become everyone&#8217;s responsibility and no one&#8217;s responsibility at the same time.</p></li></ul></li><li><p><strong>Measure whether the fix actually worked</strong></p><ul><li><p>After you change a hand-off, look for real signs of improvement.</p></li><li><p>Did scheduling take less time?</p></li><li><p>Did researchers spend less effort tracking logistics?</p></li><li><p>Did synthesis start sooner?</p></li><li><p>Were findings easier to reuse later?</p></li><li><p>If the fix did not reduce friction in practice, it was not really a fix.</p></li></ul></li></ul><p>In my experience, this kind of audit is where a lot of teams uncover the truth about their process.</p><h1>Conclusion</h1><p>My main point is that a lot of UX research pain does not come from weak methods, underqualified researchers, or a lack of enough software solutions. It comes from the spaces between steps, where the study gets handed from one system, one format, or one person to the next and loses continuity along the way. That is why I think hand-offs deserve a lot more attention than they usually get. And a more strategic research process is what will make your team&#8217;s work easier to trust, easier to reuse, and much more likely to influence decisions over time.</p><p>So if your team is feeling buried in admin, struggling to keep momentum, or watching good research disappear after the deck gets presented, I would not start by asking whether you need more tools. I would start by asking where the hand-offs are breaking. From what I have seen, that question usually gets you much closer to the real problem, and a lot closer to a process that actually supports the work.</p><p>Have you seen UXR teams treat hand-offs like an afterthought instead of recognizing how much they shape the quality, speed, and usefulness of the work? If so, comment here or DM me. I&#8217;d love to hear where you&#8217;ve seen broken hand-offs show up in real-world research processes. As always, thanks for reading!</p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://trevorcalabro.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">UX Research in the Wild is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item></channel></rss>