<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Guides on Smashing Magazine — For Web Designers And Developers</title><link>https://www.smashingmagazine.com/category/guides/index.xml</link><description>Recent content in Guides on Smashing Magazine — For Web Designers And Developers</description><generator>Hugo -- gohugo.io</generator><language>en-us</language><lastBuildDate>Mon, 09 Feb 2026 03:03:08 +0000</lastBuildDate><item><author>Victor Yocco</author><title>The Psychology Of Trust In AI: A Guide To Measuring And Designing For User Confidence</title><link>https://www.smashingmagazine.com/2025/09/psychology-trust-ai-guide-measuring-designing-user-confidence/</link><pubDate>Fri, 19 Sep 2025 10:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2025/09/psychology-trust-ai-guide-measuring-designing-user-confidence/</guid><description>When AI “hallucinates,” it’s more than just a glitch — it’s a collapse of trust. As generative AI becomes part of more digital products, trust has become the invisible user interface. But trust isn’t mystical. It can be understood, measured, and designed for. Here is a practical guide for designing more trustworthy and ethical AI systems.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2025/09/psychology-trust-ai-guide-measuring-designing-user-confidence/" />
              <title>The Psychology Of Trust In AI: A Guide To Measuring And Designing For User Confidence</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>The Psychology Of Trust In AI: A Guide To Measuring And Designing For User Confidence</h1>
                  
                    
                    <address>Victor Yocco</address>
                  
                  <time datetime="2025-09-19T10:00:00&#43;00:00" class="op-published">2025-09-19T10:00:00+00:00</time>
                  <time datetime="2025-09-19T10:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Misuse and misplaced trust of AI is becoming an unfortunate <a href="https://www.damiencharlotin.com/hallucinations/">common event</a>. For example, lawyers trying to leverage the power of generative AI for research submit court filings citing multiple compelling legal precedents. The problem? The AI had confidently, eloquently, and completely fabricated the cases cited. The resulting sanctions and public embarrassment can become <a href="https://www.lawnext.com/2025/05/ai-hallucinations-strike-again-two-more-cases-where-lawyers-face-judicial-wrath-for-fake-citations.html">a viral cautionary tale</a>, shared across social media as a stark example of AI’s fallibility.</p>

<p>This goes beyond a technical glitch; it’s a catastrophic <strong>failure of trust in AI tools</strong> in an industry where accuracy and trust are critical. The trust issue here is twofold &mdash; the law firms are submitting briefs in which they have blindly over-trusted the AI tool to return accurate information. The subsequent fallout can lead to a strong distrust in AI tools, to the point where platforms featuring AI might not be considered for use until trust is reestablished.</p>

<p>Issues with trusting AI aren’t limited to the legal field. We are seeing the impact of fictional AI-generated information in critical fields such as <a href="https://apnews.com/article/ai-artificial-intelligence-health-business-90020cdf5fa16c79ca2e5b6c4c9bbb14">healthcare</a> and <a href="https://mitsloanedtech.mit.edu/ai/basics/addressing-ai-hallucinations-and-bias/">education</a>. On a more personal scale, many of us have had the experience of asking Siri or Alexa to perform a task, only to have it done incorrectly or not at all, for no apparent reason. I’m guilty of sending more than one out-of-context hands-free text to an unsuspecting contact after Siri mistakenly pulls up a completely different name than the one I’d requested.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/1-siri-confuse-recipient-message.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="410"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/1-siri-confuse-recipient-message.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/1-siri-confuse-recipient-message.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/1-siri-confuse-recipient-message.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/1-siri-confuse-recipient-message.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/1-siri-confuse-recipient-message.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/1-siri-confuse-recipient-message.png"
			
			sizes="100vw"
			alt="Cartoon illustration split into two panels. On the left, a man in a blue hoodie speaks into his phone, saying, “Siri, text Dave, I’m waiting outside of your door.” On the right, a cheerful cartoon phone with a face and arms replies, “I have just texted Martha, I am standing outside of your door.”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 1: Siri and Alexa often tend to confuse the recipient of my message, causing me to distrust using them when accuracy matters. Image generated using Gemini Pro. (<a href='https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/1-siri-confuse-recipient-message.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>With digital products moving to incorporate generative and agentic AI at an increasingly frequent rate, <strong>trust has become the invisible user interface</strong>. When it works, our interactions are seamless and powerful. When it breaks, the entire experience collapses, with potentially devastating consequences. As UX professionals, we’re on the front lines of a new twist on a common challenge. How do we build products that users can rely on? And how do we even begin to measure something as ephemeral as trust in AI?</p>

<p>Trust isn’t a mystical quality. It is a psychological construct built on predictable factors. I won’t dive deep into academic literature on trust in this article. However, it is important to understand that trust is a concept that can be <strong>understood</strong>, <strong>measured</strong>, and <strong>designed for</strong>. This article will provide a <strong>practical guide</strong> for UX researchers and designers. We will briefly explore the psychological anatomy of trust, offer concrete methods for measuring it, and provide actionable strategies for designing more trustworthy and ethical AI systems.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="https://www.smashingconf.com/online-workshops/">Smashing Workshops</a></strong> on <strong>front-end, design &amp; UX</strong>, with practical takeaways, live sessions, <strong>video recordings</strong> and a friendly Q&amp;A. With Brad Frost, Stéph Walter and <a href="https://smashingconf.com/online-workshops/workshops">so many others</a>.</p>
<a data-instant href="smashing-workshops" class="btn btn--green btn--large" style="">Jump to the workshops&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="smashing-workshops" class="feature-panel-image-link">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-scubadiving-panel.svg"
    alt="Feature Panel"
    width="257"
    height="355"
/>

</div>
</a>
</div>
</aside>
</div>

<h2 id="the-anatomy-of-trust-a-psychological-framework-for-ai">The Anatomy of Trust: A Psychological Framework for AI</h2>

<p>To build trust, we must first understand its components. Think of trust like a four-legged stool. If any one leg is weak, the whole thing becomes unstable. Based on classic <a href="https://pmc.ncbi.nlm.nih.gov/articles/PMC10083508/#:~:text=The%20model%20of%20interpersonal%20trust,in%20human%20interpersonal%20trust%20development.">psychological models</a>, we can adapt these “legs” for the AI context.</p>

<h3 id="1-ability-or-competence">1. Ability (or Competence)</h3>

<p>This is the most straightforward pillar: Does the AI have the <strong>skills</strong> to perform its function accurately and effectively? If a weather app is consistently wrong, you stop trusting it. If an AI legal assistant creates fictitious cases, it has failed the basic test of ability. This is the functional, foundational layer of trust.</p>

<h3 id="2-benevolence">2. Benevolence</h3>

<p>This moves from function to <strong>intent</strong>. Does the user believe the AI is acting in their best interest? A GPS that suggests a toll-free route even if it’s a few minutes longer might be perceived as benevolent. Conversely, an AI that aggressively pushes sponsored products feels self-serving, eroding this sense of benevolence. This is where user fears, such as concerns about job displacement, directly challenge trust—the user starts to believe the AI is not on their side.</p>

<h3 id="3-integrity">3. Integrity</h3>

<p>Does AI operate on predictable and ethical principles? This is about <strong>transparency</strong>, <strong>fairness</strong>, and <strong>honesty</strong>. An AI that clearly states how it uses personal data demonstrates integrity. A system that quietly changes its terms of service or uses dark patterns to get users to agree to something violates integrity. An AI job recruiting tool that has subtle yet extremely harmful social biases, existing in the algorithm, violates integrity.</p>

<h3 id="4-predictability-reliability">4. Predictability &amp; Reliability</h3>

<p>Can the user form a <strong>stable and accurate mental model</strong> of how the AI will behave? Unpredictability, even if the outcomes are occasionally good, creates anxiety. A user needs to know, roughly, what to expect. An AI that gives a radically different answer to the same question asked twice is unpredictable and, therefore, hard to trust.</p>

<h2 id="the-trust-spectrum-the-goal-of-a-well-calibrated-relationship">The Trust Spectrum: The Goal of a Well-Calibrated Relationship</h2>

<p>Our goal as UX professionals shouldn’t be to maximize trust at all costs. An employee who blindly trusts every email they receive is a security risk. Likewise, a user who blindly trusts every AI output can be led into dangerous situations, such as the legal briefs referenced at the beginning of this article. The goal is <em>well-calibrated</em> trust.</p>

<p>Think of it as a spectrum where the upper-mid level is the ideal state for a truly trustworthy product to achieve:</p>

<ul>
<li><strong>Active Distrust</strong><br />
The user believes the AI is incompetent or malicious. They will avoid it or actively work against it.</li>
<li><strong>Suspicion &amp; Scrutiny</strong><br />
The user interacts cautiously, constantly verifying the AI’s outputs. This is a common and often healthy state for users of new AI.</li>
<li><strong>Calibrated Trust (The Ideal State)</strong><br />
This is the sweet spot. The user has an accurate understanding of the AI’s capabilities—its strengths and, crucially, its weaknesses. They know when to rely on it and when to be skeptical.</li>
<li><strong>Over-trust &amp; Automation Bias</strong><br />
The user unquestioningly accepts the AI’s outputs. This is where users follow flawed AI navigation into a field or accept a fictional legal brief as fact.</li>
</ul>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aOur%20job%20is%20to%20design%20experiences%20that%20guide%20users%20away%20from%20the%20dangerous%20poles%20of%20Active%20Distrust%20and%20Over-trust%20and%20toward%20that%20healthy,%20realistic%20middle%20ground%20of%20Calibrated%20Trust.%0a&url=https://smashingmagazine.com%2f2025%2f09%2fpsychology-trust-ai-guide-measuring-designing-user-confidence%2f">
      
Our job is to design experiences that guide users away from the dangerous poles of Active Distrust and Over-trust and toward that healthy, realistic middle ground of Calibrated Trust.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/2-trust-spectrum.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="307"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/2-trust-spectrum.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/2-trust-spectrum.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/2-trust-spectrum.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/2-trust-spectrum.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/2-trust-spectrum.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/2-trust-spectrum.png"
			
			sizes="100vw"
			alt="The trust spectrum"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 2: Build user trust in your AI product, avoiding both distrust and over-reliance. Image generated using Gemini Pro. (<a href='https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/2-trust-spectrum.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="the-researcher-s-toolkit-how-to-measure-trust-in-ai">The Researcher’s Toolkit: How to Measure Trust In AI</h2>

<p>Trust feels abstract, but it leaves measurable fingerprints. Academics in the social sciences have done much to define both what trust looks like and how it might be measured. As researchers, we can capture these signals through a mix of <strong>qualitative</strong>, <strong>quantitative</strong>, and <strong>behavioral</strong> methods.</p>

<h3 id="qualitative-probes-listening-for-the-language-of-trust">Qualitative Probes: Listening For The Language Of Trust</h3>

<p>During interviews and usability tests, go beyond <em>“Was that easy to use?”</em> and listen for the underlying psychology. Here are some questions you can start using tomorrow:</p>

<ul>
<li><strong>To measure Ability:</strong><br />
<em>“Tell me about a time this tool’s performance surprised you, either positively or negatively.”</em></li>
<li><strong>To measure Benevolence:</strong><br />
<em>“Do you feel this system is on your side? What gives you that impression?”</em></li>
<li><strong>To measure Integrity:</strong><br />
<em>“If this AI made a mistake, how would you expect it to handle it? What would be a fair response?”</em></li>
<li><strong>To measure Predictability:</strong><br />
<em>“Before you clicked that button, what did you expect the AI to do? How closely did it match your expectation?”</em></li>
</ul>

<h3 id="investigating-existential-fears-the-job-displacement-scenario">Investigating Existential Fears (The Job Displacement Scenario)</h3>

<p>One of the most potent challenges to an AI’s Benevolence is the fear of job displacement. When a participant expresses this, it is a critical research finding. It requires a specific, ethical probing technique.</p>

<p>Imagine a participant says, <em>“Wow, it does that part of my job pretty well. I guess I should be worried.”</em></p>

<p>An untrained researcher might get defensive or dismiss the comment. An ethical, trained researcher validates and explores:</p>

<blockquote>“Thank you for sharing that; it’s a vital perspective, and it’s exactly the kind of feedback we need to hear. Can you tell me more about what aspects of this tool make you feel that way? In an ideal world, how would a tool like this work <strong>with</strong> you to make your job better, not to replace it?”</blockquote>

<p>This approach respects the participant, validates their concern, and reframes the feedback into an actionable insight about designing a collaborative, augmenting tool rather than a replacement. Similarly, your findings should reflect the concern users expressed about replacement. We shouldn’t pretend this fear doesn’t exist, nor should we pretend that every AI feature is being implemented with pure intention. Users know better than that, and we should be prepared to argue on their behalf for how the technology might best co-exist within their roles.</p>

<h3 id="quantitative-measures-putting-a-number-on-confidence">Quantitative Measures: Putting A Number On Confidence</h3>

<p>You can quantify trust without needing a data science degree. After a user completes a task with an AI, supplement your standard usability questions with a few simple Likert-scale items:</p>

<ul>
<li><em>“The AI’s suggestion was reliable.”</em> (1-7, Strongly Disagree to Strongly Agree)</li>
<li><em>“I am confident in the AI’s output.”</em> (1-7)</li>
<li><em>“I understood why the AI made that recommendation.”</em> (1-7)</li>
<li><em>“The AI responded in a way that I expected.”</em> (1-7)</li>
<li><em>“The AI provided consistent responses over time.”</em> (1-7)</li>
</ul>

<p>Over time, these metrics can track how trust is changing as your product evolves.</p>

<p><strong>Note</strong>: <em>If you want to go beyond these simple questions that I’ve made up, there are numerous scales (measurements) of trust in technology that exist in academic literature. It might be an interesting endeavor to measure some relevant psychographic and demographic characteristics of your users and see how that correlates with trust in AI/your product. <a href="#table-1-published-academic-scales-measuring-trust-in-automated-systems">Table 1 at the end of the article</a> contains four examples of current scales you might consider using to measure trust. You can decide which is best for your application, or you might pull some of the items from any of the scales if you aren’t looking to publish your findings in an academic journal, yet want to use items that have been subjected to some level of empirical scrutiny.</em></p>

<h3 id="behavioral-metrics-observing-what-users-do-not-just-what-they-say">Behavioral Metrics: Observing What Users Do, Not Just What They Say</h3>

<p>People’s true feelings are often revealed in their actions. You can use behaviors that reflect the specific context of use for your product. Here are a few general metrics that might apply to most AI tools that give insight into users’ behavior and the trust they place in your tool.</p>

<ul>
<li><strong>Correction Rate</strong><br />
How often do users manually edit, undo, or ignore the AI’s output? A high correction rate is a powerful signal of low trust in its Ability.</li>
<li><strong>Verification Behavior</strong><br />
Do users switch to Google or open another application to double-check the AI’s work? This indicates they don’t trust it as a standalone source of truth. It can also potentially be positive that they are calibrating their trust in the system when they use it up front.</li>
<li><strong>Disengagement</strong><br />
Do users turn the AI feature off? Do they stop using it entirely after one bad experience? This is the ultimate behavioral vote of no confidence.</li>
</ul>

<div class="partners__lead-place"></div>

<h2 id="designing-for-trust-from-principles-to-pixels">Designing For Trust: From Principles to Pixels</h2>

<p>Once you’ve researched and measured trust, you can begin to design for it. This means translating psychological principles into tangible interface elements and user flows.</p>

<h3 id="designing-for-competence-and-predictability">Designing for Competence and Predictability</h3>

<ul>
<li><strong>Set Clear Expectations</strong><br />
Use onboarding, tooltips, and empty states to honestly communicate what the AI is good at and where it might struggle. A simple <em>“I’m still learning about [topic X], so please double-check my answers”</em> can work wonders.</li>
<li><strong>Show Confidence Levels</strong><br />
Instead of just giving an answer, have the AI signal its own uncertainty. A weather app that says <em>“70% chance of rain”</em> is more trustworthy than one that just says <em>“It will rain”</em> and is wrong. An AI could say, <em>“I’m 85% confident in this summary,”</em> or highlight sentences it’s less sure about.</li>
</ul>

<h3 id="the-role-of-explainability-xai-and-transparency">The Role of Explainability (XAI) and Transparency</h3>

<p>Explainability isn’t about showing users the code. It’s about providing a <em>useful, human-understandable rationale</em> for a decision.</p>

<blockquote><strong>Instead of:</strong><br />“Here is your recommendation.”<br /><br /><strong>Try:</strong><br />“Because you frequently read articles about UX research methods, I’m recommending this new piece on measuring trust in AI.”</blockquote>

<p>This addition transforms AI from an opaque oracle to a transparent logical partner.</p>

<p>Many of the popular AI tools (e.g., ChatGPT and Gemini) show the thinking that went into the response they provide to a user. Figure 3 shows the steps Gemini went through to provide me with a non-response when I asked it to help me generate the masterpiece displayed above in Figure 2. While this might be more information than most users care to see, it provides a useful resource for a user to audit how the response came to be, and it has provided me with instructions on how I might proceed to address my task.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/3-gemini-explains-response.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="740"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/3-gemini-explains-response.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/3-gemini-explains-response.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/3-gemini-explains-response.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/3-gemini-explains-response.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/3-gemini-explains-response.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/3-gemini-explains-response.png"
			
			sizes="100vw"
			alt="Gemini explains its process and why it can’t complete a task"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 3: Gemini shows its process and why it can’t complete a task I’ve asked it to perform. Smartly, it suggests an alternative way to achieve what I’ve requested. (<a href='https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/3-gemini-explains-response.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Figure 4 shows an example of a <a href="https://openai.com/index/gpt-4o-system-card/">scorecard</a> OpenAI makes available as an attempt to increase users’ trust. These scorecards are available for each ChatGPT model and go into the specifics of how the models perform as it relates to key areas such as hallucinations, health-based conversations, and much more. In reading the scorecards closely, you will see that no AI model is perfect in any area. The user must remain in a trust but verify mode to make the relationship between human reality and AI work in a way that avoids potential catastrophe. There should never be blind trust in an LLM.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/4-openai-scorecard-gpt-4o.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="363"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/4-openai-scorecard-gpt-4o.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/4-openai-scorecard-gpt-4o.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/4-openai-scorecard-gpt-4o.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/4-openai-scorecard-gpt-4o.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/4-openai-scorecard-gpt-4o.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/4-openai-scorecard-gpt-4o.png"
			
			sizes="100vw"
			alt="Example of OpenAI scorecard for GPT-4o"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 4: Example of OpenAI scorecard for GPT-4o. (<a href='https://files.smashing.media/articles/psychology-trust-ai-guide-measuring-designing-user-confidence/4-openai-scorecard-gpt-4o.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="designing-for-trust-repair-graceful-error-handling-and-not-knowing-an-answer">Designing For Trust Repair (Graceful Error Handling) And Not Knowing an Answer</h3>

<p>Your AI will make mistakes.</p>

<blockquote>Trust is not determined by the absence of errors, but by how those errors are handled.</blockquote>

<ul>
<li><strong>Acknowledge Errors Humbly.</strong><br />
When the AI is wrong, it should be able to state that clearly. <em>“My apologies, I misunderstood that request. Could you please rephrase it?”</em> is far better than silence or a nonsensical answer.</li>
<li><strong>Provide an Easy Path to Correction.</strong><br />
Make feedback mechanisms (like thumbs up/down or a correction box) obvious. More importantly, show that the feedback is being used. A <em>“Thank you, I’m learning from your correction”</em> can help rebuild trust after a failure. As long as this is true.</li>
</ul>

<p>Likewise, your AI can’t know everything. You should acknowledge this to your users.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aUX%20practitioners%20should%20work%20with%20the%20product%20team%20to%20ensure%20that%20honesty%20about%20limitations%20is%20a%20core%20product%20principle.%0a&url=https://smashingmagazine.com%2f2025%2f09%2fpsychology-trust-ai-guide-measuring-designing-user-confidence%2f">
      
UX practitioners should work with the product team to ensure that honesty about limitations is a core product principle.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>This can include the following:</p>

<ul>
<li><strong>Establish User-Centric Metrics:</strong> Instead of only measuring engagement or task completion, UXers can work with product managers to define and track metrics like:

<ul>
<li><strong>Hallucination Rate:</strong> The frequency with which the AI provides verifiably false information.</li>
<li><strong>Successful Fallback Rate:</strong> How often the AI correctly identifies its inability to answer and provides a helpful, honest alternative.</li>
</ul></li>
<li><strong>Prioritize the “I Don’t Know” Experience:</strong> UXers should frame the “I don’t know” response not as an error state, but as a critical feature. They must lobby for the engineering and content resources needed to design a high-quality, helpful fallback experience.</li>
</ul>

<h2 id="ux-writing-and-trust">UX Writing And Trust</h2>

<p>All of these considerations highlight the critical role of <a href="https://lmsanchez.medium.com/what-is-ux-writing-1eb71b0f0606">UX writing</a> in the development of trustworthy AI. UX writers are the architects of the AI’s voice and tone, ensuring that its communication is clear, honest, and empathetic. They translate complex technical processes into user-friendly explanations, craft helpful error messages, and design conversational flows that build confidence and rapport. Without <strong>thoughtful UX writing</strong>, even the most technologically advanced AI can feel opaque and untrustworthy.</p>

<p>The words and phrases an AI uses are its primary interface with users. UX writers are uniquely positioned to shape this interaction, ensuring that every tooltip, prompt, and response contributes to a positive and trust-building experience. Their expertise in <strong>human-centered language and design</strong> is indispensable for creating AI systems that not only perform well but also earn and maintain the trust of their users.</p>

<p>A few key areas for UX writers to focus on when writing for AI include:</p>

<ul>
<li><strong>Prioritize Transparency</strong><br />
Clearly communicate the AI’s capabilities and limitations, especially when it’s still learning or if its responses are generated rather than factual. Use phrases that indicate the AI’s nature, such as <em>“As an AI, I can&hellip;”</em> or <em>“This is a generated response.”</em></li>
<li><strong>Design for Explainability</strong><br />
When the AI provides a recommendation, decision, or complex output, strive to explain the reasoning behind it in an understandable way. This builds trust by showing the user how the AI arrived at its conclusion.</li>
<li><strong>Emphasize User Control</strong><br />
Empower users by providing clear ways to provide feedback, correct errors, or opt out of certain AI features. This reinforces the idea that the user is in control and the AI is a tool to assist them.</li>
</ul>

<h2 id="the-ethical-tightrope-the-researcher-s-responsibility">The Ethical Tightrope: The Researcher’s Responsibility</h2>

<p>As the people responsible for understanding and advocating for users, we walk an ethical tightrope. Our work comes with profound responsibilities.</p>

<h3 id="the-danger-of-trustwashing">The Danger Of “Trustwashing”</h3>

<p>We must draw a hard line between designing for <em>calibrated trust</em> and designing to <em>manipulate</em> users into trusting a flawed, biased, or harmful system. For example, if an AI system designed for loan approvals consistently discriminates against certain demographics but presents a user interface that implies fairness and transparency, this would be an instance of trustwashing.</p>

<p>Another example of trustwashing would be if an AI medical diagnostic tool occasionally misdiagnoses conditions, but the user interface makes it seem infallible. To avoid trustwashing, the system should clearly communicate the potential for error and the need for human oversight.</p>

<p>Our goal must be to create genuinely trustworthy systems, not just the perception of trust. Using these principles to lull users into a false sense of security is a betrayal of our professional ethics.</p>

<p><strong>To avoid and prevent trustwashing, researchers and UX teams should:</strong></p>

<ul>
<li><strong>Prioritize genuine transparency.</strong><br />
Clearly communicate the limitations, biases, and uncertainties of AI systems. Don’t overstate capabilities or obscure potential risks.</li>
<li><strong>Conduct rigorous, independent evaluations.</strong><br />
Go beyond internal testing and seek external validation of system performance, fairness, and robustness.</li>
<li><strong>Engage with diverse stakeholders.</strong><br />
Involve users, ethics experts, and impacted communities in the design, development, and evaluation processes to identify potential harms and build genuine trust.</li>
<li><strong>Be accountable for outcomes.</strong><br />
Take responsibility for the societal impact of AI systems, even if unintended. Establish mechanisms for redress and continuous improvement.</li>
<li><strong>Be accountable for outcomes.</strong><br />
Establish clear and accessible mechanisms for redress when harm occurs, ensuring that individuals and communities affected by AI decisions have avenues for recourse and compensation.</li>
<li><strong>Educate the public.</strong><br />
Help users understand how AI works, its limitations, and what to look for when evaluating AI products.</li>
<li><strong>Advocate for ethical guidelines and regulations.</strong><br />
Support the development and implementation of industry standards and policies that promote responsible AI development and prevent deceptive practices.</li>
<li><strong>Be wary of marketing hype.</strong><br />
Critically assess claims made about AI systems, especially those that emphasize “trustworthiness” without clear evidence or detailed explanations.</li>
<li><strong>Publish negative findings.</strong><br />
Don’t shy away from reporting challenges, failures, or ethical dilemmas encountered during research. Transparency about limitations is crucial for building long-term trust.</li>
<li><strong>Focus on user empowerment.</strong><br />
Design systems that give users control, agency, and understanding rather than just passively accepting AI outputs.</li>
</ul>

<h4 id="the-duty-to-advocate">The Duty To Advocate</h4>

<p>When our research uncovers deep-seated distrust or potential harm &mdash; like the fear of job displacement &mdash; our job has only just begun. We have an ethical duty to advocate for that user. In my experience directing research teams, I’ve seen that the hardest part of our job is often carrying these uncomfortable truths into rooms where decisions are made. We must champion these findings and advocate for <strong>design and strategy shifts that prioritize user well-being, even when it challenges the product roadmap</strong>.</p>

<p>I personally try to approach presenting this information as an opportunity for growth and improvement, rather than a negative challenge.</p>

<p>For example, instead of stating <em>“Users don’t trust our AI because they fear job displacement,”</em> I might frame it as <em>“Addressing user concerns about job displacement presents a significant opportunity to build deeper trust and long-term loyalty by demonstrating our commitment to responsible AI development and exploring features that enhance human capabilities rather than replace them.”</em> This reframing can shift the conversation from a defensive posture to a proactive, problem-solving mindset, encouraging collaboration and innovative solutions that ultimately benefit both the user and the business.</p>

<p>It’s no secret that one of the more appealing areas for businesses to use AI is in workforce reduction. In reality, there will be many cases where businesses look to cut 10&ndash;20% of a particular job family due to the perceived efficiency gains of AI. However, giving users the opportunity to shape the product may steer it in a direction that makes them <strong>feel safer</strong> than if they do not provide feedback. We should not attempt to convince users they are wrong if they are distrustful of AI. We should appreciate that they are willing to provide feedback, creating an experience that is informed by the human experts who have long been doing the task being automated.</p>

<div class="partners__lead-place"></div>

<h2 id="conclusion-building-our-digital-future-on-a-foundation-of-trust">Conclusion: Building Our Digital Future On A Foundation Of Trust</h2>

<p>The rise of AI is not the first major technological shift our field has faced. However, it presents one of the most significant psychological challenges of our current time. Building products that are not just usable but also <strong>responsible</strong>, <strong>humane</strong>, and <strong>trustworthy</strong> is our obligation as UX professionals.</p>

<p><strong>Trust is not a soft metric.</strong> It is the fundamental currency of any successful human-technology relationship. By understanding its psychological roots, measuring it with rigor, and designing for it with intent and integrity, we can move from creating “intelligent” products to building a future where users can place their confidence in the tools they use every day. A trust that is earned and deserved.</p>

<h3 id="table-1-published-academic-scales-measuring-trust-in-automated-systems">Table 1: Published Academic Scales Measuring Trust In Automated Systems</h3>

<table class="tablesaw break-out">
    <thead>
        <tr>
            <th>Survey Tool Name</th>
            <th>Focus</th>
      <th>Key Dimensions of Trust</th>
      <th>Citation</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td>Trust in Automation Scale</td>
            <td>12-item questionnaire to assess trust between people and automated systems.</td>
      <td>Measures a general level of trust, including reliability, predictability, and confidence.</td>
      <td>Jian, J. Y., Bisantz, A. M., & Drury, C. G. (2000). <a href="https://www.researchgate.net/publication/247502831_Foundations_for_an_Empirically_Determined_Scale_of_Trust_in_Automated_Systems">Foundations for an empirically determined scale of trust in automated systems</a>. International Journal of Cognitive Ergonomics, 4(1), 53–71.</td>
        </tr>
        <tr>
            <td>Trust of Automated Systems Test (TOAST)</td>
            <td>9-items used to measure user trust in a variety of automated systems, designed for quick administration.</td>
      <td>Divided into two main subscales: Understanding (user’s comprehension of the system) and Performance (belief in the system’s effectiveness).</td>
      <td>Wojton, H. M., Porter, D., Lane, S. T., Bieber, C., & Madhavan, P. (2020). <a href="https://research.testscience.org/post/2019-initial-validation-of-the-trust-of-automated-systems-test-toast/paper.pdf">Initial validation of the trust of automated systems test (TOAST)</a>. (PDF) The Journal of Social Psychology, 160(6), 735–750.</td>
        </tr>
        <tr>
            <td>Trust in Automation Questionnaire</td>
            <td>A 19-item questionnaire capable of predicting user reliance on automated systems. A 2-item subscale is available for quick assessments; the full tool is recommended for a more thorough analysis.</td>
      <td>Measures 6 factors: Reliability, Understandability, Propensity to trust, Intentions of developers, Familiarity, Trust in automation</td>
      <td>Körber, M. (2018). <a href="https://www.researchgate.net/publication/323611886_Theoretical_considerations_and_development_of_a_questionnaire_to_measure_trust_in_automation">Theoretical considerations and development of a questionnaire to measure trust in automation</a>. In Proceedings 20th Triennial Congress of the IEA. Springer.</td>
        </tr>
    <tr>
            <td>Human Computer Trust Scale</td>
            <td>12-item questionnaire created to provide an empirically sound tool for assessing user trust in technology.</td>
      <td>Divided into two key factors:<ol><li><strong>Benevolence and Competence</strong>: This dimension captures the positive attributes of the technology</li><li><strong>Perceived Risk</strong>: This factor measures the user’s subjective assessment of the potential for negative consequences when using a technical artifact.</li></ol></td>
      <td>Siddharth Gulati, Sonia Sousa & David Lamas (2019): <a href="https://www.researchgate.net/profile/Sonia-Sousa-9/publication/335667672_Towards_an_empirically_developed_scale_for_measuring_trust/links/5f6f36d7458515b7cf508e88/Towards-an-empirically-developed-scale-for-measuring-trust.pdf">Design, development and evaluation of a human-computer trust scale</a>, (PDF) Behaviour & Information Technology</td>
        </tr>
    </tbody>
</table>

<h3 id="appendix-a-trust-building-tactics-checklist">Appendix A: Trust-Building Tactics Checklist</h3>

<p>To design for calibrated trust, consider implementing the following tactics, organized by the four pillars of trust:</p>

<h4 id="1-ability-competence-predictability">1. Ability (Competence) &amp; Predictability</h4>

<ul>
<li>✅ <strong>Set Clear Expectations:</strong> Use onboarding, tooltips, and empty states to honestly communicate the AI’s strengths and weaknesses.</li>
<li>✅ <strong>Show Confidence Levels:</strong> Display the AI’s uncertainty (e.g., “70% chance,” “85% confident”) or highlight less certain parts of its output.</li>
<li>✅ <strong>Provide Explainability (XAI):</strong> Offer useful, human-understandable rationales for the AI’s decisions or recommendations (e.g., “Because you frequently read X, I’m recommending Y”).</li>
<li>✅ <strong>Design for Graceful Error Handling:</strong>

<ul>
<li>✅ Acknowledge errors humbly (e.g., “My apologies, I misunderstood that request.”).</li>
<li>✅ Provide easy paths to correction (e. ] g., prominent feedback mechanisms like thumbs up/down).</li>
<li>✅ Show that feedback is being used (e.g., “Thank you, I’m learning from your correction”).</li>
</ul></li>
<li>✅ <strong>Design for “I Don’t Know” Responses:</strong>

<ul>
<li>✅ Acknowledge limitations honestly.</li>
<li>✅ Prioritize a high-quality, helpful fallback experience when the AI cannot answer.</li>
</ul></li>
<li>✅ <strong>Prioritize Transparency:</strong> Clearly communicate the AI’s capabilities and limitations, especially if responses are generated.</li>
</ul>

<h4 id="2-benevolence-1">2. Benevolence</h4>

<ul>
<li>✅ <strong>Address Existential Fears:</strong> When users express concerns (e.g., job displacement), validate their concerns and reframe the feedback into actionable insights about collaborative tools.</li>
<li>✅ <strong>Prioritize User Well-being:</strong> Advocate for design and strategy shifts that prioritize user well-being, even if it challenges the product roadmap.</li>
<li>✅ <strong>Emphasize User Control:</strong> Provide clear ways for users to give feedback, correct errors, or opt out of AI features.</li>
</ul>

<h4 id="3-integrity-1">3. Integrity</h4>

<ul>
<li>✅ <strong>Adhere to Ethical Principles:</strong> Ensure the AI operates on predictable, ethical principles, demonstrating fairness and honesty.</li>
<li>✅ <strong>Prioritize Genuine Transparency:</strong> Clearly communicate the limitations, biases, and uncertainties of AI systems; avoid overstating capabilities or obscuring risks.</li>
<li>✅ <strong>Conduct Rigorous, Independent Evaluations:</strong> Seek external validation of system performance, fairness, and robustness to mitigate bias.</li>
<li>✅ <strong>Engage Diverse Stakeholders:</strong> Involve users, ethics experts, and impacted communities in the design and evaluation processes.</li>
<li>✅ <strong>Be Accountable for Outcomes:</strong> Establish clear mechanisms for redress and continuous improvement for societal impacts, even if unintended.</li>
<li>✅ <strong>Educate the Public:</strong> Help users understand how AI works, its limitations, and how to evaluate AI products.</li>
<li>✅ <strong>Advocate for Ethical Guidelines:</strong> Support the development and implementation of industry standards and policies that promote responsible AI.</li>
<li>✅ <strong>Be Wary of Marketing Hype:</strong> Critically assess claims about AI “trustworthiness” and demand verifiable data.</li>
<li>✅ <strong>Publish Negative Findings:</strong> Be transparent about challenges, failures, or ethical dilemmas encountered during research.</li>
</ul>

<h4 id="4-predictability-reliability-1">4. Predictability &amp; Reliability</h4>

<ul>
<li>✅ <strong>Set Clear Expectations:</strong> Use onboarding, tooltips, and empty states to honestly communicate what the AI is good at and where it might struggle.</li>
<li>✅ <strong>Show Confidence Levels:</strong> Instead of just giving an answer, have the AI signal its own uncertainty.</li>
<li>✅ <strong>Provide Explainability (XAI) and Transparency:</strong> Offer a useful, human-understandable rationale for AI decisions.</li>
<li>✅ <strong>Design for Graceful Error Handling:</strong> Acknowledge errors humbly and provide easy paths to correction.</li>
<li>✅ <strong>Prioritize the “I Don’t Know” Experience:</strong> Frame “I don’t know” as a feature and design a high-quality fallback experience.</li>
<li>✅ <strong>Prioritize Transparency (UX Writing):</strong> Clearly communicate the AI’s capabilities and limitations, especially when it’s still learning or if responses are generated.</li>
<li>✅ <strong>Design for Explainability (UX Writing):</strong> Explain the reasoning behind AI recommendations, decisions, or complex outputs.</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Vitaly Friedman</author><title>Design Guidelines For Better Notifications UX</title><link>https://www.smashingmagazine.com/2025/07/design-guidelines-better-notifications-ux/</link><pubDate>Mon, 07 Jul 2025 13:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2025/07/design-guidelines-better-notifications-ux/</guid><description>As always in design, timing matters, and so do timely notifications. Let’s explore how we might improve the notifications UX. More design patterns in our &lt;a href="https://smart-interface-design-patterns.com">Smart Interface Design Patterns&lt;/a>, a &lt;strong>friendly video course on UX&lt;/strong> and design patterns by Vitaly — from complex data tables and nested filters to FAQs and error messages.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2025/07/design-guidelines-better-notifications-ux/" />
              <title>Design Guidelines For Better Notifications UX</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Design Guidelines For Better Notifications UX</h1>
                  
                    
                    <address>Vitaly Friedman</address>
                  
                  <time datetime="2025-07-07T13:00:00&#43;00:00" class="op-published">2025-07-07T13:00:00+00:00</time>
                  <time datetime="2025-07-07T13:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>In many products, setting notification channels on <strong>mute is a default</strong>, rather than an exception. The reason for that is their high frequency, which creates disruptions and eventually notification fatigue, when any popping messages get dismissed instantly.</p>

<p>There is a good reason for it: <strong>high frequency of notifications</strong>. In usability testing, it’s the most frequent complaint, yet every app desperately tries to capture a glimpse of our attention, sending more notifications our way. Let’s see how we could make the notifications UX slightly better.</p>

<style>.course-intro{--shadow-color:206deg 31% 60%;background-color:#eaf6ff;border:1px solid #ecf4ff;box-shadow:0 .5px .6px hsl(var(--shadow-color) / .36),0 1.7px 1.9px -.8px hsl(var(--shadow-color) / .36),0 4.2px 4.7px -1.7px hsl(var(--shadow-color) / .36),.1px 10.3px 11.6px -2.5px hsl(var(--shadow-color) / .36);border-radius:11px;padding:1.35rem 1.65rem}@media (prefers-color-scheme:dark){.course-intro{--shadow-color:199deg 63% 6%;border-color:var(--block-separator-color,#244654);background-color:var(--accent-box-color,#19313c)}}</style>

<p class="course-intro">This article is <strong>part of our ongoing series</strong> on <a href="/category/ux">UX</a>. You can find more details on <strong>design patterns and UX strategy</strong> in <a style="font-weight:700" href="https://smart-interface-design-patterns.com/">Smart Interface Design Patterns</a>&nbsp;🍣 &mdash; with live UX training coming up soon. <a href="https://smart-interface-design-patterns.com">Jump to table of contents</a>.</p>

<h2 id="the-many-faces-of-notifications">The Many Faces Of Notifications</h2>

<p>Notifications are distractions by nature; they bring a user’s attention to a (potentially) significant event they aren’t aware of or might want to be reminded of. As such, they can be very helpful and relevant, providing assistance and bringing structure and order to the daily routine. Until they are not.</p>

<p><strong>Not every communication option is a notification</strong>. <a href="https://www.nngroup.com/articles/indicators-validations-notifications/">As Kim Salazar rightfully noted</a>,</p>

<blockquote>“Status communication often relies on validation, status indicators, and notifications. While they are often considered to be similar, they are actually quite different.”</blockquote>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://www.nngroup.com/articles/indicators-validations-notifications/">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="503"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/2-communicating-system-status.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/2-communicating-system-status.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/2-communicating-system-status.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/2-communicating-system-status.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/2-communicating-system-status.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/2-communicating-system-status.png"
			
			sizes="100vw"
			alt="A variety of triggers (or) origins of information, from a Critical Analysis of Notification Systems."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Notifications are informational messages that alert the user of general occurrences within a system. (Image source: <a href='https://www.nngroup.com/articles/indicators-validations-notifications/'>NN/g</a>) (<a href='https://files.smashing.media/articles/design-guidelines-better-notifications-ux/2-communicating-system-status.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>In general, notifications can be either <strong>informational</strong> (calendar reminders, delay notifications, election night results) or <strong>encourage action</strong> (approve payment, install an update, confirm a friend request). They can stream from various sources and have various impacts.</p>

<ul>
<li><strong>UI notifications</strong> appear as subtle cards in UIs as users interact with the web interface — as such, they are widely accepted and less invasive than some of their counterparts.</li>
<li><strong>In-browser push notifications</strong> are more difficult to dismiss, and draw attention to themselves even if the user isn’t accessing the UI.</li>
<li><strong>In-app notifications</strong> live within desktop and mobile apps, and can be as humble as UI notifications, but can take a more central role with messages pushed to the home screen or the notifications center.</li>
<li><strong>OS notifications</strong> such as software updates or mobile carrier changes also get in the mix, often appearing together with a wide variety of notes, calendar updates, and everything in between.</li>
<li>Finally, <strong>notifications can find their way</strong> into email, SMS, and social messaging apps, coming from chatbots, recommendation systems, and actual humans.</li>
</ul>

<p>But we don’t pay the same amount of attention to every notification. It can take weeks until they eventually <strong>install a software update</strong> prompted by their OS notification, or just a few hours to confirm or decline a new LinkedIn request.</p>

<h2 id="not-every-notification-is-equal">Not Every Notification Is Equal</h2>

<p>The level of attention users grant to notifications depends on their nature, or, more specifically, <a href="https://uxdesign.cc/a-critical-analysis-of-notification-systems-4956ed86a804">how and when notifications are triggered</a>. <strong>People care more</strong> about new messages from close friends and relatives, bank transactions and important alerts, calendar notifications, and any actionable and awaited confirmations or releases.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://uxdesign.cc/a-critical-analysis-of-notification-systems-4956ed86a804">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="421"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/3-variety-triggers-origins-information.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/3-variety-triggers-origins-information.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/3-variety-triggers-origins-information.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/3-variety-triggers-origins-information.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/3-variety-triggers-origins-information.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/3-variety-triggers-origins-information.png"
			
			sizes="100vw"
			alt="A variety of triggers (or) origins of information, from a Critical Analysis of Notification Systems."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A variety of triggers (or) origins of information, from a <a href='https://uxdesign.cc/a-critical-analysis-of-notification-systems-4956ed86a804'>Critical Analysis of Notification Systems</a> by Shankar Balasubramanian (Gmail team). (<a href='https://files.smashing.media/articles/design-guidelines-better-notifications-ux/3-variety-triggers-origins-information.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>People care less</strong> about news updates, social feed updates, announcements, new features, crash reports, promotional and automated messages in general. Most importantly, <strong>a message from another human being is always valued much higher</strong> than any automated notification.</p>

<h2 id="design-for-levels-of-severity">Design For Levels Of Severity</h2>

<p><a href="https://www.toptal.com/designers/ux/notification-design">As Sara Vilas suggests</a>, we can break down notification design across three levels of severity: <strong>high, medium, and low attention</strong>. And then, notification types need to be further defined by specific attributes on those three levels, whether they are alerts, warnings, confirmations, errors, success messages, or status indicators.</p>














<figure class="
  
  
  ">
  
    <a href="https://web.archive.org/web/20240430014932/https://garden.zendesk.com/content/voice-and-tone/">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="818"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/4-triggers-origins-information.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/4-triggers-origins-information.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/4-triggers-origins-information.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/4-triggers-origins-information.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/4-triggers-origins-information.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/4-triggers-origins-information.png"
			
			sizes="100vw"
			alt="A variety of triggers (or) origins of information, from a Critical Analysis of Notification Systems."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A variety of triggers (or) origins of information, from a <a href='https://web.archive.org/web/20240430014932/https://garden.zendesk.com/content/voice-and-tone/'>Zendesk Mapping Tone</a> by Shankar Balasubramanian (Gmail team). (<a href='https://files.smashing.media/articles/design-guidelines-better-notifications-ux/4-triggers-origins-information.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>High Attention</strong></p>

<ul>
<li>Alerts (immediate attention required),</li>
<li>Errors (immediate action required),</li>
<li>Exceptions (system anomalies, something didn’t work),</li>
<li>Confirmations (potentially destructive actions that need user confirmation to proceed).</li>
</ul>

<p><strong>Medium Attention</strong></p>

<ul>
<li>Warnings (no immediate action required),</li>
<li>Acknowledgments (feedback on user actions),</li>
<li>Success messages.</li>
</ul>

<p><strong>Low Attention</strong></p>

<ul>
<li>Informational messages (aka passive notifications, something is ready to view),</li>
<li>Badges (typically on icons, signifying something new since last interaction),</li>
<li>Status indicators (system feedback).</li>
</ul>

<p>Taking it one step further, we can <strong>map the attention</strong> against the type of messaging we are providing — very similar to <a href="https://web.archive.org/web/20240430014932/https://garden.zendesk.com/content/voice-and-tone/">Zendesk&rsquo;s mapping tone</a> above, which plots impact against the type of messaging, and shows how the tone should adjust &mdash; becoming more humble, real, distilled or charming.</p>

<p>So, <strong>notifications can be different</strong>, and different notifications are perceived differently; however, the more personal, relevant, and timely notifications are, the higher engagement we should expect.</p>

<h2 id="start-sending-notifications-slowly-but-steadily">Start Sending Notifications Slowly But Steadily</h2>

<p>It’s not uncommon to sign up, only to realize a few moments later that the inbox is filling up with all kinds of irrelevant messages. That’s exactly the wrong thing to do. A <a href="https://medium.com/@AnalyticsAtMeta/notifications-why-less-is-more-how-facebook-has-been-increasing-both-user-satisfaction-and-app-9463f7325e7d">study by Facebook</a> showed that sending fewer notifications <strong>improved user satisfaction</strong> and long-term usage of a product.</p>

<p>Initially, once the notification rate was reduced, there was indeed a loss of traffic, but it has “gradually recovered over time”, and after an extended period, it had fully recovered and even <strong>turned out to be a gain</strong>.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://medium.com/@AnalyticsAtMeta/notifications-why-less-is-more-how-facebook-has-been-increasing-both-user-satisfaction-and-app-9463f7325e7d">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="334"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/5-notifications-why-less-is-more.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/5-notifications-why-less-is-more.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/5-notifications-why-less-is-more.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/5-notifications-why-less-is-more.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/5-notifications-why-less-is-more.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/5-notifications-why-less-is-more.jpg"
			
			sizes="100vw"
			alt="Results of the notifications experiment"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Fewer but better notifications are often better for engagement and retention. <a href='https://medium.com/@AnalyticsAtMeta/notifications-why-less-is-more-how-facebook-has-been-increasing-both-user-satisfaction-and-app-9463f7325e7d'>Case study by Facebook</a>. (<a href='https://files.smashing.media/articles/design-guidelines-better-notifications-ux/5-notifications-why-less-is-more.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>A good starting point is to set up a <strong>slow default notification frequency</strong> for different types of customers. As the customer keeps using the interface, we could ask them to decide on the kind of notifications they’d prefer and their frequency.</p>

<p><strong>Send notifications slowly</strong>, and over time slowly increase and/or decrease the number of notifications per type of customer. This might work much better for our retention rates.</p>

<h2 id="don-t-rely-on-generic-defaults-set-up-notification-modes">Don’t Rely On Generic Defaults: Set Up Notification Modes</h2>

<p>Typically, users can opt in and opt out of every single type of notification in their settings. In general, it’s a good idea, but it can also be very overwhelming — and not necessarily clear how important each notification is. Alternatively, we could provide <strong>predefined recommended options,</strong> perhaps with a “calm mode” (low frequency), a “regular mode” (medium frequency), and a “power-user mode” (high frequency).</p>














<figure class="
  
  
  ">
  
    <a href="https://whimsical.com/how-slack-decides-to-send-a-notification-P53PjXCBWEi2fdMjP2Hti">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="897"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/6-slack-notification.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/6-slack-notification.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/6-slack-notification.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/6-slack-notification.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/6-slack-notification.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/6-slack-notification.jpg"
			
			sizes="100vw"
			alt="How Slack decides to send a notification. Incredible documentation on Slack about a critical feature that we surely want to get just right. Stellar work. The flowchart in high resolution."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      <a href='https://whimsical.com/how-slack-decides-to-send-a-notification-P53PjXCBWEi2fdMjP2Hti'>How Slack decides to send a notification</a>, incredible documentation on when to trigger a notification on Slack. (<a href='https://files.smashing.media/articles/design-guidelines-better-notifications-ux/6-slack-notification.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>As time passes, the format of notifications might need adjustments as well. Rather than having notifications sent one by one as events occur, users could choose a <strong>“summary mode,”</strong> with all notifications grouped into a single standalone message delivered at a particular time each day or every week.</p>

<p>That’s <a href="https://slackhq.com/how-to-customize-notifications-in-slack">one of the settings that Slack provides</a> when it comes to notifications; in fact, the system adapts the frequency of notifications over time, too. Initially, as Slack channels can be quite silent, the system sends notifications for every posted message.</p>

<p>As activities become more frequent, Slack <strong>recommends reducing the notification level</strong> so the user will be notified only when they are actually mentioned.</p>

<h2 id="make-notification-settings-a-part-of-onboarding">Make Notification Settings A Part Of Onboarding</h2>

<p>We could also include frequency options in our onboarding design. A while back Basecamp, for example, has introduced <strong>“Always On”</strong> and <strong>“Work Can Wait” options</strong> as a part of their onboarding, so new customers can select if they wish to receive notifications as they occur (at any time), or choose specific time ranges and days when notifications can be sent.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/design-guidelines-better-notifications-ux/7-basecamp-notifications.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="590"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/7-basecamp-notifications.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/7-basecamp-notifications.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/7-basecamp-notifications.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/7-basecamp-notifications.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/7-basecamp-notifications.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/7-basecamp-notifications.jpg"
			
			sizes="100vw"
			alt="On Basecamp, new customers can select if they wish to receive notifications as they occur, or choose specific time ranges and days when notifications can be sent."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      On Basecamp, new customers can select if they wish to receive notifications as they occur, or choose specific time ranges and days when notifications can be sent. (<a href='https://files.smashing.media/articles/design-guidelines-better-notifications-ux/7-basecamp-notifications.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Or, the other way around, we could ask users <strong>when they don’t want to be disturbed</strong>, and suspend notifications at that time. Not every customer wants to receive work-related notifications outside of business hours or on the weekend, even if their colleagues might be working extra hours on Friday night on the other side of the planet.</p>

<h2 id="allow-users-to-snooze-or-pause-notifications">Allow Users To Snooze Or Pause Notifications</h2>

<p><strong>User’s context changes continuously</strong>. If you notice an unusual drop in engagement rate, or if you’re anticipating an unusually high volume of notifications coming up (a birthday, wedding anniversary, or election night, perhaps), consider providing an option to <strong>mute, snooze, or pause notifications</strong>, perhaps for the next 24 hours.</p>

<p>This might go very much against our intuition, as we might want to re-engage the customer if they’ve gone silent all of a sudden, or we might want to maximize their engagement when important events are happening. However, it’s easy to reach a point when a seemingly harmless notification <strong>will steer a customer away</strong>, long term.</p>














<figure class="
  
  
  ">
  
    <a href="https://medium.muz.li/designing-notifications-for-applications-3cad56fecf96">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="774"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/8-notifications-models.jpeg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/8-notifications-models.jpeg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/8-notifications-models.jpeg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/8-notifications-models.jpeg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/8-notifications-models.jpeg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/design-guidelines-better-notifications-ux/8-notifications-models.jpeg"
			
			sizes="100vw"
			alt="In the article “Designing Notifications For Apps”, Shashank Sahay explores different notification models and when to use which, e.g., notification center, with a few guidelines and recommendations along the way."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      In “<a href='https://medium.muz.li/designing-notifications-for-applications-3cad56fecf96'>Designing Notifications For Apps</a>”, Shashank Sahay explores different notification models and when to use which. (<a href='https://files.smashing.media/articles/design-guidelines-better-notifications-ux/8-notifications-models.jpeg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Another option would be to suggest a <strong>change of medium used to consume notifications</strong>. Users tend to associate different levels of urgency with different channels of communication.</p>

<p>In-app notifications, push notifications, and text messages are considered to be <strong>much more intrusive</strong> than good ol’ email, so when frequency exceeds a certain threshold, you might want to nudge users towards a switch from push notifications to daily email summaries.</p>

<h2 id="wrapping-up">Wrapping Up</h2>

<p>As always in design, timing matters, and so do <strong>timely notifications</strong>. Start slowly, and evolve your notification frequency depending on how exactly a user actually uses the product. For every type of user, set up notification profiles: frequent users, infrequent users, one-week-experience users, one-month-experience users, and so on.</p>

<p>And whenever possible, allow your users to <strong>snooze and mute notifications</strong> for a while. Eventually, you might even want to suggest a change in the medium used to consume notifications. And when in doubt, postpone, rather than sending through.</p>

<h2 id="meet-smart-interface-design-patterns">Meet “Smart Interface Design Patterns”</h2>

<p>You can find more details on <strong>design patterns and UX</strong> in <a href="https://smart-interface-design-patterns.com/"><strong>Smart Interface Design Patterns</strong></a>, our <strong>15h-video course</strong> with 100s of practical examples from real-life projects &mdash; with a live UX training later this year. Everything from mega-dropdowns to complex enterprise tables &mdash; with 5 new segments added every year. <a href="https://www.youtube.com/watch?v=jhZ3el3n-u0">Jump to a free preview</a>. Use code <a href="https://smart-interface-design-patterns.com"><strong>BIRDIE</strong></a> to <strong>save 15%</strong> off.</p>

<figure style="margin-bottom: 0"><a href="https://smart-interface-design-patterns.com/"><img style="border-radius: 11px" decoding="async" fetchpriority="low" width="950" height="492" srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 400w,
https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 800w,
https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 1200w,
https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 1600w,
https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 2000w" src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg" sizes="100vw" alt="Smart Interface Design Patterns"></a><figcaption class="op-vertical-bottom">Meet <a href="https://smart-interface-design-patterns.com/">Smart Interface Design Patterns</a>, our video course on interface design &amp; UX.</figcaption></figure>

<div class="book-cta__inverted"><div class="book-cta" data-handler="ContentTabs" data-mq="(max-width: 480px)"><nav class="content-tabs content-tabs--books"><ul><li class="content-tab"><a href="#"><button class="btn btn--small btn--white btn--white--bordered">
Video + UX Training</button></a></li><li class="content-tab"><a href="#"><button class="btn btn--small btn--white btn--white--bordered">Video only</button></a></li></ul></nav><div class="book-cta__col book-cta__hardcover content-tab--content"><h3 class="book-cta__title"><span>Video + UX Training</span></h3><span class="book-cta__price"><span><span class=""><span class="currency-sign">$</span>&nbsp;<span>495<span class="sup">.00</span></span></span> <span class="book-cta__price--old"><span class="currency-sign">$</span>&nbsp;<span>699<span class="sup">.00</span></span></span></span></span>
<a href="https://smart-interface-design-patterns.thinkific.com/enroll/3081832?price_id=3951439" class="btn btn--full btn--medium btn--text-shadow">
Get Video + UX Training<div></div></a><p class="book-cta__desc">25 video lessons (15h) + <a href="https://smashingconf.com/online-workshops/workshops/vitaly-friedman-impact-design/">Live UX Training</a>.<br>100 days money-back-guarantee.</p></div><div class="book-cta__col book-cta__ebook content-tab--content"><h3 class="book-cta__title"><span>Video only</span></h3><div data-audience="anonymous free supporter" data-remove="true"><span class="book-cta__price" data-handler="PriceTag"><span><span class=""><span class="currency-sign">$</span>&nbsp;<span>300<span class="sup">.00</span></span></span><span class="book-cta__price--old"><span class="currency-sign">$</span>&nbsp;<span>395<span class="sup">.00</span></span></span></span></div>
<a href="https://smart-interface-design-patterns.thinkific.com/enroll/3081832?price_id=3950630" class="btn btn--full btn--medium btn--text-shadow">
Get the video course<div></div></a><p class="book-cta__desc" data-audience="anonymous free supporter" data-remove="true">40 video lessons (15h). Updated yearly.<br>Also available as a <a href="https://smart-interface-design-patterns.thinkific.com/enroll/3082557?price_id=3951421">UX Bundle with 2 video courses.</a></p></div><span></span></div></div>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Eric Bailey</author><title>What I Wish Someone Told Me When I Was Getting Into ARIA</title><link>https://www.smashingmagazine.com/2025/06/what-i-wish-someone-told-me-aria/</link><pubDate>Mon, 16 Jun 2025 13:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2025/06/what-i-wish-someone-told-me-aria/</guid><description>&lt;a href="https://www.w3.org/WAI/standards-guidelines/aria/">Accessible Rich Internet Applications (ARIA)&lt;/a> is an inevitability when working on web accessibility. That said, it’s everyone’s first time learning about ARIA at some point.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2025/06/what-i-wish-someone-told-me-aria/" />
              <title>What I Wish Someone Told Me When I Was Getting Into ARIA</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>What I Wish Someone Told Me When I Was Getting Into ARIA</h1>
                  
                    
                    <address>Eric Bailey</address>
                  
                  <time datetime="2025-06-16T13:00:00&#43;00:00" class="op-published">2025-06-16T13:00:00+00:00</time>
                  <time datetime="2025-06-16T13:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>If you haven’t encountered ARIA before, great! It’s a chance to learn something new and exciting. If you have heard of ARIA before, this might help you better understand it or maybe even teach you something new!</p>

<p>These are all things I wish someone had told me when I was getting started on my web accessibility journey. This post will:</p>

<ul>
<li>Provide a mindset for <strong>how to approach ARIA</strong> as a concept,</li>
<li><strong>Debunk some common misconceptions</strong>, and</li>
<li><strong>Provide some guiding thoughts</strong> to help you better understand and work with it.</li>
</ul>

<p>It is my hope that in doing so, this post will help make an oft-overlooked yet vital corner of web design and development easier to approach.</p>

<h2 id="what-this-post-is-not">What This Post Is Not</h2>

<p>This <strong>is not</strong> a recipe book for how to use ARIA to build accessible websites and web apps. It is also not a guide for how to remediate an inaccessible experience. <strong>A lot of accessibility work is highly contextual</strong>. I do not know the specific needs of your project or organization, so trying to give advice here could easily do more harm than good.</p>

<p>Instead, think of this post as a “know before you go” guide. I’m hoping to give you a good headspace to approach ARIA, as well as highlight things to watch out for when you undertake your journey. So, with that out of the way, let’s dive in!</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Roll up your sleeves and <strong>boost your UX skills</strong>! Meet <strong><a data-instant href="https://smart-interface-design-patterns.com/">Smart Interface Design Patterns</a></strong>&nbsp;🍣, a 10h video library by Vitaly Friedman. <strong>100s of real-life examples</strong> and live UX training. <a href="https://www.youtube.com/watch?v=3mwZztmGgbE">Free preview</a>.</p>
<a data-instant href="https://smart-interface-design-patterns.com/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://smart-interface-design-patterns.com/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/3155f571-450d-42f9-81b4-494aa9b52841/video-course-smart-interface-design-patterns-vitaly-friedman.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/8c98e7f9-8e62-4c43-b833-fc6bf9fea0a9/video-course-smart-interface-design-patterns-vitaly-friedman.jpg"
    alt="Feature Panel"
    width="690"
    height="790"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="so-what-is-aria">So, What Is ARIA?</h2>

<blockquote>ARIA is what you turn to if there is not a native HTML element or attribute that is better suited for the job of communicating interactivity, purpose, and state.</blockquote>

<p>Think of it like a spice that you sprinkle into your markup to enhance things.</p>

<p>Adding ARIA to your HTML markup is a way of providing additional information to a website or web app for <a href="https://webaim.org/articles/visual/blind#screenreaders">screen readers</a> and <a href="https://webaim.org/articles/motor/assistive#voicerecognition">voice control software</a>.</p>

<ul>
<li><strong>Interactivity</strong> means the content can be activated or manipulated. An example of this is navigating to a link’s destination.</li>
<li><strong>Purpose</strong> means what something is used for. An example of this is a text input used to collect someone’s name.</li>
<li><strong>State</strong> means the current status content has been placed in and controlled by <a href="https://www.w3.org/TR/wai-aria/#introstates">states, properties, and values</a>. An example of this is an accordion panel ​​that can either be expanded or collapsed.</li>
</ul>

<p>Here is an illustration to help communicate what I mean by this:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/1-interactivity-purpose-state.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="244"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/1-interactivity-purpose-state.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/1-interactivity-purpose-state.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/1-interactivity-purpose-state.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/1-interactivity-purpose-state.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/1-interactivity-purpose-state.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/1-interactivity-purpose-state.png"
			
			sizes="100vw"
			alt="Three panels, showing a pressed-in mute button, its underlying HTML code, and three labels for “Interactivity,” “Purpose,” and “State.” The button element uses the “Interactivity” label. A declaration of aria-pressed equals true uses the “State” label. And finally, the button’s string value of “Mute” uses the “Purpose” label. The button’s HTML also uses a visually hidden CSS class to hide the string, then a decorative SVG icon to show a speaker mute icon."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/1-interactivity-purpose-state.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li>The presence of <a href="https://html.spec.whatwg.org/multipage/form-elements.html#the-button-element">HTML’s <code>button</code> element</a> will instruct assistive technology to report it as a button, letting someone know that it can be activated to perform a predefined action.</li>
<li>The presence of the text string “Mute” will be reported by assistive technology to clue the person into what the button is used for.</li>
<li>The presence of <a href="https://w3c.github.io/aria/#aria-pressed"><code>aria-pressed=&quot;true&quot;</code></a> means that someone or something has previously activated the button, and it is now in a “pushed in” state that sustains its action.</li>
</ul>

<p>This overall pattern will let people who use assistive technology know:</p>

<ol>
<li>If something is interactive,</li>
<li>What kind of interactive behavior it performs, and</li>
<li>Its <a href="https://w3c.github.io/aria/#host_general_attrs">current state</a>.</li>
</ol>

<h2 id="aria-s-history">ARIA’s History</h2>

<p>ARIA has been around for a long time, with <a href="https://www.w3.org/TR/2006/WD-aria-role-20060926/">the first version published on September 26th, 2006</a>.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/2-browser.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="592"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/2-browser.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/2-browser.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/2-browser.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/2-browser.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/2-browser.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/2-browser.png"
			
			sizes="100vw"
			alt="The Roles for Accessible Rich Internet Applications (WAI-ARIA Roles) specification, loaded in a copy of Internet Explorer 7."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/2-browser.png'>Large preview</a>)
    </figcaption>
  
</figure>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aARIA%20was%20created%20to%20provide%20a%20bridge%20between%20the%20limitations%20of%20HTML%20and%20the%20need%20for%20making%20interactive%20experiences%20understandable%20by%20assistive%20technology.%0a&url=https://smashingmagazine.com%2f2025%2f06%2fwhat-i-wish-someone-told-me-aria%2f">
      
ARIA was created to provide a bridge between the limitations of HTML and the need for making interactive experiences understandable by assistive technology.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>The latest version of ARIA is <a href="https://www.w3.org/TR/wai-aria-1.2/">version 1.2</a>, published on June 6th, 2023. Version 1.3 is slated to be released relatively soon, and you can read more about it in <a href="https://www.craigabbott.co.uk/blog/a-look-at-the-new-wai-aria-1-3-draft/">this excellent article by Craig Abbott</a>.</p>

<p>You may also see it referred to as WAI-ARIA, where WAI stands for “Web Accessibility Initiative.” The <a href="https://www.w3.org/WAI/">WAI</a> is part of the <a href="https://www.w3.org/">W3C</a>, the organization that sets standards for the web. That said, most accessibility practitioners I know call it “ARIA” in written and verbal communication and leave out the “WAI-” part.</p>

<h2 id="the-spirit-of-aria-reflects-the-era-in-which-it-was-created">The Spirit Of ARIA Reflects The Era In Which It Was Created</h2>

<p>The reason for this is simple: The web was a lot less mature in the past than it is now. The most popular operating system in 2006 was <a href="https://en.wikipedia.org/wiki/Windows_XP">Windows XP</a>. The iPhone didn’t exist yet; it was released a year later.</p>

<p>From a very high level, <strong>ARIA is a snapshot of the operating system interaction paradigms of this time period</strong>. This is because ARIA recreates them.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/3-wxpdefaultdesk.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="600"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/3-wxpdefaultdesk.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/3-wxpdefaultdesk.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/3-wxpdefaultdesk.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/3-wxpdefaultdesk.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/3-wxpdefaultdesk.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/3-wxpdefaultdesk.png"
			
			sizes="100vw"
			alt="Windows XP, showing an open Start menu, the famous Rolling Green Hills desktop wallpaper, and a tooltip popping up from the taskbar advising us to take a tour of Windows XP. Screenshot."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Image source: <a href='https://the-microsoft-windows-xp.fandom.com/wiki/Windows_XP'>The Microsoft Windows XP Wiki</a>. (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/3-wxpdefaultdesk.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="the-mindset">The Mindset</h3>

<p>Smartphones with features like <a href="https://jquerymobile.com/">tappable</a>, swipeable, and draggable surfaces were far less commonplace. Single Page Application “web app” experiences were also rare, with <a href="https://en.wikipedia.org/wiki/Ajax_(programming)">Ajax</a>-based approaches being the most popular. This means that we have to <strong>build the experiences of today using the technology of 2006</strong>. In a way, <strong>this is a good thing</strong>. It forces us to take new and novel experiences and interrogate them.</p>

<p>Interactions that cannot be broken down into smaller, more focused pieces that map to ARIA patterns are most likely inaccessible. This is because they won’t be able to be operated by assistive technology or function on older or less popular devices.</p>

<p>I may be biased, but I also think these sorts of novel interactions that can’t translate also serve as a warning that a general audience will find them to be <strong>confusing and, therefore, unusable</strong>. This belief is important to consider given that the internet serves:</p>

<ul>
<li>An unknown number of people,</li>
<li>Using an unknown number of devices,</li>
<li>Each with an unknown amount of personal customizations,</li>
<li>Who have their own unique needs and circumstances and</li>
<li>Have unknown motivational factors.</li>
</ul>

<h3 id="interaction-expectations">Interaction Expectations</h3>

<p>Contemporary expectations for keyboard-based interaction for web content &mdash; checkboxes, radios, modals, accordions, and so on &mdash; are sourced from Windows XP and its predecessor operating systems. These interaction models are carried forward as muscle memory for older people who use assistive technology. Younger people who rely on assistive technology also learn these de facto standards, thus continuing the cycle.</p>

<p>What does this mean for you? Someone using a keyboard to interact with your website or web app <strong>will most likely</strong> <a href="https://github.blog/engineering/user-experience/considerations-for-making-a-tree-view-component-accessible/#start-with-windows"><strong>try these Windows OS-based keyboard shortcuts first</strong></a>. This means things like pressing:</p>

<ul>
<li><kbd>Enter</kbd> to navigate to a link’s destination,</li>
<li><kbd>Space</kbd> to activate buttons,</li>
<li><kbd>Home</kbd> and <kbd>End</kbd> to jump to the start or end of a list of items, and so on.</li>
</ul>

<h3 id="it-s-also-a-living-document">It’s Also A Living Document</h3>

<p>This is not to say that ARIA has stagnated. It is constantly being worked on with new additions, removals, and clarifications. Remember, it is now at version 1.2, with <a href="https://www.w3.org/TR/wai-aria-1.3/">version 1.3 arriving soon</a>.</p>

<p>In parallel, HTML as a language also reflects this evolution. Elements were originally created to support a document-oriented web and have been gradually evolving to <a href="https://open-ui.org/">support more dynamic, app-like experiences</a>. The great bit here is that this is all <a href="https://github.com/w3c/aria/">conducted in the open</a> and is something you can contribute to if you feel motivated to do so.</p>

<div class="partners__lead-place"></div>

<h2 id="aria-has-rules-for-using-it">ARIA Has Rules For Using It</h2>

<p>There are <a href="https://www.w3.org/TR/using-aria/#NOTES">five rules included in ARIA’s documentation</a> to help steer how you approach it:</p>

<ol>
<li><a href="https://www.w3.org/TR/using-aria/#firstrule">Use a native element whenever possible.</a><br />
An example would be using an anchor element (<code>&lt;a&gt;</code>) for a link rather than a <code>div</code> with a click handler and a <code>role</code> of <code>link</code>.</li>
<li><a href="https://www.w3.org/TR/using-aria/#secondrule">Don’t adjust a native element’s semantics if at all possible.</a><br />
An example would be trying to use a heading element as a tab rather than wrapping the heading in a semantically neutral <code>div</code>.</li>
<li><a href="https://www.w3.org/TR/using-aria/#3rdrule">Anything interactive has to be keyboard operable.</a><br />
If you can’t use it with a keyboard, it isn’t accessible. Full stop.</li>
<li><a href="https://www.w3.org/TR/using-aria/#4thrule">Do not use <code>role=&quot;presentation&quot;</code> or <code>aria-hidden=&quot;true&quot;</code> on a focusable element.</a><br />
This makes something intended to be interactive unable to be used by assistive technology.</li>
<li><a href="https://www.w3.org/TR/using-aria/#fifthrule">Interactive elements must be named.</a><br />
An example of this is using the text string “Print” for a <code>button</code> element.</li>
</ol>

<p>Observing these five rules will do a lot to help you out. The following is more context to provide even more support.</p>

<h2 id="aria-has-a-taxonomy">ARIA Has A Taxonomy</h2>

<p>There is a structured grammar to ARIA, and it is centered around roles, as well as states and properties.</p>

<h3 id="roles">Roles</h3>

<p>A <a href="https://www.w3.org/TR/wai-aria/#dfn-role">Role</a> is what assistive technology reads and then announces. A lot of people refer to this in shorthand as <em>semantics</em>. <strong>HTML elements have implied roles</strong>, which is why an anchor element will be announced as a link by screen readers with no additional work.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/4-roles.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="198"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/4-roles.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/4-roles.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/4-roles.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/4-roles.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/4-roles.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/4-roles.png"
			
			sizes="100vw"
			alt="Three panels, showing how an implied role gets announced by assistive technology. The first panel shows an anchor element with a string value of “French fries.” The anchor element has the label “Implied link role.” The second panel shows a standard blue link with an underline. The link reads, “French fries.” The third panel shows a speech balloon coming from a laptop. The speech balloon’s contents read, “French fries, link.” A label points to the speech balloon and reads, “Implied link role.”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/4-roles.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Implied roles are almost always better to use</strong> if the use case calls for them. Recall <a href="https://www.w3.org/TR/using-aria/#firstrule">the first rule of ARIA</a> here. This is usually what digital accessibility practitioners refer to when they say, “Just use semantic HTML.”</p>

<p>There are many reasons for favoring implied roles. The main consideration is better guarantees of support across an unknown number of operating systems, browsers, and assistive technology combinations.</p>

<p><a href="https://www.w3.org/TR/wai-aria/#roles_categorization">Roles have categories</a>, each with its own purpose. The <a href="https://www.w3.org/TR/wai-aria/#abstract_roles">Abstract role category</a> is notable in that it is an organizing <a href="https://en.wiktionary.org/wiki/supercategory">supercategory</a> <strong>not intended to be used by authors</strong>:</p>

<blockquote>Abstract roles are used for the ontology. Authors <strong>MUST NOT</strong> use abstract roles in content.</blockquote>

<pre><code class="language-html">&lt;!-- This won't work, don't do it --&gt;
&lt;h2 role="sectionhead"&gt;
  Anatomy and physiology
&lt;/h2&gt;

&lt;!-- Do this instead --&gt;
&lt;section aria-labeledby="anatomy-and-physiology"&gt;
  &lt;h2 id="anatomy-and-physiology"&gt;
    Anatomy and physiology
  &lt;/h2&gt;
&lt;/section&gt;
</code></pre>

<p>Additionally, in the same way, you can only declare ARIA on certain things, <strong>you can only declare some ARIA as children of other ARIA declarations</strong>. An example of this is the <a href="https://www.w3.org/TR/wai-aria/#listitem">the <code>listitem</code> role</a>, which requires <a href="https://www.w3.org/TR/wai-aria/#list">a role of <code>list</code></a> to be present on its parent element.</p>

<p>So, what’s the best way to determine if a role requires a parent declaration? The answer is to <a href="https://www.w3.org/TR/wai-aria/#role_definitions">review the official definition</a>.</p>

<h3 id="states-and-properties">States And Properties</h3>

<p><a href="https://www.w3.org/TR/wai-aria/#introstates">States and properties</a> are the other two main parts of ARIA‘s overall taxonomy.</p>

<p>Implicit roles are provided by semantic HTML, and explicit roles are provided by ARIA. Both describe <strong>what an element is</strong>. States <strong>describe that element’s characteristics in a way that assistive technology can understand</strong>. This is done via property declarations and their companion values.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/5-role-and-state.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="344"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/5-role-and-state.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/5-role-and-state.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/5-role-and-state.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/5-role-and-state.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/5-role-and-state.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/5-role-and-state.png"
			
			sizes="100vw"
			alt="A code example that shows how roles, states, and properties all work together. The first panel shows HTML code for a button element, which uses an ARIA declaration of aria disabled equals true. The button element is labeled as “Role”. The ARIA declaration, including both the property and value portions, is labeled “State.”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/5-role-and-state.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>ARIA states can change quickly or slowly, both as a result of human interaction as well as application state. When the state is changed as a result of human interaction, it is considered an “unmanaged state.” Here, a developer must supply the underlying JavaScript logic to control the interaction.</p>

<p>When the state changes as a result of the application (e.g., operating system, web browser, and so on), this is considered “<a href="https://www.w3.org/TR/wai-aria/#dfn-managed-state">managed state</a>.” Here, the application automatically supplies the underlying logic.</p>

<h2 id="how-to-declare-aria">How To Declare ARIA</h2>

<p>Think of ARIA as an extension of <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Attributes">HTML attributes</a>, a suite of name/value pairs. Some values are predefined, while others are author-supplied:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/6-predefined-author-defined.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="432"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/6-predefined-author-defined.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/6-predefined-author-defined.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/6-predefined-author-defined.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/6-predefined-author-defined.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/6-predefined-author-defined.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/6-predefined-author-defined.png"
			
			sizes="100vw"
			alt="Two HTML declarations. One is a div element with an ARIA declaration of aria-live equals polite declared on it. The second is a button element with an ARIA declaration of aria-label equals save. The aria-live declaration is labeled “Predefined value,” and the aria-label declaration is labeled “Author-supplied value.”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/6-predefined-author-defined.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>For the examples in the previous graphic, the <code>polite</code> value for <code>aria-live</code> is one of <a href="https://w3c.github.io/aria/#aria-live">the three predefined values</a> (<code>off</code>, <code>polite</code>, and <code>assertive</code>). For <code>aria-label</code>, “Save” is a text string manually supplied by the author.</p>

<p>You declare ARIA on HTML elements the same way you declare other attributes:</p>

<pre><code class="language-html">&lt;!-- 
  Applies an id value of 
  "carrot" to the div
--&gt;
&lt;div id="carrot"&gt;&lt;/div&gt;

&lt;!-- 
  Hides the content of this paragraph 
  element from assistive technology 
--&gt;
&lt;p aria-hidden="true"&gt;
  Assistive technology can't read this
&lt;/p&gt;

&lt;!-- 
  Provides an accessible name of "Stop", 
  and also communicates that the button 
  is currently pressed. A type property 
  with a value of "button" prevents 
  browser form submission.
--&gt;
&lt;button 
  aria-label="Stop"
  aria-pressed="true"
  type="button"&gt;
  &lt;!-- SVG icon --&gt;
&lt;/button&gt;
</code></pre>

<p>Other usage notes:</p>

<ul>
<li>You can place more than one ARIA declaration on an HTML element.</li>
<li>The order of placement of ARIA when declared on an HTML element does not matter.</li>
<li>There is no limit to how many ARIA declarations can be placed on an element. Be aware that <strong>the more you add, the more complexity you introduce</strong>, and more complexity means a larger chance <a href="https://www.a11yproject.com/posts/aria-has-perfect-support/">things may break or not function as expected</a>.</li>
<li>You can declare ARIA on an HTML element and also have other non-ARIA declarations, such as <code>class</code> or <code>id</code>. The order of declarations does not matter here, either.</li>
</ul>

<p>It might also be helpful to know that boolean attributes are treated a little differently in ARIA when compared to HTML. <a href="https://hidde.blog/">Hidde de Vries</a> writes about this in his post, <a href="https://hidde.blog/boolean-attributes-in-html-and-aria-whats-the-difference/">“Boolean attributes in HTML and ARIA: what&rsquo;s the difference?”</a>.</p>

<h2 id="not-a-whole-lot-of-aria-is-hardcoded">Not A Whole Lot Of ARIA Is “Hardcoded”</h2>

<p>In this context, “hardcoding” means directly writing a static attribute or value declaration into your component, view, or page.</p>

<p>A lot of ARIA is designed to be applied or conditionally modified dynamically based on <a href="https://www.freecodecamp.org/news/stateful-vs-stateless-architectures-explained/">application state</a> or as a response to someone’s action. An example of this is a show-and-hide disclosure pattern:</p>

<ul>
<li><a href="https://w3c.github.io/aria/#aria-expanded">ARIA’s <code>aria-expanded</code> attribute</a> is toggled from <code>false</code> to <code>true</code> to communicate if the disclosure is in an expanded or collapsed state.</li>
<li><a href="https://html.spec.whatwg.org/multipage/interaction.html#the-hidden-attribute">HTML’s <code>hidden</code> attribute</a> is conditionally removed or added in tandem to show or hide the disclosure’s full content area.</li>
</ul>

<div class="break-out">
<pre><code class="language-html">&lt;div class="disclosure-container"&gt;
  &lt;button 
    aria-expanded="false"
    class="disclosure-toggle"
    type="button"&gt;
    How we protect your personal information
  &lt;/button&gt;
  &lt;div 
    hidden
    class="disclosure-content"&gt;
    &lt;ul&gt;
      &lt;li&gt;Fast, accurate, thorough and non-stop protection from cyber attacks&lt;/li&gt;
      &lt;li&gt;Patching practices that address vulnerabilities that attackers try to exploit&lt;/li&gt;
      &lt;li&gt;Data loss prevention practices help to ensure data doesn't fall into the wrong hands&lt;/li&gt;
      &lt;li&gt;Supply risk management practices help ensure our suppliers adhere to our expectations&lt;/li&gt;
    &lt;/ul&gt;
    &lt;p&gt;
      &lt;a href="/security/"&gt;Learn more about our security best practices&lt;/a&gt;.
    &lt;/p&gt;
  &lt;/div&gt;
&lt;/div&gt;
</code></pre>
</div>

<p>A common example of a hardcoded ARIA declaration you’ll encounter on the web is <a href="https://www.smashingmagazine.com/2021/05/accessible-svg-patterns-comparison/">making an SVG icon inside a button decorative</a>:</p>

<pre><code class="language-html">&lt;button type="button&gt;
  &lt;svg aria-hidden="true"&gt;
    &lt;!-- SVG code --&gt;
  &lt;/svg&gt;
  Save
&lt;/button&gt;
</code></pre>

<p>Here, the string “Save” is what is required for someone to understand what the button will do when they activate it. The accompanying icon helps that understanding visually but is considered redundant and therefore <a href="https://www.w3.org/WAI/tutorials/images/decorative/">decorative</a>.</p>

<h2 id="declaring-an-aria-role-on-something-that-already-uses-that-role-implicitly-does-not-make-it-extra-accessible">Declaring An Aria Role On Something That Already Uses That Role Implicitly Does Not Make It “Extra” Accessible</h2>

<p>An implied role is all you need if you’re using semantic HTML. Explicitly declaring its role via ARIA does not confer any additional advantages.</p>

<pre><code class="language-html">&lt;!-- 
  You don't need to declare role="button" here.
  Using the &lt;button&gt; element will make assistive 
  technology announce it as a button. The 
  role="button" declaration is redundant.
 --&gt;
&lt;button role="button"&gt;
  Save
&lt;/button&gt;
</code></pre>

<p>You might occasionally run into these redundant declarations on <a href="https://www.w3.org/WAI/ARIA/apg/patterns/landmarks/examples/HTML5.html">HTML sectioning elements</a>, such as <code>&lt;main role=&quot;main&quot;&gt;</code>, or <code>&lt;footer role=&quot;contentinfo&quot;&gt;</code>. This isn’t needed anymore, and you can just use the <code>&lt;main&gt;</code> or <code>&lt;footer&gt;</code> elements.</p>

<p>The reason for this is historic. These declarations were done for support reasons, in that it was a stop-gap technique for assistive technology that needed to be updated to support these <a href="https://www.w3.org/html/logo/">new-at-the-time HTML elements</a>.</p>

<p>Contemporary assistive technology does not need these redundant declarations. Think of it the same way that we don’t have to use vendor prefixes for the <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/border-radius">CSS <code>border-radius</code> property</a> anymore.</p>

<p><strong>Note</strong>: <em>There is an exception to this guidance. There are circumstances where certain complex and complicated markup patterns don’t work as expected for assistive technology. In these cases, we want to hardcode the implicit role as explicit ARIA to ensure it works. This assistive technology support concern is <a href="#the-more-aria-you-add-to-something-the-greater-the-chance-something-will-behave-unexpectedly">covered in more detail later in this post</a>.</em></p>

<h2 id="you-don-t-need-to-say-what-a-control-is-that-is-what-roles-are-for">You Don’t Need To Say What A Control Is; That Is What Roles Are For</h2>

<p>Both implicit and explicit roles are announced by screen readers. You don’t need to include that part for things like the interactive element’s text string or <a href="https://w3c.github.io/aria/#aria-label">an <code>aria-label</code></a>.</p>

<pre><code class="language-html">&lt;!-- Don't do this --&gt;
&lt;button 
  aria-label="Save button"
  type="button"&gt;
  &lt;!-- Icon SVG --&gt;
&lt;/button&gt;

&lt;!-- Do this instead --&gt;
&lt;button 
  aria-label="Save"
  type="button"&gt;
  &lt;!-- Icon SVG --&gt;
&lt;/button&gt;
</code></pre>

<p>Had we used the string value of “Save button” for our Save button, a screen reader would announce it along the lines of, “Save button, button.” That’s <a href="https://theideaplace.net/tooltip-should-not-start-an-accessible-name/">redundant</a> and confusing.</p>

<div class="partners__lead-place"></div>

<h2 id="aria-roles-have-very-specific-meanings">ARIA Roles Have Very Specific Meanings</h2>

<p>We sometimes refer to website and web app navigation colloquially as menus, especially if it’s an e-commerce-style <a href="https://www.nngroup.com/articles/mega-menus-work-well/">mega menu</a>.</p>

<p>In ARIA, <a href="https://w3c.github.io/aria/#menu">menus mean something very specific</a>. Don’t think of global or in-page navigation or the like. Think of menus in this context as what appears when you click the Edit menu button on your application’s menubar.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/7-menu.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="712"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/7-menu.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/7-menu.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/7-menu.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/7-menu.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/7-menu.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/7-menu.png"
			
			sizes="100vw"
			alt="The edit menu option activated on Windows Notepad. It shows a list of menu options, with the option for “Go to” being in focus. Some options are disabled, as there is no content in the Notepad file, nor is there anything on the Windows Clipboard. The other menu options are Undo, Cut, Copy, Paste, Delete, Search with Bing, Find, Find Next, Find Previous, Replace, Select All, Time/Date, and Font. Screenshot."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Notepad, Windows 11. (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/7-menu.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Using a role improperly because its name seems like an appropriate fit at first glance creates confusion for people who do not have the context of the visual UI. <strong>Their expectations will be set with the announcement of the role</strong>, then subverted when it does not act the way it is supposed to.</p>

<p>Imagine if you click on a link, and instead of taking you to another webpage, it sends something completely unrelated to your printer instead. It’s sort of like that.</p>

<p>Declaring <code>role=&quot;menu&quot;</code> is a common example of a misapplied role, but there are others. The best way to know what a role is used for? <a href="https://www.w3.org/TR/wai-aria/#role_definitions">Go straight to the source</a> and read up on it.</p>

<h2 id="certain-roles-are-forbidden-from-having-accessible-names">Certain Roles Are Forbidden From Having Accessible Names</h2>

<p>These roles are <code>caption</code>, <code>code</code>, <code>deletion</code>, <code>emphasis</code>, <code>generic</code>, <code>insertion</code>, <code>paragraph</code>, <code>presentation</code>, <code>strong</code>, <code>subscript</code>, and <code>superscript</code>.</p>

<p>This means you can try and provide an accessible name for one of these elements &mdash; say via <code>aria-label</code> &mdash; but it won’t work because it’s disallowed by <a href="https://www.w3.org/TR/wai-aria-1.2/#namefromprohibited">the rules of ARIA’s grammar</a>.</p>

<div class="break-out">
<pre><code class="language-html">&lt;!-- This won't work--&gt;
&lt;strong aria-label="A 35% discount!"&gt;
  $39.95
&lt;/strong&gt;

&lt;!-- Neither will this --&gt;
&lt;code title="let JavaScript example"&gt;
  let submitButton = document.querySelector('button[type="submit"]');
&lt;/code&gt;
</code></pre>
</div>

<p>For these examples, recall that the role is implicit, sourced from the declared HTML element.</p>

<p>Note here that sometimes a browser will make an attempt regardless and overwrite the author-specified string value. This overriding is a confusing act for all involved, which led to the rule being established in the first place.</p>

<h2 id="you-can-t-make-up-aria-and-expect-it-to-work">You Can’t Make Up ARIA And Expect It To Work</h2>

<p>I’ve witnessed some developers guess-adding CSS classes, such as <code>.background-red</code> or <code>.text-white</code>, to their markup and being rewarded if the design visually updates correctly.</p>

<p>The reason this works is that someone previously added those classes to the project. With ARIA, the people who add the content we can use are the <a href="https://www.w3.org/WAI/about/groups/ariawg/">Accessible Rich Internet Applications Working Group</a>. This means each new version of ARIA has a predefined set of properties and values. Assistive technology is then updated to parse those attributes and values, <a href="https://ericwbailey.website/published/it-needs-to-map-back-to-a-role/#edicts-still-need-to-be-carried-out">although this isn’t always a guarantee</a>.</p>

<p>Declaring ARIA, which isn’t part of that predefined set, means assistive technology won’t know what it is and consequently won’t announce it.</p>

<pre><code class="language-html">&lt;!-- 
  There is no "selectpanel" role in ARIA.
  Because of this, this code will be announced 
  as a button and not as a select panel.
--&gt;
&lt;button 
  role="selectpanel"
  type="button"&gt;
  Choose resources
&lt;/button&gt;
</code></pre>

<h2 id="aria-fails-silently">ARIA Fails Silently</h2>

<p>This speaks to the previous section, where ARIA won’t understand words spoken to it that exist outside its limited vocabulary.</p>

<p><strong>There are no console errors for malformed ARIA</strong>. There’s also no alert dialog, beeping sound, or flashing light for your operating system, browser, or assistive technology. This fact is yet another reason why it is so important to <a href="https://webaim.org/articles/nvda/"><strong>test with actual assistive technology</strong></a>.</p>

<p><a href="https://webaim.org/articles/screenreader_testing/">You don’t have to be an expert</a> here, either. There is a good chance your code needs updating if you set something to announce as a specific <a href="https://www.w3.org/TR/wai-aria/#introstates">state</a> and assistive technology in its default configuration does not announce that state.</p>

<h2 id="aria-only-exposes-the-presence-of-something-to-assistive-technology">ARIA Only Exposes The Presence Of Something To Assistive Technology</h2>

<p><strong>Applying ARIA to something does not automatically “unlock” capabilities</strong>. It <strong>only</strong> sends a hint to assistive technology about how the interactive content should behave.</p>

<p>For assistive technology like screen readers, that hint could be for how to announce something. For assistive technology like <a href="https://www.afb.org/node/16207/refreshable-braille-displays">refreshable Braille displays</a>, it could be for how it raises and lowers its pins. For example, <strong>declaring <code>role=&quot;button&quot;</code> on a <code>div</code> element does not automatically make it clickable</strong>. You will still need to:</p>

<ul>
<li>Target the <code>div</code> element in JavaScript,</li>
<li>Tie it to a <a href="https://developer.mozilla.org/en-US/docs/Web/API/Element/click_event">click event</a>,</li>
<li>Author the interactive logic that it performs when clicked, and then</li>
<li>Accommodate <a href="https://adrianroselli.com/2022/04/brief-note-on-buttons-enter-and-space.html">all the other expected behaviors</a>.</li>
</ul>

<p>This all makes me wonder why you can’t save yourself some work and use a <code>button</code> element in the first place, but that is a different story for a different day.</p>

<p>Additionally, <strong>adjusting an element’s role via ARIA does not modify the element’s native functionality</strong>. For example, you can declare <code>role=&quot;image&quot;</code> on a <code>div</code> element. However, attempting to declare the <code>alt</code> or <code>src</code> attributes on the <code>div</code> won’t work. This is because <code>alt</code> and <code>src</code> are <a href="https://html.spec.whatwg.org/multipage/grouping-content.html#the-div-element">not supported attributes for <code>div</code></a>.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/8-image%20element-div.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="289"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/8-image%20element-div.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/8-image%20element-div.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/8-image%20element-div.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/8-image%20element-div.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/8-image%20element-div.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/8-image%20element-div.png"
			
			sizes="100vw"
			alt="Two panels, one labeled “Will work” and the other labeled, “Won’t work.” The panel labeled “Will work” shows an image element with an alt and src attribute. The panel labeled “Won’t work” shows a div with a role of image, as well as alt and src attributes. Both src attributes link to a file called cucumber.jpg, and both alt attributes use a string value of “A small cucumber.”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/8-image%20element-div.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="declaring-an-aria-role-on-something-will-override-its-semantics-but-not-its-behavior">Declaring an ARIA Role On Something Will Override Its Semantics, But Not Its Behavior</h2>

<p>This speaks to the previous section on <strong>ARIA only exposing something’s presence</strong>. Don’t forget that certain HTML elements have primary and secondary interactive capabilities built into them.</p>

<p>For example, an anchor element’s primary capability is navigating to whatever URL value is provided for its <code>href</code> attribute. Secondary capabilities for an anchor element include copying the URL value, opening it in a new tab or incognito window, and so on.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/9-right-click.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="720"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/9-right-click.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/9-right-click.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/9-right-click.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/9-right-click.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/9-right-click.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/9-right-click.png"
			
			sizes="100vw"
			alt="A link whose string value is “Link with a role set to button.” Above it is text that reads, “For demonstration purposes only. Please don’t do this.” The link has a cursor placed over it, with an active right-click menu. The menu shows multiple actions you can take on the link, including opening it in a new tab or window, copying and saving the link address, searching the web for the link’s string value, as well as options provided by user-installed browser extensions. These options are managing the link with the 1Password password manager and copying a link to the selected text. Cropped screenshot."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Chrome on macOS. Note the support for user-installed browser extensions. (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/9-right-click.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>These secondary capabilities are still preserved. However, it may not be apparent to someone that they can use them &mdash; or use them in the way that they’d expect &mdash; depending on what is announced.</p>

<p>The opposite is also true. When an element has no capabilities, having its role adjusted does not grant it any new abilities. Remember, <a href="#aria-only-exposes-the-presence-of-something-to-assistive-technology"><strong>ARIA only announces</strong></a>. This is why that <code>div</code> with a <code>role</code> of <code>button</code> assigned to it won’t do anything when clicked if no companion JavaScript logic is also present.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/keyboard-support.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="705"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/keyboard-support.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/keyboard-support.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/keyboard-support.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/keyboard-support.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/keyboard-support.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/keyboard-support.png"
			
			sizes="100vw"
			alt="Two side-by-side graphics, each one consisting of three panels. The first panel on the left of the graphic shows the HTML code for a button element. The first panel for the right graphic shows HTML code for a div with a role of button. Both examples use a string value of “Favorite” and have a class of “button-fav” applied to them. The second panel for both left and right graphics shows an identical-looking button labeled “Favorite”, which has a golden-colored background. The third panel for the left graphic shows support for Enter and Space keypresses. The third panel for the right graphic shows no support for Enter and Space keypresses."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/keyboard-support.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="you-will-need-to-declare-aria-to-make-certain-interactions-accessible">You Will Need To Declare ARIA To Make Certain Interactions Accessible</h2>

<p>A lot of the previous content may make it seem like ARIA is something you should avoid using altogether. This isn’t true. Know that this guidance is written to help steer you to <strong>situations where HTML does not offer the capability to describe an interaction</strong> out of the box. <strong>This space is where you want to use ARIA</strong>.</p>

<p>Knowing how to identify this area requires spending some time learning what HTML elements there are, as well as what they are and are not used for. I quite like <a href="https://html5doctor.com/">HTML5 Doctor’s Element Index</a> for upskilling on this.</p>

<h2 id="certain-aria-states-require-certain-aria-roles-to-be-present">Certain ARIA States Require Certain ARIA Roles To Be Present</h2>

<p>This is analogous to how HTML has both <a href="https://developer.mozilla.org/en-US/docs/Web/HTML/Global_attributes">global attributes</a> and attributes that can only be used on a per-element basis. For example, <a href="https://w3c.github.io/aria/#aria-describedby"><code>aria-describedby</code> can be used on any HTML element</a> or role. However, <a href="https://w3c.github.io/aria/#aria-posinset"><code>aria-posinset</code> can only be used with <code>article</code>, <code>comment</code>, <code>listitem</code>, <code>menuitem</code>, <code>option</code>, <code>radio</code>, <code>row</code>, and <code>tab</code> roles</a>. Remember here that these roles can be provided by either HTML or ARIA.</p>

<p>Learning what states require which roles can be achieved by <a href="https://www.w3.org/TR/wai-aria/#state_prop_def">reading the official reference</a>. Check for the “Used in Roles” portion of each entry’s characteristics:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/11-used-in-roles.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="523"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/11-used-in-roles.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/11-used-in-roles.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/11-used-in-roles.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/11-used-in-roles.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/11-used-in-roles.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/11-used-in-roles.png"
			
			sizes="100vw"
			alt=" A characteristics table for aria setsize. The table’s two columns are labeled “Characteristic” and “Value.” The second table row is highlighted, demonstrating where you look for what role supports what state. The First row’s first cell has the text, “Used in roles.” The first row’s second cell has the text, “article, listitem, menuitem, option, radio, row, tab.” The second row’s first cell has the text, “Inherits into Roles.” The second row’s second cell has the text, “menuitemcheckbox, menuitemradio, treeitem.” The third row’s first cell has the text “Value.” Cropped screenshot."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Characteristics for <code>aria-setsize</code>. (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/11-used-in-roles.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Automated code scanners &mdash; like <a href="https://www.deque.com/axe/">axe</a>, <a href="https://wave.webaim.org/">WAVE</a>, <a href="https://www.tpgi.com/arc-platform/arc-toolkit/">ARC Toolkit</a>, <a href="https://pa11y.org/">Pa11y</a>, <a href="https://github.com/IBMa/equal-access#equal-access">equal-access</a>, and so on &mdash; can catch this sort of thing if they are written in error. I’m a big fan of implementing these sorts of checks as part of a <a href="https://en.wikipedia.org/wiki/Continuous_integration">continuous integration</a> strategy, as it makes it a code quality concern shared across the whole team.</p>

<h2 id="aria-is-more-than-web-browsers">ARIA Is More Than Web Browsers</h2>

<p>Speaking of technology that listens, it is helpful to know that the ARIA you declare <strong>instructs the browser to speak to the operating system</strong> the browser is installed on. Assistive technology then listens to <a href="https://www.w3.org/TR/wai-aria/#dfn-accessibility-tree">what the operating system reports</a>. It then communicates that to the person using the computer, tablet, smartphone, and so on.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/12-flowchart-four-steps.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="296"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/12-flowchart-four-steps.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/12-flowchart-four-steps.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/12-flowchart-four-steps.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/12-flowchart-four-steps.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/12-flowchart-four-steps.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/12-flowchart-four-steps.png"
			
			sizes="100vw"
			alt="A flowchart with four steps. The first step is a webpage with a code icon floating above it. The second step is a computer, with an icon of an indented list floating above it. The third step is the symbol for accessibility, a Vitruvian man in a circle. Above this icon is a speech bubble. The fourth and final step is a person, with an icon of a lit lightbulb floating above it."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/12-flowchart-four-steps.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>A person can then instruct assistive technology to request the operating system to take action on the web content displayed in the browser.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/13-flowchart-four-steps.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="296"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/13-flowchart-four-steps.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/13-flowchart-four-steps.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/13-flowchart-four-steps.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/13-flowchart-four-steps.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/13-flowchart-four-steps.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/13-flowchart-four-steps.png"
			
			sizes="100vw"
			alt="A flowchart with four steps. The first step is a person with an icon of a finger pressing a button floating above it. The second step is the symbol for accessibility, a Vitruvian man in a circle. Above this icon is a speech bubble. The third step is a computer, with an icon of a handshake floating above it. The fourth and final step is an updated webpage, with a clicking mouse cursor icon floating above it."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/13-flowchart-four-steps.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>This interaction model is by design</strong>. It is done to make interaction from assistive technology indistinguishable from interaction performed without assistive technology.</p>

<p>There are a few reasons for this approach. The most important one is <a href="https://css-tricks.com/accessibility-events/">it helps <strong>preserve the privacy and autonomy</strong></a> of the <a href="https://accessaces.com/what-disabled-people-have-to-give-up-in-the-name-of-accessibility/">people who rely on assistive technologies</a>.</p>

<h2 id="just-because-it-exists-in-the-aria-spec-does-not-mean-assistive-technology-will-support-it">Just Because It Exists In The ARIA Spec Does Not Mean Assistive Technology Will Support It</h2>

<p>This support issue was touched on earlier and is a difficult fact to come to terms with.</p>

<p>Contemporary developers enjoy the hard-fought, hard-won benefits of <a href="https://www.webstandards.org/">the web standards movement</a>. This means you can declare HTML and know that it will <a href="https://www.w3.org/standards/">work with every major browser</a> out there. ARIA does not have this. <strong>Each assistive technology vendor has its own interpretation of the ARIA specification</strong>. Oftentimes, these interpretations are convergent. Sometimes, they’re not.</p>

<p>Assistive technology vendors also have support roadmaps for their products. Some assistive technology vendors:</p>

<ul>
<li>Will eventually add support,</li>
<li>May never, and some</li>
<li>Might do so in a way that contradicts how other vendors choose to implement things.</li>
</ul>

<p>There is also the operating system layer to contend with, which I’ll cover in more detail in a little bit. Here, the mechanisms used to communicate with assistive technology are dusty, oft-neglected areas of software development.</p>

<p>With these layers comes a scenario where <strong>the assistive technology can support the ARIA declared, but the operating system itself cannot communicate the ARIA’s presence, or vice-versa</strong>. The reasons for this are varied but ultimately boil down to a historic lack of support, prioritization, and resources. However, I am <a href="https://aria-at.w3.org/">optimistic that this is changing</a>.</p>

<p>Additionally, <strong>there is no equivalent to <a href="https://caniuse.com/">Caniuse</a>, <a href="https://web.dev/baseline">Baseline</a>, or <a href="https://webstatus.dev/">Web Platform Status</a> for assistive technology</strong>. The closest analog we have to support checking resources is <a href="https://a11ysupport.io/">a11ysupport.io</a>, but know that it is the painstaking work of a single individual. Its content may not be up-to-date, as the work is both Herculean in its scale and Sisyphean in its scope. Because of this, I must re-stress <a href="https://www.smashingmagazine.com/2018/09/importance-manual-accessibility-testing/"><strong>the importance of manually testing with assistive technology</strong></a> to determine if the ARIA you use works as intended.</p>

<p><strong>How To Determine ARIA Support</strong></p>

<p>There are three main layers to determine if something is supported:</p>

<ol>
<li>Operating system and version.</li>
<li>Assistive technology and version,</li>
<li>Browser and browser version.</li>
</ol>

<h3 id="1-operating-system-and-version">1. Operating System And Version</h3>

<p>Each operating system (e.g., Windows, macOS, Linux) has its own way of <a href="https://alistapart.com/article/semantics-to-screen-readers/">communicating what content is present to assistive technology</a>. Each piece of assistive technology has to accommodate <strong>how</strong> to parse that communication.</p>

<p>Some assistive technology is incompatible with certain operating systems. An example of this is not being able to use <a href="https://support.apple.com/guide/voiceover/get-started-vo4be8816d70/10/mac/15.0">VoiceOver</a> with Windows, or <a href="https://www.freedomscientific.com/products/software/jaws/">JAWS</a> with macOS. Furthermore, each version of each operating system has slight variations in what is reported and how. Sometimes, the operating system needs to be updated to “teach” it the updated AIRA vocabulary. Also, do not forget that things like <a href="https://github.com/FreedomScientific/standards-support/issues">bugs and regressions</a> can occur.</p>

<h3 id="2-assistive-technology-and-version">2. Assistive Technology And Version</h3>

<p><strong>There is no “one true way” to make assistive technology</strong>. Each one is built to address different access needs and wants and is done so in an opinionated way &mdash; think how different web browsers have different features and UI.</p>

<p>Each piece of assistive technology that consumes web content has its own way of communicating this information, and <strong>this is by design</strong>. It works with what the operating system reports, filtered through things like heuristics and preferences.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/14-voice-control.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="586"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/14-voice-control.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/14-voice-control.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/14-voice-control.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/14-voice-control.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/14-voice-control.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/14-voice-control.png"
			
			sizes="100vw"
			alt="A three by three grid of nine buttons, with a title of “Select your order.” Each button has a food-related emoji, with a tooltip showing the button’s accessible name. The buttons are a hamburger with the title “100% Angus Beef Burger”, french fries with the title “Special Smile Fries”, a pizza slice with the title “Pepperoni Pizza”, a hot dog with the title “Hot Dog With Mustard”, a sandwich with a title of “Ham Sando”, a taco with the title of “Tuesday Taco”, a plate of spaghetti with the title of “Pasgetti”, a waffle with the title of “Waffles Sans Chicken”, and some popcorn with the title of “Poppin’ Corn”."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The “Show names” command in <a href='https://support.apple.com/en-us/102225'>macOS Voice Control</a>, which displays the accessible names of these icon buttons. The accessible name has been supplied by <code>aria-label</code>. (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/14-voice-control.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Like operating systems, assistive technology also has different versions with what each version is capable of supporting. They can also be susceptible to bugs and regressions.</p>

<p>Another two factors worth pointing out here are <strong>upgrade hesitancy</strong> and <strong>lack of financial resources</strong>. Some people who rely on assistive technology are hesitant to upgrade it. This is based on a very understandable fear of breaking an important mechanism they use to interact with the world. This, in turn, translates to scenarios like holding off on updates until absolutely necessary, as well as disabling auto-updating functionality altogether.</p>

<p>Lack of financial resources is sometimes referred to as <a href="https://stimpunks.org/glossary/crip-tax/">the disability or crip tax</a>. <a href="https://www.un.org/development/desa/disabilities/resources/factsheet-on-persons-with-disabilities/disability-and-employment.html">Employment rates tend to be lower for disabled populations</a>, and with that comes less money to spend on acquiring new technology and updating it. This concern can and does apply to operating systems, browsers, and assistive technology.</p>

<h3 id="3-browser-and-browser-version">3. Browser And Browser Version</h3>

<p>Some assistive technology works better with one browser compared to another. This is due to the underlying mechanics of <strong>how the browser reports its content to assistive technology</strong>. Using Firefox with NVDA is an example of this.</p>

<p>Additionally, the support for this reporting sometimes only gets added for newer versions. Unfortunately, it also means support can sometimes accidentally regress, and people don’t notice before releasing the browser update &mdash; again, this is due to a historic lack of resources and prioritization.</p>

<h2 id="the-less-commonly-used-the-aria-you-declare-the-greater-the-chance-you-ll-need-to-test-it">The Less Commonly-Used The ARIA You Declare, The Greater The Chance You’ll Need To Test It</h2>

<p>Common ARIA declarations you’ll come across include, but are not limited to:</p>

<ul>
<li><code>aria-label</code>,</li>
<li><code>aria-labelledby</code>,</li>
<li><code>aria-describedby</code>,</li>
<li><code>aria-hidden</code>,</li>
<li><code>aria-live</code>.</li>
</ul>

<p>These are more common because they’re more supported. They are more supported because many of these declarations have been around for a while. Recall <a href="#just-because-it-exists-in-the-aria-spec-does-not-mean-assistive-technology-will-support-it">the previous section that discussed actual assistive technology support</a> compared to what the ARIA specification supplies.</p>

<p>Newer, more esoteric ARIA, or historically deprioritized declarations, may not have that support yet or may never. An example of how complicated this can get is <a href="https://w3c.github.io/aria/#aria-controls"><code>aria-controls</code></a>.</p>

<p><code>aria-controls</code> is a part of ARIA that has been around for a while. <a href="https://www.freedomscientific.com/products/software/jaws/">JAWS</a> had support for <code>aria-controls</code>, but then removed it after user feedback. Meanwhile, every other screen reader I’m aware of never bothered to add support.</p>

<p>What does that mean for us? Determining support, or lack thereof, is best accomplished by <strong>manual testing with assistive technology.</strong></p>

<h2 id="the-more-aria-you-add-to-something-the-greater-the-chance-something-will-behave-unexpectedly">The More ARIA You Add To Something, The Greater The Chance Something Will Behave Unexpectedly</h2>

<p>This fact takes into consideration the complexities in preferences, different levels of support, bugs, regressions, and other concerns that come with ARIA’s usage.</p>

<p>Philosophically, it’s a lot like adding more interactive complexity to your website or web app via JavaScript. The larger the surface area your code covers, <strong>the bigger the chance something unintended happens</strong>.</p>

<p>Consider the amount of ARIA added to a component or discrete part of your experience. The more of it there is declared nested into <a href="https://dom.spec.whatwg.org/">the Document Object Model (DOM)</a>, the more it interacts with parent ARIA declarations. This is because assistive technology reads what the DOM exposes to help determine intent.</p>

<p>A lot of contemporary development efforts are isolated, feature-based work that focuses on one small portion of the overall experience. Because of this, they may not take this holistic nesting situation into account. This is another reason why &mdash; you guessed it &mdash; manual testing is so important.</p>

<p>Anecdotally, <a href="https://webaim.org/projects/million/#aria">WebAIM’s annual Millions report</a> &mdash; an accessibility evaluation of the top 1,000,000 websites &mdash; touches on this phenomenon:</p>

<blockquote><strong>Increased ARIA usage on pages was associated with higher detected errors. The more ARIA attributes that were present, the more detected accessibility errors could be expected.</strong> This does not necessarily mean that ARIA introduced these errors (these pages are more complex), but pages typically had significantly more errors when ARIA was present.</blockquote>

<h2 id="assistive-technology-may-support-your-invalid-aria-declaration">Assistive Technology May Support Your Invalid ARIA Declaration</h2>

<p>There is a chance that ARIA, which is authored inaccurately, will actually function as intended with assistive technology. While <strong>I do not recommend betting on this fact to do your work</strong>, I do think it is worth mentioning when it comes to things like debugging.</p>

<p>This is due to the wide range of familiarity there is with people who author ARIA.</p>

<p>Some of the more mature assistive technology vendors try to accommodate the lower end of this familiarity. This is done in order to <strong>better enable the people who use their software to actually get what they need</strong>.</p>

<p>There isn’t an exhaustive list of what accommodations each piece of assistive technology has. Think of it like <a href="https://quandyfactory.com/blog/39/the_virtue_of_forgiving_html_parsers">the forgiving nature of a browser’s HTML parser</a>, where <strong>the ultimate goal is to render content for humans</strong>.</p>

<h2 id="aria-label-is-tricky"><code>aria-label</code> Is Tricky</h2>

<p><a href="https://w3c.github.io/aria/#aria-label"><code>aria-label</code></a> is one of the most common ARIA declarations you’ll run across. It’s also one of the most misused.</p>

<p><a href="https://benmyers.dev/blog/dont-use-aria-label-on-static-text-elements/"><code>aria-label</code> can’t be applied to non-interactive HTML elements</a>, but oftentimes is. It <a href="https://adrianroselli.com/2019/11/aria-label-does-not-translate.html">can’t always be translated</a> and is oftentimes <a href="https://ericwbailey.website/published/what-they-dont-tell-you-when-you-translate-your-app/#you%E2%80%99ll-need-to-translate-%2F-localize-more-than-you-think-you-will">overlooked for localization efforts</a>. Additionally, it can make things frustrating to operate for people who use voice control software, where the visible label differs from what the underlying code uses.</p>

<p>Another problem is when it overrides an interactive element’s pre-existing accessible name. For example:</p>

<pre><code class="language-html">&lt;!-- Don't do this --&gt;
&lt;a 
  aria-label="Our services"
  href="/services/"&gt;
  Services
&lt;/a&gt;
</code></pre>

<p>This is a violation of <a href="https://www.w3.org/WAI/WCAG21/Understanding/label-in-name.html">WCAG Success Criterion 2.5.3: Label in Name</a>, pure and simple. I have also seen it used as a way to provide a <a href="https://adrianroselli.com/2019/10/stop-giving-control-hints-to-screen-readers.html">control hint</a>. This is also a WCAG failure, in addition to being an antipattern:</p>

<div class="break-out">
<pre><code class="language-html">&lt;!-- Also don't do this --&gt;
&lt;a 
  aria-label="Click this link to learn more about our unique and valuable services"
  href="/services/"&gt;
  Services
&lt;/a&gt;
</code></pre>
</div>

<p>These factors &mdash; along with other considerations &mdash; are why I consider <a href="https://ericwbailey.website/published/aria-label-is-a-code-smell/"><code>aria-label</code> a code smell</a>.</p>

<h2 id="aria-live-is-even-trickier"><code>aria-live</code> Is Even Trickier</h2>

<p>Live region announcements are <a href="https://w3c.github.io/aria/#aria-live">powered by <code>aria-live</code></a> and are an important part of communicating updates to an experience to people who use screen readers.</p>

<p>Believe me when I say that getting <code>aria-live</code> to work properly is tricky, even under the best of scenarios. I won’t belabor the specifics here. Instead, I’ll point you to <a href="https://tetralogical.com/blog/2024/05/01/why-are-my-live-regions-not-working/">“Why are my live regions not working?”</a>, a fantastic and comprehensive article published by TetraLogical.</p>

<h2 id="the-aria-authoring-practices-guide-can-lead-you-astray">The ARIA Authoring Practices Guide Can Lead You Astray</h2>

<p>Also referred to as the APG, the <a href="https://www.w3.org/WAI/ARIA/apg/">ARIA Authoring Practices Guide</a> should be treated with a decent amount of caution.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/15-apg-caution.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="463"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/15-apg-caution.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/15-apg-caution.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/15-apg-caution.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/15-apg-caution.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/15-apg-caution.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/15-apg-caution.png"
			
			sizes="100vw"
			alt="A screenshot of the ARIA Authoring Practices Guide homepage, with a yellow caution tape placed across it."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/15-apg-caution.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="the-downsides">The Downsides</h3>

<p>The guide was originally authored to help demonstrate ARIA’s capabilities. As a result, <strong>its code examples near-exclusively, overwhelmingly, and disproportionately favor ARIA</strong>.</p>

<p>Unfortunately, the APG’s latest redesign also makes it far more approachable-looking than its surrounding W3C documentation. This is coupled with <a href="https://www.w3.org/WAI/ARIA/apg/patterns/">demonstrating UI patterns</a> in a way that signals it’s a self-serve resource whose code can be used out of the box.</p>

<p>These factors create a scenario where people assume everything can be used as presented. This is <strong>not true</strong>.</p>

<p>Recall that just because ARIA is listed in the spec <a href="#just-because-it-exists-in-the-aria-spec-does-not-mean-assistive-technology-will-support-it">does not necessarily guarantee it is supported</a>. Adrian Roselli writes about this in detail in his post, <a href="https://adrianroselli.com/2023/04/no-apgs-support-charts-are-not-can-i-use-for-aria.html">“No, APG’s Support Charts Are Not ‘Can I Use’ for ARIA”</a>.</p>

<p>Also, remember <a href="https://www.w3.org/TR/using-aria/#firstrule">the first rule of ARIA</a> and know that <a href="#aria-has-rules-for-using-it">an ARIA-first approach is counter to the specification’s core philosophy of use</a>.</p>

<p>In my experience, this has led to developers assuming they can copy-paste code examples or reference how it’s structured in their own efforts, and everything will just work. This leads to mass frustration:</p>

<ul>
<li>Digital accessibility practitioners have to explain that “doing the right thing” isn’t going to work as intended.</li>
<li>Developers then have to revisit their work to update it.</li>
<li>Most importantly, people who rely on assistive technology risk not being able to use something.</li>
</ul>

<p>This is to say nothing about things like timelines and resourcing, working relationships, reputation, and brand perception.</p>

<h3 id="the-upside">The Upside</h3>

<p>The APG’s main strength is <strong>highlighting what keyboard keypresses people will expect to work</strong> on each pattern.</p>

<p>Consider <a href="https://www.w3.org/WAI/ARIA/apg/patterns/listbox/#keyboardinteraction">the listbox pattern</a>. It details keypresses you may expect (arrow keys, <kbd>Space</kbd>, and <kbd>Enter</kbd>), as well as less-common ones (<a href="https://en.wikipedia.org/wiki/Typeahead">typeahead</a> selection and making multiple selections). Here, we need to <a href="#the-spirit-of-aria-reflects-the-era-in-which-it-was-created">remember that ARIA is based on the Windows XP era</a>. The keyboard-based interaction the APG suggests is built from the muscle memory established from the UI patterns used on this operating system.</p>

<p>While your tree view component may look visually different from the one on your operating system, <a href="https://github.blog/engineering/user-experience/considerations-for-making-a-tree-view-component-accessible/#start-with-windows">people will expect it to be keyboard operable in the same way</a>. Honoring this expectation will go a long way to <strong>ensuring your experiences are not only accessible but also intuitive and efficient to use</strong>.</p>

<p>Another strength of the APG is giving <a href="https://www.w3.org/WAI/ARIA/apg/patterns/">standardized, centralized names to UI patterns</a>. Is it a dropdown? A listbox? A combobox? A select menu? <a href="https://adrianroselli.com/2020/03/stop-using-drop-down.html">Something else</a>?</p>

<p>When it comes to digital accessibility, these terms all have specific meanings, as well as expectations that come with them. Having a common vocabulary when discussing how an experience should work goes a long way to <strong>ensuring everyone will be on the same page</strong> when it comes time to make and maintain things.</p>

<h2 id="macos-voiceover-can-also-lead-you-astray">macOS VoiceOver Can Also Lead You Astray</h2>

<p><a href="https://support.apple.com/guide/voiceover/welcome/mac">VoiceOver on macOS</a> has been <a href="https://www.applevis.com/forum/macos-mac-apps/state-screen-readers-macos">experiencing a lot of problems</a> over the last few years. If I could wager a guess as to why this is, as an outsider, it is that Apple’s priorities are <a href="https://www.apple.com/visionos/visionos-2/">focused elsewhere</a>.</p>

<p>The bulk of web development efforts are conducted on macOS. This means that well-intentioned developers will reach for VoiceOver, as it comes bundled with macOS and is therefore more convenient. However, macOS VoiceOver usage has a drastic minority share for desktops and laptops. It is under 10% of usage, with Windows-based JAWS and NVDA occupying a combined 78.2% majority share:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://webaim.org/projects/screenreadersurvey10/#primary">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="526"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/16-webaim-pie-chart.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/16-webaim-pie-chart.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/16-webaim-pie-chart.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/16-webaim-pie-chart.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/16-webaim-pie-chart.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/16-webaim-pie-chart.png"
			
			sizes="100vw"
			alt="A pie chart. The legend of the pie chart reads, “JAWS, 40.5%”, “NVDA, 37.7%”, “VoiceOver, 9.7%”, “SuperNova, 3.7%”, “ZoomText, 207%”, “Orca, 2.4%”, “Narrator, 0.7%”, and “Other, 2.7%.” Cropped screenshot."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Image source: <a href='https://webaim.org/projects/screenreadersurvey10/#primary'>WebAIM Screen Reader User Survey #10</a>. (<a href='https://files.smashing.media/articles/what-i-wish-someone-told-me-aria/16-webaim-pie-chart.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="the-problem">The Problem</h3>

<p>The sad, sorry truth of the matter is that macOS VoiceOver, in its current state, has a lot of problems. It should only be used to confirm that it can operate the experience the way Windows-based screen readers can.</p>

<p>This means testing on Windows with NVDA or JAWS will <strong>create an experience that is far more accurate to what most people who use screen readers on a laptop or desktop will experience</strong>.</p>

<h3 id="dealing-with-the-problem">Dealing With The Problem</h3>

<p>Because of this situation, I heavily encourage a workflow that involves:</p>

<ol>
<li>Creating an experience’s underlying markup,</li>
<li>Testing it with NVDA or JAWS to set up baseline expectations,</li>
<li>Testing it with macOS VoiceOver to identify what doesn’t work as expected.</li>
</ol>

<p>Most of the time, I find myself having to <a href="#declaring-an-aria-role-on-something-that-already-uses-that-role-implicitly-does-not-make-it-extra-accessible">declare redundant ARIA on the semantic HTML I write</a> in order to address missed expected announcements for macOS VoiceOver.</p>

<p><strong>macOS VoiceOver testing is still important to do</strong>, as it is not the fault of the person who uses macOS VoiceOver to get what they need, and we should ensure they can still have access.</p>

<p>You can use apps like <a href="https://www.virtualbox.org/">VirtualBox</a> and <a href="https://www.microsoft.com/en-us/evalcenter/evaluate-windows-11-enterprise">Windows evaluation Virtual Machines</a> to use Windows in your macOS development environment. Services like <a href="https://assistivlabs.com/">AssistivLabs</a> also make on-demand, preconfigured testing easy.</p>

<p><strong>What About iOS VoiceOver?</strong></p>

<p>Despite sharing the same name, <a href="https://support.apple.com/guide/iphone/turn-on-and-practice-voiceover-iph3e2e415f/ios">VoiceOver on iOS</a> is a completely different animal. As software, it is separate from its desktop equivalent and also enjoys <a href="https://webaim.org/projects/screenreadersurvey10/#mobileplatforms">a whopping 70.6% usage share</a>.</p>

<p>With this knowledge, know that it’s also important to <strong>test the ARIA you write on mobile</strong> to make sure it works as intended.</p>

<h2 id="you-can-style-aria">You Can Style ARIA</h2>

<p>ARIA attributes can be targeted via CSS the way other HTML attributes can. Consider this HTML markup for the main navigation portion of a small e-commerce site:</p>

<pre><code class="language-html">&lt;nav aria-label="Main"&gt;
  &lt;ul&gt;
    &lt;li&gt;
      &lt;a href="/home/"&gt;Home&lt;/a&gt;
      &lt;a href="/products/"&gt;Products&lt;/a&gt;
      &lt;a aria-current="true" href="/about-us/"&gt;About Us&lt;/a&gt;
      &lt;a href="/contact/"&gt;Contact&lt;/a&gt;
    &lt;/li&gt;
  &lt;/ul&gt;
&lt;/nav&gt;
</code></pre>

<p>The presence of <code>aria-current=&quot;true&quot;</code> on the “About Us” link will tell assistive technology to <a href="https://tink.uk/using-the-aria-current-attribute/">announce that it is the current part of the site someone is on</a> if they are navigating through the main site navigation.</p>

<p>We can also tie that indicator of being the current part of the site into something that is shown visually. Here’s how you can target the attribute in CSS:</p>

<pre><code class="language-css">nav[aria-label="Main"] [aria-current="true"] {
  border-bottom: 2px solid #ffffff;
}
</code></pre>

<p>This is <strong>an incredibly powerful way to</strong> <a href="https://css-tricks.com/user-facing-state/"><strong>tie application state to user-facing state</strong></a>. Combine it with modern CSS like <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/:has"><code>:has()</code></a> and <a href="https://developer.chrome.com/docs/web-platform/view-transitions">view transitions</a> and you have the ability to create robust, sophisticated UI with less reliance on JavaScript.</p>

<h2 id="you-can-also-use-aria-when-writing-ui-tests">You Can Also Use ARIA When Writing UI Tests</h2>

<p><a href="https://en.wikipedia.org/wiki/Software_testing">Tests</a> are great. They help guarantee that the code you work on will continue to do what you intended it to do.</p>

<p>A lot of web UI-based testing will use the presence of classes (e.g., <code>.is-expanded</code>) or data attributes (ex, <code>data-expanded</code>) to verify a UI’s existence, position and states. These types of selectors also have a far greater likelihood to be changed as time goes on when compared to semantic code and ARIA declarations.</p>

<p>This is something my coworker Cam McHenry touches on in his great post, <a href="https://camchenry.com/blog/how-i-write-accessible-playwright-tests">“How I write accessible Playwright tests”</a>. Consider this piece of <a href="https://playwright.dev/">Playwright</a> code, which checks for the presence of a button that toggles open an edit menu:</p>

<div class="break-out">
<pre><code class="language-javascript">// Selects an element with a role of `button` 
// that has an accessible name of "Edit"
const editMenuButton = await page.getByRole('button', { name: "Edit" });

// Requires the edit button to have a property 
// of `aria-haspopup` with a value of `true`
expect(editMenuButton).toHaveAttribute('aria-haspopup', 'true');
</code></pre>
</div>

<p>The test selects UI based on outcome rather than appearance. That’s <strong>a far more reliable way to target things in the long-term</strong>.</p>

<p>This all helps to create a virtuous feedback cycle. It enshrines semantic HTML and ARIA’s presence in your front-end UI code, which helps to guarantee accessible experiences don’t regress. Combining this with styling, you have a <strong>powerful, self-contained system for building robust, accessible experiences</strong>.</p>

<h2 id="aria-is-ultimately-about-caring-about-people">ARIA Is Ultimately About Caring About People</h2>

<p>Web accessibility can be about enabling important things like scheduling medical appointments. It is also about fun things like chatting with your friends. It’s also used for every web experience that lives in between.</p>

<p>Using semantic HTML &mdash; supplemented with a judicious application of ARIA &mdash; helps you enable these experiences. To sum things up, ARIA:</p>

<ul>
<li>Has been around for a long time, and its spirit reflects the era in which it was first created;</li>
<li>Has a governing taxonomy, vocabulary, and rules for use and is declared in the same way HTML attributes are;</li>
<li>Is mostly used for dynamically updating things, controlled via JavaScript;</li>
<li>Has highly specific use cases in mind for each of its roles;</li>
<li>Fails silently if mis-authored;</li>
<li>Only exposes the presence of something to assistive technology and does not confer interactivity;</li>
<li>Requires input from the web browser, but also the operating system, in order for assistive technology to use it;</li>
<li>Has a range of actual support, complicated by the more of it you use;</li>
<li>Has some things to watch out for, namely <code>aria-label</code>, the ARIA Authoring Practices Guide, and macOS VoiceOver support;</li>
<li>Can also be used for things like visual styling and writing resilient tests;</li>
<li>Is best evaluated by using actual assistive technology.</li>
</ul>

<p>Viewed one way, ARIA is arcane, full of misconceptions, and fraught with potential missteps. Viewed another, ARIA is a beautiful and elegant way to programmatically communicate the interactivity and state of a user interface.</p>

<p>I choose the second view. At the end of the day, using ARIA helps to <strong>ensure that disabled people can use a web experience the same way everyone else can</strong>.</p>

<p><em>Thank you to <a href="https://adrianroselli.com/">Adrian Roselli</a> and <a href="https://janmaarten.com/">Jan Maarten</a> for their feedback.</em></p>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li>“<a href="https://www.lullabot.com/articles/what-heck-aria-beginners-guide-aria-accessibility">What the Heck is ARIA? A Beginner’s Guide to ARIA for Accessibility</a>,” Kat Shaw</li>
<li>“<a href="https://www.smashingmagazine.com/2015/03/web-accessibility-with-accessibility-api/">Accessibility APIs: A Key To Web Accessibility</a>,” Léonie Watson &amp; Chaals McCathie Nevile</li>
<li>“<a href="https://alistapart.com/article/semantics-to-screen-readers/">Semantics to Screen Readers</a>,” Melanie Richards</li>
<li>“<a href="https://www.tpgi.com/what-aria-does-not-do/">What ARIA does not do</a>,” Steve Faulkner</li>
<li>“<a href="https://html5accessibility.com/stuff/2024/07/15/what-aria-still-does-not-do/">What ARIA still does not do</a>,” stevef</li>
<li>“<a href="https://www.deque.com/blog/apg-support-tables-why-they-matter/">APG support tables &mdash; why they matter</a>,” Michael Fairchild</li>
<li>“<a href="https://adrianroselli.com/2023/02/aria-vs-html.html">ARIA vs HTML</a>,” Adrian Roselli</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(gg, yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Talke Hoppmann-Walton</author><title>“Product Kondo”: A Guide To Evaluating Your Organizational Product Portfolio</title><link>https://www.smashingmagazine.com/2025/04/product-kondo-guide-evaluating-organizational-product-portfolio/</link><pubDate>Fri, 25 Apr 2025 13:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2025/04/product-kondo-guide-evaluating-organizational-product-portfolio/</guid><description>It starts with good intentions — a quick fix here, a shiny feature there — and suddenly, your product portfolio’s bursting at the seams. In this guide, Talke Hoppmann-Walton walks you through a “Product Kondo” exercise to declutter, realign, and spark some serious product joy for both your business and your customers.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2025/04/product-kondo-guide-evaluating-organizational-product-portfolio/" />
              <title>“Product Kondo”: A Guide To Evaluating Your Organizational Product Portfolio</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>“Product Kondo”: A Guide To Evaluating Your Organizational Product Portfolio</h1>
                  
                    
                    <address>Talke Hoppmann-Walton</address>
                  
                  <time datetime="2025-04-25T13:00:00&#43;00:00" class="op-published">2025-04-25T13:00:00+00:00</time>
                  <time datetime="2025-04-25T13:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>When building digital products, thinking in terms of single features and urgent client needs can lead to a large portfolio of products with <strong>high maintenance costs</strong>. At first, this approach makes sense, as you’re offering new value to customers and keeping important clients happy. But, over time, you often end up with a collection of highly bespoke solutions that ignore two key principles:</p>

<ol>
<li>Your product portfolio should cater to your core customer segments and meet their needs.</li>
<li>Your product portfolio should balance the short-term benefits of bespoke solutions against long-term maintenance costs while aligning with your business strategy.</li>
</ol>

<p>So the reality often looks like this: large legacy product portfolios have grown over time, and the effort required to clean up is hard to prioritize against other seemingly more pressing topics.</p>

<p>This article highlights the <strong>benefits of going through a clean-up exercise</strong> and explains how to conduct a <strong>“Product Kondo” exercise</strong> on your product portfolio. Like Marie Kondo, the Japanese master of cleaning up closets and houses to keep what brings you joy, discard what you no longer need, and organize what you keep into a workable order, this exercise seeks to identify the most valuable items for both your business and your customers. This article discusses the issues with large legacy portfolios and explains <em>how</em> to simplify and organize them into <strong>customer-centric portfolios</strong>, with stakeholder buy-in throughout the process.</p>

<h2 id="overflowing-product-cupboards">Overflowing Product Cupboards</h2>

<p>There are many reasons why an organization might end up with a large legacy product portfolio, which, similar to the cupboards organized by Marie Kondo, is in dire need of a good clean-up. Whether your portfolio is overgrown from crafting bespoke solutions for important enterprise clients (a common B2B scenario), from testing new features with a B2C customer segment, or various other possible reasons, incentive structures chiefly among them &mdash; overgrown portfolios are very common. And the problem is they need to not just be developed in the first place, they <strong>need to be maintained</strong>, and that gets ever more <strong>costly</strong> and <strong>complex</strong> over time.</p>

<p>While this might be oversimplified, the general logic holds true: the more bespoke your product portfolio, the harder it is to keep clean and tidy. Or as Marie Kondo would say, <em>“In a messy cupboard, it’s impossible to find the pieces that truly bring you joy.”</em> In this context, joy translates into:</p>

<ol>
<li>Value for the customer,</li>
<li>Revenue for the business.</li>
</ol>

<p>If you want to work out how to find that joy in your product portfolio again, this article outlines the practical steps taken for such a “Product Kondo” exercise in a global not-for-profit organization with a large legacy portfolio, including the moment when theory met reality, and the learnings from this effort.</p>

<p>We conducted this clean-up in a globally distributed organization undergoing a wider transformation. For more than 20 years, the organization had been gathering and distributing data in various formats: from raw to modelled data, scores, and advanced data products. However, it had not been focused on customer centricity nor regarded products as strategic differentiators. This meant that key indicators of success for product organizations had never been tracked. So the challenge was to map out and simplify the portfolio with very few indicators available to track product performance (e.g., user analytics data).</p>

<blockquote>So, how do you start understanding where the value lies in your portfolio and what factors are driving this portfolio clean-up in the first place?</blockquote>

<p>As part of the wider organizational transformation, one consideration was to <strong>simplify the product portfolio</strong> in order to reduce maintenance costs and the technical effort required for a planned migration to a new platform. Another important concern was to <strong>align future development with the newly developed business strategy</strong>. Therefore, reducing costs and planning for the future were the key drivers.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p><p>Meet <a data-instant href="/the-smashing-newsletter/"><strong>Smashing Email Newsletter</strong></a> with useful tips on front-end, design &amp; UX. Subscribe and <strong>get “Smart Interface Design Checklists”</strong> &mdash; a <strong>free PDF deck</strong> with 150+ questions to ask yourself when designing and building almost <em>anything</em>.</p><div><section class="nlbf"><form action="//smashingmagazine.us1.list-manage.com/subscribe/post?u=16b832d9ad4b28edf261f34df&amp;id=a1666656e0" method="post"><div class="nlbwrapper"><label for="mce-EMAIL-hp" class="sr-only">Your (smashing) email</label><div class="nlbgroup"><input type="email" name="EMAIL" class="nlbf-email" id="mce-EMAIL-hp" placeholder="Your email">
<input type="submit" value="Meow!" name="subscribe" class="nlbf-button"></div></div></form><style>.c-garfield-the-cat .nlbwrapper{margin-bottom: 0;}.nlbf{display:flex;padding-bottom:.25em;padding-top:.5em;text-align:center;letter-spacing:-.5px;color:#fff;font-size:1.15em}.nlbgroup:hover{box-shadow:0 1px 7px -5px rgba(50,50,93,.25),0 3px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025)}.nlbf .nlbf-button,.nlbf .nlbf-email{flex-grow:1;flex-shrink:0;width:auto;margin:0;padding:.75em 1em;border:0;border-radius:11px;background:#fff;font-size:1em;box-shadow:none}.promo-box .nlbf-button:focus,.promo-box input.nlbf-email:active,.promo-box input.nlbf-email:focus{box-shadow:none}.nlbf-button:-ms-input-placeholder,.nlbf-email:-ms-input-placeholder{color:#777;font-style:italic}.nlbf-button::-webkit-input-placeholder,.nlbf-email::-webkit-input-placeholder{color:#777;font-style:italic}.nlbf-button:-ms-input-placeholder,.nlbf-button::-moz-placeholder,.nlbf-button::placeholder,.nlbf-email:-ms-input-placeholder,.nlbf-email::-moz-placeholder,.nlbf-email::placeholder{color:#777;font-style:italic}.nlbf .nlbf-button{transition:all .2s ease-in-out;color:#fff;background-color:#0168b8;font-weight:700;box-shadow:0 1px 1px rgba(0,0,0,.3);width:100%;border:0;border-left:1px solid #ddd;flex:2;border-top-left-radius:0;border-bottom-left-radius:0}.nlbf .nlbf-email{border-top-right-radius:0;border-bottom-right-radius:0;width:100%;flex:4;min-width:150px}@media all and (max-width:650px){.nlbf .nlbgroup{flex-wrap:wrap;box-shadow:none}.nlbf .nlbf-button,.nlbf .nlbf-email{border-radius:11px;border-left:none}.nlbf .nlbf-email{box-shadow:0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025);min-width:100%}.nlbf .nlbf-button{margin-top:1em;box-shadow:0 1px 1px rgba(0,0,0,.5)}}.nlbf .nlbf-button:active,.nlbf .nlbf-button:focus,.nlbf .nlbf-button:hover{cursor:pointer;color:#fff;background-color:#0168b8;border-color:#dadada;box-shadow:0 1px 1px rgba(0,0,0,.3)}.nlbf .nlbf-button:active,.nlbf .nlbf-button:focus{outline:0!important;text-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:inset 0 3px 3px rgba(0,0,0,.3)}.nlbgroup{display:flex;box-shadow:0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025);border-radius:11px;transition:box-shadow .2s ease-in-out}.nlbwrapper{display:flex;flex-direction:column;justify-content:center}.nlbf form{width:100%}.nlbf .nlbgroup{margin:0}.nlbcaption{font-size:.9em;line-height:1.5em;color:#fff;border-radius:11px;padding:.5em 1em;display:inline-block;background-color:#0067b859;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.wf-loaded-stage2 .nlbf .nlbf-button{font-family:Mija}.mts{margin-top: 5px !important;}.mbn{margin-bottom: 0 !important;}</style></section><p class="mts mbn"><small class="promo-box__footer mtm block grey"><em>Once a week. Useful tips on <a href="https://www.smashingmagazine.com/the-smashing-newsletter/">front-end &amp; UX</a>. Trusted by 207.000 friendly folks.</em></small></p></div></p>
</div>
</div>
<div class="feature-panel-right-col">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-firechat.svg"
    alt="Feature Panel"
    width="310"
    height="400"
/>

</div>

<p></div>
</aside>
</div></p>

<h2 id="the-product-kondo-portfolio-clean-up">The “Product Kondo” Portfolio Clean-up</h2>

<p>So if you find yourself in a similar situation, where you have a complex legacy portfolio, and where across many years features have been added, but hardly anything has ever been sunset, a “Product Kondo” clean-up, i.e., a cleaning out of your product cupboards, might be what’s needed.</p>

<p>To do that, it’s useful to go in with two ideas:</p>

<ul>
<li>Transparency about the need to simplify;</li>
<li>Transparency about how decisions will be made, so teams are on board and able to contribute.</li>
</ul>

<p>Getting buy-in and building a narrative everyone understands and sees as relevant is crucial when trying to clean up &mdash; especially in large companies, where you’ll always find someone who thinks “we need everything,” and the relative importance of different customer segments is unclear, with no accurate portfolio overview in place.</p>

<blockquote>If you’re unclear about the state of your current portfolio, how do you know where to focus next strategically?</blockquote>

<p>Not knowing where the highest value lies in your portfolio and how it all maps out as a whole has another implication: If you don’t know your current status quo, it’s hard to plan ahead and it’s equally hard to get out of the delivery mode many product organizations find themselves in, where you simply build what gets requested, but can’t act as a driver of future growth.</p>

<p>To organize a portfolio in order to define how to handle it going forward, while not having much information to base decisions on, the high-level approach was this:</p>

<ol>
<li>Define the <strong>FOR WHOM</strong> (By building a user segmentation matrix).</li>
<li>Establish the <strong>STATUS QUO</strong> (By auditing previous attempts to map the portfolio).</li>
<li>Agree the <strong>HOW</strong> (By defining evaluation criteria &amp; prioritisation).</li>
<li>Ensuring <strong>BUY-IN</strong> (through deep dives with key stakeholders and experts).</li>
</ol>

<p><strong>Note</strong>: <em>Every company is different, especially regarding the information that’s available. So this is not an attempt at building the next framework or providing a one-size-fits-all approach to portfolio organization. Instead, it is a proposed solution for how to approach mapping out your current portfolio to start from a cleaner slate, with your customer segments in mind. These four areas of work should be considered as necessary when attempting a “product kondo” exercise in your own organization.</em></p>

<h3 id="1-for-whom-building-a-user-segmentation-matrix">1. For Whom? Building A User Segmentation Matrix</h3>

<p>First things first, if you’re not clear about your <strong>primary and secondary customer segments</strong>, then this is where to start. If you want teams to be able to focus, it’s crucial to define priorities. Identifying key external user groups/segments, understanding their differences, and assessing their importance to the organization’s overall business success is a great start. Building a user segmentation matrix is a great foundation for prioritizing efforts and aligning services/products around user needs.</p>

<p>Apart from establishing the key jobs-to-be-done, goals, and pain points for each customer segment, it fosters transparency around the following factors:</p>

<ul>
<li>Thinking from a customer perspective.</li>
<li>Considering measurable data like user numbers, size of accounts, and revenue.</li>
<li>The fact that some user groups are more valuable to an organization than others, hence should be ranked higher in a prioritization effort.</li>
</ul>

<p>How to define user segments, with different levels of relevance to the organization and its future strategy, <a href="https://www.smashingmagazine.com/2024/05/building-user-segmentation-matrix-foster-cross-org-alignment/">is described in more detail here</a>. It was the initial mental model shared across teams prior to starting this portfolio simplification effort.</p>

<p>Next up: Understanding the current status quo and building a “source of truth” of everything considered under the remit of the product organization. Because you need a clear reference point to get started.</p>

<h3 id="2-status-quo-auditing-and-defining-what-to-measure">2. Status Quo: Auditing And Defining What To Measure</h3>

<p>To determine the best approach and size the task ahead, understanding what had been done before was crucial, so as not to reinvent the wheel. It was clear that the organization had a sprawling product catalogue that contained a varied mix of different items, lacking clear definitions and categorization.</p>

<p>The initial audit was about updating the product catalog that had been assembled three years earlier and adding information that would be relevant for assessing relative value. As revenue, user numbers, or development effort had never been tracked, this is where we gathered additional insights on each item from the product owners (POs) responsible.</p>

<p>The assessment criteria were partly taken from the previous effort (criteria 1-9), and further criteria were added to obtain a more holistic picture (criteria 10-15). See the table below.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/1-portfolio-evaluation-criteria.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/1-portfolio-evaluation-criteria.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/1-portfolio-evaluation-criteria.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/1-portfolio-evaluation-criteria.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/1-portfolio-evaluation-criteria.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/1-portfolio-evaluation-criteria.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/1-portfolio-evaluation-criteria.png"
			
			sizes="100vw"
			alt="Evaluation criteria and agreed relevance"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Evaluation criteria and agreed relevance. (<a href='https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/1-portfolio-evaluation-criteria.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="3-how-doing-the-audit">3. How? Doing The Audit</h3>

<p>In order to be transparent about decision-making, it was important to agree on the <strong>evaluation criteria and scoring</strong> with key stakeholders upfront and ensure every contributor understood that a lack of data would lead to low scores. To that end, we asked all 36 product owners (POs) to submit data for each product under their remit. As the organization had not previously tracked this information, the initial responses were often quite vague, and many cells were left blank.</p>

<p>To increase data quality and make data-based decisions, 1:1 interviews with POs allowed us to answer questions and build out “best guess” assumptions together in cases of missing data.</p>

<p><strong>Note</strong>: <em>While not technically perfect, we decided that moving forward with assumptions grounded in subject matter expertise, rather than completely missing data, would be preferable.</em></p>

<p class="c-pre-sidenote--left">Lastly, some inputs like “automation potential” were hard to assess for less technical POs. Our approach here followed the product mindset that while it is important to make data-informed decisions, “done is better than perfect.” So once we had enough confidence in the picture that emerged, we proceeded with scoring in the interest of time.</p>
<p class="c-sidenote c-sidenote--right">As a side note regarding data quality: 1. Manually cleaning inputs throughout (e.g., removing duplicates) and 2. following up until clear inputs were provided, helped increase input quality. In addition, predefined ranges led to higher data quality than inputs requiring hard-to-quantify data, like, e.g., expected impact.</p>

<h4 id="3-1-scoring">3.1. Scoring</h4>

<p>Defining the scoring methodology upfront and getting stakeholders to align on the relevance of different criteria transparently was crucial for this work. Particularly keeping in mind that simplifying (in other words, reducing) the portfolio has an immediate impact on various teams, communicating openly about what is being done, how, and why is important, so everyone understands the longer-term goal: <strong>to reduce cost, maintenance, and prepare for future growth</strong>.</p>

<p>The image below illustrates the three stages that led to the prioritized list and score for each item.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/2-overview-scoring-methodology.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/2-overview-scoring-methodology.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/2-overview-scoring-methodology.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/2-overview-scoring-methodology.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/2-overview-scoring-methodology.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/2-overview-scoring-methodology.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/2-overview-scoring-methodology.png"
			
			sizes="100vw"
			alt="Overview of the Scoring methodology"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Image 2: Overview of the Scoring methodology. (<a href='https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/2-overview-scoring-methodology.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The outcome of this stage now ranked the business and user value for each data product, and the initial expectation was that this was the end of the portfolio cleanup. A list of all items ranked by their value to the business, so that, e.g., the bottom half could be cut and the rest migrated to the new technical platform in order of priority.</p>

<p>At least that was the theory, and this is where it met reality.</p>

<h4 id="dealing-with-change-reality">Dealing With <del>Change</del> Reality</h4>

<p>Once the weighted list was ready and the whole portfolio was ranked, it became clear that what was considered the “Product portfolio” in fact consisted of 12 different types of items, and roughly 70% of them could not be considered actual products.</p>

<p>While inside the organization, everything was called a PRODUCT, it became clear that the types of items referred to as “products” were in fact a mixed bag of trackers, tables, graphs, extracts, data sets, dashboards, reports, tools, scoring, and so on. And many low-ranking internal-facing tools enabled highly relevant customer-facing products.</p>

<p>The list was essentially comparing “apples to oranges,” and that meant that simply cutting the bottom half of lower-scoring items would lead to the whole “house of cards” tumbling down, especially as a lot of items had dependencies on each other.</p>

<h4 id="what-to-do">What To Do?</h4>

<p>First and foremost, we worked with leadership to explain the issue of missing categorization in the portfolio and the risks that cutting the lower-scoring half of the list would entail, especially due to the time pressures of the wider ongoing transformation effort.</p>

<p>Next, we proposed to work with key product owners and leaders to help <strong>categorize the portfolio correctly</strong>, in order to determine how best to handle each item going forward.</p>

<p>We used the following five buckets to enable sorting, with the intention of keeping the “other” category as small as possible.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/3-categorization-data-products.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="456"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/3-categorization-data-products.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/3-categorization-data-products.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/3-categorization-data-products.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/3-categorization-data-products.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/3-categorization-data-products.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/3-categorization-data-products.png"
			
			sizes="100vw"
			alt="“Buckets” used for categorization"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      “Buckets” used for categorization. (<a href='https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/3-categorization-data-products.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Aside from simplifying the terminology used, this categorization meant that each category could be handled differently in terms of future work.</p>

<p>For example, all raw data items would be automated, while the process around “low effort” data items didn’t have to be changed going forward, once it was clear how low the manual effort actually was. Notably, the categorization included a “Sunset/Stop” category to allow stakeholders to already move items there during the deep dives of their own volition, rather than through top-down decision making.</p>

<h3 id="4-getting-buy-in-building-product-trees">4. Getting Buy-in: Building Product Trees</h3>

<p>To get buy-in and allow for active contributions from subject matter experts, we planned <strong>workshops per customer segment</strong> (as defined by the user segmentation matrix &mdash; the initial starting point). Aside from organizing the portfolio items, these workshops allowed key people to be actively involved and thereby act as advocates for the future success of this work.</p>

<p>Using Miro boards to share all audit findings, goals, and the purpose of the clean-up, we conducted seven workshops overall. With 4&ndash;6 participants, we spent 3 hours categorizing all items per customer segment. In order to avoid groupthink, all participants were asked to cluster their part of the portfolio as part of the preparation.</p>

<p><strong>The “product tree” concept</strong>, developed as an innovation game called “prune the product tree” by <a href="https://www.lukehohmann.com/innovation-games/prune-the-product-tree">Luke Hohmann</a> to organize features around customer needs, helped create a shared mental model among participants. In contrast to Hohmann, we applied the product tree concept here to organize the current portfolio logically and actively reduce it, rather than imagine new products.</p>

<p>In this context, the roots of the tree signified raw data, the tree trunk equated to modeled or derived data, with the crown of the tree signifying data products, and the outer branches were left for “other” items &mdash; to capture what could not be easily grouped but had to be included.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/4-product-tree-metaphor.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="455"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/4-product-tree-metaphor.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/4-product-tree-metaphor.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/4-product-tree-metaphor.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/4-product-tree-metaphor.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/4-product-tree-metaphor.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/4-product-tree-metaphor.png"
			
			sizes="100vw"
			alt="Product tree metaphor for categorization"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Product tree metaphor for categorization. (<a href='https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/4-product-tree-metaphor.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Grouping items in this way served a second purpose: to guide how to handle them in the future transformation effort. The plan was to automate raw data first, based on priority. While modeled or derived data would have to be checked for complexity to determine future handling. The actual data products identified would be crucial for the company’s future strategy and were to be reimagined with a product mindset going forward.</p>

<p>The tree metaphor worked well here, despite being used in a different way from its original context, as it provided <strong>a mental model for categorization</strong>. By clustering items, it was possible to better determine their value for each customer segment in the portfolio. According to the feedback gathered after each workshop, the joint mapping and visualization helped teams trust the process and feel actively involved.</p>

<h2 id="findings">Findings</h2>

<p>Analyzing the findings from the workshops revealed the complexity of this effort, with many different factors playing into the prioritization. To visualize this complexity, we used the following approach:</p>

<ul>
<li>Mapping out the product tree by swimlanes (as introduced in the workshops).</li>
<li>Layering in usage across multiple segments (through color-coding).</li>
<li>Adding the level of dependencies (through the type of frame around each item).</li>
<li>Then, add the quantitative assessment and ranking through numbering and color-coding.</li>
</ul>

<p>For each workshop, we cleaned up the boards, making sure to include crucial comments, especially those about future treatment, such as when a legal obligation to deliver would end.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/5-product-tree-example.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/5-product-tree-example.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/5-product-tree-example.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/5-product-tree-example.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/5-product-tree-example.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/5-product-tree-example.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/5-product-tree-example.png"
			
			sizes="100vw"
			alt="Product tree example"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Organizing data items into swimlanes, following the product tree metaphor. (<a href='https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/5-product-tree-example.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Using swimlanes helped participants organize data items, while the tree metaphor clarified the interconnectedness and dependencies between items. Especially in the context of data products, this makes a lot of sense, e.g., with raw data being at the root of all other possible versions of “products” derived from them, whether these might be scores, modelled data, automated reports, or more advanced products.</p>

<blockquote>Doing this Product Kondo exercise also helped the teams and all stakeholders gain a shared understanding of how the portfolio was structured for each customer segment. The visualization in swimlanes and with colour-coding and various different frames provided a way to illustrate the complex reality that the initial ranked list format wasn’t able to clarify.</blockquote>

<p>Only once this portfolio mapping was in place, and once quantitative as well as qualitative insights were combined, was it possible to make good decisions about how to handle each item going forward.</p>

<p>For example, all items in the “raw data” category would be automated as part of the wider transformation effort, while all items in the “sunset” category would definitely not be considered for migrating over to the new tech platform. Moreover, the items grouped under “low effort” would continue to be handled manually, while all items grouped under “derived &amp; modelled” would have to be assessed further by a team of tech leads to determine whether or not they might be automated in the future. The items most relevant for the future business strategy of this organization were those grouped under “data products”, i.e., those products that would have to be re-imagined with clear customer needs in mind, based on the user segmentation matrix.</p>

<div class="partners__lead-place"></div>

<h2 id="learnings">Learnings</h2>

<p>In total, we achieved a portfolio reduction of 67.8% from 198 items initially to 118 post clean-up. However, what matters here is not simply the reduction but the <strong>categorization</strong>, i.e., separating and organizing the portfolio into different swimlanes and introducing the product tree metaphor. <strong>The product tree visualisation</strong> helped all stakeholders understand the interconnectedness of the portfolio, where the roots signify the core product and the branches different, more advanced products or features built on top of that core.</p>

<p>Similarly, <strong>the categorization into swimlanes</strong> helped to organize and cluster similar items, getting away from comparing apples and oranges in the initial big portfolio audit table. It illustrated very clearly that not all items are alike and can’t be judged and rated in the same way.</p>

<p>It is worth mentioning that there is no one best way to label your swimlanes, but a good starting point is to think of naming different clusters, e.g., from basic to most complex, and to always include a “sunset/stop” cluster and potentially one that covers “redesign/tech upgrade” items. Having these two buckets allows contributors to actively shape the decision-making around the quick-win items, usually the most obviously outdated or clunky parts of the portfolio.</p>

<p>Whether or not you categorize your products in order to determine how to handle them in an organizational transformation, e.g., to assess automation potential, will largely depend on <em>why</em> and <em>when</em> you’re cleaning up your product portfolio. Even outside of a transformation effort, clustering your portfolio into different categories, understanding interconnectedness, and whether or not each customer segment has a well-rounded product tree, with solid roots and future-looking branches, is a useful exercise in sense-making and keeping your organization lean.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/6-product-kondo-categorisation.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/6-product-kondo-categorisation.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/6-product-kondo-categorisation.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/6-product-kondo-categorisation.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/6-product-kondo-categorisation.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/6-product-kondo-categorisation.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/6-product-kondo-categorisation.png"
			
			sizes="100vw"
			alt="Product Kondo outcomes"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Product Kondo outcomes. (<a href='https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/6-product-kondo-categorisation.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="shared-terminology-matters">Shared Terminology Matters</h3>

<p>In all this, our biggest learning was that</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aTerminology%20matters%20because%20simply%20referring%20to%20things%20as%20%e2%80%9cproducts%e2%80%9d%20doesn%e2%80%99t%20make%20them%20so.%20Comparing%20like%20for%20like%20is%20a%20key%20factor%20when%20assessing%20a%20product%20portfolio.%0a&url=https://smashingmagazine.com%2f2025%2f04%2fproduct-kondo-guide-evaluating-organizational-product-portfolio%2f">
      
Terminology matters because simply referring to things as “products” doesn’t make them so. Comparing like for like is a key factor when assessing a product portfolio.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>Correct categorization was the biggest challenge that had to be dealt with first, to enable the organization to iterate and focus on where to play and re-imagine products to match the future business strategy.</p>

<h3 id="when-theory-meets-reality">When Theory Meets Reality</h3>

<p>This portfolio clean-up had to pivot and expand to include a mapping exercise because we hadn’t factored in the unclear terminology used across the organization, and that, instead of simply gathering and ranking, the biggest task was to correctly categorize and structure. And this is likely to be different from organization to organization. So I would always recommend checking which categories of items you’re comparing in your portfolio. If you’re not entirely sure, you should always include <strong>a clustering or mapping exercise</strong> right from the start.</p>

<h2 id="product-kondo-the-groundwork-for-transformation">Product Kondo: The Groundwork For Transformation</h2>

<p>If you’re struggling with a large legacy portfolio and no longer confident that everything in it serves a purpose and brings joy to users and the business, it’s time to clean up.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aIt%e2%80%99s%20often%20necessary%20and%20needed%20to%20focus%20on%20the%20next%20shiny%20thing,%20but%20if%20you%20don%e2%80%99t%20balance%20that%20with%20cleaning%20up%20your%20existing%20portfolio,%20your%20organization%20will%20eventually%20become%20slow.%20Overgrown%20product%20portfolios%20can%e2%80%99t%20be%20sustained%20forever.%0a&url=https://smashingmagazine.com%2f2025%2f04%2fproduct-kondo-guide-evaluating-organizational-product-portfolio%2f">
      
It’s often necessary and needed to focus on the next shiny thing, but if you don’t balance that with cleaning up your existing portfolio, your organization will eventually become slow. Overgrown product portfolios can’t be sustained forever.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>Particularly in organizations bound by various contractual obligations, this is the groundwork that enables product teams to iterate.</p>

<p>Moreover, doing this clean-up and clearing out effort across teams is a highly transparent way to include teams in change. And it is a useful way for getting teams to contribute and actively shape a transformation effort. Business decisions have to be taken, but taking them with <strong>transparency</strong> and in <strong>an evidence-guided way</strong> ensures that you are bringing people along.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/7-product-kondo-benefits.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="450"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/7-product-kondo-benefits.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/7-product-kondo-benefits.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/7-product-kondo-benefits.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/7-product-kondo-benefits.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/7-product-kondo-benefits.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/7-product-kondo-benefits.png"
			
			sizes="100vw"
			alt="Product Kondo benefits include the following: Focus, Impact, Decision making, Clean slate, Consistency, End-to-end"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Benefits of cleaning up your portfolio. (<a href='https://files.smashing.media/articles/product-kondo-guide-evaluating-organizational-product-portfolio/7-product-kondo-benefits.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Last but not least &mdash; if you don’t have the capacity to do the full portfolio clean-up (which took us about 4 months, with a core team of roughly 4 people) &mdash; start smaller. And start with including these considerations in your day-to-day, for example, by always checking if products or features should be stopped or sunset every time you’re launching new products. Or start by mapping out the different categories of items in your portfolio &mdash; with swimlanes and the product tree metaphor in mind. What is core, and what is the future state of play?</p>

<p><strong>Upside</strong>: Once you’ve got that big picture overview and worked out what to sunset or where to slim down, you have more capacity to focus on current and future priorities strategically.</p>

<p><strong>Reality check</strong>: Of course, the work doesn’t stop there. The next step is to align it all back to your user segments and check how your portfolio serves each of these, particularly the primary segments.</p>

<h3 id="further-reading">Further Reading</h3>

<ul>
<li>“<a href="https://medium.com/@userpilot/product-led-growth-the-ultimate-guide-for-software-companies-b9fa0779ef8f">Product-Led Growth: The Ultimate Guide for Software Companies</a>,” Userpilot</li>
<li>“<a href="https://itamargilad.com/book-evidence-guided/">Evidence-Guided: Creating High-Impact Products in the Face of Uncertainty</a>,” Itamar Gilad</li>
<li>“<a href="https://beyondthebacklog.com/2025/01/07/innovation-games/">Innovation Games: Exploring Luke Hohmann’s Game-Changing Approach</a>,” Matt Hicks</li>
<li>“<a href="https://www.smashingmagazine.com/2024/05/building-user-segmentation-matrix-foster-cross-org-alignment/">Building A User Segmentation Matrix To Foster Cross-Org Alignment</a>,” Talke Hoppmann-Walton</li>
<li>“<a href="https://www.savio.io/blog/how-to-create-a-product-portfolio-roadmap/">What Is A Product Portfolio Roadmap?</a>,” Kareem Mayan</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Atila Fassina</author><title>What Does AI Really Mean?</title><link>https://www.smashingmagazine.com/2025/01/understanding-ai-meaning/</link><pubDate>Mon, 06 Jan 2025 08:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2025/01/understanding-ai-meaning/</guid><description>We, as human beings, don’t worry too much about making sure the connections land at the right point. Our brain just works that way, declaratively. However, for building AI, we need to be more explicit. Let’s dive in!</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2025/01/understanding-ai-meaning/" />
              <title>What Does AI Really Mean?</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>What Does AI Really Mean?</h1>
                  
                    
                    <address>Atila Fassina</address>
                  
                  <time datetime="2025-01-06T08:00:00&#43;00:00" class="op-published">2025-01-06T08:00:00+00:00</time>
                  <time datetime="2025-01-06T08:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>In 2024, Artificial Intelligence (AI) hit the limelight with major advancements. The problem with reaching common knowledge and so much public attention so quickly is that the term becomes ambiguous. While we all have an approximation of what it means to “use AI” in something, it’s not widely understood what infrastructure having AI in your project, product, or feature entails.</p>

<p>So, let’s break down the concepts that make AI <em>tick</em>. How is data stored and correlated, and how are the relationships built in order for an algorithm <strong>to learn</strong> how to <strong>interpret</strong> that data? As with most data-oriented architectures, it all starts with a database.</p>

<h2 id="data-as-coordinates">Data As Coordinates</h2>

<p>Creating intelligence, whether artificial or natural, works in a very similar way. We store chunks of information, and we then <strong>connect</strong> them. Multiple visualization tools and metaphors show this in a 3-dimensional space with dots connected by lines on a graph. Those connections and their intersection are what make up for intelligence. For example, we put together “chocolate is sweet and nice” and “drinking hot milk makes you warm”, and we make “hot chocolate”.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/understanding-ai-meaning/3D-representation-molecule.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="340"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/understanding-ai-meaning/3D-representation-molecule.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/understanding-ai-meaning/3D-representation-molecule.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/understanding-ai-meaning/3D-representation-molecule.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/understanding-ai-meaning/3D-representation-molecule.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/understanding-ai-meaning/3D-representation-molecule.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/understanding-ai-meaning/3D-representation-molecule.png"
			
			sizes="100vw"
			alt="Tony Stark in Iron Man 2 looking at a 3D representation of a molecule &amp;mdash; which happens to be a great representation of a high dimensional graph."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (Image credit: <a href='https://www.marvel.com/'>Marvel Studios</a>)
    </figcaption>
  
</figure>

<p>We, as human beings, don’t worry too much about making sure the connections land at the right point. Our brain just works that way, declaratively. However, for building AI, we need to be more explicit. So think of it as a map. In order for a plane to leave CountryA and arrive at CountryB it requires a precise system: we have coordinates, we have 2 axis in our maps, and they can be represented as a vector: <code>[28.3772, 81.5707]</code>.</p>

<p>For our intelligence, we need a more complex system; 2 dimensions will not suffice; we need <strong>thousands</strong>. That’s what <strong>vector databases</strong> are. Our intelligence can now correlate terms based on the distance and/or angle between them, create cross-references, and establish patterns in which every term occurs.</p>

<p>A specialized database that stores and manages data as high-dimensional vectors. It enables efficient <strong>similarity searches</strong> and <strong>semantic matching</strong>.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="/printed-books/image-optimization/">Image Optimization</a></strong>, Addy Osmani’s new practical guide to optimizing and delivering <strong>high-quality images</strong> on the web. Everything in one single <strong>528-pages</strong> book.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/image-optimization/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/image-optimization/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/2c669cf1-c6ef-4c87-9901-018b04f7871f/image-optimization-shop-cover-opt.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/87fd0cfa-692e-459c-b2f3-15209a1f6aa7/image-optimization-shop-cover-opt.png"
    alt="Feature Panel"
    width="480"
    height="697"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="querying-per-approximation">Querying Per Approximation</h2>

<p>As stated in the last session, matching the search terms (your prompt) to the data is the exercise of semantic matching (it establishes the pattern in which keywords in your prompt are used within its own data), and the similarity search, the distance (angular or linear) between each entry. That’s actually a roughly accurate representation. What a similarity search does is define each of the numbers in a vector (that’s thousands of coordinates long), a point in this weird multi-dimensional space. Finally, to establish similarity between each of these points, the distance and/or angles between them are measured.</p>

<p>This is one of the reasons why AI isn’t deterministic &mdash; we also aren’t &mdash; for the same prompt, the search may produce different outputs based on how the scores are defined at that moment. If you’re building an AI system, there are algorithms you can use to establish how your data will be evaluated.</p>

<p>This can produce more precise and accurate results depending on the type of data. The main algorithms used are 3, and Each one of them performs better for a certain kind of data, so understanding the shape of the data and how each of these concepts will correlate is important to choosing the correct one. In a very hand-wavy way, here’s the rule-of-thumb to offer you a clue for each:</p>

<ul>
<li><strong>Cosine Similarity</strong><br />
Measures angle between vectors. So if the magnitude (the actual number) is less important. It’s great for text/semantic similarity</li>
<li><strong>Dot Product</strong><br />
Captures linear correlation and alignment. It’s great for establishing relationships between multiple points/features.</li>
<li><strong>Euclidean Distance</strong><br />
Calculates straight-line distance. It’s good for dense numerical spaces since it highlights the spatial distance.</li>
</ul>

<blockquote><strong>INFO</strong><br /><br />When working with non-structured data (like text entries: your tweets, a book, multiple recipes, your product’s documentation), <strong>cosine similarity</strong> is the way to go.</blockquote>

<p>Now that we understand how the data bulk is stored and the relationships are built, we can start talking about how the intelligence works &mdash; let the training begin!</p>

<div class="partners__lead-place"></div>

<h2 id="language-models">Language Models</h2>

<p>A language model is a system trained to understand, predict, and finally generate human-like text by learning statistical patterns and relationships between words and phrases in large text datasets. For such a system, language is represented as <strong>probabilistic sequences</strong>.</p>

<p>In that way, a language model is immediately capable of efficient completion (hence the quote stating that 90% of the code in Google is written by AI &mdash; auto-completion), translation, and conversation. Those tasks are the low-hanging fruits of AI because they depend on estimating the likelihood of word combinations and improve by reaffirming and adjusting the patterns based on usage feedback (rebalancing the similarity scores).</p>

<p>As of now, we understand what a language model is, and we can start classifying them as <strong>large</strong> and <strong>small</strong>.</p>

<h3 id="large-language-models-llms">Large Language Models (LLMs)</h3>

<p>As the name says, use large-scale datasets &amp;mdash with billions of parameters, like up to 70 billion. This allows them to be diverse and capable of creating human-like text across different knowledge domains.
Think of them as big generalists. This makes them not only versatile but extremely powerful. And as a consequence, training them demands a lot of computational work.</p>

<h3 id="small-language-models-slms">Small Language Models (SLMs)</h3>

<p>With a smaller dataset, with numbers ranging from 100 million to 3 billion parameters. They take significantly less computational effort, which makes them less versatile and better suited for specific tasks with more defined constraints. SLMs can also be deployed more efficiently and have a faster inference when processing user input.</p>

<h2 id="fine-tunning">Fine-Tunning</h2>

<p>Fine-tuning an LLM consists of adjusting the model’s weights through additional specialized training on a specific (high-quality) dataset. Basically, adapting a pre-trained model to perform better in a particular domain or task.</p>

<p>As training iterates through the heuristics within the model, it enables a more nuanced understanding. This leads to more accurate and context-specific outputs without creating a custom language model for each task. On each training iteration, developers will tune the learning rate, weights, and batch-size while providing a dataset tailored for that particular knowledge area. Of course, each iteration depends also on appropriately benchmarking the output performance of the model.</p>

<p>As mentioned above, <strong>fine-tuning</strong> is particularly useful for applying a determined task with a niche knowledge area, for example, creating summaries of nutritional scientific articles, correlating symptoms with a subset of possible conditions, etc.</p>

<p>Fine-tuning is not something that can be done frequently or fast, requiring numerous iterations, and it isn’t intended for factual information, especially if dependent on current events or streamed information.</p>

<div class="partners__lead-place"></div>

<h2 id="enhancing-context-with-information">Enhancing Context With Information</h2>

<p>Most conversations we have are directly dependent on context; with AI, it isn’t so much different. While there are definitely use cases that don’t entirely depend on current events (translations, summarization, data analysis, etc.), many others do. However, it isn’t quite feasible yet to have LLMs (or even SLMs) being trained on a daily basis.</p>

<p>For this, a new technique can help: <strong>Retrieve-Augmented Generation</strong> (RAG). It consists of injecting a smaller dataset into the LLMs in order to provide it with more specific (and/or current) information. With a RAG, the LLM isn’t better trained; it still has all the generalistic training it had before &mdash; but now, before it generates the output, it receives an ingest of new information to be used.</p>

<blockquote><strong>INFO</strong><br /><br />RAG enhances the LLM’s context, providing it with a more comprehensive understanding of the topic.</blockquote>

<p>For an RAG to work well, data must be prepared/formatted in a way that the LLM can properly digest it. Setting it up is a multi-step process:</p>

<ol>
<li><strong>Retrieval</strong><br />
Query external data (such as web pages, knowledge bases, and databases).</li>
<li><strong>Pre-Processing</strong><br />
Information undergoes pre-processing, including tokenization, stemming, and removal of stop words.</li>
<li><strong>Grounded Generation</strong><br />
The pre-processed retrieved information is then seamlessly incorporated into the pre-trained LLM.</li>
</ol>

<p>RAG first retrieves relevant information from a database using a query generated by the LLM. Integrating an RAG to an LLM enhances its context, providing it with a more comprehensive understanding of the topic. This augmented context enables the LLM to generate more precise, informative, and engaging responses.</p>

<p>Since it provides access to fresh information via easy-to-update database records, this approach is mostly for data-driven responses. Because this data is context-focused, it also provides more accuracy to facts. Think of a RAG as a tool to turn your LLM from a generalist into a specialist.</p>

<p>Enhancing an LLM context through RAG is particularly useful for chatbots, assistants, agents, or other usages where the output quality is directly connected to domain knowledge. But, while RAG is the strategy to collect and “inject” data into the language model’s context, this data requires input, and that is why it also requires meaning <strong>embedded</strong>.</p>

<h2 id="embedding">Embedding</h2>

<p>To make data digestible by the LLM, we need to capture each entry’s semantic meaning so the language model can form the patterns and establish the relationships. This process is called <strong>embedding</strong>, and it works by creating a static vector representation of the data. Different language models have different levels of precision embedding. For example, you can have embeddings from 384 dimensions all the way to 3072.</p>

<p>In other words, in comparison to our cartesian coordinates in a map (e.g., <code>[28.3772, 81.5707]</code>) with only two dimensions, an embedded entry for an LLM has from 384 to 3072 dimensions.</p>

<h2 id="let-s-build">Let’s Build</h2>

<p>I hope this helped you better understand what those terms mean and the processes which encompass the term “AI”. This merely scratches the surface of complexity, though. We still need to talk about AI Agents and how all these approaches intertwine to create richer experiences. Perhaps we can do that in a later article &mdash; let me know in the comments if you’d like that!</p>

<p>Meanwhile, <a href="https://atila.io/x">let me know</a> your thoughts and what you build with this!</p>

<h3 id="further-reading-on-smashingmag">Further Reading on SmashingMag</h3>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2024/04/ai-neurodiversity-building-inclusive-tools/">Using AI For Neurodiversity And Building Inclusive Tools</a>,” Pratik Joglekar</li>
<li>“<a href="https://www.smashingmagazine.com/2024/07/how-design-effective-conversational-ai-experiences-guide/">How To Design Effective Conversational AI Experiences: A Comprehensive Guide</a>,” Yinjian Huang</li>
<li>“<a href="https://www.smashingmagazine.com/2024/02/designing-ai-beyond-conversational-interfaces/">When Words Cannot Describe: Designing For AI Beyond Conversational Interfaces</a>,” Maximillian Piras</li>
<li>“<a href="https://www.smashingmagazine.com/2024/11/ai-transformative-impact-web-design-supercharging-productivity/">AI’s Transformative Impact On Web Design: Supercharging Productivity Across The Industry</a>,” Paul Boag</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(il)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Myriam Frisano</author><title>SVG Coding Examples: Useful Recipes For Writing Vectors By Hand</title><link>https://www.smashingmagazine.com/2024/09/svg-coding-examples-recipes-writing-vectors-by-hand/</link><pubDate>Wed, 18 Sep 2024 09:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2024/09/svg-coding-examples-recipes-writing-vectors-by-hand/</guid><description>Myriam Frisano explores the basics of hand-coding SVGs with practical examples to demystify the inner workings of common SVG elements. In this guide, you’ll learn about asking the right questions to solve common positioning problems and how to leverage JavaScript so that, by the end, you can add “SVG coding” to your toolbox. You’ll also be able to declare proudly, “I know how to draw literal pictures with words!”</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2024/09/svg-coding-examples-recipes-writing-vectors-by-hand/" />
              <title>SVG Coding Examples: Useful Recipes For Writing Vectors By Hand</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>SVG Coding Examples: Useful Recipes For Writing Vectors By Hand</h1>
                  
                    
                    <address>Myriam Frisano</address>
                  
                  <time datetime="2024-09-18T09:00:00&#43;00:00" class="op-published">2024-09-18T09:00:00+00:00</time>
                  <time datetime="2024-09-18T09:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Even though I am the kind of front-end engineer who manually cleans up SVG files when they are a mess, I never expected to become one of <em>those</em> people. You know, those crazy people that <em>draw with code.</em></p>

<p>But here we are.</p>

<p>I dove deep into SVG specs last winter when I created a project to <a href="https://code.halfapx.com/guideline-generator/">draw Calligraphy Grids</a>, and even though I knew the basic structures and rules of SVG, it was only then that I fully tried to figure out and understand what all of those numbers meant and how they interacted with each other.</p>

<p>And, once you get the hang of it, it is actually very interesting and quite fun to code SVG by hand.</p>

<blockquote><strong>No &lt;path&gt; ahead</strong><br /><br />We won’t go into more complex SVG shapes like <a href="https://developer.mozilla.org/en-US/docs/Web/SVG/Tutorial/Paths">paths</a> in this article, this is more about practical information for simple SVGs. When it comes to drawing curves, I still recommend using a tool like Illustrator or Affinity. However, if you are super into compounding your lines, a path is useful. Maybe we’ll do that in Part 2.<br /><br />Also, this guide focuses mostly on practical examples that illustrate some of the math involved when drawing SVGs. There is a wonderful article here that goes a bit deeper into the specs, which I recommend reading if you’re more interested in that: “<a href="https://www.smashingmagazine.com/2019/05/svg-design-tools-practical-guide/#comments-svg-design-tools-practical-guide">A Practical Guide To SVG And Design Tools</a>.”</blockquote>

<h2 id="drawing-with-math-remember-coordinate-systems">Drawing With Math. Remember Coordinate Systems?</h2>

<p>Illustrator, Affinity, and all other vector programs are basically just helping you draw on a coordinate system, and then those paths and shapes are stored in SVG files.</p>

<p>If you open up these files in an editor, you’ll see that they are just a bunch of paths that contain lots of numbers, which are coordinates in that coordinate system that make up the lines.</p>

<p>But, there is a difference between the all-powerful <code>&lt;path&gt;</code> and the other, more semantic elements like <code>&lt;rect&gt;</code>, <code>&lt;circle&gt;</code>, <code>&lt;line&gt;</code>, <code>&lt;ellipse&gt;</code>, <code>&lt;polygon&gt;</code>, and <code>&lt;polyline&gt;</code>.</p>

<p>These elements are not that hard to read and write by hand, and they open up a lot of possibilities to add animation and other fun stuff. So, while most people might only think of SVGs as never-pixelated, infinitely scaling images, they can also be quite comprehensive pieces of code.</p>

<h3 id="how-does-svg-work-unit-unit">How Does SVG Work? <code>unit != unit</code></h3>

<p>Before we get started on how SVG elements are drawn, let’s talk about the ways units work in SVG because they might be a bit confusing when you first get started.</p>

<p>The beauty of SVG is that it’s a vector format, which means that the units are somewhat detached from the browser and are instead just relative to the coordinate system you’re working in.</p>

<p>That means you would <strong>not</strong> use a unit within SVG but rather just use numbers and then define the size of the document you’re working with.</p>

<p>So, your <code>width</code> and <code>height</code> might be using CSS <code>rem</code> units, but in your <code>viewBox</code>, units become just a concept that helps you in establishing sizing relationships.</p>

<h3 id="what-is-the-viewbox">What Is The <code>viewBox</code>?</h3>

<p>The <code>viewBox</code> works a little bit like the CSS <code>aspect-ratio</code> property. It helps you establish a relationship between the width and the height of your coordinate system and sets up the box you’re working in. I tend to think of the <code>viewBox</code> as my “document” size.</p>

<p>Any element that is placed within the SVG with bigger dimensions than the <code>viewBox</code> will not be visible. So, the <code>viewBox</code> is the cutout of the coordinate system we’re looking through. The <code>width</code> and <code>height</code> attributes are unnecessary if there is a <code>viewBox</code> attribute.</p>

<p>So, in short, having an SVG with a <code>viewBox</code> makes it behave a lot like a regular image. And just like with images, it’s usually easiest to just set either a <code>width</code> or a <code>height</code> and let the other dimension be automatically sized based on the intrinsic aspect ratio dimensions.</p>

<p>So, if we were to create a function that draws an SVG, we might store three separate variables and fill them in like this:</p>

<pre><code class="language-html">`&lt;svg 
  width="${svgWidth}" 
  viewBox="0 0 ${documentWidth} ${documentHeight}" 
  xmlns="http://www.w3.org/2000/svg"
&gt;`;
</code></pre>

<h3 id="svg-things-of-note">SVG Things Of Note</h3>

<p>There is a lot to know about SVG: When you want to reuse an image a lot, you may want to turn it into a <code>symbol</code> that can then be referenced with a <code>use</code> tag, you can create sprites, and there are some best practices when using them for icons, and so on.</p>

<p>Unfortunately, this is a bit out of the scope of this article. Here, we’re mainly focusing on designing SVG files and not on how we can optimize and use them.</p>

<p>However, one thing of note that is easier to implement from the start is <strong>accessibility</strong>.</p>

<p>SVGs can be used in an <code>&lt;img&gt;</code> tag, where <code>alt</code> tags are available, but then you lose the ability to interact with your SVG code, so inlining might be your preference.</p>

<p>When inlining, it’s easiest to declare <code>role=&quot;img&quot;</code> and then add a <code>&lt;title&gt;</code> tag with your image title.</p>

<p><strong>Note</strong>: <em>You can check out <a href="https://www.smashingmagazine.com/2021/05/accessible-svg-patterns-comparison/">this article for SVG and Accessibility recommendations</a>.</em></p>

<pre><code class="language-javascript">&lt;svg
  role="img"
  [...attr]
&gt;
  &lt;title&gt;An accessible title&lt;/title&gt;
  &lt;!-- design code --&gt;
&lt;/svg&gt;
</code></pre>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="/printed-books/touch-design-for-mobile-interfaces/">Touch Design for Mobile Interfaces</a></strong>, Steven Hoober’s brand-new guide on <strong>designing for mobile</strong> with proven, universal, human-centric guidelines. <strong>400 pages</strong>, jam-packed with in-depth user research and <strong>best practices</strong>.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/touch-design-for-mobile-interfaces/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/touch-design-for-mobile-interfaces/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/14bcab88-b622-47f6-a51d-76b0aa003597/touch-design-book-shop-opt.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b14658fc-bb2d-41a6-8d1a-70eaaf1b8ec8/touch-design-book-shop-opt.png"
    alt="Feature Panel"
    width="480"
    height="697"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="drawing-svg-with-javascript">Drawing SVG With JavaScript</h2>

<p>There is usually some mathematics involved when drawing SVGs. It’s usually fairly simple arithmetic (except, you know, in case you draw calligraphy grids and then have to dig out trigonometry…), but I think even for simple math, most people don’t write their SVGs in pure HTML and thus would like to use algebra.</p>

<p>At least for me, I find it much easier to understand SVG Code when giving meaning to numbers, so I always stick to JavaScript, and by giving my coordinates names, I like them immeasurable times more.</p>

<p>So, for the upcoming examples, we’ll look at the list of variables with the simple math and then JSX-style templates for interpolation, as that gives more legible syntax highlighting than string interpolations, and then each example will be available as a CodePen.</p>

<p>To keep this Guide framework-agnostic, I wanted to quickly go over drawing SVG elements with just good old vanilla JavaScript.</p>

<p>We’ll create a container element in HTML that we can put our SVG into and grab that element with JavaScript.</p>

<pre><code class="language-html">&lt;div data-svg-container&gt;&lt;/div&gt;
&lt;script src="template.js"&gt;&lt;/script&gt;
</code></pre>

<p>To make it simple, we’ll draw a rectangle <code>&lt;rect&gt;</code> that covers the entire <code>viewBox</code> and uses a fill.</p>

<p><strong>Note</strong>: <em>You can add all valid CSS values as fills, so a fixed color, or something like <code>currentColor</code> to access the site’s text color or a CSS variable would work here if you’re inlining your SVG and want it to interact with the page it’s placed in.</em></p>

<p>Let’s first start with our variable setup.</p>

<div class="break-out">
<pre><code class="language-javascript">// vars
const container = document.querySelector("[data-svg-container]");
const svgWidth = "30rem"; // use any value with units here
const documentWidth = 100;
const documentHeight = 100;
const rectWidth = documentWidth;
const rectHeight = documentHeight;
const rectFill = "currentColor"; // use any color value here
const title = "A simple square box";
</code></pre>
</div>

<h3 id="method-1-create-element-and-set-attributes">Method 1: Create Element and Set Attributes</h3>

<p>This method is easier to keep type-safe (if using TypeScript) &mdash; uses proper SVG elements and attributes, and so on &mdash; but it is less performant and may take a long time if you have many elements.</p>

<div class="break-out">
<pre><code class="language-javascript">const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
const titleElement = document.createElementNS("http://www.w3.org/2000/svg", "title");
const rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");

svg.setAttribute("width", svgWidth);
svg.setAttribute("viewBox", `0 0 ${documentWidth} ${documentHeight}`);
svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
svg.setAttribute("role", "img");

titleElement.textContent = title;

rect.setAttribute("width", rectWidth);
rect.setAttribute("height", rectHeight);
rect.setAttribute("fill", rectFill);

svg.appendChild(titleElement);
svg.appendChild(rect);

container.appendChild(svg);
</code></pre>
</div>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="LYKKVzg"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Rectangle (JS Method 1) [forked]](https://codepen.io/smashingmag/pen/LYKKVzg) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/LYKKVzg">SVG Rectangle (JS Method 1) [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h3 id="method-2-create-an-svg-string">Method 2: Create An SVG String</h3>

<p>Alternatively, you can create an SVG string and set the <code>innerHTML</code> of the container to that string. This is more performant, but you lose type safety, and the elements aren’t properly created in the DOM.</p>

<pre><code class="language-javascript">container.innerHTML = `
&lt;svg 
  width="${svgWidth}" 
  viewBox="0 0 ${documentWidth} ${documentHeight}" 
  xmlns="http://www.w3.org/2000/svg" 
  role="img"
&gt;
  &lt;title&gt;${title}&lt;/title&gt;
  &lt;rect 
    width="${rectWidth}" 
    height="${rectHeight}" 
    fill="${rectFill}" 
  /&gt;
&lt;/svg&gt;`;
</code></pre>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="BaggNmN"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Rectangle (JS Method 2) [forked]](https://codepen.io/smashingmag/pen/BaggNmN) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/BaggNmN">SVG Rectangle (JS Method 2) [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h3 id="method-3-best-of-both-worlds">Method 3: Best Of Both Worlds</h3>

<p>The best of both worlds is to just create the SVG itself as a DOM element and then set the content of the SVG via <code>innerHTML</code>.</p>

<p>We’re appending a proper SVG element to the container and can type-check that and have access to it properly. You aren’t typically going to be changing the content of the SVG that much, so I feel like this is probably the best way to do it.</p>

<div class="break-out">
<pre><code class="language-javascript">const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");

svg.setAttribute("width", svgWidth);
svg.setAttribute("viewBox", `0 0 ${documentWidth} ${documentHeight}`);
svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
svg.setAttribute("role", "img");

svg.innerHTML = `
  &lt;title&gt;${title}&lt;/title&gt;
  &lt;rect 
    width="${rectWidth}" 
    height="${rectHeight}" 
    fill="${rectFill}" 
  /&gt;
`;

container.appendChild(svg);
</code></pre>
</div>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="RwzzPjz"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Rectangle (JS Method 3) [forked]](https://codepen.io/smashingmag/pen/RwzzPjz) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/RwzzPjz">SVG Rectangle (JS Method 3) [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h2 id="drawing-basic-elements">Drawing Basic Elements</h2>

<p>Okay, so now that we have the basics of the SVG setup, let’s look into how the most common elements are drawn.</p>

<h3 id="drawing-boxes">Drawing Boxes</h3>

<p><code>&lt;rect&gt;</code> creates a box, as we&rsquo;ve learned in the previous example. It has <code>y</code> and <code>x</code> attributes, which define the position of the top left corner. They are optional, and if not set, the box will be drawn at the origin <code>(0,0)</code> like in that previous example.</p>

<p>There are also <code>rx</code> and <code>ry</code> attributes. Those are radii. If you define <code>rx</code>, <code>ry</code> will automatically be set to the same value unless you redeclare it, then you’d use an elliptical corner-radius instead of a circular one.</p>

<p>Let’s draw four different rectangles in our next SVG, one in each quadrant:</p>

<ol>
<li>Top left: This is just a rectangle with a top and left offset and a width and height.</li>
<li>Top right: We will make use of a small corner radius to make it a rounded rectangle.</li>
<li>Bottom left: It uses such a large corner radius that it turns into a circle. It has a bit of a weird box origin, but it’s an option.</li>
<li>Bottom right: It uses an elliptical corner radius for this squoval shape.</li>
</ol>

<p>This is the implementation in JavaScript:</p>

<pre><code class="language-javascript">const rectDocWidth = 200;
const rectDocHeight = 200;
const rectFill = "currentColor";
const docOffset = 15;
const rectSize = rectDocWidth / 2 - docOffset &#42; 2;
const roundedCornerRadius = 10;
const circleLookRadius = rectSize / 2;
const ellipticalRy = roundedCornerRadius &#42; 2;
</code></pre>

<p>And to then set up the SVG, we’ll apply these variables to the template:</p>

<div class="break-out">
<pre><code class="language-jsx">&lt;svg
  width={svgWidth}
  viewBox={`0 0 ${rectDocWidth} ${rectDocHeight}`}
  xmlns="http://www.w3.org/2000/svg"
  role="img"
&gt;
  &lt;title&gt;Four Rectangles of different qualities placed in each quadrant&lt;/title&gt;
  &lt;rect
    x={docOffset}
    y={docOffset}
    width={rectSize}
    height={rectSize}
    fill={rectFill}
  /&gt;
  &lt;rect
    x={rectDocWidth - rectSize - docOffset}
    rx={roundedCornerRadius}
    y={docOffset}
    width={rectSize}
    height={rectSize}
    fill={rectFill}
  /&gt;
  &lt;rect
    x={docOffset}
    rx={circleLookRadius}
    y={rectDocHeight - rectSize - docOffset}
    width={rectSize}
    height={rectSize}
    fill={rectFill}
  /&gt;
  &lt;rect
    x={rectDocWidth - rectSize - docOffset}
    rx={roundedCornerRadius}
    ry={ellipticalRy}
    y={rectDocHeight - rectSize - docOffset}
    width={rectSize}
    height={rectSize}
    fill={rectFill}
  /&gt;
&lt;/svg&gt;
</code></pre>
</div>

<p>And this is the result:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="mdZZJpN"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Rect [forked]](https://codepen.io/smashingmag/pen/mdZZJpN) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/mdZZJpN">SVG Rect [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<div class="partners__lead-place"></div>

<h2 id="drawing-lines">Drawing Lines</h2>

<p>There is a <code>&lt;line&gt;</code> element in SVG that takes an <code>x1</code>, <code>y1</code>, <code>x2</code>, and <code>y2</code> attribute, which are the coordinates of the start and end points of the line.</p>

<p>For me, knowing how to draw straight horizontal or vertical lines was fairly important.</p>

<p>The rules for that are simple: <strong>We’ll just have to make sure that the <code>y</code> values are the same for a horizontal line and the <code>x</code> values are the same for a vertical line.</strong></p>

<p>Let’s look at an example where we draw a horizontal and a vertical line through the center of our document. I purposefully used some weirder numbers here; you’ll see that the resulting SVG is still perfectly centered, though, since it’s totally fine to use floating point numbers in SVG, and we don’t really run into subpixel rendering issues as we do in some CSS cases, where we end up with fractional pixels.</p>

<p>These are the JavaScript variables we set up:</p>

<pre><code class="language-javascript">const lineDocWidth = 421;
const lineDocHeight = 391;
const lineStroke = "currentColor";
const lineStrokeWidth = 5;
const horizontalLineStart = 0;
const horizontalLineEnd = lineDocWidth;
const horizontalLineY = lineDocHeight / 2;
const verticalLineStart = 0;
const verticalLineEnd = lineDocHeight;
const verticalLineX = lineDocWidth / 2;
</code></pre>

<p>And this is how we can integrate these variables into the SVG element:</p>

<div class="break-out">
<pre><code class="language-jsx">&lt;svg
  width={svgWidth}
  viewBox={`0 0 ${lineDocWidth} ${lineDocHeight}`}
  xmlns="http://www.w3.org/2000/svg"
  role="img"
&gt;
  &lt;title&gt;Horizontal and Vertical Line through the middle of the document&lt;/title&gt;
  &lt;line
    x1={horizontalLineStart}
    x2={horizontalLineEnd}
    y1={horizontalLineY}
    y2={horizontalLineY}
    stroke={lineStroke}
    stroke-width={lineStrokeWidth}
  /&gt;
  &lt;line
    x1={verticalLineX}
    x2={verticalLineX}
    y1={verticalLineStart}
    y2={verticalLineEnd}
    stroke={lineStroke}
    stroke-width={lineStrokeWidth}
  /&gt;
&lt;/svg&gt;
</code></pre>
</div>

<p>And here’s our result:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="abggOqK"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Line [forked]](https://codepen.io/smashingmag/pen/abggOqK) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/abggOqK">SVG Line [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h3 id="drawing-circles">Drawing Circles</h3>

<p><code>&lt;circle&gt;</code> elements have <code>cx</code>, <code>cy</code>, and <code>r</code> as coordinates. The <code>x</code> and <code>y</code> values are relative to the circle center, and <code>r</code> describes the radius of the circle.</p>

<p>This is where things are less intuitive in my head because there will be times when I want the edge of the circle to be placed at a certain point and not the center, and I’ll usually also think in terms of diameters, not radii.</p>

<p>So, let’s say we want to draw a circle whose outer edge is offset from the bottom left corner by a certain amount and whose diameter is a certain size. We’d have to do some math again to calculate our coordinates.</p>

<p>These are the variables in JavaScript that we’re working with:</p>

<div class="break-out">
<pre><code class="language-javascript">const circleDocWidth = 100;
const circleDocHeight = 100;
const circleOffset = 10;
const circleDiameter = 20;
const circleRadius = circleDiameter / 2;
const circleX = circleOffset + circleRadius;
const circleY = circleDocHeight - circleOffset - circleRadius;
</code></pre>
</div>

<p>And, just like before, this is how we might integrate them into the SVG element:</p>

<pre><code class="language-jsx">&lt;svg
  width={svgWidth}
  viewBox={`0 0 ${circleDocWidth} ${circleDocHeight}`}
  xmlns="http://www.w3.org/2000/svg"
  role="img"
&gt;
  &lt;circle
    cx={circleX}
    cy={circleY}
    r={circleRadius}
    fill="red"
  /&gt;
&lt;/svg&gt;
</code></pre>

<p>And this is what it looks like:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="KKjjpoW"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Circle [forked]](https://codepen.io/smashingmag/pen/KKjjpoW) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/KKjjpoW">SVG Circle [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h3 id="drawing-ellipses">Drawing Ellipses</h3>

<p><code>&lt;ellipse&gt;</code> elements have <code>cx</code>, <code>cy</code>, <code>rx</code>, and <code>ry</code> as coordinates. The <code>x</code> and <code>y</code> values are relative to the ellipse center, and <code>rx</code> and <code>ry</code> describe the radius of the ellipse.</p>

<p>Let’s draw an ellipse that is offset from the top right corner by a certain amount, whose horizontal radius is a certain size, and whose vertical radius is half of that.</p>

<p>For that we need to define our variables in JavaScript:</p>

<div class="break-out">
<pre><code class="language-javascript">const ellipseSVGWidth = 100;
const ellipseDocWidth = 100;
const ellipseDocHeight = 100;
const ellipseOffset = 10;
const ellipseHorizontalRadius = ellipseDocWidth / 2 - ellipseOffset;
const ellipseVerticalRadius = ellipseHorizontalRadius / 2;
const ellipseX = ellipseDocWidth - ellipseOffset - ellipseHorizontalRadius;
const ellipseY = ellipseOffset + ellipseVerticalRadius;
</code></pre>
</div>

<p>…and integrate them into the SVG element:</p>

<div class="break-out">
<pre><code class="language-jsx">&lt;svg
  width={svgWidth}
  viewBox={`0 0 ${ellipseDocWidth} ${ellipseDocHeight}`}
  xmlns="http://www.w3.org/2000/svg"
  role="img"
&gt;
  &lt;title&gt;Ellipse offset from the top right corner&lt;/title&gt;
  &lt;ellipse
    cx={ellipseX}
    cy={ellipseY}
    rx={ellipseHorizontalRadius}
    ry={ellipseVerticalRadius}
    fill="hotpink"
  /&gt;
&lt;/svg&gt;
</code></pre>
</div>

<p>Here’s the result:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="NWZZqMR"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Ellipse [forked]](https://codepen.io/smashingmag/pen/NWZZqMR) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/NWZZqMR">SVG Ellipse [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h3 id="connecting-dots-with-polyline-and-polygon">Connecting Dots With <code>&lt;polyline&gt;</code> And <code>&lt;polygon&gt;</code></h3>

<p>Let’s say we want to have a line that has multiple points but doesn’t make a rectangle or a circle.</p>

<p>This is where we can use <code>polyline</code> and <code>polygon</code>, which share the same attributes and only differ in the way that a <code>polygon</code> will connect the first and last point, while a <code>polyline</code> won’t.</p>

<p>They take a <code>points</code> attribute, which is a list of <code>x</code> and <code>y</code> values separated by a space, and, by default, both of them have a <code>fill</code>, which can be a bit strange. That’s especially true for a <code>polyline</code>, so you might want to set that value to <code>none</code>.</p>

<p>Let’s say we have three circles, and we want to have lines connecting their centers. We can just take the <code>cx</code> and <code>cy</code> values of those circles and chain them together in the <code>points</code> attribute.</p>

<p>SVG is drawn from background to foreground, so the circles are drawn first, then the lines so they are stacked on top of each other.</p>

<p>To notice the differences between the polyline and the polygon, we’ll draw our composite four times, like we did before with the circles.</p>

<p>This time, we have more than one element, though. To make it quicker to scan which set belongs together, we can make use of the <code>g</code> element, which groups multiple elements together. It allows us to apply certain attributes to all children at the same time.</p>

<p>To see that in action and to save us a bit of time, in having to adjust <code>x</code> and <code>y</code> values for each separate element within the composite, we can apply a <code>transform</code> to that group element to push our composite into the different quadrants.</p>

<p><code>transform=&quot;translate(x,y)</code>&rdquo; is how we do that. The transform attribute works a lot like CSS transforms, with slight differences in syntax. But in most simple cases, we can assume the same thing to happen. The translate attribute will take the original position and then move the elements contained within the group along the <code>x</code> and <code>y</code> axis.</p>

<p>So, let’s have a look at our SVG:</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/svg-coding-examples-recipes-writing-vectors-by-hand/polygon-polyline-composite-fixed.svg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="800"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/svg-coding-examples-recipes-writing-vectors-by-hand/polygon-polyline-composite-fixed.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/svg-coding-examples-recipes-writing-vectors-by-hand/polygon-polyline-composite-fixed.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/svg-coding-examples-recipes-writing-vectors-by-hand/polygon-polyline-composite-fixed.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/svg-coding-examples-recipes-writing-vectors-by-hand/polygon-polyline-composite-fixed.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/svg-coding-examples-recipes-writing-vectors-by-hand/polygon-polyline-composite-fixed.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/svg-coding-examples-recipes-writing-vectors-by-hand/polygon-polyline-composite-fixed.png"
			
			sizes="100vw"
			alt="From left to right, bottom to top: Polyline with no fill applied, polyline with fill, polygon with no fill, polygon with fill"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      From left to right, bottom to top: Polyline with no fill applied, polyline with fill, polygon with no fill, polygon with fill. (<a href='https://files.smashing.media/articles/svg-coding-examples-recipes-writing-vectors-by-hand/polygon-polyline-composite-fixed.svg'>SVG preview</a>)
    </figcaption>
  
</figure>

<p>Here, you can see that with the same coordinates, a polyline won’t draw the line between the blue and the red dot, while a polygon will. However, when applying a fill, they take the exact same information as if the shape was closed, which is the right side of the graphic, where the polyline makes it look like a piece of a circle is missing.</p>

<p>This is the second time where we have dealt with quite a bit of repetition, and we can have a look at how we could leverage the power of JavaScript logic to render our template faster.</p>

<p>But first, we need a basic implementation like we’ve done before. We’re creating objects for the circles, and then we’re chaining the <code>cx</code> and <code>cy</code> values together to create the <code>points</code> attribute. We’re also storing our transforms in variables.</p>

<div class="break-out">
<pre><code class="language-javascript">const polyDocWidth = 200;
const polyDocHeight = 200;
const circleOne = { cx: 25, cy: 80, r: 10, fill: "red" };
const circleTwo = { cx: 40, cy: 20, r: 5, fill: "lime" };
const circleThree = { cx: 70, cy: 60, r: 8, fill: "cyan" };
const points = `${circleOne.cx},${circleOne.cy} ${circleTwo.cx},${circleTwo.cy} ${circleThree.cx},${circleThree.cy}`;
const moveToTopRight = `translate(${polyDocWidth / 2}, 0)`;
const moveToBottomRight = `translate(${polyDocWidth / 2}, ${polyDocHeight / 2})`;
const moveToBottomLeft = `translate(0, ${polyDocHeight / 2})`;
</code></pre>
</div>

<p>And then, we apply the variables to the template, using either a <code>polyline</code> or <code>polygon</code> element and a <code>fill</code> attribute that is either set to <code>none</code> or a color value.</p>

<pre><code class="language-jsx">
&lt;svg
  width={svgWidth}
  viewBox={`0 0 ${polyDocWidth} ${polyDocHeight}`}
  xmlns="http://www.w3.org/2000/svg"
  role="img"
&gt;
  &lt;title&gt;Composite shape comparison&lt;/title&gt;
  &lt;g&gt;
    &lt;circle
      cx={circleOne.cx}
      cy={circleOne.cy}
      r={circleOne.r}
      fill={circleOne.fill}
    /&gt;
    &lt;circle
      cx={circleTwo.cx}
      cy={circleTwo.cy}
      r={circleTwo.r}
      fill={circleTwo.fill}
    /&gt;
    &lt;circle
      cx={circleThree.cx}
      cy={circleThree.cy}
      r={circleThree.r}
      fill={circleThree.fill}
    /&gt;
    &lt;polyline
      points={points}
      fill="none"
      stroke="black"
    /&gt;
  &lt;/g&gt;
  &lt;g transform={moveToTopRight}&gt;
    &lt;circle
      cx={circleOne.cx}
      cy={circleOne.cy}
      r={circleOne.r}
      fill={circleOne.fill}
    /&gt;
    &lt;circle
      cx={circleTwo.cx}
      cy={circleTwo.cy}
      r={circleTwo.r}
      fill={circleTwo.fill}
    /&gt;
    &lt;circle
      cx={circleThree.cx}
      cy={circleThree.cy}
      r={circleThree.r}
      fill={circleThree.fill}
    /&gt;
    &lt;polyline
      points={points}
      fill="white"
      stroke="black"
    /&gt;
  &lt;/g&gt;
  &lt;g transform={moveToBottomLeft}&gt;
    &lt;circle
      cx={circleOne.cx}
      cy={circleOne.cy}
      r={circleOne.r}
      fill={circleOne.fill}
    /&gt;
    &lt;circle
      cx={circleTwo.cx}
      cy={circleTwo.cy}
      r={circleTwo.r}
      fill={circleTwo.fill}
    /&gt;
    &lt;circle
      cx={circleThree.cx}
      cy={circleThree.cy}
      r={circleThree.r}
      fill={circleThree.fill}
    /&gt;
    &lt;polygon
      points={points}
      fill="none"
      stroke="black"
    /&gt;
  &lt;/g&gt;
  &lt;g transform={moveToBottomRight}&gt;
    &lt;circle
      cx={circleOne.cx}
      cy={circleOne.cy}
      r={circleOne.r}
      fill={circleOne.fill}
    /&gt;
    &lt;circle
      cx={circleTwo.cx}
      cy={circleTwo.cy}
      r={circleTwo.r}
      fill={circleTwo.fill}
    /&gt;
    &lt;circle
      cx={circleThree.cx}
      cy={circleThree.cy}
      r={circleThree.r}
      fill={circleThree.fill}
    /&gt;
    &lt;polygon
      points={points}
      fill="white"
      stroke="black"
    /&gt;
  &lt;/g&gt;
&lt;/svg&gt;
</code></pre>

<p>And here’s a version of it to play with:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="OJeeVoM"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Polygon / Polyline (simple) [forked]](https://codepen.io/smashingmag/pen/OJeeVoM) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/OJeeVoM">SVG Polygon / Polyline (simple) [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<div class="partners__lead-place"></div>

<h2 id="dealing-with-repetition">Dealing With Repetition</h2>

<p>When it comes to drawing SVGs, you may find that you’ll be repeating a lot of the same code over and over again. This is where JavaScript can come in handy, so let’s look at the composite example again and see how we could optimize it so that there is less repetition.</p>

<p><strong>Observations:</strong></p>

<ul>
<li>We have three circle elements, all following the same pattern.</li>
<li>We create one repetition to change the <code>fill</code> style for the element.</li>
<li>We repeat those two elements one more time, with either a <code>polyline</code> or a <code>polygon</code>.</li>
<li>We have four different <code>transforms</code> (technically, no transform is a transform in this case).</li>
</ul>

<p>This tells us that we can create nested loops.</p>

<p>Let’s go back to just a vanilla implementation for this since the way loops are done is quite different across frameworks.</p>

<p>You could make this more generic and write separate generator functions for each type of element, but this is just to give you an idea of what you could do in terms of logic. There are certainly still ways to optimize this.</p>

<p>I’ve opted to have arrays for each type of variation that we have and wrote a helper function that goes through the data and builds out an array of objects with all the necessary information for each group. In such a short array, it would certainly be a viable option to just have the data stored in one element, where the values are repeated, but we’re taking the DRY thing seriously in this one.</p>

<p>The group array can then be looped over to build our SVG HTML.</p>

<div class="break-out">
<pre><code class="language-javascript">const container = document.querySelector("[data-svg-container]");
const svgWidth = 200;
const documentWidth = 200;
const documentHeight = 200;
const halfWidth = documentWidth / 2;
const halfHeight = documentHeight / 2;
const circles = [
  { cx: 25, cy: 80, r: 10, fill: "red" },
  { cx: 40, cy: 20, r: 5, fill: "lime" },
  { cx: 70, cy: 60, r: 8, fill: "cyan" },
];
const points = circles.map(({ cx, cy }) =&gt; `${cx},${cy}`).join(" ");
const elements = ["polyline", "polygon"];
const fillOptions = ["none", "white"];
const transforms = [
  undefined,
  `translate(${halfWidth}, 0)`,
  `translate(0, ${halfHeight})`,
  `translate(${halfWidth}, ${halfHeight})`,
];
const makeGroupsDataObject = () =&gt; {
  let counter = 0;
  const g = [];
  elements.forEach((element) =&gt; {
    fillOptions.forEach((fill) =&gt; {
      const transform = transforms[counter++];
      g.push({ element, fill, transform });
    });
  });
  return g;
};
const groups = makeGroupsDataObject();
// result:
// [
//   {
//     element: "polyline",
//     fill: "none",
//   },
//   {
//     element: "polyline",
//     fill: "white",
//     transform: "translate(100, 0)",
//   },
//   {
//     element: "polygon",
//     fill: "none",
//     transform: "translate(0, 100)",
//   },
//   {
//     element: "polygon",
//     fill: "white",
//     transform: "translate(100, 100)",
//   }
// ]

const svg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
svg.setAttribute("width", svgWidth);
svg.setAttribute("viewBox", `0 0 ${documentWidth} ${documentHeight}`);
svg.setAttribute("xmlns", "http://www.w3.org/2000/svg");
svg.setAttribute("role", "img");
svg.innerHTML = "&lt;title&gt;Composite shape comparison&lt;/title&gt;";
groups.forEach((groupData) =&gt; {
  const circlesHTML = circles
    .map((circle) =&gt; {
      return `
        &lt;circle 
          cx="${circle.cx}" 
          cy="${circle.cy}" 
          r="${circle.r}" 
          fill="${circle.fill}"
        /&gt;`;
    })
    .join("");
  const polyElementHTML = `
    &lt;${groupData.element} 
      points="${points}" 
      fill="${groupData.fill}" 
      stroke="black" 
    /&gt;`;
  const group = `
      &lt;g ${groupData.transform ? `transform="${groupData.transform}"` : ""}&gt;
        ${circlesHTML}
        ${polyElementHTML}
      &lt;/g&gt;
    `;
  svg.innerHTML += group;
});
container.appendChild(svg);
</code></pre>
</div>

<p>And here’s the Codepen of that:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="XWLLbPq"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Polygon / Polyline (JS loop version) [forked]](https://codepen.io/smashingmag/pen/XWLLbPq) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/XWLLbPq">SVG Polygon / Polyline (JS loop version) [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h2 id="more-fun-stuff">More Fun Stuff</h2>

<p>Now, that’s all the basics I wanted to cover, but there is so much more you can do with SVG. There is more you can do with <code>transform</code>; you can use a <code>mask</code>, you can use a <code>marker</code>, and so on.</p>

<p>We don’t have time to dive into all of them today, but since this started for me when making Calligraphy Grids, I wanted to show you the two most satisfying ones, which I, unfortunately, can’t use in the generator since I wanted to be able to open my generated SVGs in Affinity and it doesn’t support <code>pattern</code>.</p>

<p>Okay, so <code>pattern</code> is part of the <code>defs</code> section within the SVG, which is where you can define reusable elements that you can then reference in your SVG.</p>

<h3 id="graph-grid-with-pattern">Graph Grid with <code>pattern</code></h3>

<p>If you think about it, a graph is just a bunch of horizontal and vertical lines that repeat across the x- and y-axis.</p>

<p>So, <code>pattern</code> can help us with that. We can create a <code>&lt;rect&gt;</code> and then reference a <code>pattern</code> in the <code>fill</code> attribute of the <code>rect</code>. The pattern then has its own <code>width</code>, <code>height</code>, and <code>viewBox</code>, which defines how the pattern is repeated.</p>

<p>So, let’s say we want to perfectly center our graph grid in any given width or height, and we want to be able to define the size of our resulting squares (cells).</p>

<p>Once again, let’s start with the JavaScipt variables:</p>

<pre><code class="language-javascript">const graphDocWidth = 226;
const graphDocHeight = 101;
const cellSize = 5;
const strokeWidth = 0.3;
const strokeColor = "currentColor";
const patternHeight = (cellSize / graphDocHeight) &#42; 100;
const patternWidth = (cellSize / graphDocWidth) &#42; 100;
const gridYStart = (graphDocHeight % cellSize) / 2;
const gridXStart = (graphDocWidth % cellSize) / 2;
</code></pre>

<p>Now, we can apply them to the SVG element:</p>

<pre><code class="language-jsx">&lt;svg
  width={svgWidth}
  viewBox={`0 0 ${graphDocWidth} ${graphDocHeight}`}
  xmlns="http://www.w3.org/2000/svg"
  role="img"
&gt;
  &lt;defs&gt;
    &lt;pattern
      id="horizontal"
      viewBox={`0 0 ${graphDocWidth} ${strokeWidth}`}
      width="100%"
      height={`${patternHeight}%`}
    &gt;
      &lt;line
        x1="0"
        x2={graphDocWidth}
        y1={gridYStart}
        y2={gridYStart}
        stroke={strokeColor}
        stroke-width={strokeWidth}
      /&gt;
    &lt;/pattern&gt;
    &lt;pattern
      id="vertical"
      viewBox={`0 0 ${strokeWidth} ${graphDocHeight}`}
      width={`${patternWidth}%`}
      height="100%"
    &gt;
      &lt;line
        y1={0}
        y2={graphDocHeight}
        x1={gridXStart}
        x2={gridXStart}
        stroke={strokeColor}
        stroke-width={strokeWidth}
      /&gt;
    &lt;/pattern&gt;
  &lt;/defs&gt;
  &lt;title&gt;A graph grid&lt;/title&gt;
  &lt;rect
    width={graphDocWidth}
    height={graphDocHeight}
    fill="url(&#35;horizontal)"
  /&gt;
  &lt;rect
    width={graphDocWidth}
    height={graphDocHeight}
    fill="url(&#35;vertical)"
  /&gt;
&lt;/svg&gt;
</code></pre>

<p>And this is what that then looks like:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="XWLLbxq"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Graph Grid [forked]](https://codepen.io/smashingmag/pen/XWLLbxq) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/XWLLbxq">SVG Graph Grid [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h3 id="dot-grid-with-pattern">Dot Grid With <code>pattern</code></h3>

<p>If we wanted to draw a dot grid instead, we could simply repeat a circle. Or, we could alternatively use a line with a <code>stroke-dasharray</code> and <code>stroke-dashoffset</code> to create a dashed line. And we’d only need one line in this case.</p>

<p>Starting with our JavaScript variables:</p>

<pre><code class="language-javascript">const dotDocWidth = 219;
const dotDocHeight = 100;
const cellSize = 4;
const strokeColor = "black";
const gridYStart = (dotDocHeight % cellSize) / 2;
const gridXStart = (dotDocWidth % cellSize) / 2;
const dotSize = 0.5;
const patternHeight = (cellSize / dotDocHeight) &#42; 100;
</code></pre>

<p>And then adding them to the SVG element:</p>

<pre><code class="language-jsx">&lt;svg
  width={svgWidth}
  viewBox={`0 0 ${dotDocWidth} ${dotDocHeight}`}
  xmlns="http://www.w3.org/2000/svg"
  role="img"
&gt;
  &lt;defs&gt;
    &lt;pattern
      id="horizontal-dotted-line"
      viewBox={`0 0 ${dotDocWidth} ${dotSize}`}
      width="100%"
      height={`${patternHeight}%`}
    &gt;
      &lt;line
        x1={gridXStart}
        y1={gridYStart}
        x2={dotDocWidth}
        y2={gridYStart}
        stroke={strokeColor}
        stroke-width={dotSize}
        stroke-dasharray={`0,${cellSize}`}
        stroke-linecap="round"
      &gt;&lt;/line&gt;
    &lt;/pattern&gt;
  &lt;/defs&gt;
  &lt;title&gt;A Dot Grid&lt;/title&gt;
  &lt;rect
    x="0"
    y="0"
    width={dotDocWidth}
    height={dotDocHeight}
    fill="url(&#35;horizontal-dotted-line)"
  &gt;&lt;/rect&gt;
&lt;/svg&gt;
</code></pre>

<p>And this is what that looks like:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="eYwwNQM"
	data-user="smashingmag"
	data-default-tab="result"
	class="codepen">See the Pen [SVG Dot Grid [forked]](https://codepen.io/smashingmag/pen/eYwwNQM) by <a href="https://codepen.io/mynimi">Myriam</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/smashingmag/pen/eYwwNQM">SVG Dot Grid [forked]</a> by <a href="https://codepen.io/mynimi">Myriam</a>.</figcaption>
</figure>

<h2 id="conclusion">Conclusion</h2>

<p>This brings us to the end of our little introductory journey into SVG. As you can see, coding SVG by hand is not as scary as it seems. If you break it down into the basic elements, it becomes quite like any other coding task:</p>

<ul>
<li>We analyze the problem,</li>
<li>Break it down into smaller parts,</li>
<li>Examine each coordinate and its mathematical breakdown,</li>
<li>And then put it all together.</li>
</ul>

<p>I hope that this article has given you a starting point into the wonderful world of coded images and that it gives you the motivation to delve deeper into the specs and try drawing some yourself.</p>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Yinjian Huang</author><title>How To Design Effective Conversational AI Experiences: A Comprehensive Guide</title><link>https://www.smashingmagazine.com/2024/07/how-design-effective-conversational-ai-experiences-guide/</link><pubDate>Mon, 15 Jul 2024 09:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2024/07/how-design-effective-conversational-ai-experiences-guide/</guid><description>This in-depth guide takes you through the three crucial phases of conversational search, revealing how users express their needs, explore results, and refine their queries. Learn how AI agents can overcome communication barriers, personalize the search experience, and adapt to evolving user intent. Discover practical strategies and real-world examples to guide your development of intuitive, effective, and user-centric conversational interfaces.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2024/07/how-design-effective-conversational-ai-experiences-guide/" />
              <title>How To Design Effective Conversational AI Experiences: A Comprehensive Guide</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>How To Design Effective Conversational AI Experiences: A Comprehensive Guide</h1>
                  
                    
                    <address>Yinjian Huang</address>
                  
                  <time datetime="2024-07-15T09:00:00&#43;00:00" class="op-published">2024-07-15T09:00:00+00:00</time>
                  <time datetime="2024-07-15T09:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Conversational AI is revolutionizing information access, offering a personalized, intuitive search experience that delights users and empowers businesses. A well-designed conversational agent acts as a knowledgeable guide, understanding user intent and effortlessly navigating vast data, which leads to happier, more engaged users, fostering loyalty and trust. Meanwhile, businesses benefit from increased efficiency, reduced costs, and a stronger bottom line. On the other hand, a poorly designed system can lead to frustration, confusion, and, ultimately, abandonment.</p>

<p>Achieving success with conversational AI requires more than just deploying a chatbot. To truly harness this technology, we must master the intricate dynamics of human-AI interaction. This involves understanding how users articulate needs, explore results, and refine queries, paving the way for a seamless and effective search experience.</p>

<p>This article will decode the three phases of conversational search, the challenges users face at each stage, and the strategies and best practices AI agents can employ to enhance the experience.</p>

<h2 id="the-three-phases-of-conversational-search">The Three Phases Of Conversational Search</h2>

<p>To analyze these complex interactions, <a href="https://www.damianospina.com/publication/trippas-2018-informing/trippas-2018-informing.pdf">Trippas et al. (2018)</a> (PDF) proposed a framework that outlines three core phases in the conversational search process:</p>

<ol>
<li><strong>Query formulation:</strong> Users express their information needs, often facing challenges in articulating them clearly.</li>
<li><strong>Search results exploration:</strong> Users navigate through presented results, seeking further information and refining their understanding.</li>
<li><strong>Query re-formulation:</strong> Users refine their search based on new insights, adapting their queries and exploring different avenues.</li>
</ol>

<p>Building on this framework, <a href="https://pure.strath.ac.uk/ws/portalfiles/portal/81617009/Azzopardi_etal_2018_Conceptualizing_agent_human_interactions_during_the_conversational_search_process.pdf">Azzopardi et al. (2018)</a> (PDF) identified five key user actions within these phases: reveal, inquire, navigate, interrupt, interrogate, and the corresponding agent actions &mdash; inquire, reveal, traverse, suggest, and explain.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/1-table-three-phases-conversational-search.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="530"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/1-table-three-phases-conversational-search.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/1-table-three-phases-conversational-search.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/1-table-three-phases-conversational-search.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/1-table-three-phases-conversational-search.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/1-table-three-phases-conversational-search.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/1-table-three-phases-conversational-search.png"
			
			sizes="100vw"
			alt="Table created by the author based on Azzopardi et al.’s paper"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Table created by the author based on Azzopardi et al.’s paper. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/1-table-three-phases-conversational-search.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>In the following sections, I’ll break down each phase of the conversational search journey, delving into the actions users take and the corresponding strategies AI agents can employ, as identified by <a href="https://pure.strath.ac.uk/ws/portalfiles/portal/81617009/Azzopardi_etal_2018_Conceptualizing_agent_human_interactions_during_the_conversational_search_process.pdf">Azzopardi et al. (2018)</a> (PDF). I’ll also share actionable tactics and real-world examples to guide the implementation of these strategies.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p><strong>Web forms</strong> are at the center of every meaningful interaction. Meet Adam Silver&rsquo;s <strong><a href="https://www.smashingmagazine.com/printed-books/form-design-patterns/">Form Design Patterns</a></strong>, a practical guide to <strong>designing and building forms</strong> for the web.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/form-design-patterns/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/form-design-patterns/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/64e57b41-b7f1-4ae3-886a-806cce580ef9/form-design-patterns-shop-image-1-1.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/51e0f837-d85d-4b28-bfab-1c9a47f0ce33/form-design-patterns-shop-image.png"
    alt="Feature Panel"
    width="481"
    height="698"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h2 id="phase-1-query-formulation-the-art-of-articulation">Phase 1: Query Formulation: The Art Of Articulation</h2>

<p>In the initial phase of query formulation, users attempt to translate their needs into prompts. This process involves conscious disclosures &mdash; sharing details they believe are relevant &mdash; and unconscious non-disclosure &mdash; omitting information they may not deem important or struggle to articulate.</p>

<p>This process is fraught with challenges. As <a href="https://jakobnielsenphd.substack.com/p/prompt-driven-ai-ux-hurts-usability">Jakob Nielsen</a> aptly pointed out,</p>

<blockquote>“Articulating ideas in written prose is hard. Most likely, half the population can’t do it. This is a usability problem for current prompt-based AI user interfaces.”<br /><br />&mdash; Jakob Nielsen</blockquote>

<p>This can manifest as:</p>

<ul>
<li><strong>Vague language</strong>: <em>“I need help with my finances.”</em><br />
Budgeting? Investing? Debt management?</li>
<li><strong>Missing details</strong>: <em>“I need a new pair of shoes.”</em><br />
What type of shoes? For what purpose?</li>
<li><strong>Limited vocabulary</strong>: Not knowing the right technical terms. <em>“I think I have a sprain in my ankle.”</em><br />
The user might not know the difference between a sprain and a strain or the correct anatomical terms.</li>
</ul>

<p>These challenges can lead to frustration for users and less relevant results from the AI agent.</p>

<h3 id="ai-agent-strategies-nudging-users-towards-better-input">AI Agent Strategies: Nudging Users Towards Better Input</h3>

<p>To bridge the articulation gap, AI agents can employ three core strategies:</p>

<ol>
<li><strong>Elicit</strong>: Proactively guide users to provide more information.</li>
<li><strong>Clarify</strong>: Seek to resolve ambiguities in the user’s query.</li>
<li><strong>Suggest</strong>: Offer alternative phrasing or search terms that better capture the user’s intent.</li>
</ol>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aThe%20key%20to%20effective%20query%20formulation%20is%20balancing%20elicitation%20and%20assumption.%20Overly%20aggressive%20questioning%20can%20frustrate%20users,%20and%20making%20too%20many%20assumptions%20can%20lead%20to%20inaccurate%20results.%0a&url=https://smashingmagazine.com%2f2024%2f07%2fhow-design-effective-conversational-ai-experiences-guide%2f">
      
The key to effective query formulation is balancing elicitation and assumption. Overly aggressive questioning can frustrate users, and making too many assumptions can lead to inaccurate results.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>For example,</p>

<blockquote>User: “I need a new phone.”<br /><br />AI: “What’s your budget? What features are important to you? What size screen do you prefer? What carrier do you use?...”</blockquote>

<p>This rapid-fire questioning can overwhelm the user and make them feel like they&rsquo;re being interrogated. A more effective approach is to start with a few open-ended questions and gradually elicit more details based on the user’s responses.</p>

<p>As <a href="https://pure.strath.ac.uk/ws/portalfiles/portal/81617009/Azzopardi_etal_2018_Conceptualizing_agent_human_interactions_during_the_conversational_search_process.pdf">Azzopardi et al. (2018)</a> (PDF) stated in the paper,</p>

<blockquote>“There may be a trade-off between the efficiency of the conversation and the accuracy of the information needed as the agent has to decide between how important it is to clarify and how risky it is to infer or impute the underspecified or missing details.”</blockquote>

<h3 id="implementation-tactics-and-examples">Implementation Tactics And Examples</h3>

<ul>
<li><strong>Probing questions</strong>: Ask open-ended or clarifying questions to gather more details about the user’s needs. For example, Perplexity Pro uses probing questions to elicit more details about the user’s needs for gift recommendations.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/2-conversational-search-engine-employs-probing-questions.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="642"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/2-conversational-search-engine-employs-probing-questions.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/2-conversational-search-engine-employs-probing-questions.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/2-conversational-search-engine-employs-probing-questions.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/2-conversational-search-engine-employs-probing-questions.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/2-conversational-search-engine-employs-probing-questions.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/2-conversational-search-engine-employs-probing-questions.png"
			
			sizes="100vw"
			alt="An example of how a conversational search engine employs probing questions to a user query, which says “gifts for my friend.”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of how a conversational search engine employs probing questions to refine user queries and better understand their intent. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/2-conversational-search-engine-employs-probing-questions.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>For example, after clicking one of the initial prompts, “Create a personal webpage,” ChatGPT added another sentence, “Ask me 3 questions first on whatever you need to know,” to elicit more details from the user.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/3-chatgpt-promt.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="434"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/3-chatgpt-promt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/3-chatgpt-promt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/3-chatgpt-promt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/3-chatgpt-promt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/3-chatgpt-promt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/3-chatgpt-promt.png"
			
			sizes="100vw"
			alt="List of questions ChatGPT-4o asked on the initial prompt “Create a personal webpage”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      After clicking one of the initial prompts, “Create a personal webpage” on ChatGPT-4o. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/3-chatgpt-promt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Interactive refinement</strong>: Utilize visual aids like sliders, checkboxes, or image carousels to help users specify their preferences without articulating everything in words. For example, Adobe Firefly’s side settings allow users to adjust their preferences.<br /></li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/4-conversational-search-setting-panels.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="728"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/4-conversational-search-setting-panels.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/4-conversational-search-setting-panels.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/4-conversational-search-setting-panels.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/4-conversational-search-setting-panels.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/4-conversational-search-setting-panels.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/4-conversational-search-setting-panels.png"
			
			sizes="100vw"
			alt="An example of interactive refinement through setting panels on the prompt moon"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of how interactive refinement in conversational search through setting panels can help users explore their preferences. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/4-conversational-search-setting-panels.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Suggested prompts</strong>: Provide examples of more specific or detailed queries to help users refine their search terms. For example, Nelson Norman Group provides an interface that offers a suggested prompt to help users refine their initial query.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/5-descriptive-versions-prompts.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="317"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/5-descriptive-versions-prompts.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/5-descriptive-versions-prompts.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/5-descriptive-versions-prompts.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/5-descriptive-versions-prompts.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/5-descriptive-versions-prompts.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/5-descriptive-versions-prompts.png"
			
			sizes="100vw"
			alt="Example design suggesting more descriptive versions of prompts"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Example design suggesting more descriptive versions of prompts to users provided by <a href='https://www.nngroup.com/articles/ai-articulation-barrier/'>Nelson Norman Group</a>. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/5-descriptive-versions-prompts.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>For example, after clicking one of the initial prompts in Gemini, “Generate a stunning, playful image,” more details are added in blue in the input.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/6-refined-prompt-enriched-details.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="546"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/6-refined-prompt-enriched-details.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/6-refined-prompt-enriched-details.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/6-refined-prompt-enriched-details.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/6-refined-prompt-enriched-details.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/6-refined-prompt-enriched-details.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/6-refined-prompt-enriched-details.png"
			
			sizes="100vw"
			alt="An example of a refined prompt enriched with details."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of a refined prompt enriched with details. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/6-refined-prompt-enriched-details.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Offering multiple interpretations</strong>: If the query is ambiguous, present several possible interpretations and let the user choose the most accurate one. For example, Gemini offers a list of gift suggestions for the query “gifts for my friend who loves music,” categorized by the recipient’s potential music interests to help the user pick the most relevant one.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/7-multiple-interpretations-promt.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="509"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/7-multiple-interpretations-promt.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/7-multiple-interpretations-promt.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/7-multiple-interpretations-promt.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/7-multiple-interpretations-promt.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/7-multiple-interpretations-promt.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/7-multiple-interpretations-promt.png"
			
			sizes="100vw"
			alt="An example of gift suggestions tailored to different types of music enthusiasts."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of gift suggestions tailored to different types of music enthusiasts. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/7-multiple-interpretations-promt.png'>Large preview</a>)
    </figcaption>
  
</figure>

<div class="partners__lead-place"></div>

<h2 id="phase-2-search-results-exploration-a-multifaceted-journey">Phase 2: Search Results Exploration: A Multifaceted Journey</h2>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/8-search-results-exploration.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="321"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/8-search-results-exploration.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/8-search-results-exploration.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/8-search-results-exploration.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/8-search-results-exploration.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/8-search-results-exploration.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/8-search-results-exploration.png"
			
			sizes="100vw"
			alt="A table which visualizes a search results exploration phase"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Table created by author based on Azzopardi et al.’s paper. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/8-search-results-exploration.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Once the query is formed, the focus shifts to exploration. Users embark on a multifaceted journey through search results, seeking to understand their options and make informed decisions.</p>

<p>Two primary user actions mark this phase:</p>

<ol>
<li><strong>Inquire</strong>: Users actively seek more information, asking for details, comparisons, summaries, or related options.</li>
<li><strong>Navigate</strong>: Users navigate the presented information, browse through lists, revisit previous options, or request additional results. This involves scrolling, clicking, and using voice commands like “next” or “previous.”</li>
</ol>

<h3 id="ai-agent-strategies-facilitating-exploration-and-discovery">AI Agent Strategies: Facilitating Exploration And Discovery</h3>

<p>To guide users through the vast landscape of information, AI agents can employ these strategies:</p>

<ol>
<li><strong>Reveal</strong>: Present information that caters to diverse user needs and preferences.</li>
<li><strong>Traverse</strong>: Guide the user through the information landscape, providing intuitive navigation and responding to their evolving interests.</li>
</ol>

<p>During discovery, it’s vital to avoid information overload, which can overwhelm users and hinder their decision-making. For example,</p>

<blockquote>User: “I’m looking for a place to stay in Tokyo.”<br /><br />AI: Provides a lengthy list of hotels without any organization or filtering options.</blockquote>

<p>Instead, AI agents should offer the most relevant results and allow users to filter or sort them based on their needs. This might include presenting a few top recommendations based on ratings or popularity, with options to refine the search by price range, location, amenities, and so on.</p>

<p>Additionally, AI agents should understand natural language navigation. For example, if a user asks, “Tell me more about the second hotel,” the AI should provide additional details about that specific option without requiring the user to rephrase their query. This level of understanding is crucial for flexible navigation and a seamless user experience.</p>

<h3 id="implementation-tactics-and-examples-1">Implementation Tactics And Examples</h3>

<ul>
<li><strong>Diverse formats</strong>: Offer results in various formats (lists, summaries, comparisons, images, videos) and allow users to specify their preferences. For example, Gemini presents a summarized format of hotel information, including a photo, price, rating, star rating, category, and brief description to allow the user to evaluate options quickly for the prompt <em>“I’m looking for a place to stay in Paris.”</em></li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/9-conversational-search-interface-summary-format.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="403"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/9-conversational-search-interface-summary-format.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/9-conversational-search-interface-summary-format.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/9-conversational-search-interface-summary-format.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/9-conversational-search-interface-summary-format.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/9-conversational-search-interface-summary-format.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/9-conversational-search-interface-summary-format.png"
			
			sizes="100vw"
			alt="An example of a conversational search interface using a summary format for the prompt “I’m looking for a place to stay in Paris.”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of a conversational search interface using a summary format to present relevant information concisely. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/9-conversational-search-interface-summary-format.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Context-aware navigation</strong>: Maintain conversational context, remember user preferences, and provide relevant navigation options. For example, following the previous example prompt, Gemini reminds users of the potential next steps at the end of the response.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/10-contextual-navigation.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="249"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/10-contextual-navigation.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/10-contextual-navigation.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/10-contextual-navigation.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/10-contextual-navigation.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/10-contextual-navigation.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/10-contextual-navigation.png"
			
			sizes="100vw"
			alt="An example of contextual navigation by asking, “I can help you narrow down … What would you like to do next?”"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of contextual navigation by asking, “I can help you narrow down … What would you like to do next?” (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/10-contextual-navigation.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Interactive exploration</strong>: Use carousels, clickable images, filter options, and other interactive elements to enhance the exploration experience. For example, Perplexity offers a carousel of images related to “a vegetarian diet” and other interactive elements like “Watch Videos” and “Generate Image” buttons to enhance exploration and discovery.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/11-interactive-exploration.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="584"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/11-interactive-exploration.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/11-interactive-exploration.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/11-interactive-exploration.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/11-interactive-exploration.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/11-interactive-exploration.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/11-interactive-exploration.png"
			
			sizes="100vw"
			alt="An example of various interactive elements in a conversational search for a vegetarian diet"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of how interactive elements like image carousels, video recommendations (“Watch”), and image generation options (“Generate Image”) can facilitate exploration in conversational search. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/11-interactive-exploration.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Multiple responses</strong>: Present several variations of a response. For example, users can see multiple draft responses to the same query by clicking the “Show drafts” button in Gemini.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/12-multiple-responses.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="252"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/12-multiple-responses.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/12-multiple-responses.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/12-multiple-responses.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/12-multiple-responses.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/12-multiple-responses.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/12-multiple-responses.png"
			
			sizes="100vw"
			alt="An example of a conversational search interface providing multiple response options for a UX welcome message."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of a conversational search interface providing multiple response options for a UX welcome message. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/12-multiple-responses.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Flexible text length and tone.</strong> Enable users to customize the length and tone of AI-generated responses to better suit their preferences. For example, Gemini provides multiple options for welcome messages, offering varying lengths, tones, and degrees of formality.</li>
</ul>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/13-flexible-text-length-tone.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="690"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/13-flexible-text-length-tone.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/13-flexible-text-length-tone.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/13-flexible-text-length-tone.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/13-flexible-text-length-tone.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/13-flexible-text-length-tone.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/13-flexible-text-length-tone.png"
			
			sizes="100vw"
			alt="An example of a conversational search that caters to diverse user preferences by offering multiple tones, text length, and language styles for a UX welcome message."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of a conversational search that caters to diverse user preferences by offering multiple tones, text length, and language styles. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/13-flexible-text-length-tone.png'>Large preview</a>)
    </figcaption>
  
</figure>

<h2 id="phase-3-query-re-formulation-adapting-to-evolving-needs">Phase 3: Query Re-formulation: Adapting To Evolving Needs</h2>

<p>As users interact with results, their understanding deepens, and their initial query might not fully capture their evolving needs. During query re-formulation, users refine their search based on exploration and new insights, often involving interrupting and interrogating. Query re-formulation empowers users to course-correct and refine their search.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/14-query-re-formulation.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="321"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/14-query-re-formulation.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/14-query-re-formulation.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/14-query-re-formulation.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/14-query-re-formulation.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/14-query-re-formulation.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/14-query-re-formulation.png"
			
			sizes="100vw"
			alt="Table, which visualizes a query re-formulation phase"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Table created by author based on Azzopardi et al.’s paper. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/14-query-re-formulation.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Interrupt:</strong> Users might pause the conversation to:

<ul>
<li>Correct: <em>“Actually, I meant a desktop computer, not a laptop.”</em></li>
<li>Add information: <em>“I also need it to be good for video editing.”</em></li>
<li>Change direction: <em>“I’m not interested in those options. Show me something else.”</em></li>
</ul></li>
<li><strong>Interrogate:</strong> Users challenge the AI to ensure it understands their needs and justify its recommendations:

<ul>
<li>Seek understanding: <em>“What do you mean by ‘good battery life’?”</em></li>
<li>Request explanations: <em>“Why are you recommending this particular model?”</em></li>
</ul></li>
</ul>

<h3 id="ai-agent-strategies-adapting-and-explaining">AI Agent Strategies: Adapting And Explaining</h3>

<p>To navigate the query re-formulation phase effectively, AI agents need to be responsive, transparent, and proactive. Two core strategies for AI agents:</p>

<ol>
<li><strong>Suggest:</strong> Proactively offer alternative directions or options to guide the user towards a more satisfying outcome.</li>
<li><strong>Explain:</strong> Provide clear and concise explanations for recommendations and actions to foster transparency and build trust.</li>
</ol>

<p>AI agents should balance suggestions with relevance and explain why certain options are suggested while avoiding overwhelming them with unrelated suggestions that increase conversational effort. A bad example would be the following:</p>

<blockquote>User: “I want to visit Italian restaurants in New York.”<br /><br />AI: Suggest unrelated options, like Mexican restaurants or American restaurants, when the user is interested in Italian cuisine.</blockquote>

<p>This could frustrate the user and reduce trust in the AI.</p>

<p>A better answer could be, <em>“I found these highly-rated Italian restaurants. Would you like to see more options based on different price ranges?”</em> This ensures users understand the reasons behind recommendations, enhancing their satisfaction and trust in the AI&rsquo;s guidance.</p>

<h3 id="implementation-tactics-and-examples-2">Implementation Tactics And Examples</h3>

<ul>
<li><strong>Transparent system process</strong>: Show the steps involved in generating a response. For example, Perplexity Pro outlines the search process step by step to fulfill the user’s request.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/15-transparent-system-process.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="389"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/15-transparent-system-process.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/15-transparent-system-process.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/15-transparent-system-process.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/15-transparent-system-process.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/15-transparent-system-process.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/15-transparent-system-process.png"
			
			sizes="100vw"
			alt="An example of a conversational search interface displays the steps involved in generating a healthy meal plan."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of a conversational search interface displays the steps involved in generating a healthy meal plan. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/15-transparent-system-process.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Explainable recommendations</strong>: Clearly state the reasons behind specific recommendations, referencing user preferences, historical data, or external knowledge. For example, ChatGPT includes recommended reasons for each listed book in response to the question <em>“books for UX designers.”</em></li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/16-explainable-recommendations.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="390"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/16-explainable-recommendations.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/16-explainable-recommendations.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/16-explainable-recommendations.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/16-explainable-recommendations.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/16-explainable-recommendations.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/16-explainable-recommendations.png"
			
			sizes="100vw"
			alt="An example of explainable recommendations for books by ChatGPT."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of explainable recommendations for books. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/16-explainable-recommendations.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Source reference</strong>: Enhance the answer with source references to strengthen the evidence supporting the conclusion. For example, Perplexity presents source references to support the answer.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/17-source-reference.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="620"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/17-source-reference.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/17-source-reference.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/17-source-reference.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/17-source-reference.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/17-source-reference.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/17-source-reference.png"
			
			sizes="100vw"
			alt="An example of a conversational agent provides source references for the question, “Is it a trend that more people want remote jobs, not onsite jobs?”."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of a conversational agent provides source references for the question, “Is it a trend that more people want remote jobs, not onsite jobs?”. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/17-source-reference.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><a href="https://www.nngroup.com/articles/accordion-editing-apple-picking/"><strong>Point-to-select</strong></a>: Users should be able to directly select specific elements or locations within the dialogue for further interaction rather than having to describe them verbally. For example, users can select part of an answer and ask a follow-up in Perplexity.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/18-point-to-select-feature.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/18-point-to-select-feature.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/18-point-to-select-feature.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/18-point-to-select-feature.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/18-point-to-select-feature.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/18-point-to-select-feature.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/18-point-to-select-feature.png"
			
			sizes="100vw"
			alt="An example of how a conversational search interface can implement a point-to-select feature, enabling users to select specific terms or phrases. An example shows a highlighted word in a text and a message above it stating, “Ask follow-up”."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of how a conversational search interface can implement a point-to-select feature, enabling users to select specific terms or phrases. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/18-point-to-select-feature.png'>Large preview</a>)
    </figcaption>
  
</figure>

<ul>
<li><strong>Proactive recommendations</strong>: Suggest related or complementary items based on the user’s current selections. For example, Perplexity offers a list of related questions to guide the user’s exploration of <em>“a vegetarian diet.”</em></li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/19-proactive-recommendations.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="256"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/19-proactive-recommendations.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/19-proactive-recommendations.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/19-proactive-recommendations.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/19-proactive-recommendations.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/19-proactive-recommendations.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/19-proactive-recommendations.png"
			
			sizes="100vw"
			alt="An example of related questions based on the user’s initial query."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      An example of related questions based on the user’s initial query. (<a href='https://files.smashing.media/articles/how-design-effective-conversational-ai-experiences-guide/19-proactive-recommendations.png'>Large preview</a>)
    </figcaption>
  
</figure>

<div class="partners__lead-place"></div>

<h2 id="overcoming-llm-shortcomings">Overcoming LLM Shortcomings</h2>

<p>While the strategies discussed above can significantly improve the conversational search experience, LLMs still have inherent limitations that can hinder their intuitiveness. These include the following:</p>

<ul>
<li><strong>Hallucinations</strong>: Generating false or nonsensical information.</li>
<li><strong>Lack of common sense</strong>: Difficulty understanding queries that require world knowledge or reasoning.</li>
<li><strong>Sensitivity to input phrasing</strong>: Producing different responses to slightly rephrased queries.</li>
<li><strong>Verbosity</strong>: Providing overly lengthy or irrelevant information.</li>
<li><strong>Bias</strong>: Reflecting biases present in the training data.</li>
</ul>

<p>To create truly effective and user-centric conversational AI, it’s crucial to address these limitations and make interactions more intuitive. Here are some key strategies:</p>

<ul>
<li><strong>Incorporate structured knowledge</strong><br />
Integrating external knowledge bases or databases can ground the LLM’s responses in facts, reducing hallucinations and improving accuracy.</li>
<li><strong>Fine-tuning</strong><br />
Training the LLM on domain-specific data enhances its understanding of particular topics and helps mitigate bias.</li>
<li><strong>Intuitive feedback mechanisms</strong><br />
Allow users to easily highlight and correct inaccuracies or provide feedback directly within the conversation. This could involve clickable elements to flag problematic responses or a “this is incorrect” button that prompts the AI to reconsider its output.</li>
<li><strong>Natural language error correction</strong><br />
Develop AI agents capable of understanding and responding to natural language corrections. For example, if a user says, <em>“No, I meant X,”</em> the AI should be able to interpret this as a correction and adjust its response accordingly.</li>
<li><strong>Adaptive learning</strong><br />
Implement machine learning algorithms that allow the AI to learn from user interactions and improve its performance over time. This could involve recognizing patterns in user corrections, identifying common misunderstandings, and adjusting behavior to minimize future errors.</li>
</ul>

<h2 id="training-ai-agents-for-enhanced-user-satisfaction">Training AI Agents For Enhanced User Satisfaction</h2>

<p>Understanding and evaluating user satisfaction is fundamental to building effective conversational AI agents. However, directly measuring user satisfaction in the open-domain search context can be challenging, as <a href="https://arxiv.org/abs/2204.02659">Zhumin Chu et al. (2022)</a> highlighted. Traditionally, metrics like session abandonment rates or task completion were used as proxies, but these don’t fully capture the nuances of user experience.</p>

<p>To address this, <a href="https://dl.acm.org/doi/10.1145/3624989">Clemencia Siro et al. (2023)</a> offer a comprehensive approach to gathering and leveraging user feedback:</p>

<ul>
<li><strong>Identify key dialogue aspects</strong><br />
To truly understand user satisfaction, we need to look beyond simple metrics like “thumbs up” or “thumbs down.” Consider evaluating aspects like relevance, interestingness, understanding, task completion, interest arousal, and efficiency. This multi-faceted approach provides a more nuanced picture of the user’s experience.</li>
<li><strong>Collect multi-level feedback</strong><br />
Gather feedback at both the turn level (each question-answer pair) and the dialogue level (the overall conversation). This granular approach pinpoints specific areas for improvement, both in individual responses and the overall flow of the conversation.</li>
<li><strong>Recognize individual differences</strong><br />
Understand that the concept of satisfaction varies per user. Avoid assuming all users perceive satisfaction similarly.</li>
<li><strong>Prioritize relevance</strong><br />
While all aspects are important, relevance (at the turn level) and understanding (at both the turn and session level) have been identified as key drivers of user satisfaction. Focus on improving the AI agent’s ability to provide relevant and accurate responses that demonstrate a clear understanding of the user’s intent.</li>
</ul>

<p>Additionally, consider these practical tips for incorporating user satisfaction feedback into the AI agent’s training process:</p>

<ul>
<li><strong>Iterate on prompts</strong><br />
Use user feedback to refine the prompts to elicit information and guide the conversation.</li>
<li><strong>Refine response generation</strong><br />
Leverage feedback to improve the relevance and quality of the AI agent’s responses.</li>
<li><strong>Personalize the experience</strong><br />
Tailor the conversation to individual users based on their preferences and feedback.</li>
<li><strong>Continuously monitor and improve</strong><br />
Regularly collect and analyze user feedback to identify areas for improvement and iterate on the AI agent’s design and functionality.</li>
</ul>

<h2 id="the-future-of-conversational-search-beyond-the-horizon">The Future Of Conversational Search: Beyond The Horizon</h2>

<p>The evolution of conversational search is far from over. As AI technologies continue to advance, we can anticipate exciting developments:</p>

<ul>
<li><strong>Multi-modal interactions</strong><br />
Conversational search will move beyond text, incorporating voice, images, and video to create more immersive and intuitive experiences.</li>
<li><strong>Personalized recommendations</strong><br />
AI agents will become more adept at tailoring search results to individual users, considering their past interactions, preferences, and context. This could involve suggesting restaurants based on dietary restrictions or recommending movies based on previously watched titles.</li>
<li><strong>Proactive assistance</strong><br />
Conversational search systems will anticipate user needs and proactively offer information or suggestions. For instance, an AI travel agent might suggest packing tips or local customs based on a user’s upcoming trip.</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Cosima Mielke</author><title>Useful Email Newsletters For Designers</title><link>https://www.smashingmagazine.com/2024/06/useful-email-newsletters-for-designers/</link><pubDate>Mon, 17 Jun 2024 18:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2024/06/useful-email-newsletters-for-designers/</guid><description>Whether you want to take your user research skills to the next level, get better at UX writing, or stay up-to-date on the latest design trends, a newsletter is the perfect opportunity to get the best of the best resources delivered straight to your inbox on a regular basis. In this post, we highlight some design newsletters that you might want to consider subscribing to.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2024/06/useful-email-newsletters-for-designers/" />
              <title>Useful Email Newsletters For Designers</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Useful Email Newsletters For Designers</h1>
                  
                    
                    <address>Cosima Mielke</address>
                  
                  <time datetime="2024-06-17T18:00:00&#43;00:00" class="op-published">2024-06-17T18:00:00+00:00</time>
                  <time datetime="2024-06-17T18:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                <p>Struggling to keep our inboxes under control and aim for that magical state of inbox zero, the notification announcing an incoming email isn’t the most appreciated sound for many of us. However, there are some emails to actually look forward to: A newsletter, <strong>curated and written with love and care</strong>, can be a nice break in your daily routine, providing new insights and <strong>sparking ideas and inspiration</strong> for your work.</p>

<p>With so many wonderful design newsletters out there, we know it can be a challenge to decide which newsletter (or newsletters) to subscribe to. That’s why we want to shine a light on some newsletter gems today to make your decision at least a bit easier — and help you discover newsletters you might not have heard of yet. Ranging from <strong>design systems</strong> to <strong>UX writing</strong>, motion design, and <strong>user research</strong>, there sure is something in it for you.</p>

<p>A huge thank you to everyone who writes, edits, and publishes these newsletters to help us all get better at our craft. You are truly smashing! 👏🏼👏🏽👏🏾</p>

<h3>Table of Contents</h3>

<p>Below you’ll find quick jumps to newsletters on specific topics you might be interested in. Scroll down to browse the complete list or <a href="#design-and-front-end">skip the table of contents</a>.</p>

<ul class="toc-components">
<li><a href="#ai">AI</a></li>
<li><a href="#business">business</a></li>
<li><a href="#career-and-leadership">career</a></li>
<li><a href="#ux-writing-and-content-strategy">content strategy</a></li>
<li><a href="#design-and-front-end">design</a></li>
<li><a href="#design-systems-and-figma">design systems</a></li>
<li><a href="#ethical-design-and-sustainability">ethical design</a></li>
<li><a href="#design-systems-and-figma">Figma</a></li>
<li><a href="#design-and-front-end">front-end</a></li>
<li><a href="#information-architecture">information architecture</a></li>
<li><a href="#interaction-design">interaction design</a></li>
<li><a href="#career-and-leadership">leadership</a></li>
<li><a href="#product-design">product design</a></li>
<li><a href="#ethical-design-and-sustainability">sustainability</a></li>
<li><a href="#user-research">user research</a></li>
<li><a href="#ux">UX</a></li>
<li><a href="#ux-writing-and-content-strategy">UX writing</a></li>
</ul>

<h2 id="design-and-front-end">Design &amp; Front-End</h2>

<h3><a href="https://heydesigner.com/">HeyDesigner</a></h3>

<p><a href="https://heydesigner.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/heydesigner-opt.png" width="180" height="180" alt="HeyDesigner" /></a>🗓 Delivered every Monday<br />
🖋 Written by <a href="https://hu.linkedin.com/in/tamassari">Tamas Sari</a><br /><br />Aimed at product people, UXers, PMs, and design engineers, the <a href="https://heydesigner.com/">HeyDesigner</a> newsletter is packed with a carefully curated selection of the latest design and front-end articles, tools, and resources.</p>

<h3><a href="https://stephaniewalter.design/subscribe-to-the-blog-updates/">Pixels of the Week</a></h3>

<p><a href="https://stephaniewalter.design/subscribe-to-the-blog-updates/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/stephanie-walter-opt.png" width="180" height="180" alt="Pixels of the Week" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://lu.linkedin.com/in/stephaniewalterpro?trk=public_post-text&original_referer=https%3A%2F%2Fwww.linkedin.com%2F">Stéphanie Walter</a><br /><br />Stéphanie Walter’s <a href="https://stephaniewalter.design/subscribe-to-the-blog-updates/">Pixels of the Week</a> newsletter keeps you informed about the latest UX research, design, tech (HTML, CSS, SVG) news, tools, methods, and other resources that caught Stéphanie’s interest.</p>

<h3><a href="https://tldr.tech/design">TLDR Design</a></h3>

<p><a href="https://tldr.tech/design"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/tldr-opt.png" width="180" height="180" alt="TLDR Design" /></a>🗓 Delivered daily<br />
🖋 Written by <a href="https://www.linkedin.com/in/dan-ni?original_referer=https%3A%2F%2Fwww.google.com%2F">Dan Ni</a><br /><br />You’re looking for some bite-sized design inspiration? <a href="https://tldr.tech/design">TLDR Design</a> is a daily newsletter highlighting news, tools, tutorials, trends, and inspiration for design professionals.</p>

<h3><a href="https://www.designops.lol/">DesignOps</a></h3>

<p><a href="https://www.designops.lol/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/designops-opt.png" width="180" height="180" alt="DesignOps" /></a>🗓 Delivered every two weeks<br />
🖋 Written by <a href="https://au.linkedin.com/in/chanarmstrong?trk=public_post-text">Ch'an Armstrong</a><br /><br />The <a href="https://www.designops.lol/">DesignOps newsletter</a> provides the DesignOps community with the best hand-picked articles all around design, code, AI, design tools, no-code tools, developer tools, and, of course, design ops.</p>

<h3><a href="https://adamsilver.io/newsletter/">Adam Silver’s Newsletter</a></h3>

<p><a href="https://adamsilver.io/newsletter/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/adam-silver-opt.png" width="180" height="180" alt="Adam Silver’s Newsletter" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://uk.linkedin.com/in/adamsilverhq?trk=public_post-text&original_referer=https%3A%2F%2Fwww.linkedin.com%2F">Adam Silver</a><br /><br />Every week, Adam Silver sends out a <a href="https://adamsilver.io/newsletter/">newsletter</a> aimed at designers, content designers, and front-end developers. It includes short and sweet, evidence-based design tips, mostly about forms UX, but not always.</p>

<h3><a href="https://www.smashingmagazine.com/the-smashing-newsletter/">Smashing Newsletter</a></h3>

<p><a href="https://www.smashingmagazine.com/the-smashing-newsletter/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/smashing-opt.png" width="180" height="180" alt="Smashing Newsletter" /></a>🗓 Delivered every Tuesday<br />
🖋 Written by the Smashing Editorial team<br /><br />Every Tuesday, we publish the <a href="https://www.smashingmagazine.com/the-smashing-newsletter/">Smashing Newsletter</a> with useful tips and techniques on front-end and UX, covering everything from design systems and UX research to CSS and JavaScript. Each issue is curated, written, and edited with love and care, no third-party mailings or hidden advertising.</p>

<h2 id="ux">UX</h2>

<h3><a href="https://uxdesignweekly.com/">UX Design Weekly</a></h3>

<p><a href="https://uxdesignweekly.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/ux-design-weekly-opt.png" width="180" height="180" alt="https://uxdesignweekly.com/" /></a>🗓 Delivered every Monday<br />
🖋 Written by <a href="https://au.linkedin.com/in/kenneth-chen-uxd?trk=public_post-text">Kenny Chen</a><br /><br /><a href="https://uxdesignweekly.com/">UX Design Weekly</a> provides you with a weekly dose of hand-picked user experience design links. Every issue features articles, tools and resources, a UX portfolio, and a quote to spark ideas and get you thinking.</p>

<h3><a href="https://newsletter.uxdesign.cc/">UX Collective</a></h3>

<p><a href="https://newsletter.uxdesign.cc/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/ux-collective-opt.png" width="180" height="180" alt="UX Collective" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://www.linkedin.com/in/fabricioteixeira?trk=public_post-text">Fabricio Teixeira</a> and <a href="https://www.linkedin.com/in/caioab">Caio Braga</a><br /><br />“Designers are thinkers as much as they are makers.” Following this credo, the <a href="https://newsletter.uxdesign.cc/">UX Collective</a> newsletter helps designers think more critically about their work. Every issue highlights thought-provoking reads, little gems, tools, and resources.</p>

<h3><a href="https://builtformars.com/newsletter">Built For Mars</a></h3>

<p><a href="https://builtformars.com/newsletter"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/built-for-mars-opt.png" width="180" height="180" alt="Built For Mars" /></a>🗓 Delivered every few weeks<br />
🖋 Written by <a href="https://uk.linkedin.com/in/ramseyp?trk=public_post-text">Peter Ramsey</a><br /><br />The <a href="https://builtformars.com/newsletter">Built for Mars</a> newsletter brings Peter Ramsey’s UX research straight to your inbox. It includes in-depth UX case studies and bite-sized UX ideas and experiments.</p>

<h3><a href="https://www.nngroup.com/articles/subscribe/">NN Group</a></h3>

<p><a href="https://www.nngroup.com/articles/subscribe/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/nng-opt.png" width="180" height="180" alt="NN Group" /></a>🗓 Delivered weekly<br />
🖋 Written by the <a href="https://www.nngroup.com/">Nielsen Norman Group</a><br /><br />Studying users around the world, the Nielsen Norman Group provides research-based UX guidance. If you don’t want to miss their latest articles and videos about usability, design, and UX research, you can subscribe to the <a href="https://www.nngroup.com/articles/subscribe/">NN/g newsletter</a> to stay up-to-date.</p>

<h3><a href="https://www.sarahdoody.com/ux-notebook-newsletter/">UX Notebook</a></h3>

<p><a href="https://www.sarahdoody.com/ux-notebook-newsletter/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/ux-notebook-opt.png" width="180" height="180" alt="UX Notebook" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://www.linkedin.com/in/sarahdoody?trk=public_post_feed-actor-name">Sarah Doody</a><br /><br />The <a href="https://www.sarahdoody.com/ux-notebook-newsletter/">UX Notebook Newsletter</a> is aimed at UX and product professionals who want to learn how to apply UX and design principles to design and grow their teams, products, and careers.</p>

<h3><a href="https://www.linkedin.com/newsletters/7015923371875926016/">Smart Interface Design Patterns</a></h3>

<p><a href="https://www.linkedin.com/newsletters/7015923371875926016/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/smart-interface-design-patterns-opt.png" width="180" height="180" alt="Smart Interface Design Patterns" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://be.linkedin.com/in/vitalyfriedman?trk=public_post_feed-actor-name">Vitaly Friedman</a><br /><br />Every issue of the <a href="https://www.linkedin.com/newsletters/7015923371875926016/">Smart Interface Design Patterns</a> newsletter is dedicated to a common interface challenge and how to solve it to avoid issues down the line. A treasure chest of design patterns and UX techniques.</p>

<h3><a href="https://www.interaction-design.org/newsletter">UX Weekly</a></h3>

<p><a href="https://www.interaction-design.org/newsletter"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/interaction-design-opt.png" width="180" height="180" alt="UX Weekly" /></a>🗓 Delivered weekly<br />
🖋 Written by the <a href="https://www.interaction-design.org/">Interaction Design Foundation</a><br /><br />The Interaction Design Foundation is known for their UX courses and webinars for both aspiring designers and advanced professionals. Their <a href="https://www.interaction-design.org/newsletter">UX Weekly</a> newsletter delivers design tips and educational material to help you leverage the power of design.</p>

<h3><a href="https://designwith.care/">Design With Care</a></h3>

<p><a href="https://designwith.care/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/design-with-care-opt.png" width="180" height="180" alt="Design With Care" /></a>🗓 Delivered every first Tuesday of a month<br />
🖋 Written by <a href="https://www.linkedin.com/in/abilstein?trk=public_post-text">Alex Bilstein</a><br /><br />Healthcare systems desparately need UX designers to improve the status quo for both healthcare professionals and patients. The <a href="https://designwith.care/">Design With Care</a> newsletter empowers UX designers to create better healthcare experiences and make an impact that matters.</p>

<div class="partners__lead-place"></div>

<h2 id="ux-writing-and-content-strategy">UX Writing &amp; Content Strategy</h2>

<h3><a href="https://www.theuxgal.com/">The UX Gal</a></h3>

<p><a href="https://www.theuxgal.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/ux-gal-opt.png" width="180" height="180" alt="The UX Gal" /></a>🗓 Delivered every Monday<br />
🖋 Written by <a href="https://www.linkedin.com/in/slaterkatz?trk=public_post-text">Slater Katz</a><br /><br />Whether you’re about to start your UX content education or want to get better at UX writing, <a href="https://www.theuxgal.com/">The UX Gal</a> newsletter is for you. Every Monday, Slater Katz sends out a new newsletter with prompts, thoughts, and exercises to build your UX writing and content design skills.</p>

<h3><a href="https://uxcontent.com/ux-writing-newsletters/">UX Content Collective</a></h3>

<p><a href="https://uxcontent.com/ux-writing-newsletters/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/ux-content-opt.png" width="180" height="180" alt="UX Content" /></a>🗓 Delivered weekly<br />
🖋 Written by the <a href="https://uxcontent.com/">UX Content Collective</a><br /><br />The newsletter by the <a href="https://uxcontent.com/ux-writing-newsletters/">UX Content Collective</a> is perfect for anyone interested in content design. In it, you’ll find curated UX writing resources, new job openings, and exclusive discounts.</p>

<h3><a href="https://gathercontent.com/newsletter">GatherContent</a></h3>

<p><a href="https://gathercontent.com/newsletter"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/gather-content-opt.png" width="180" height="180" alt="Content Strategy: GatherContent" /></a>🗓 Delivered weekly<br />
🖋 Written by the <a href="https://gathercontent.com/">GatherContent</a> team<br /><br />The <a href="https://gathercontent.com/newsletter">GatherContent newsletter</a> is a weekly email full of content strategy goodies. It features articles, webinars and masterclasses, new books, free templates, and industry news.</p>

<h2 id="user-research">User Research</h2>

<h3><a href="https://userresearchacademy.substack.com/">User Research Academy</a></h3>

<p><a href="https://userresearchacademy.substack.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/user-research-academy-opt.png" width="180" height="180" alt="User Research Academy" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://je.linkedin.com/in/nikkianderson-ux?trk=public_post-text&original_referer=https%3A%2F%2Fwww.linkedin.com%2F">Nikki Anderson</a><br /><br />If you want to get more creative and confident when conducting user research, the <a href="https://userresearchacademy.substack.com/">User Research Academy</a> might be for you. With carefully curated articles, podcasts, events, books, and academic resources all around user research, the newsletter is perfect for beginners and senior UX researchers alike.</p>

<h3><a href="https://www.userweekly.com/">User Weekly</a></h3>

<p><a href="https://www.userweekly.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/user-weekly-opt.png" width="180" height="180" alt="User Weekly" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://ch.linkedin.com/in/janahrend?trk=public_post-text">Jan Ahrend</a><br /><br />What mattered in UX research this week? To keep you up-to-date on trends, methods, and insights across the UX research industry, Jan Ahrend captures the pulse of the UX research community in his <a href="https://www.userweekly.com/">User Weekly</a> newsletter.</p>

<h3><a href="https://www.userinterviews.com/subscribe">User Interviews</a></h3>

<p><a href="https://www.userinterviews.com/subscribe"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/user-interviews-opt.png" width="180" height="180" alt="UX Research" /></a>🗓 Delivered weekly<br />
🖋 Written by the <a href="https://www.userinterviews.com/">User Interviews</a> team<br /><br />The <a href="https://www.userinterviews.com/subscribe">UX Research Newsletter</a> by the folks at User Interviews delivers the latest UX research articles, reports, podcast episodes, and special features. For professional user researchers just like teams who need to conduct user research without a dedicated research team.</p>

<h3><a href="https://baymard.com/blog/subscribe">Baymard Institute</a></h3>

<p><a href="https://baymard.com/blog/subscribe"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/baymard-opt.png" width="180" height="180" alt="Baymard Institute" /></a>🗓 Delivered weekly<br />
🖋 Written by the <a href="https://baymard.com/">Baymard Institute</a><br /><br />User experience, web design, and e-commerce are the topics which the <a href="https://baymard.com/blog/subscribe">Baymard Institute newsletter</a> covers. It features ad-free full-length research articles to give you precious insights into the field.</p>

<h2 id="interaction-design">Interaction Design</h2>

<h3><a href="https://www.designspells.com/">Design Spells</a></h3>

<p><a href="https://www.designspells.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/design-spells-opt.png" width="180" height="180" alt="Design Spells" /></a>🗓 Delivered every other Sunday<br />
🖋 Written by <a href="https://sg.linkedin.com/in/chesterhow?trk=public_post-text">Chester How</a>, <a href="https://sg.linkedin.com/in/duncan-leo?trk=public_post-text">Duncan Leo</a>, and <a href="https://cn.linkedin.com/in/zendesign-rick?trk=public_post-text&original_referer=https%3A%2F%2Fwww.linkedin.com%2F">Rick Lee</a><br /><br />Whether it’s micro-interactions or easter eggs, <a href="https://www.designspells.com/">Design Spells</a> celebrates the design details that feel like magic and add a spark of delight to a design.</p>

<h3><a href="https://www.justinvolz.me/newsletter">Justin Volz’s Newsletter</a></h3>

<p><a href="https://www.justinvolz.me/newsletter"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/justin-volz-opt.png" width="180" height="180" alt="Justin Volz’s Newsletter" /></a>🖋 Written by <a href="https://www.linkedin.com/in/justinvolz?trk=public_post_comment-text">Justin Volz</a><br /><br />Getting you ready for the future of motion design is the goal of <a href="https://www.justinvolz.me/newsletter">Justin Volz’s newsletter</a>. It features UX motion design trends, new UX motion design articles, and more to “make your UI tap dance.”</p>

<div class="partners__lead-place"></div>

<h2 id="design-systems-and-figma">Design Systems &amp; Figma</h2>

<h3><a href="https://thedesignsystem.guide/">Design System Guide</a></h3>

<p><a href="https://thedesignsystem.guide/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/the-design-system-guide-opt.png" width="180" height="180" alt="Design System Guide" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://si.linkedin.com/in/rominakavcic?trk=public_post-text">Romina Kavcic</a><br /><br />Accompanying her interactive step-by-step <a href="https://thedesignsystem.guide/">guide to design systems</a>, Romina Kavcic sends out the weekly <a href="https://thedesignsystem.guide/">Design System Guide newsletter</a> on all things design systems, design process, and design strategy.</p>

<h3><a href="https://figmalion.com/">Figmalion</a></h3>

<p><a href="https://figmalion.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/figmalion-opt.png" width="180" height="180" alt="Figmalion" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://www.linkedin.com/in/fedorenko?trk=public_post-text">Eugene Fedorenko</a><br /><br />The <a href="https://figmalion.com/">Figmalion</a> newsletter keeps you up-to-date on what is happening in the Figma community, with curated design resources and a weekly roundup of Figma and design tool news.</p>

<h2 id="information-architecture">Information Architecture</h2>

<h3><a href="https://jarango.com/newsletter/">Informa(c)tion</a></h3>

<p><a href="https://jarango.com/newsletter/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/informaction-opt.png" width="180" height="180" alt="Informaction" /></a>🗓 Delivered every other Sunday<br />
🖋 Written by <a href="https://www.linkedin.com/in/jarango?trk=public_post-text">Jorge Arango</a><br /><br />The <a href="https://jarango.com/newsletter/">Informa(c)tion</a> newsletter explores the intersection of information, cognition, and design. Each issue includes an essay about information architecture and/or personal knowledge management and a list of interesting links.</p>

<h2 id="product-design">Product Design</h2>

<h3><a href="https://productdesigninterview.com/weekly-ux-product-design-exercise">Product Design Challenges</a></h3>

<p><a href="https://productdesigninterview.com/weekly-ux-product-design-exercise"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/product-design-interview-opt.png" width="180" height="180" alt="Product Design Challenges" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://de.linkedin.com/in/dashinsky?trk=public_post-text">Artiom Dashinsky</a><br /><br />How about a weekly design challenge to work on your core design skills, improve your portfolio, or prepare for your next job interview? The <a href="https://productdesigninterview.com/weekly-ux-product-design-exercise">Weekly Product Design Challenges</a> newsletter has got you covered. Every week, Artiom Dashinsky shares a new exercise inspired and used by companies like Facebook, Google, and WeWork to interview UX design candidates.</p>

<h3><a href="https://www.fundament.design/">Fundament</a></h3>

<p><a href="https://www.fundament.design/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/fundament-opt.png" width="180" height="180" alt="Fundament" /></a>🗓 Delivered every other Thursday<br />
🖋 Written by <a href="https://pl.linkedin.com/in/aradek?trk=public_post_comment_actor-name">Arkadiusz Radek</a> and <a href="https://pl.linkedin.com/in/litarowicz">Mateusz Litarowicz</a><br /><br />With <a href="https://www.fundament.design/">Fundament</a>, Arkadiusz Radek and Mateusz Litarowicz created a place to share what they’ve learned in their ten-year UX and Product Design careers. The newsletter is about the things that matter in design, the practicalities of the job, the lesser-known bits, and content that will help you grow as a UX or Product Designer.</p>

<h3><a href="https://www.casestudy.club/">Case Study Club</a></h3>

<p><a href="https://www.casestudy.club/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/case-study-club-opt.png" width="180" height="180" alt="Case Study Club" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://no.linkedin.com/in/janhaaland?trk=public_post-text">Jan Haaland</a><br /><br />How do people design digital products? With curated UX case studies, the <a href="https://www.casestudy.club/">Case Study Club</a> newsletter grants insights into other designers’ processes.</p>

<h2 id="ethical-design-and-sustainability">Ethical Design &amp; Sustainability</h2>

<h3><a href="https://ethicaldesignnetwork.com/">Ethical Design Network</a></h3>

<p><a href="https://ethicaldesignnetwork.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/ethical-design-opt.png" width="180" height="180" alt="Ethical Design Network" /></a>🗓 Delivered monthly<br />
🖋 Written by <a href="https://dk.linkedin.com/in/trinefalbe?trk=public_post-text">Trine Falbe</a><br /><br />The <a href="https://ethicaldesignnetwork.com/">Ethical Design Network</a> is a space for digital professionals to share, discuss, and self-educate about ethical design. You can sign up to the newsletter to receive monthly news, resources, and event updates all around ethical design.</p>

<h3><a href="https://medium.com/sustainable-ux">Sustainable UX</a></h3>

<p><a href="https://medium.com/sustainable-ux"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/sustainable-ux-opt.png" width="180" height="180" alt="Sustainable UX" /></a>🗓 Delivered monthly<br />
🖋 Written by <a href="https://de.linkedin.com/in/thorstenjonas?trk=public_post-text">Thorsten Jonas</a><br /><br />As designers, we have to take responsibility for more than our users. Shining a light on how to design and build more sustainable digital products, the <a href="https://medium.com/sustainable-ux">SUX Newsletter</a> by the Sustainable UX Network helps you stand up to that responsibility.</p>

<h2 id="ai">AI</h2>

<h3><a href="https://aigoodies.beehiiv.com/subscribe">AI Goodies</a></h3>

<p><a href="https://aigoodies.beehiiv.com/subscribe"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/ai-goodies-opt.png" width="180" height="180" alt="AI Goodies" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://ro.linkedin.com/in/ioanateleanu?trk=public_post_comment_actor-name">Ioana Teleanu</a><br /><br />A brand-new newsletter on AI, design, and UX goodies comes from Ioana Teleanu: <a href="https://aigoodies.beehiiv.com/">AI Goodies</a>. Every week, it covers the latest resources, trends, news, and tools from the world of AI.</p>

<h2 id="business">Business</h2>

<h3><a href="https://d.mba/newsletter">d.MBA</a></h3>

<p><a href="https://d.mba/newsletter"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/dmba-opt.png" width="180" height="180" alt="d.MBA" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://twitter.com/alenfaljic">Alen Faljic</a><br /><br />Learning business can help you become a better designer. The <a href="https://d.mba/newsletter">d.MBA newsletter</a> is your weekly source of briefings from the business world, hand-picked for the design community by Alen Faljic and the d.MBA team.</p>

<h2 id="career-and-leadership">Career &amp; Leadership</h2>

<h3><a href="https://danmallteaches.substack.com/">Dan Mall Teaches</a></h3>

<p><a href="https://danmallteaches.substack.com/"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/dan-mall-opt.png" width="180" height="180" alt="UX Business and Career" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://www.linkedin.com/in/danmall?trk=public_post-text">Dan Mall</a><br /><br />Tips, tricks, and tools about design systems, process, and leadership, delivered to your inbox every week. That’s the <a href="https://danmallteaches.substack.com/">Dan Mall Teaches</a> newsletter.</p>

<h3><a href="https://www.secondwavedive.com/newsletter">Stratatics</a></h3>

<p><a href="https://www.secondwavedive.com/newsletter"><img loading="lazy" decoding="async"  style="float: right; padding: 1em;" src="https://files.smashing.media/articles/useful-email-newsletters-for-designers/design-leadership-opt.png" width="180" height="180" alt="Stratatics" /></a>🗓 Delivered weekly<br />
🖋 Written by <a href="https://www.linkedin.com/in/ryanrumsey?trk=public_post-text">Ryan Rumsey</a><br /><br />To do things differently, you must look at your work in a new light. That’s the idea behind the <a href="https://www.secondwavedive.com/newsletter">Stratatics</a> newsletter. Each week, Ryan Rumsey provides design leaders and executives (and those who work alongside them) with a new idea to reimagine and deliver their best work.</p>

<h2 id="spread-the-word">Spread The Word</h2>

<p>Do you have a <strong>favorite newsletter</strong> that isn’t featured in the post? Or maybe you’re writing and publishing a newsletter yourself? We’d love to hear about it in the comments below!</p>

<p><style>
    .nl-box__form {
  display: flex;
  padding-bottom: 0.5em;
  text-align: center;
  letter-spacing: -0.5px;
  color: #ffffff;
  font-size: 1.15em;
}</p>

<p>.nl-box<strong>form .nl-box</strong>form&ndash;button,
.nl-box<strong>form .nl-box</strong>form&ndash;email {
  flex-grow: 1;
  flex-shrink: 0;
  box-sizing: border-box;
  width: auto;
  margin: 0;
  padding: 0.75em 1em;
  border: 0;
  border-radius: 11px;
  background: #ffffff;
  font-size: 1em;
}</p>

<p>input.nl-box<strong>form&ndash;email:active,
input.nl-box</strong>form&ndash;email:focus,
.nl-box<strong>form&ndash;button:active,
.nl-box</strong>form&ndash;button:focus {
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3);
}</p>

<p>.nl-box<strong>form&ndash;button:-ms-input-placeholder,
.nl-box</strong>form&ndash;email:-ms-input-placeholder {
  color: #777777;
  font-style: italic;
}</p>

<p>.nl-box<strong>form&ndash;email::placeholder,
.nl-box</strong>form&ndash;button::placeholder {
  color: #777777;
  font-style: italic;
}</p>

<p>.nl-box<strong>form .nl-box</strong>form&ndash;button {
  transition: all 0.2s ease-in-out;
  color: #ffffff;
  background-color: #0168b8;
  font-family: Mija, -apple-system, Arial, BlinkMacSystemFont, &ldquo;Roboto Slab&rdquo;,
    &ldquo;Droid Serif&rdquo;, &ldquo;Segoe UI&rdquo;, Ubuntu, Cantarell, Georgia, serif;
  font-weight: 700;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3);
  width: 100%;
  border: 0;
  border-left: 1px solid #ddd;
  flex: 2;
  border-top-left-radius: 0;
  border-bottom-left-radius: 0;
}</p>

<p>.nl-box<strong>form .nl-box</strong>form&ndash;email {
  border-top-right-radius: 0;
  border-bottom-right-radius: 0;
  width: 100%;
  flex: 4;
}</p>

<p>.nl-box__img {
  height: auto;
  width: 100%;
}</p>

<p>@media all and (max-width: 650px) {
  .nl-box<strong>form .nl-box</strong>group {
    flex-wrap: wrap;
    box-shadow: none;
  }
  .nl-box<strong>form .nl-box</strong>form&ndash;email,
  .nl-box<strong>form .nl-box</strong>form&ndash;button {
    border-radius: 11px;
    border-left: none;
  }</p>

<p>.cards<strong>grid {
    grid-template-columns: repeat(auto-fit, minmax(220px, 1fr));
  }
  .nl-box</strong>form .nl-box<strong>form&ndash;email {
    box-shadow: 0 13px 27px -5px rgba(50, 50, 93, 0.25),
      0 8px 16px -8px rgba(0, 0, 0, 0.3), 0 -6px 16px -6px rgba(0, 0, 0, 0.025);
    min-width: 100%;
  }
  .nl-box</strong>form .nl-box__form&ndash;button {
    margin-top: 1em;
    box-shadow: 0 1px 1px rgba(0, 0, 0, 0.5);
  }
}</p>

<p>.nl-box<strong>form .nl-box</strong>form&ndash;button:active,
.nl-box<strong>form .nl-box</strong>form&ndash;button:focus,
.nl-box<strong>form .nl-box</strong>form&ndash;button:hover {
  cursor: pointer;
  color: #ffffff;
  background-color: #0168b8;
  border-color: #dadada;
  box-shadow: 0 1px 1px rgba(0, 0, 0, 0.3);
}</p>

<p>.nl-box<strong>form .nl-box</strong>form&ndash;button:focus,
.nl-box<strong>form .nl-box</strong>form&ndash;button:active {
  outline: none !important;
  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
  box-shadow: inset 0 3px 3px rgba(0, 0, 0, 0.3);
}</p>

<p>.nl-box__group {
  display: flex;
  box-shadow: 0 13px 27px -5px rgba(50, 50, 93, 0.25),
    0 8px 16px -8px rgba(0, 0, 0, 0.3), 0 -6px 16px -6px rgba(0, 0, 0, 0.025);
  border-radius: 11px;
}</p>

<p>.nl-box__wrapper {
  display: flex;
  flex-direction: column;
  justify-content: center;
}</p>

<p>.nl-box__form form {
  width: 100%;
}</p>

<p>.nl-box<strong>form .nl-box</strong>group {
  margin: 0;
}</p>

<p>.nl-box__caption {
  font-size: 0.9em;
  line-height: 1.5em;
  color: #fff;
  border-radius: 11px;
  padding: 0.5em 1em;
  display: inline-block;
  background-color: #0067b859;
  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.3);
}</p>

<p>.nl-box {
  margin: 1.5em 0;
  padding: 1em 0;
  box-shadow: none;
  max-width: 750px;
  justify-self: center;
}</p>

<p>.nl-box__blue {
  background-color: #1b71bb;
  background-image: linear-gradient(#1b71bb 60%, #01a6c1 100%);
}</p>

<p>.nl-box__desc {
  padding: 0.5rem 2rem 1rem 2rem;
}</p>

<p>.nl-box__image {
  width: 100%;
  height: auto;
}</p>

<p>@media screen and (min-width: 48em) {
  .nl-box__desc {
    padding: 0.5rem calc(2rem + 0.5vw) 1rem calc(2rem + 0.5vw);
  }
}</p>

<p>.nl-box__desc&ndash;heading-link {
  color: #fff;
  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.9);
}</p>

<p>.nl-box__summary {
  border-bottom: 0;
  color: #fff;
  font-style: normal;
  text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.4);
}</p>

<p>.promo-box&ndash;blue {
  &ndash;promo-background: #e7f8ff;
  &ndash;promo-text: #000;
  &ndash;promo-highlight-text: #e7f8ff;
  &ndash;promo-highlight: #006fc6;
  &ndash;promo-highlight&ndash;hover: #006fc6;
  }</p>

<p>.promo-box {
  background: var(&ndash;promo-background);
  color: var(&ndash;promo-text);
  position: relative;
  padding: 125px 1.5em 2em 1.5em;
  margin-top: 125px;
  text-align: center;
  display: flex;
  flex-direction: column;
  align-items: center;
  justify-content: center;
  border-radius: 11px;
  width: 100%
}</p>

<p>.promo-box__image-link {
  position: absolute;
  display: block;
  top: 0;
  padding: 0;
  left: 50%;
  transform: translate(-50%,-50%);
  width: 250px;
  height: 250px;
  text-decoration: none;
  background: 0 0
}</p>

<p>.promo-box__image {
  width: 100%;
  height: 100%
}</p>

<p>.promo-box__cta {
  background: #fff;
  color: #d33a2c;
  text-decoration: none;
  padding: .5em .8em;
  border-radius: 11px;
  box-shadow: 0 0 1px 1px rgba(0,0,0,.15);
  background-image: none;
  font-weight: 700;
  font-size: 1.2em;
  margin: 0;
  position: relative;
  box-shadow: 0 2px 6px 0 rgba(0,0,0,.12);
  transition: background .4s ease-in-out, color .4s ease-in-out;
}</p>

<p>.promo-box<strong>cta:active,
.promo-box</strong>cta:focus {
  outline: 0!important;
  background: #fff;
  text-shadow: none;
  box-shadow: inset 0 3px 3px rgba(0,0,0,.3)
}</p>

<p>.promo-box__heading {
  line-height: 1.2;
  font-size: 1.5em;
  font-weight: 700;
  margin: 1.25em 0 0 0;
}</p>

<p>.promo-box__button {
  background: var(&ndash;promo-highlight);
  border-radius: 11px;
  padding: 0.8em 1em;
  font-size: 1.15em;
  text-shadow: 1px 1px 1px rgba(0,0,0,.3);
  text-decoration: none;
  color: white;
  font-weight: bold;
  display: flex;
  width: 100%;
  justify-content: center;
  transition: all .2s ease-in-out;
}</p>

<p>.promo-box<strong>button:active,
.promo-box</strong>button:focus,
.promo-box__button:hover {
  border-bottom: none;
  cursor: pointer;
  border-color: #dadada;
}</p>

<p>.promo-box<strong>button:active,
.promo-box</strong>button:focus {
  outline: 0!important;
  box-shadow: inset 0 3px 3px rgba(0,0,0,.3)
}
</style></p>

<p><div class="promo-box promo-box--blue mbl">
    <p class="promo-box__heading">Useful front-end &amp; UX bits, delivered once a week.</p><p>With tools to help you get your work done better. Subscribe and get Vitaly’s <a href="https://www.smashingmagazine.com/2020/03/smart-interface-design-patterns-checklists/"><strong>Smart Interface Design Checklists PDF</strong></a> via email. 🎁</p><section class="nl-box__form"><form action="//smashingmagazine.us1.list-manage.com/subscribe/post?u=16b832d9ad4b28edf261f34df&amp;id=a1666656e0" method="post"><div class="nl-box__wrapper"><label for="mce-EMAIL-hp" class="sr-only">Your (smashing) email</label><div class="nl-box__group"><input type="email" name="EMAIL" class="nl-box__form--email" id="mce-EMAIL-hp" placeholder="Your email"><input type="submit" value="Meow!" name="subscribe" class="nl-box__form--button"></div></div></form></section><p class="mtn mbn"><small class="promo-box__footer mtm block grey"><em>On <a href="https://www.smashingmagazine.com/the-smashing-newsletter/">front-end &amp; UX</a>. Trusted by 182,000+ folks.</em></small></p></div></p>

              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Temani Afif</author><title>The Modern Guide For Making CSS Shapes</title><link>https://www.smashingmagazine.com/2024/05/modern-guide-making-css-shapes/</link><pubDate>Fri, 10 May 2024 13:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2024/05/modern-guide-making-css-shapes/</guid><description>Creating shapes using CSS is, without any doubt, a classic exercise. In many cases, we try to use hacky code and workarounds, but CSS has evolved, and we have modern ways to create CSS Shapes with clean, reusable code. In this comprehensive guide, Temani Afif explores different techniques for creating common shapes with the smallest and most flexible code possible.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2024/05/modern-guide-making-css-shapes/" />
              <title>The Modern Guide For Making CSS Shapes</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>The Modern Guide For Making CSS Shapes</h1>
                  
                    
                    <address>Temani Afif</address>
                  
                  <time datetime="2024-05-10T13:00:00&#43;00:00" class="op-published">2024-05-10T13:00:00+00:00</time>
                  <time datetime="2024-05-10T13:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>You have for sure googled <em>“how to create [shape_name]</em> <em>with</em> <em>CSS”</em> at least once in your front-end career if it’s not something you already have bookmarked. And the number of articles and demos you will find out there is endless.</p>

<p>Good, right? Copy that code and drop it into the ol’ stylesheet. <em>Ship it!</em></p>

<p>The problem is that you don’t understand how the copied code works. Sure, it got the job done, but many of the most widely used CSS shape snippets are often dated and rely on things like magic numbers to get the shapes just right. So, the next time you go into the code needing to make a change to it, it either makes little sense or is inflexible to the point that you need an entirely new solution.</p>

<p>So, here it is, your <strong>one-stop modern guide for how to create shapes in CSS</strong>! We are going to explore the most common CSS shapes while highlighting different CSS tricks and techniques that you can easily re-purpose for any kind of shape. The goal is not to learn how to create specific shapes but rather to understand the modern tricks that allow you to create any kind of shape you want.</p>

<h3 id="table-of-contents">Table of Contents</h3>

<p>You can jump directly to the topic you’re interested in to find relevant shapes or <a href="#your-first-resource">browse the complete list</a>. Enjoy!</p>

<ul class="toc-components">
  <li><a href="#hexagons">Hexagons</a></li>  
  <li><a href="#octagons">Octagons</a></li>
  <li><a href="#stars">Stars</a></li>
  <li><a href="#polygons-starbursts">Polygons & Starbursts</a></li>
  <li><a href="#parallelograms-trapezoids">Parallelograms & Trapezoids</a></li>
  <li><a href="#circles-holes">Circles & Holes</a></li>
  <li><a href="#border-edges">Border Edges</a></li>
  <li><a href="#rounded-arcs">Rounded Arcs</a></li>
  <li><a href="#dashed-circles">Dashed Circles</a></li>
  <li><a href="#rounded-tabs">Rounded Tabs</a></li>
  <li><a href="#triangles">Triangles</a></li>
  <li><a href="#hearts">Hearts</a></li>
  <li><a href="#ribbons">Ribbons</a></li>
  <li><a href="#tooltips-speech-bubbles">Tooltips & Speech Bubbles</a></li>
  <li><a href="#cutting-corners">Cutting Corners</a></li>
  <li><a href="#cut-out-shapes">Cut-Out Shapes</a></li>
  <li><a href="#section-dividers">Section Dividers</a></li>
  <li><a href="#inner-curves">Inner Curves</a></li>
  <li><a href="#floral-shapes">Floral Shapes</a></li>
  <li><a href="#wavy-zig-zag-boxes">Wavy & Zig-Zag Boxes</a></li>
</ul>

<h2 id="why-not-svg">Why Not SVG?</h2>

<p>I get asked this question often, and my answer is always the same: <em>Use SVG if you</em> <em>can!</em> I have nothing against SVG. It’s just another approach for creating shapes using another syntax with another set of considerations. If SVG was my expertise, then I would be writing about that instead!</p>

<p>CSS is my field of expertise, so that’s the approach we’re covering for drawing shapes with code. Choosing CSS or SVG is typically a matter of choice. There may very well be a good reason why SVG is a better fit for your specific needs.</p>

<p>Many times, CSS will be your best bet for decorative things or when you’re working with a specific element in the markup that contains real content to be styled. Ultimately, though, you will need to consider what your project’s requirements are and decide whether a CSS shape is really what you are looking for.</p>

<h2 id="your-first-resource">Your First Resource</h2>

<p>Before we start digging into code, please spend a few minutes over at my <a href="https://css-shape.com/">CSS Shape website</a>. You will find many examples of CSS-only shapes. This is an ever-growing collection that I regularly maintain with new shapes and techniques. Bookmark it and use it as a reference as we make our way through this guide.</p>

<blockquote>Is it fairly easy to modify and tweak the CSS for those shapes?</blockquote>

<p>Yes! The CSS for each and every shape is optimized to be as flexible and efficient as possible. The CSS typically targets a <strong>single HTML element</strong> to prevent you from having to touch too much markup besides dropping the element on the page. Additionally, I make liberal use of CSS variables that allow you to modify things easily for your needs.</p>

<p>Most of you don&rsquo;t have time to grasp all the techniques and tricks to create different shapes, so an online resource with ready-to-use snippets of code can be a lifesaver!</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="https://www.smashingconf.com/online-workshops/">Smashing Workshops</a></strong> on <strong>front-end, design &amp; UX</strong>, with practical takeaways, live sessions, <strong>video recordings</strong> and a friendly Q&amp;A. With Brad Frost, Stéph Walter and <a href="https://smashingconf.com/online-workshops/workshops">so many others</a>.</p>
<a data-instant href="smashing-workshops" class="btn btn--green btn--large" style="">Jump to the workshops&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="smashing-workshops" class="feature-panel-image-link">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-scubadiving-panel.svg"
    alt="Feature Panel"
    width="257"
    height="355"
/>

</div>
</a>
</div>
</aside>
</div>

<h2 id="clipping-shapes-in-css">Clipping Shapes In CSS</h2>

<p>The CSS <code>clip-path</code> property — and its <code>polygon()</code> function — is what we commonly reach for when creating CSS Shapes. Through the creation of common CSS shapes, we will learn a few tricks that can help you create other shapes easily.</p>

<h3 id="hexagons">Hexagons</h3>

<p>Let’s start with one of the easiest shapes; the hexagon. We first define the shape’s dimensions, then provide the coordinates for the six points and we are done.</p>

<pre><code class="language-css">.hexagon {
  width: 200px;
  aspect-ratio: 0.866; 
  clip-path: polygon(
    0% 25%,
    0% 75%,
    50% 100%, 
    100% 75%, 
    100% 25%, 
    50% 0%);
}
</code></pre>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="JjVJJbG"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Hexagon shape using clip-path](https://codepen.io/t_afif/pen/JjVJJbG) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/JjVJJbG">Hexagon shape using clip-path</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>Easy, right? But what if I told you that there’s an even <em>easier</em> way to do it? Instead of six points, we can get by with just four.</p>

<p>A little-known trick with the <code>polygon()</code> function is that we are allowed to set points that are outside the <code>[0% 100%]</code> range. In other words, we can cut <em>outside</em> the element — which becomes super useful for this shape as well many others, as we’ll see.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/1-clipping-hexagon-four-points.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="270"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/1-clipping-hexagon-four-points.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/1-clipping-hexagon-four-points.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/1-clipping-hexagon-four-points.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/1-clipping-hexagon-four-points.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/1-clipping-hexagon-four-points.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/1-clipping-hexagon-four-points.png"
			
			sizes="100vw"
			alt="Comparing a hexagon with six points versus a hexagon clipped with four points."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 1: Clipping a hexagon with four points. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/1-clipping-hexagon-four-points.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>We’re basically drawing the shape of a diamond where two of the points are set way outside the bounds of the hexagon we’re trying to make. This is perhaps the very first lesson for drawing CSS shapes: <strong>Allow yourself to think outside the box — or at least the shape’s boundaries.</strong></p>

<p>Look how much simpler the code already looks:</p>

<pre><code class="language-css">.hexagon {
  width: 200px;
  aspect-ratio: cos(30deg); 
  clip-path: polygon(
    -50% 50%,
    50% 100%,
    150% 50%,
    50% 0
  );
}
</code></pre>

<p>Did you notice that I updated the <code>aspect-ratio</code> property in there? I’m using a trigonometric function, <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/cos"><code>cos()</code></a>, to replace the magic number <code>0.866</code>. The exact value of the ratio is equal to <code>cos(30deg)</code> (or <code>sin(60deg)</code>). Besides, <code>cos(30deg)</code> is a lot easier to remember than <code>0.866</code>.</p>

<p>Here’s something fun we can do: swap the X and Y coordinate values. In other words, let’s change the <code>polygon()</code> coordinates from this pattern:</p>

<pre><code class="language-css">clip-path: polygon(X1 Y1, X2 Y2, ..., Xn Yn)
</code></pre>

<p>…to this, where the Y values come before the X values:</p>

<pre><code class="language-css">clip-path: polygon(Y1 X1, Y2 X2, ..., Yn Xn)
</code></pre>

<p>What we get is a new variation of the hexagon:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="BaEZrrP"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Another variation of the hexagon shape](https://codepen.io/t_afif/pen/BaEZrrP) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/BaEZrrP">Another variation of the hexagon shape</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>Swapping the X and Y values will make a kind of switch between the vertical and horizontal axes, which will help to get a different shape. Note that I have also updated the ratio to <code>1/cos(30deg)</code> instead of <code>cos(30deg)</code>. Since we are switching both axes, the new ratio needs to be equal to its inverse, i.e., <code>R</code> (or <code>R/1</code>) becomes <code>1/R</code>.</p>

<p>And since our CSS is nothing more than a single style rule on a single selector, we can apply it to more than a <code>&lt;div&gt;</code>. For example, the following demo includes both variations of the original hexagon, plus a third example that sets the styles on an <code>&lt;img&gt;</code> element.</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="KKEMjxV"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [CSS-only hexagon shapes (the modern way)](https://codepen.io/t_afif/pen/KKEMjxV) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/KKEMjxV">CSS-only hexagon shapes (the modern way)</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>There we go, our first shape! We are also walking away with two valuable lessons about creating shapes with CSS:</p>

<ul>
<li><strong>The <code>polygon()</code> function accepts points outside the <code>[0% 100%]</code> range.</strong><br />
This allows us to clip shapes with fewer points in some cases but also opens up possibilities for creating additional shapes.</li>
<li><strong>Switching axes is a solid approach for creating shape variations.</strong><br />
In the case of a hexagon, swapping the values on the X and Y axes changes the hexagon’s direction.</li>
</ul>

<h3 id="octagons">Octagons</h3>

<p>An octagon is another geometric shape and it is very close in nature to the hexagon. Instead of working with six sides, we’re working with eight to get what looks like the shape of a common traffic stop sign.</p>

<p>Let’s take the first lesson we learned from working with hexagons and clip the element with coordinates outside the shape’s boundaries to keep our clipping efficient. Believe it or not, we can actually establish all eight octagon sides with only four points, just like we used only four points to establish the hexagon’s six sides.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/2-clipping-octagon-four-points.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="312"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/2-clipping-octagon-four-points.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/2-clipping-octagon-four-points.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/2-clipping-octagon-four-points.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/2-clipping-octagon-four-points.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/2-clipping-octagon-four-points.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/2-clipping-octagon-four-points.png"
			
			sizes="100vw"
			alt="Comparing an octagon with eight points versus an octagon clipped with four points."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 2: Clipping an octagon with four points. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/2-clipping-octagon-four-points.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>I know that visualizing the shape with outside points can be somewhat difficult because we’re practically turning the concept of clipping on its head. But with some practice, you get used to this mental model and develop muscle memory for it.</p>

<p>Notice that the CSS is remarkably similar to what we used to create a hexagon:</p>

<pre><code class="language-css">.octagon {
  width: 200px;  
  aspect-ratio: 1;  
  --o: calc(50% &#42; tan(-22.5deg));
  clip-path: polygon(
    var(--o) 50%,
    50% var(--o),
    calc(100% - var(--o)) 50%,
    50% calc(100% - var(--o))
  );
}
</code></pre>

<p>Except for the small trigonometric formula, the structure of the code is identical to the last hexagon shape — set the shape’s dimensions, then clip the points. And notice how I saved the math calculation as a CSS variable to avoid repeating that code.</p>

<p>If math isn’t really your thing — and that’s totally fine! — remember that the formulas are simply one part of the puzzle. There’s no need to go back to your high school geometry textbooks. You can always find the formulas you need for specific shapes in <a href="https://css-shape.com/">my online collection</a>. Again, that collection is your first resource for creating CSS shapes!</p>

<p>And, of course, we can apply this shape to an <code>&lt;img&gt;</code> element as easily as we can a <code>&lt;div&gt;</code>:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="LYaxqEg"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [CSS-only octagon shapes (the modern way)](https://codepen.io/t_afif/pen/LYaxqEg) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/LYaxqEg">CSS-only octagon shapes (the modern way)</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>There’s actually more we can do to optimize our code. Consider the following:</p>

<div class="break-out">
<pre><code class="language-css">.octa {
  --w: 200px;

width: var(--w);\
aspect-ratio: 1;
margin: calc(var(--w) * tan(22.5deg) / 2);
clip-path: polygon(0 50%, 50% 0, 100% 50%, 50% 100%) margin-box;
} </code></pre>

</div>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="ZEZrLmr"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Octagon shape with margin-box](https://codepen.io/t_afif/pen/ZEZrLmr) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/ZEZrLmr">Octagon shape with margin-box</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>The most obvious difference is that the variable containing the math function (<code>--o</code>) is removed, and we have a new one, <code>--w</code>, for setting the shape’s dimensions.</p>

<p>But notice that we’re now setting <code>margin</code> on the shape and declaring a <code>margin-box</code> keyword at the end of the <code>clip-path</code>. It means that the reference for the <code>polygon()</code> is now set to the <code>margin-box</code> instead of the default <code>border-box</code>.</p>

<p>If you look back at Figure 2, notice that the four points used to draw the octagon are outside the shape’s boundaries and have the same distance from those boundaries. Instead of accounting for that distance inside the <code>clip-path</code>, the updated code declares it on the <code>margin</code> property, which makes the values of the coordinates easier to define.</p>

<p>This is the CSS we started with:</p>

<div class="break-out">
<pre><code class="language-css">.octagon {
  --o: calc(50% &#42; tan(-22.5deg));

clip-path: polygon(var(--o) 50%, 50% var(--o), calc(100% - var(--o)) 50%, 50% calc(100% - var(--o)));
} </code></pre>

</div>

<p>The optimization simplifies the <code>clip-path</code> even if we have an extra property:</p>

<div class="break-out">
<pre><code class="language-css">.octagon {
  --w: 200px;

margin: calc(var(--w) * tan(22.5deg) / 2);
clip-path: polygon(0 50%, 50% 0, 100% 50%, 50% 100%) margin-box;
} </code></pre>

</div>

<p>All the <code>--o</code> variables are removed from the <code>clip-path</code>, and the <code>margin</code> property gets that same value. I had to introduce a new variable, <code>--w</code>, to set the element’s size dimensions because I couldn’t rely on a percentage value. In this particular case, you will end with some margin around the element, but this trick can really help simplify calculations.</p>

<p>If you don’t want the extra margin, you can add padding instead and apply the same amount of padding as a negative margin. That’s another trick to keep polygons simple in a way that works well with images. Here is a demo showing different shapes created with the same <code>clip-path</code> value.</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="oNOOWqz"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Different shapes using the same polygon](https://codepen.io/t_afif/pen/oNOOWqz) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/oNOOWqz">Different shapes using the same polygon</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<h3 id="stars">Stars</h3>

<p>Creating a star shape is always a bit tricky, even if you are comfortable using <code>clip-path</code> with the <code>polygon()</code> function. Clipping requires very precise values, so we either find a ready-to-use snippet of CSS or fuss with it ourselves until we get it right.</p>

<p>And if I were to ask you how many points we need to cut the shape, you might reasonably respond that 10 points are needed. And you are technically correct. But we can do better using only five points!</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/3-star-shape-five-points.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="318"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/3-star-shape-five-points.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/3-star-shape-five-points.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/3-star-shape-five-points.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/3-star-shape-five-points.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/3-star-shape-five-points.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/3-star-shape-five-points.png"
			
			sizes="100vw"
			alt="Diagram of a star with 10 clip points next to a star with five clip points."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 3: Drawing a star shape with five points instead of 10 points. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/3-star-shape-five-points.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It may sound impossible to make a star out of only five points, but it’s perfectly possible, and the trick is how the points inside <code>polygon()</code> are ordered. If we were to draw a star with pencil on paper in a single continuous line, we would follow the following order:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/4-star-single-line.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="382"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/4-star-single-line.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/4-star-single-line.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/4-star-single-line.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/4-star-single-line.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/4-star-single-line.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/4-star-single-line.png"
			
			sizes="100vw"
			alt="Gold star with five points that are labeled one through five, starting at the top point."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 4: Drawing a star with a single line illustrates the order of the points we need to create the shape. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/4-star-single-line.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It’s the same way we used to draw stars as kids — and it fits perfectly in CSS with <code>polygon()</code>! This is another hidden trick about <code>clip-path</code> with <code>polygon()</code>, and it leads to another key lesson for drawing CSS shapes: <strong>the lines we establish can intersect</strong>. Again, we’re sort of turning a concept on its head, even if it’s a pattern we all grew up making by hand.</p>

<p>Here’s how those five points translate to CSS:</p>

<div class="break-out">
<pre><code class="language-css">.star {
  width: 200px;  
  aspect-ratio: 1;
  clip-path: polygon(50% 0, /&#42; (1) &#42;/
    calc(50%&#42;(1 + sin(.4turn))) calc(50%&#42;(1 - cos(.4turn))), /&#42; (2) &#42;/
    calc(50%&#42;(1 - sin(.2turn))) calc(50%&#42;(1 - cos(.2turn))), /&#42; (3) &#42;/
    calc(50%&#42;(1 + sin(.2turn))) calc(50%&#42;(1 - cos(.2turn))), /&#42; (4) &#42;/
    calc(50%&#42;(1 - sin(.4turn))) calc(50%&#42;(1 - cos(.4turn)))  /&#42; (5) &#42;/
   ); 
}
</code></pre>
</div>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="NWmvBeL"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Star shape using clip-path](https://codepen.io/t_afif/pen/NWmvBeL) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/NWmvBeL">Star shape using clip-path</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>I am using trigonometric functions again for accuracy without resorting to magic numbers, but even if we calculate the values, the code is still better than the traditional 10-point approach:</p>

<div class="break-out">
<pre><code class="language-css">.star {
  width: 200px;  
  aspect-ratio: 1;
  clip-path: polygon(50% 0, 79% 90%, 2% 35%, 98% 35%, 21% 90%); 
}
</code></pre>
</div>

<p>Since we have a symmetrical shape, note that the second and fifth points on the star share the same Y coordinates. The same is true for the third and fourth points. And notice, too, that the X values have the same distance to the center (<code>79% - 50% = 50% - 21%</code>). If we add those up, we see that the sum is equal to <code>100%</code> (<code>79% + 21% = 100%</code>).</p>

<p>That leads us to yet another major lesson on drawing CSS shapes: <strong>Consider the shape’s symmetry because that’s a big hint that there may be duplicated values.</strong> This will reduce your effort in calculating/finding the different values.</p>

<p>We already cut the number of points once from 10 to five. Now, there are only three points to remember — the remaining two can be figured out from there, thanks to symmetry.</p>

<div class="break-out">
<pre><code class="language-css">50% 0   /&#42; (1) &#42;/
79% 90% /&#42; (2)  --&gt; (100% - 79%) = 21% 90% /&#42; (5) &#42;/
 2% 35% /&#42; (3)  --&gt; (100% -  2%) = 98% 35% /&#42; (4) &#42;/
</code></pre>
</div>

<p>Go back to the hexagon and octagon shapes and look for symmetry. You will notice repeated values as well, and the <code>clip-path</code> will suddenly look easier to remember!</p>

<h3 id="polygons-starbursts">Polygons &amp; Starbursts</h3>

<p>We’ve already covered stars, hexagons, and octagons, but what if you are working with an unknown number of points or sides? You may want a solution that is capable of adjusting the number for whatever situation it is used for. For this, we can consider more generic shapes like polygons and starbursts.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/5-row-three-multi-point-star-shapes.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="383"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/5-row-three-multi-point-star-shapes.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/5-row-three-multi-point-star-shapes.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/5-row-three-multi-point-star-shapes.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/5-row-three-multi-point-star-shapes.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/5-row-three-multi-point-star-shapes.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/5-row-three-multi-point-star-shapes.jpg"
			
			sizes="100vw"
			alt="A row of three multi-point star shapes above a row of three geometric shapes with different numbers of sides."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Geometric shapes come with a number of points and sides. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/5-row-three-multi-point-star-shapes.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The funny thing is that starbursts are basically the exact same thing as polygons, just with half the points that we can move inward.</p>

<figure><a href="https://smashing-files.ams3.digitaloceanspaces.com/articles/modern-guide-making-css-shapes/6-illustration-star-morphing-polygon.gif"><img src="https://smashing-files.ams3.digitaloceanspaces.com/articles/modern-guide-making-css-shapes/6-illustration-star-morphing-polygon.gif" width="600" height="376" alt="Animated illustration of a star morphing into a polygon." /></a><figcaption>Figure 6.</figcaption></figure>

<p>I often advise people to use my online generators for shapes like these because the <code>clip-path</code> coordinates can get tricky to write and calculate by hand.</p>

<ul>
<li><a href="https://css-generators.com/polygon-shape/">Polygon generator</a></li>
<li><a href="https://css-generators.com/starburst-shape/">Starburst generator</a></li>
</ul>

<p>That said, I really believe it’s still a very good idea to understand how the coordinates are calculated and how they affect the overall shape. <a href="https://verpex.com/blog/website-tips/css-shapes-polygon-starburst">I have an entire article on the topic</a> for you to learn the nuances of calculating coordinates.</p>

<h3 id="parallelograms-trapezoids">Parallelograms &amp; Trapezoids</h3>

<p>Another common shape we always build is a rectangle shape where we have one or two slanted sides. They have a lot of names depending on the final result (e.g., parallelogram, trapezoid, skewed rectangle, and so on), but all of them are built using the same CSS technique.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/7-parallelograms-trapezoid.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="249"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/7-parallelograms-trapezoid.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/7-parallelograms-trapezoid.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/7-parallelograms-trapezoid.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/7-parallelograms-trapezoid.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/7-parallelograms-trapezoid.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/7-parallelograms-trapezoid.png"
			
			sizes="100vw"
			alt="Showing two parallelograms and a trapezoid."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 7: Parallelograms and a trapezoid. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/7-parallelograms-trapezoid.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>First, we start by creating a basic rectangle by linking the four corner points together:</p>

<pre><code class="language-css">clip-path: polygon(0 0, 100% 0, 100% 100%, 0 100%)
</code></pre>

<p>This code produces nothing because our element is already a rectangle. Also, note that <code>0</code> and <code>100%</code> are the only values we’re using.</p>

<p>Next, offset some values to get the shape you want. Let’s say our offset needs to be equal to <code>10px</code>. If the value is <code>0</code>, we update it with <code>10px</code>, and if it’s <code>100%</code> we update it with <code>calc(100% - 10px)</code>. As simple as that!</p>

<blockquote>But which value do I need to update and when?</blockquote>

<p>Try and see! Open your browser’s developer tools and update the values in real-time to see how the shape changes, and you will understand what points you need to update. I would lie if I told you that I write all the shapes from memory without making any mistakes. In most cases, I start with the basic rectangle, and I add or update points until I get the shape I want. Try this as a small homework exercise and create the shapes in Figure 11 by yourself. You can still find all the correct code in <a href="https://css-shape.com/">my online collection</a> for reference.</p>

<p>If you want more CSS tricks around the <code>clip-path</code> property, check my article “<a href="https://verpex.com/blog/website-tips/css-tricks-to-master-the-clip-path-property">CSS Tricks To Master The <code>clip-path</code> Property</a>” which is a good follow-up to this section.</p>

<div class="partners__lead-place"></div>

<h2 id="masking-shapes-in-css">Masking Shapes In CSS</h2>

<p>We just worked with a number of shapes that required us to figure out a number of points and <code>clip-path</code> by plotting their coordinates in a <code>polygon()</code>. In this section, we will cover circular and curvy shapes while introducing the other property you will use the most when creating CSS shapes: the <code>mask</code> property.</p>

<p>Like the previous section, we will create some shapes while highlighting the main tricks you need to know. Don’t forget that the goal is not to learn how to create specific shapes but to learn the tricks that allow you to create any kind of shape.</p>

<h3 id="circles-holes">Circles &amp; Holes</h3>

<p>When talking about the <code>mask</code> property, gradients are certain to come up. We can, for example, “cut” (but really “mask”) a circular hole out of an element with a <code>radial-gradient</code>:</p>

<pre><code class="language-css">mask: radial-gradient(50px, #0000 98%, #000);
</code></pre>

<p>Why aren’t we using a simple <code>background</code> instead? The <code>mask</code> property allows us more flexibility, like using any color we want and applying the effect on a variety of other elements, such as <code>&lt;img&gt;</code>. If the color and flexible utility aren’t a big deal, then you can certainly reach for the <code>background</code> property instead of cutting a hole.</p>

<p>Here’s the <code>mask</code> working on both a <code>&lt;div&gt;</code> and <code>&lt;img&gt;</code>:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="OJGgGve"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Hole shape](https://codepen.io/t_afif/pen/OJGgGve) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/OJGgGve">Hole shape</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>It’s here that I’d like to call out yet another lesson for creating shapes in CSS: <strong>The colors we use in gradients are completely unimportant when working with <code>mask</code>.</strong></p>

<p>All we care about is the color value’s alpha channel because transparency is what is <code>mask</code>-ed out of the element, establishing the circular hole in the center. The gradient’s opaque colors preserve the visibility of the rest of the element. That’s why you will often see me using a black color value (e.g., <code>#000</code>) for the visible part and a transparent color (e.g., <code>#0000</code>) for the invisible part.</p>

<p>Notice the hard color stops in the gradient. A smooth transition between colors would lead to blurry lines. If we remove that transition and sharply change from one color to another, we get smooth, sharp edges. But not totally! I prefer to keep a very small transition (<code>98%</code> instead of <code>100%</code>) to avoid jagged edges.</p>

<p>And with a simple <code>radial-gradient</code>, we can achieve a lot of shapes, like cutting a circle from the top or bottom of an element.</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="MWRvBOL"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Circular cut from the top & bottom](https://codepen.io/t_afif/pen/MWRvBOL) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/MWRvBOL">Circular cut from the top &amp; bottom</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>Let’s change it up and make the cut from the top and the bottom edges at the same time:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="WNWEKdy"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Circular Cut at top and bottom](https://codepen.io/t_afif/pen/WNWEKdy) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/WNWEKdy">Circular Cut at top and bottom</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>If we give the gradient an explicit size, then it will repeat, resulting in yet another fancy shape, a scooped border:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="eYoEjVa"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Scooped edges from top and bottom](https://codepen.io/t_afif/pen/eYoEjVa) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/eYoEjVa">Scooped edges from top and bottom</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>Rather than dissecting the code for that last example, I want you to peek at the CSS and see for yourself how the <code>radial-gradient</code> is configured. You will notice that we went from a simple hole to a fancy border decoration by making only a few changes.</p>

<h3 id="border-edges">Border Edges</h3>

<p>The previous demo is one example of many fancy borders we can create. We can go wavy, spiked, scalloped, and more!</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/8-scalloped-zig-zag-wavy-borders.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="198"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/8-scalloped-zig-zag-wavy-borders.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/8-scalloped-zig-zag-wavy-borders.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/8-scalloped-zig-zag-wavy-borders.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/8-scalloped-zig-zag-wavy-borders.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/8-scalloped-zig-zag-wavy-borders.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/8-scalloped-zig-zag-wavy-borders.png"
			
			sizes="100vw"
			alt="Scalloped, zig-zag, and wavy borders"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 8. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/8-scalloped-zig-zag-wavy-borders.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Once again, it’s all about CSS masks and gradients. In the following articles, I provide you with examples and recipes for many different possibilities:</p>

<ul>
<li>“<a href="https://css-tricks.com/css-borders-using-masks/">Fancy CSS Borders Using Masks</a>” (CSS-Tricks)</li>
<li>“<a href="https://css-tricks.com/how-to-create-wavy-shapes-patterns-in-css/">How to Create Wavy Shapes &amp; Patterns in CSS</a>” (CSS-Tricks)</li>
</ul>

<p>Be sure to make it to the end of the second article to see how this technique can be used as <a href="https://css-pattern.com/">decorative background patterns</a>.</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="vYddpzK"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [CSS only pattern](https://codepen.io/t_afif/pen/vYddpzK) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/vYddpzK">CSS only pattern</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<h3 id="rounded-arcs">Rounded Arcs</h3>

<p>This is another instance where CSS gradients are the perfect fit for <code>mask</code>-ing shapes. You’ve probably seen this type of shape a gazillion times because it’s a common pattern for animated loading indications.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/9-circular-progress-element.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="281"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/9-circular-progress-element.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/9-circular-progress-element.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/9-circular-progress-element.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/9-circular-progress-element.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/9-circular-progress-element.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/9-circular-progress-element.png"
			
			sizes="100vw"
			alt="Circular progress element with rounded edges and gradient coloration"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 9: Circular progress element with rounded edges and gradient coloration. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/9-circular-progress-element.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This time, we are going to introduce another technique which is “composition”. It’s an operation we perform between two gradient layers. We either use <code>mask-composite</code> to define it, or we declare the values on the <code>mask</code> property.</p>

<p>The figure below illustrates the gradient configuration and the composition between each layer.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/10-steps-full-circle-unclosed-circle-rounded-edges.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="424"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/10-steps-full-circle-unclosed-circle-rounded-edges.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/10-steps-full-circle-unclosed-circle-rounded-edges.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/10-steps-full-circle-unclosed-circle-rounded-edges.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/10-steps-full-circle-unclosed-circle-rounded-edges.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/10-steps-full-circle-unclosed-circle-rounded-edges.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/10-steps-full-circle-unclosed-circle-rounded-edges.png"
			
			sizes="100vw"
			alt="Showing the steps that go from a full circle to an unclosed circle with rounded edges."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 10: Combining radial and conical gradients to establish the final shape. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/10-steps-full-circle-unclosed-circle-rounded-edges.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>We start with a <code>radial-gradient</code> to create a full circle shape. Then we use a <code>conic-gradient</code> to create the shape below it. Between the two gradients, we perform an “intersect” composition to get the unclosed circle. Then we tack on two more radial gradients to the <code>mask</code> to get those nice rounded endpoints on the unclosed circle. This time we consider the default composition, “add”.</p>

<p>Gradients aren’t something new as we use them a lot with the <code>background</code> property but “composition” is the new concept I want you to keep in mind. It’s a very handy one that unlocks a lot of possibilities.</p>

<p>Ready for the CSS?</p>

<div class="break-out">
<pre><code class="language-css">.arc {
  --b: 40px; /&#42; border thickness &#42;/
  --a: 240deg; /&#42; progression &#42;/  

--_g:/var(--b) var(--b) radial-gradient(50% 50%,#000 98%,#0000) no-repeat;
mask:
top var(--_g),
calc(50% + 50% * sin(var(--a)))
calc(50% - 50% * cos(var(--a))) var(--_g),
conic-gradient(#000 var(--a), #0000 0) intersect,
radial-gradient(50% 50%, #0000 calc(100% - var(--b)), #000 0 98%, #0000)
} </code></pre>

</div>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="eYoEpom"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Progress circle using mask](https://codepen.io/t_afif/pen/eYoEpom) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/eYoEpom">Progress circle using mask</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>Even if the code looks a bit complex at first glance, the use of CSS variables makes things easier to adjust. That’s an important CSS technique I am using in most of <a href="https://css-shape.com/">the shapes I have created</a>. Many of them require complex formulas and a lot of gradients, but in the end, all you have to do is adjust a few variables to control the shape. So, let’s not spend too much time explaining the math expressions. I want to focus on the tricks and techniques because the CSS concepts are what is important; remember, you can always grab the math. How CSS uses it is key.</p>

<p>Notice that we can achieve the same result using different gradient combinations. It’s weird because the syntax looks completely different. This snippet accomplishes the same visual result.</p>

<div class="break-out">
<pre><code class="language-css">.arc {
  --b: 40px; /&#42; border thickness &#42;/
  --a: 250deg; /&#42; progression &#42;/

padding: var(--b);
border-radius: 50%;

--_g: /var(--b) var(--b) radial-gradient(50% 50%, #000 97%, #0000 99%) no-repeat;
mask:
top var(--_g),
calc(50% + 50% * sin(var(--a)))
calc(50% - 50% * cos(var(--a))) var(--_g),
linear-gradient(#0000 0 0) content-box intersect,
conic-gradient(#000 var(--a), #0000 0);
} </code></pre>

</div>

<p>I added <code>border-radius</code> in there to round the element and added <code>padding</code> equal to the border’s thickness. Then, if you check the gradient used in the <code>mask</code>, you will see that I have changed the <code>radial-gradient</code> with a <code>linear-gradient</code> containing a single transparent color that covers the element’s <code>content-box</code>.</p>

<p>Sure, there are two more variables using this approach, but I did simplify the overall gradient at the same time. Yet another valid approach for the same effect.</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="WNWErpV"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Untitled](https://codepen.io/t_afif/pen/WNWErpV) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/WNWErpV">Untitled</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<h3 id="dashed-circles">Dashed Circles</h3>

<p>We can produce additional circular shapes with dashed edges using the same code we just wrote:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="KKvjjZN"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Dashed border](https://codepen.io/t_afif/pen/KKvjjZN) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/KKvjjZN">Dashed border</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>This time we’re combining two gradients in our <code>mask</code>. One is a black-to-transparent <code>repeating-conic-gradient</code> and the other is a transparent <code>linear-gradient</code> configured to cover the element up to its <code>content-box</code> and the <code>mask-composite</code> property is set to <code>intersect</code>.</p>

<pre><code class="language-css">mask:
 linear-gradient(#0000 0 0) content-box intersect,
 repeating-conic-gradient( /&#42; ... &#42;/ );
</code></pre>

<p>If you want to dig deeper into <code>mask-composite</code>, I advise you to read “<a href="https://css-tricks.com/mask-compositing-the-crash-course/">Mask Compositing: The Crash Course</a>” by Ana Tudor.</p>

<h3 id="rounded-tabs">Rounded Tabs</h3>

<p>Tabs are a super common design pattern. Each tab is connected to a panel of content where clicking a tab reveals that panel of content. Tabs can be rectangular, but we often think of them as rounded, the way they are on actual paper file folders.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/11-manilla-folder.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="323"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/11-manilla-folder.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/11-manilla-folder.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/11-manilla-folder.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/11-manilla-folder.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/11-manilla-folder.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/11-manilla-folder.png"
			
			sizes="100vw"
			alt="An empty light brown manilla folder."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 11. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/11-manilla-folder.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>We could get clever and use a pseudo-element for the shape that’s positioned behind the set of panels, but that introduces more complexity and fixed values than we ought to have. Instead, we can continue using CSS masks to get the perfect shape with a minimal amount of reusable code.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/12-tab-shape.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="325"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/12-tab-shape.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/12-tab-shape.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/12-tab-shape.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/12-tab-shape.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/12-tab-shape.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/12-tab-shape.png"
			
			sizes="100vw"
			alt="Tab shape with rounded top edges and a gradient background with muted red colors."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 12. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/12-tab-shape.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It’s not really the rounded top edges that are difficult to pull off, but the bottom portion that curves inwards instead of rounding in like the top. And even then, we already know the secret sauce: using CSS masks by combining gradients that reveal just the parts we want.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/13-steps-mask-shape.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="378"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/13-steps-mask-shape.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/13-steps-mask-shape.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/13-steps-mask-shape.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/13-steps-mask-shape.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/13-steps-mask-shape.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/13-steps-mask-shape.png"
			
			sizes="100vw"
			alt="Illustrating the four steps to mask the shape."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 13. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/13-steps-mask-shape.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>We start by adding a border around the element — excluding the bottom edge — and applying a <code>border-radius</code> on the top-left and top-right corners.</p>

<div class="break-out">
<pre><code class="language-css">.tab {
  --r: 40px; /&#42; radius size &#42;/

border: var(--r) solid #0000; /* transparent black */
border-bottom: 0;
border-radius: calc(2 * var(--r)) calc(2 * var(--r)) 0 0;
} </code></pre>

</div>

<p>Next, we add the first mask layer. We only want to show the padding area (i.e., the red area highlighted in Figure 10).</p>

<pre><code class="language-css">mask: linear-gradient(#000 0 0) padding-box;
</code></pre>

<p>Let’s add two more gradients, both radial, to show those bottom curves.</p>

<div class="break-out">
<pre><code class="language-css">mask: 
  radial-gradient(100% 100% at 0 0, #0000 98%, #000) 0 100% / var(--r) var(--r), 
  radial-gradient(100% 100% at 100% 0, #0000 98%, #000) 100% 100% / var(--r) var(--r), 
  linear-gradient(#000 0 0) padding-box;
</code></pre>
</div>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/14-radial-gradients.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="317"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/14-radial-gradients.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/14-radial-gradients.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/14-radial-gradients.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/14-radial-gradients.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/14-radial-gradients.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/14-radial-gradients.png"
			
			sizes="100vw"
			alt="Showing the radial gradients used to create the shape’s inner curve."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 14. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/14-radial-gradients.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Here is how the full code comes together:</p>

<div class="break-out">
<pre><code class="language-css">.tab {
  --r: 40px; /&#42; control the radius &#42;/

border: var(--r) solid #0000;
border-bottom: 0;
border-radius: calc(2 * var(--r)) calc(2 * var(--r)) 0 0;
mask:
radial-gradient(100% 100% at 0 0, #0000 98%, #000) 0 100% / var(--r) var(--r),
radial-gradient(100% 100% at 100% 0, #0000 98%, #000) 100% 100% / var(--r) var(--r),
linear-gradient(#000 0 0) padding-box;
mask-repeat: no-repeat;
background: linear-gradient(60deg, #BD5532, #601848) border-box;
} </code></pre>

</div>

<p>As usual, all it takes is one variable to control the shape. Let’s zero-in on the <code>border-radius</code> declaration for a moment:</p>

<div class="break-out">
<pre><code class="language-css">border-radius: calc(2 &#42; var(--r)) calc(2 &#42; var(--r)) 0 0;
</code></pre>
</div>

<p>Notice that the shape’s rounded top edges are equal to two times the radius (<code>--r</code>) value. If you’re wondering why we need a calculation here at all, it’s because we have a transparent border hanging out there, and we need to double the radius to account for it. The radius of the blue areas highlighted in Figure 13 is equal to <code>2 * R</code> while the red area highlighted in the same figure is equal to <code>2 * R - R</code>, or simply <code>R</code>.</p>

<p>We can actually optimize the code so that we only need two gradients — one linear and one radial — instead of three. I’ll drop that into the following demo for you to pick apart. Can you figure out how we were able to eliminate one of the gradients?</p>

<p>I’ll throw in two additional variations for you to investigate:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="JjVpPmr"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Rounded tab using CSS mask](https://codepen.io/t_afif/pen/JjVpPmr) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/JjVpPmr">Rounded tab using CSS mask</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>I’m often asked how I know when my code can be optimized more than it is. That’s truly the most difficult part of everything we’ve covered so far. I do not have any hard rules for how and when to optimize, and it’s not necessary to find the optimal solution, especially if you are a beginner. My advice is to first find the trivial and easy solution, even if it requires a lot of gradients. Then, with a lot of practice, you will be able to find better solutions.</p>

<p>Talking about practice, here’s your next bit of homework: try creating the shapes illustrated in Figure 15:</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/15-variations-tabs-tooltips.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="408"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/15-variations-tabs-tooltips.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/15-variations-tabs-tooltips.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/15-variations-tabs-tooltips.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/15-variations-tabs-tooltips.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/15-variations-tabs-tooltips.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/15-variations-tabs-tooltips.png"
			
			sizes="100vw"
			alt="Six variations of tabs and tooltips with rounded corners and edges."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 15. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/15-variations-tabs-tooltips.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>These aren’t tabs at all but tooltips! We can absolutely use the exact same masking technique we used to create the tabs for these shapes. Notice how the curves that go inward are consistent in each shape, no matter if they are positioned on the left, right, or both.</p>

<p>You can always find the code over at <a href="https://css-generators.com/tooltip-speech-bubble/">my online collection</a> if you want to reference it.</p>

<div class="partners__lead-place"></div>

<h2 id="more-css-shapes">More CSS Shapes</h2>

<p>At this point, we’ve seen the main tricks to create CSS shapes. You will rely on <code>mask</code> and gradients if you have curves and rounded parts or <code>clip-path</code> when there are no curves. It sounds simple but there’s still more to learn, so I am going to provide a few more common shapes for you to explore.</p>

<p>Instead of going into a detailed explanation of the shapes in this section, I’m going to give you the recipes for how to make them and all of the ingredients you need to make it happen. In fact, I have written other articles that are directly related to everything we are about to cover and will link them up so that you have guides you can reference in your work.</p>

<h3 id="triangles">Triangles</h3>

<p>A triangle is likely the first shape that you will ever need. They’re used in lots of places, from play buttons for videos, to decorative icons in links, to active state indicators, to open/close toggles in accordions, to… the list goes on.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/16-triangle-shape-variations.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="390"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/16-triangle-shape-variations.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/16-triangle-shape-variations.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/16-triangle-shape-variations.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/16-triangle-shape-variations.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/16-triangle-shape-variations.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/16-triangle-shape-variations.png"
			
			sizes="100vw"
			alt="Six triangle shape variations."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 16. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/16-triangle-shape-variations.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Creating a triangle shape is as simple as using a 3-point polygon in addition to defining the size:</p>

<pre><code class="language-css">.triangle {
  width: 200px;
  aspect-ratio: 1;
  clip-path: polygon(50% 0, 100% 100%, 0 100%);
}
</code></pre>

<p>But we can get even further by adding more points to have border-only variations:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="XWGzJpP"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [border-only triangle shapes](https://codepen.io/t_afif/pen/XWGzJpP) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/XWGzJpP">border-only triangle shapes</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>Or combine <code>clip-path</code> and <code>mask</code> to get rounded corner variations:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="QWovwoW"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Rounded triangles (the modern way)](https://codepen.io/t_afif/pen/QWovwoW) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/QWovwoW">Rounded triangles (the modern way)</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>Please check out my article “<a href="https://verpex.com/blog/website-tips/css-shapes-the-triangle">CSS Shapes: The Triangle</a>” on the Verpex blog for a full explanation of techniques with many examples and variations.</p>

<h3 id="hearts">Hearts</h3>

<p>Hearts are another classic shape that’s been tackled with <a href="https://css-tricks.com/hearts-in-html-and-css/">older CSS techniques</a> but have a better modern equivalent. We can pull this off more simply by combining <code>border-image</code> and <code>clip-path</code>:</p>

<div class="break-out">
<pre><code class="language-css">.heart {
  --c: red;

width: 200px;
aspect-ratio: 1;
border-image: radial-gradient(var(--c) 69%,#0000 70%) 84.5%/50%;
clip-path: polygon(-42% 0,50% 91%, 142% 0);
} </code></pre>

</div>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="MWPOJpP"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Heart shape using border-image](https://codepen.io/t_afif/pen/MWPOJpP) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/MWPOJpP">Heart shape using border-image</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>Or use <code>mask-border</code> instead of <code>border-image</code> to transform images into hearts:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="PoRwjPM"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [CSS only heart images](https://codepen.io/t_afif/pen/PoRwjPM) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/PoRwjPM">CSS only heart images</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>The full explanation with additional examples is available in my article “<a href="https://verpex.com/blog/website-tips/css-shapes-the-heart">CSS Shapes: The Heart</a>” over at the Verpex blog.</p>

<h3 id="ribbons">Ribbons</h3>

<p>Ribbons were all the rage back when <a href="https://www.interaction-design.org/literature/topics/skeuomorphism">skeuomorphism</a> was the design fad <em>du jour</em>. They’re still awesome today, and <a href="https://css-generators.com/ribbon-shapes/">I’ve created a big ol’ collection of them</a> with more than 100 shapes.</p>

<p>There are many different types of ribbons, as you might imagine. So, rather than detail one I will provide you with four articles I have written detailing the general technique (more clips!) and a variety of fun variations for you to consider.</p>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2023/11/css-responsive-multi-line-ribbon-shapes-part1/">CSS Responsive Multi-Line Ribbon Shapes, Part 1</a>” (Smashing Magazine)</li>
<li>“<a href="https://www.smashingmagazine.com/2023/11/css-responsive-multi-line-ribbon-shapes-part2/">CSS Responsive Multi-Line Ribbon Shapes, Part 2</a>” (Smashing Magazine)</li>
<li>“<a href="https://verpex.com/blog/website-tips/css-shapes-the-ribbon">CSS Shapes: The Ribbon</a>” (Verpex Blog)</li>
<li>“<a href="https://www.sitepoint.com/css-ribbons-single-element/">How to Create CSS Ribbon Shapes with a Single Element</a>” (SitePoint)</li>
</ul>

<h3 id="tooltips-speech-bubbles">Tooltips &amp; Speech Bubbles</h3>

<p>Like ribbons, there are so many ways we can design a tooltip or a speech bubble; so many that <a href="https://css-generators.com/tooltip-speech-bubble/">I have another collection showcasing more than 100 of them</a>. The following two-part series provides all of the nitty-gritty details:</p>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2024/03/modern-css-tooltips-speech-bubbles-part1/">Modern CSS Tooltips And Speech Bubbles, Part 1</a>” (Smashing Magazine)</li>
<li>“<a href="https://www.smashingmagazine.com/2024/03/modern-css-tooltips-speech-bubbles-part2/">Modern CSS Tooltips And Speech Bubbles, Part 2</a>” (Smashing Magazine)</li>
</ul>

<p>By the end, you can literally create as many variations as you can imagine.</p>

<h3 id="cutting-corners">Cutting Corners</h3>

<p>Insert your obligatory joke about how we’re supposed to cut corners in life. However, when we cut corners out of squares and rectangles, the result is a nice decorative shape that also works as a frame for images.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/17-cutting-corners.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="284"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/17-cutting-corners.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/17-cutting-corners.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/17-cutting-corners.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/17-cutting-corners.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/17-cutting-corners.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/17-cutting-corners.png"
			
			sizes="100vw"
			alt="Squares with cut corners"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 17. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/17-cutting-corners.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>We can cut all the corners or just specific ones. We can make circular cuts or sharp ones. We can even create an outline of the overall shape. Take a look at <a href="https://css-generators.com/custom-corners/">my online generator</a> to play with the code, and <a href="https://css-tricks.com/cut-corners-using-css-mask-and-clip-path-properties/">check out my full article on the topic</a> where I am detailing all the different cases.</p>

<h3 id="cut-out-shapes">Cut-Out Shapes</h3>

<p>In addition to cutting corners, we can also cut a shape out of a rectangle. They are also called inverted shapes.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/QZ2mYDA5.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="405"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/QZ2mYDA5.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/QZ2mYDA5.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/QZ2mYDA5.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/QZ2mYDA5.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/QZ2mYDA5.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/QZ2mYDA5.png"
			
			sizes="100vw"
			alt="Four cut-out shapes and the boxes they were cut out from."
		/>
    
    </a>
  

  
</figure>

<p>The technique is all about setting the CSS clip-path property with the shape’s coordinates in the polygon() function. So, technically, this is something you already know, thanks to the examples we’ve looked at throughout this guide.</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="gOJvdav"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen ["Cut-out shapes using clip-path"](https://codepen.io/t_afif/pen/gOJvdav) by Temani Afif ([@t_afif](https://codepen.io/t_afif))</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/gOJvdav">&ldquo;Cut-out shapes using clip-path&rdquo;</a> by Temani Afif (<a href="https://codepen.io/t_afif">@t_afif</a>)</figcaption>
</figure>

<p>My article titled <a href="https://verpex.com/blog/website-tips/how-to-create-cut-out-shapes-using-the-clip-path-property">&ldquo;How</a><a href="https://verpex.com/blog/website-tips/how-to-create-cut-out-shapes-using-the-clip-path-property"> To Create Cut-Out Shapes using The clip-path property”</a> provides the details in full.</p>

<h3 id="section-dividers">Section Dividers</h3>

<p>Speaking of visual transitions between sections, what if both sections have decorative borders that fit together like a puzzle?</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/18-section-dividers.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="210"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/18-section-dividers.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/18-section-dividers.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/18-section-dividers.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/18-section-dividers.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/18-section-dividers.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/18-section-dividers.png"
			
			sizes="100vw"
			alt="Three examples of section dividers, one a narrow-angle, one a circular, and one a wide angle."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 18. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/18-section-dividers.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>I hope you see the pattern now: sometimes, we’re clipping an element or masking portions of it. The fact that we can sort of “carve” into things this way using <code>polygon()</code> coordinates and gradients opens up so many possibilities that would have required clever workarounds and super-specific code in years past.</p>

<p>See my article “<a href="https://www.freecodecamp.org/news/section-divider-using-css/">How to Create a Section Divider Using CSS</a>” on the freeCodeCamp blog for a deep dive into the concepts, which we’ve also covered here quite extensively already in earlier sections.</p>

<h3 id="inner-curves">Inner Curves</h3>

<p>Inverted radius, notch, rounded cut, bell curve&hellip; many names can be used to describe these shapes with smooth inner curves. They&rsquo;re also another use case of using CSS mask to combine gradients for creating variations.</p>

<p><img src="https://files.smashing.media/2R2CJPDQ.png" alt="Three vertically stacked rectangles with notched curves cut into the top and bottom edges, next to a red square with curves cut out of the middle." /></p>

<p>See my article <a href="https://verpex.com/blog/website-tips/how-to-create-shapes-with-inner-curves-using-css-mask">“How to create Shapes with Inner Curves using CSS Mask”</a> on the Verpex blog to get more details. I&rsquo;ll drop in two demos showing the different shapes in play:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="XWLJrWE"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen ["Inverted border-radius using CSS mask"](https://codepen.io/t_afif/pen/XWLJrWE) by Temani Afif ([@t_afif](https://codepen.io/t_afif))</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/XWLJrWE">&ldquo;Inverted border-radius using CSS mask&rdquo;</a> by Temani Afif (<a href="https://codepen.io/t_afif">@t_afif</a>)</figcaption>
</figure>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="oNrMJXL"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen ["Fancy avatar header with hover effect"](https://codepen.io/t_afif/pen/oNrMJXL) by Temani Afif ([@t_afif](https://codepen.io/t_afif))</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/oNrMJXL">&ldquo;Fancy avatar header with hover effect&rdquo;</a> by Temani Afif (<a href="https://codepen.io/t_afif">@t_afif</a>)</figcaption>
</figure>

<h3 id="floral-shapes">Floral Shapes</h3>

<p>We’ve created circles. We’ve made wave shapes. Let’s combine those two ideas together to create <em>floral shapes</em>.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/modern-guide-making-css-shapes/19-flower-like-shapes.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="261"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/19-flower-like-shapes.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/modern-guide-making-css-shapes/19-flower-like-shapes.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/modern-guide-making-css-shapes/19-flower-like-shapes.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/modern-guide-making-css-shapes/19-flower-like-shapes.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/modern-guide-making-css-shapes/19-flower-like-shapes.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/modern-guide-making-css-shapes/19-flower-like-shapes.png"
			
			sizes="100vw"
			alt="Different flower-like shapes"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Figure 19. (<a href='https://files.smashing.media/articles/modern-guide-making-css-shapes/19-flower-like-shapes.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>These shapes are pretty cool on their own. But like a few of the other shapes we’ve covered, this one works extremely well with images. If you need something fancier than the typical box, then masking the edges can come off like a custom-framed photo.</p>

<p>Here is a demo where I am using such shapes to create <a href="https://www.smashingmagazine.com/2023/09/re-creating-pop-out-hover-effect-css-part1/">a fancy hover effect</a>:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="qBQzrwq"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen [Fancy Pop Out hover effect!](https://codepen.io/t_afif/pen/qBQzrwq) by <a href="https://codepen.io/t_afif">Temani Afif</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/qBQzrwq">Fancy Pop Out hover effect!</a> by <a href="https://codepen.io/t_afif">Temani Afif</a>.</figcaption>
</figure>

<p>There’s a lot of math involved with this, specifically trigonometric functions. I have a two-part series that gets into the weeds if you’re interested in that side of things:</p>

<ul>
<li>“<a href="https://frontendmasters.com/blog/creating-flower-shapes-using-css-mask-trigonometric-functions/">Creating Flower Shapes using CSS Mask &amp; Trigonometric Functions</a>” (Frontend Masters)</li>
<li>“<a href="https://frontendmasters.com/blog/creating-wavy-circles-with-fancy-animations/">Creating Wavy Circles with Fancy Animations in CSS</a>” (Frontend Masters)</li>
</ul>

<p>As always, remember that <a href="https://css-shape.com/">my online collection</a> is your Number One resource for all things related to CSS shapes. The math has already been worked out for your convenience, but you also have the references you need to understand how it works under the hood.</p>

<h2 id="wavy-zig-zag-boxes">Wavy &amp; Zig-Zag boxes</h2>

<p>We saw how to create a Zig-Zag and a Wave on one side but we can also have them on all the sides and make fancy boxes!</p>

<p><img src="https://files.smashing.media/HVjQDwAH.png" alt="Four squares with wavy and zagged edges." /></p>

<p>Cool right? Check the following articles if you want to understand the logic behind creating them:</p>

<ul>
<li>“<a href="https://verpex.com/blog/website-tips/how-to-create-a-zig-zag-box-using-css">How to Create a Zig-Zag Box Using CSS</a>” (Verpex Blog)</li>
<li>“<a href="https://verpex.com/blog/website-tips/how-to-create-wavy-boxes-using-css">How to Create Wavy Boxes Using CSS</a>” (Verpex Blog)</li>
</ul>

<p>And here are a few demos where I am decorating images:</p>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="gbYBPma"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen ["Images inside wiggly boxes"](https://codepen.io/t_afif/pen/gbYBPma) by Temani Afif ([@t_afif](https://codepen.io/t_afif))</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/gbYBPma">&ldquo;Images inside wiggly boxes&rdquo;</a> by Temani Afif (<a href="https://codepen.io/t_afif">@t_afif</a>)</figcaption>
</figure>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="EaYedaY"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen <a href="https://codepen.io/t_afif/pen/EaYedaY">Images inside wavy boxes</a> by Temani Afif (<a href="https://codepen.io/t_afif">@t_afif</a>) on <a href="https://codepen.io">CodePen</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/EaYedaY">Images inside wavy boxes</a> by Temani Afif (<a href="https://codepen.io/t_afif">@t_afif</a>) on <a href="https://codepen.io">CodePen</a>.</figcaption>
</figure>

<figure class="break-out">
	<p data-height="480"
	data-theme-id="light"
	data-slug-hash="OJGBvmp"
	data-user="t_afif"
	data-default-tab="result"
	class="codepen">See the Pen <a href="https://codepen.io/t_afif/pen/OJGBvmp">CSS-only Zig-Zag box</a> by Temani Afif (<a href="https://codepen.io/t_afif">@t_afif</a>) on <a href="https://codepen.io">CodePen</a>.</p>
	<figcaption>See the Pen <a href="https://codepen.io/t_afif/pen/OJGBvmp">CSS-only Zig-Zag box</a> by Temani Afif (<a href="https://codepen.io/t_afif">@t_afif</a>) on <a href="https://codepen.io">CodePen</a>.</figcaption>
</figure>

<h2 id="conclusion">Conclusion</h2>

<p>I hope you see CSS Shapes differently now as a result of reading this comprehensive guide. We covered a few shapes, but really, it’s hundreds upon hundreds of shapes because you see how flexible they are to configure into a slew of variations.</p>

<p>At the end of the day, all of the shapes use some combination of different CSS concepts such as clipping, masking, composition, gradients, CSS variables, and so on. Not to mention a few hidden tricks like the one related to the <code>polygon()</code> function:</p>

<ul>
<li>It accepts points outside the <code>[0% 100%]</code> range.</li>
<li>Switching axes is a solid approach for creating shape variations.</li>
<li>The lines we establish can intersect.</li>
</ul>

<p>It’s not <em>that</em> many things, right? We looked at each of these in great detail and then whipped through the shapes to demonstrate how the concepts come together. <strong>It’s not so much about memorizing snippets than it is thoroughly understanding how CSS works</strong> and leveraging its features to produce any number of things, like shapes.</p>

<p>Don’t forget to bookmark my <a href="https://css-shape.com/">CSS Shape website</a> and use it as a reference as well as a quick stop to get a specific shape you need for a project. I avoid re-inventing the wheel in my work, and the online collection is your wheel for snagging shapes made with pure CSS.</p>

<p>Please also use it as inspiration for your own shape-shifting experiments. And post a comment if you think of a shape that would be a nice addition to the collection.</p>

<h3 id="references">References</h3>

<ul>
<li>“<a href="https://verpex.com/blog/website-tips/css-shapes-polygon-starburst">CSS Shapes: Polygon &amp; Starburst</a>” (Verpex Blog)</li>
<li>“<a href="https://verpex.com/blog/website-tips/css-tricks-to-master-the-clip-path-property">CSS Tricks To Master The <code>clip-path</code> Property</a>” (Verpex Blog)</li>
<li>“<a href="https://css-tricks.com/css-borders-using-masks/">Fancy CSS Borders Using Masks</a>” (CSS-Tricks)</li>
<li>“<a href="https://css-tricks.com/how-to-create-wavy-shapes-patterns-in-css/">How to Create Wavy Shapes &amp; Patterns in CSS</a>” (CSS-Tricks)</li>
<li>“<a href="https://verpex.com/blog/website-tips/css-shapes-the-triangle">CSS Shapes: The Triangle</a>” (Verpex Blog)</li>
<li>“<a href="https://verpex.com/blog/website-tips/css-shapes-the-heart">CSS Shapes: The Heart</a>” (Verpex Blog)</li>
<li>“<a href="https://www.smashingmagazine.com/2023/11/css-responsive-multi-line-ribbon-shapes-part1/">CSS Responsive Multi-Line Ribbon Shapes, Part 1</a>” (Smashing Magazine)</li>
<li>“<a href="https://www.smashingmagazine.com/2023/11/css-responsive-multi-line-ribbon-shapes-part2/">CSS Responsive Multi-Line Ribbon Shapes, Part 2</a>” (Smashing Magazine)</li>
<li>“<a href="https://verpex.com/blog/website-tips/css-shapes-the-ribbon">CSS Shapes: The Ribbon</a>” (Verpex Blog)</li>
<li>“<a href="https://www.sitepoint.com/css-ribbons-single-element/">How to Create CSS Ribbon Shapes with a Single Element</a>” (SitePoint)</li>
<li>“<a href="https://www.smashingmagazine.com/2024/03/modern-css-tooltips-speech-bubbles-part1/">Modern CSS Tooltips And Speech Bubbles, Part 1</a>” (Smashing Magazine)</li>
<li>“<a href="https://www.smashingmagazine.com/2024/03/modern-css-tooltips-speech-bubbles-part2/">Modern CSS Tooltips And Speech Bubbles, Part 2</a>” (Smashing Magazine)</li>
<li>“<a href="https://css-tricks.com/cut-corners-using-css-mask-and-clip-path-properties/">Tricks to Cut Corners Using CSS Mask and Clip-Path Properties</a>”</li>
<li>“<a href="https://www.freecodecamp.org/news/section-divider-using-css/">How to Create a Section Divider Using CSS</a>” (freeCodeCamp Blog)</li>
<li>“<a href="https://www.smashingmagazine.com/2023/09/re-creating-pop-out-hover-effect-css-part1/">Re-Creating The Pop-Out Hover Effect With Modern CSS (Part 1)</a>” (Smashing Magazine)</li>
<li>“<a href="https://frontendmasters.com/blog/creating-flower-shapes-using-css-mask-trigonometric-functions/">Creating Flower Shapes using CSS Mask &amp; Trigonometric Functions</a>” (Frontend Masters)</li>
<li>“<a href="https://frontendmasters.com/blog/creating-wavy-circles-with-fancy-animations/">Creating Wavy Circles with Fancy Animations in CSS</a>” (Frontend Masters)</li>
<li>“<a href="https://css-tricks.com/mask-compositing-the-crash-course/">Mask Compositing: The Crash Course</a>” by Ana Tudor (CSS-Tricks)</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(gg, yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Vitaly Friedman</author><title>A Guide To Designing For Older Adults</title><link>https://www.smashingmagazine.com/2024/02/guide-designing-older-adults/</link><pubDate>Tue, 06 Feb 2024 08:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2024/02/guide-designing-older-adults/</guid><description>With one billion people aged 60 or older worldwide, inclusivity is more important than ever. Learn how to create digital experiences that empower independence and competence for older adults while enhancing usability for all. An upcoming part of &lt;a href="https://smart-interface-design-patterns.com/">Smart Interface Design Patterns&lt;/a>.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2024/02/guide-designing-older-adults/" />
              <title>A Guide To Designing For Older Adults</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>A Guide To Designing For Older Adults</h1>
                  
                    
                    <address>Vitaly Friedman</address>
                  
                  <time datetime="2024-02-06T08:00:00&#43;00:00" class="op-published">2024-02-06T08:00:00+00:00</time>
                  <time datetime="2024-02-06T08:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Today, one billion people are <strong>60 years or older</strong>. That’s 12% of the entire world population, and the age group is growing faster than any other group. Yet, online, the needs of older adults are often overlooked or omitted. So what do we need to consider to make our designs more <strong>inclusive for older adults</strong>? Well, let’s take a closer look.</p>

<style>.course-intro{--shadow-color:206deg 31% 60%;background-color:#eaf6ff;border:1px solid #ecf4ff;box-shadow:0 .5px .6px hsl(var(--shadow-color) / .36),0 1.7px 1.9px -.8px hsl(var(--shadow-color) / .36),0 4.2px 4.7px -1.7px hsl(var(--shadow-color) / .36),.1px 10.3px 11.6px -2.5px hsl(var(--shadow-color) / .36);border-radius:11px;padding:1.35rem 1.65rem}@media (prefers-color-scheme:dark){.course-intro{--shadow-color:199deg 63% 6%;border-color:var(--block-separator-color,#244654);background-color:var(--accent-box-color,#19313c)}}</style>

<p class="course-intro">This article is <strong>part of our ongoing series</strong> on <a href="/category/design-patterns">design patterns</a>. It’s also a part of the video library on <a style="font-weight:700" href="https://smart-interface-design-patterns.com/">Smart Interface Design Patterns</a>&nbsp;🍣 and is available in the <a href="https://smashingconf.com/online-workshops/workshops/interface-design-course-vitaly-friedman-spring/">live UX training</a> as well.</p>

<h2 id="make-users-feel-independent-and-competent">Make Users Feel Independent And Competent</h2>

<p>When designing for older adults, we shouldn’t make our design decisions based on stereotypes or assumptions that are often not true at all. Don’t assume that older adults struggle to use digital. Most users are healthy, active, and have a solid income.</p>














<figure class="
  
  
  ">
  
    <a href="https://uxdesign.cc/golden-microcopy-helping-older-users-use-your-product-f0f1b173aa3e">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="647"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/guide-designing-older-adults/1-designing-older-adults.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/guide-designing-older-adults/1-designing-older-adults.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/guide-designing-older-adults/1-designing-older-adults.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/guide-designing-older-adults/1-designing-older-adults.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/guide-designing-older-adults/1-designing-older-adults.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/guide-designing-older-adults/1-designing-older-adults.png"
			
			sizes="100vw"
			alt="Various icons with large tap areas and descriptive labels, such as low crime, near great parks, and so on, that describe a dream house"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Older adults need large tap areas for better precision, but everyone can benefit from it. (Image source: “<a href='https://uxdesign.cc/golden-microcopy-helping-older-users-use-your-product-f0f1b173aa3e'>How To Write Better Microcopy For Older Adults</a>”) (<a href='https://files.smashing.media/articles/guide-designing-older-adults/1-designing-older-adults.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>They might use the web <em>differently</em> than younger users, but that doesn’t mean we need to design a “barebones” version for them. What we need is a <strong>reliable, inclusive digital experience</strong> that helps everyone feel independent and competent.</p>

<p>Good accessibility is good for everyone. To make it happen, we need to <strong>bring older adults into our design process</strong> and find out what their needs are. This doesn’t only benefit the older audience but improves the overall UX &mdash; for everyone.</p>

<h2 id="one-task-at-a-time-and-error-messages">One Task At A Time and Error Messages</h2>

<p>When designing for older users, keep in mind that there are significant <strong>differences in age groups</strong> 60–65, 65–70, 70–75, and so on, so explore design decisions for each group individually.</p>

<p>Older adults often <strong>read and analyze every word</strong> (so-called <em>Stroop effect</em>), so give them enough time to achieve a task, as well as control the process. So avoid disappearing messages so that users can close them themselves when they are ready or present only 1 question at a time in a form.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/guide-designing-older-adults/2-error-messages.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/guide-designing-older-adults/2-error-messages.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/guide-designing-older-adults/2-error-messages.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/guide-designing-older-adults/2-error-messages.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/guide-designing-older-adults/2-error-messages.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/guide-designing-older-adults/2-error-messages.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/guide-designing-older-adults/2-error-messages.png"
			
			sizes="100vw"
			alt="An error message with an error summary from Gov.uk."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Place error messages above the input and add an error summary to highlight errors prominently. (An example from <a href='https://www.gov.uk/'>Gov.uk</a>) (<a href='https://files.smashing.media/articles/guide-designing-older-adults/2-error-messages.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Older adults also often <strong>struggle with precise movements</strong>, so avoid long, fine drag gestures and precision. If a user performs an action, they didn’t mean to and runs into an error, be sure your error messages are helpful and forgiving, as older adults often view error messages as a personal failure.</p>

<p>As Peter Sylwester <a href="https://www.linkedin.com/feed/update/urn:li:ugcPost:7158723543181008896?commentUrn=urn%3Ali%3Acomment%3A%28ugcPost%3A7158723543181008896%2C7158817716512972800%29&amp;dashCommentUrn=urn%3Ali%3Afsd_comment%3A%287158817716512972800%2Curn%3Ali%3AugcPost%3A7158723543181008896%29">has suggested</a>, sensory reaction times peak at about the age of 24 and then degrade slowly as we age. Most humans maintain fine motor skills and decent reaction times well into old age. Therefore, error messages and small updates and prompts should almost always be a consideration. One good way to facilitate reaction time is to keep errors and prompts close to the <strong>center of attention</strong>.</p>

<p>As always, when it comes to accessibility, watch out for <strong>contrast</strong>. Particularly, shades of blue/purple and yellow/green are often difficult to distinguish. When using icons, it is also a good idea to add descriptive labels to ensure everyone can make sense of them, no matter their vision.</p>

<h2 id="guidelines-for-designing-for-older-adults">Guidelines For Designing For Older Adults</h2>

<ul>
<li>Avoid <strong>disappearing messages</strong>: let users close them.</li>
<li>Avoid long, fine drag gestures and <strong>precision</strong>.</li>
<li>Avoid <strong>floating labels</strong> and use static field labels instead.</li>
<li>Don’t rely on <strong>icons</strong> alone: add descriptive labels.</li>
<li>Ask for <strong>explicit confirmation</strong> for destructive actions.</li>
<li>Add a <strong>“Back” link</strong> in addition to the browser’s “Back” button.</li>
<li>In forms, present one question or <strong>one topic per screen</strong>.</li>
<li>Use sufficient <strong>contrast</strong> (particularly shades of blue/purple and yellow/green can be hard to distinguish).</li>
<li>Make <strong>error messages</strong> helpful and forgiving.</li>
</ul>

<h2 id="wrapping-up">Wrapping Up</h2>

<p>We should be careful not to make our design decisions based on assumptions that are often not true at all. <strong>We don’t need a “barebones” version</strong> for older users. We need a reliable, inclusive product that helps people of all groups feel independent and competent.</p>

<p><strong>Bring older adults in your design process</strong> to find out what their specific needs are. It’s not just better for that specific target audience — good accessibility is better for everyone. And huge kudos to wonderful people contributing to a topic that is often forgotten and overlooked.</p>

<h3 id="useful-resources">Useful Resources</h3>

<ul>
<li>“<a href="https://uxdesign.cc/golden-microcopy-helping-older-users-use-your-product-f0f1b173aa3e">How To Write Better Microcopy For Older Adults</a>,” by Michal Halperin Ben Zvi and Kinneret Yifrah</li>
<li>“<a href="https://medium.com/salesforce-ux/what-you-can-learn-from-older-adults-about-accessible-design-63181b450863">What You Can Learn From Older Adults About Accessible Design</a>,” by Becca Selah</li>
<li>“<a href="https://www.toptal.com/designers/ui/ui-design-for-older-adults">A Guide to Interface Design For Older Adults</a>,” by Sergei P.</li>
<li>“<a href="https://www.uxmatters.com/mt/archives/2017/04/designing-user-interfaces-for-an-aging-population.php">Designing User Interfaces for an Aging Population</a>,” by Jeff Johnson and Kate Finn</li>
<li><a href="https://www.thejoint.org.il/en/log-in-guidebook/">Age-Friendly Digital Design Toolkit</a> (PDF guide, email required)</li>
<li><a href="https://ageing-better.org.uk/news/age-positive-image-library-launched">Age-Positive Image Library</a></li>
<li>“<a href="https://medium.com/digital-assistant-academy/voice-design-strategies-for-the-elderly-population-17ea9c83859f">Voice Design Strategies for the Elderly Population</a>,” by Shyamala Prayaga</li>
<li>“<a href="https://www.smashingmagazine.com/2019/11/online-environments-older-users/">Creating Online Environments That Work Well For Older Users</a>,” by Barry Rueger</li>
<li>“<a href="https://www.nngroup.com/articles/usability-testing-older-adults/">Usability Testing With Older Adults</a>,” by Megan Chan</li>
</ul>

<h2 id="meet-smart-interface-design-patterns">Meet Smart Interface Design Patterns</h2>

<p>If you are interested in similar insights around UX, take a look at <a href="https://smart-interface-design-patterns.com/"><strong>Smart Interface Design Patterns</strong></a>, our <strong>10h-video course</strong> with 100s of practical examples from real-life projects — with a <a href="https://smashingconf.com/online-workshops/workshops/interface-design-course-vitaly-friedman-spring/">live UX training</a> starting March 8. Everything from mega-dropdowns to complex enterprise tables &mdash; with 5 new segments added every year.  <a href="https://www.youtube.com/watch?v=aSP5oR9g-ss">Jump to a free preview</a>.</p>

<figure style="margin-bottom: 0"><a href="https://smart-interface-design-patterns.com/"><img style="border-radius: 11px" decoding="async" fetchpriority="low" width="950" height="492" srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 400w,
https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 800w,
https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 1200w,
https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 1600w,
https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg 2000w" src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/7cc4e1de-6921-474e-a3fb-db4789fc13dd/b4024b60-e627-177d-8bff-28441f810462.jpeg" sizes="100vw" alt="Smart Interface Design Patterns"></a><figcaption class="op-vertical-bottom">Meet <a href="https://smart-interface-design-patterns.com/">Smart Interface Design Patterns</a>, our video course on interface design &amp; UX.</figcaption></figure>

<div class="btn--lined btn--lined--white-border" style="margin-top: 0.75em; margin-bottom: 0.75em"><a class="btn btn--large btn--green btn--text-shadow" href="https://smart-interface-design-patterns.com/">Jump to the video course&nbsp;&rarr;</a></div>

<p><p class="ticket-price__desc" style="font-size: .8em!important; text-align: center; line-height: 1.5; margin: 0; display: block;">100 design patterns &amp; real-life
examples.<br>10h-video course + live UX training. <a href="https://www.youtube.com/watch?v=aSP5oR9g-ss">Free preview</a>.</p>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk, il)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Daria Karpenko</author><title>How To Choose Typefaces For Fintech Products: Best Practices Guide (Part 2)</title><link>https://www.smashingmagazine.com/2023/10/choose-typefaces-fintech-products-best-practices-guide-part2/</link><pubDate>Fri, 20 Oct 2023 09:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/10/choose-typefaces-fintech-products-best-practices-guide-part2/</guid><description>Finding the right typeface is tricky as a whole. Dividing the process into steps and having the right information at hand will make this journey a design adventure full of surprises. To avoid sinking into unnecessary details, use this guide as a map for your path. Review various font paraments and learn how to apply them to your designs.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/10/choose-typefaces-fintech-products-best-practices-guide-part2/" />
              <title>How To Choose Typefaces For Fintech Products: Best Practices Guide (Part 2)</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>How To Choose Typefaces For Fintech Products: Best Practices Guide (Part 2)</h1>
                  
                    
                    <address>Daria Karpenko</address>
                  
                  <time datetime="2023-10-20T09:00:00&#43;00:00" class="op-published">2023-10-20T09:00:00+00:00</time>
                  <time datetime="2023-10-20T09:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Welcome to the second part of the guide to typography in fintech. In <a href="https://www.smashingmagazine.com/2023/10/choose-typefaces-fintech-products-guide-part1/">Part 1</a>, we reviewed the key points to consider when choosing typefaces:</p>

<ul>
<li>What is the content of your product? What type of data do you mainly work with?</li>
<li>Who is your common user, and in which circumstances do they use the product?</li>
<li>What are the specific points you need to keep in mind? For example, what language support is planned for the future? Or, maybe you need to use some specific glyphs (math or rare currency symbols) in your product.</li>
</ul>

<p>We also reviewed all font parameters and started investigating how they affect readability and legibility. Now, let’s discuss <em>how to apply them</em> to your designs.</p>

<h2 id="adjust-texts-and-tables">Adjust Texts And Tables</h2>

<h3 id="point-size">Point Size</h3>

<p>When choosing a point size, we need to consider the body text first. Body text is the most massive part of your content, and its style determines design and visual appearance. It’s also essential to remember that x-height might vary slightly from type to type. Therefore, not all typefaces will look the same in the same size, and you will probably need to adjust it.</p>

<p>The general rule is that the size of the screen body text should be <strong>12-16px</strong>. But this measurement may change depending on your needs. When you work with investment apps, users should be able to see a large amount of information on a single screen. An appropriate solution here might be to reduce the body text size to <strong>10px</strong> but pay attention to legibility. In addition, <strong>traders usually want to see big amounts of data on a single screen, without scrolling anything</strong>, as it might affect the speed of reaction. We had such a case when a client asked us to make all the body text smaller to fit the screen.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/characteristics.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="457"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/characteristics.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/characteristics.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/characteristics.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/characteristics.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/characteristics.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/characteristics.jpg"
			
			sizes="100vw"
			alt="Comparison of x-heights in the same point size"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Comparison of x-heights in the same point size. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/characteristics.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Secondly, consider headings. Try to build a clear content hierarchy that will help users to work with the content. Figure out how many levels of headings you need. Don’t use too many, aiming for three to five levels.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/1-typography-styles-definition.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="447"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/1-typography-styles-definition.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/1-typography-styles-definition.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/1-typography-styles-definition.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/1-typography-styles-definition.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/1-typography-styles-definition.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/1-typography-styles-definition.jpg"
			
			sizes="100vw"
			alt="A page with typography style definitions for one of the projects."
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A page with typography style definitions for one of our projects. We have five levels of headers here, two of them both in lower and uppercase. Uppercase versions are used mainly for specific information, such as currency symbols, tickers, and so on. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/1-typography-styles-definition.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Try to avoid using uppercase capitalization. But if you capitalize headings in uppercase, make them short.</p>

<p>When set in uppercase, the text is less legible. The lowercase text has different shapes, ascenders, and descenders. They help us intuitively recognize letters in context without spending time deciphering them when reading. Uppercase text reduces this recognition because capital letters generally have square shapes. So, the more capitalized text you have in a row, the more time a user needs to read it.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/2-lowercase-text-vs-capitalized.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="326"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/2-lowercase-text-vs-capitalized.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/2-lowercase-text-vs-capitalized.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/2-lowercase-text-vs-capitalized.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/2-lowercase-text-vs-capitalized.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/2-lowercase-text-vs-capitalized.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/2-lowercase-text-vs-capitalized.jpg"
			
			sizes="100vw"
			alt="Comparison of two paragraphs, where one is written with lowercase, and the other one with capitalized"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Compare these two paragraphs and the time you need to read each of them. Did you notice that you recognize lowercase text faster? (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/2-lowercase-text-vs-capitalized.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Another tip is to avoid italics, underlining, and other ways to differentiate headings visually unless you’re working on a small visual material and have a strong reason for such expressive typography. If it’s a must, choose a bold font for visual contrast and accents, but use it sparingly.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="/printed-books/touch-design-for-mobile-interfaces/">Touch Design for Mobile Interfaces</a></strong>, Steven Hoober’s brand-new guide on <strong>designing for mobile</strong> with proven, universal, human-centric guidelines. <strong>400 pages</strong>, jam-packed with in-depth user research and <strong>best practices</strong>.</p>
<a data-instant href="https://www.smashingmagazine.com/printed-books/touch-design-for-mobile-interfaces/" class="btn btn--green btn--large" style="">Jump to table of contents&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="https://www.smashingmagazine.com/printed-books/touch-design-for-mobile-interfaces/" class="feature-panel-image-link">
<div class="feature-panel-image"><picture><source type="image/avif" srcSet="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/14bcab88-b622-47f6-a51d-76b0aa003597/touch-design-book-shop-opt.avif" />
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="https://archive.smashing.media/assets/344dbf88-fdf9-42bb-adb4-46f01eedd629/b14658fc-bb2d-41a6-8d1a-70eaaf1b8ec8/touch-design-book-shop-opt.png"
    alt="Feature Panel"
    width="480"
    height="697"
/>
</picture>
</div>
</a>
</div>
</aside>
</div>

<h3 id="text-column">Text Column</h3>

<p>When working with texts, you must determine a suitable length of text lines. Overly long text lines are hard to follow. Generally, the average size is 55-60 characters per line. Following these values will help you keep the text readable.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/3-devexa-text-blocks-width.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="471"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/3-devexa-text-blocks-width.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/3-devexa-text-blocks-width.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/3-devexa-text-blocks-width.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/3-devexa-text-blocks-width.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/3-devexa-text-blocks-width.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/3-devexa-text-blocks-width.jpg"
			
			sizes="100vw"
			alt="A screenshot from Devexa AI Skills where messages are broken down into multiple lines"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      For Devexa, we chose a reasonable width of text blocks. Big messages are broken down into multiple lines so users can read them comfortably. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/3-devexa-text-blocks-width.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="line-spacing">Line Spacing</h3>

<p>The next step is to choose an appropriate line spacing (or leading) for your text. This measurement determines the distance from the baseline to the baseline in a text paragraph. Usually, optimal line spacing equals 120% of body text size, e.g., 12x1,2=14.4 for 12px text. But depending on the circumstances, you can vary this setting between 120% and 145%.<br />













<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/4-line-spacing.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/4-line-spacing.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/4-line-spacing.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/4-line-spacing.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/4-line-spacing.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/4-line-spacing.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/4-line-spacing.jpg"
			
			sizes="100vw"
			alt="Line length and spacing"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Line length and spacing. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/4-line-spacing.jpg'>Large preview</a>)
    </figcaption>
  
</figure></p>

<p>Besides the point size, the width of the column is an important aspect that affects line spacing. Generally, the rule is <strong>the wider the text column, the more spacing between lines you need</strong> (see the illustration above). For narrow columns, quite tight spacing works well, as you don’t need to follow the long way from the beginning to the end of the line. Also, consider the space <em>between</em> columns: line spacing should not be larger but noticeably smaller, as it will cause confusion and mess. Users should be able to distinguish text blocks from one another easily.</p>

<h3 id="letterspace-and-tracking">Letterspace And Tracking</h3>

<p>In high-quality typefaces, type designers carefully adjust letter spacing so you can use them by default. However, there are several cases when additional settings are required.</p>

<p>First, when setting text in small point size (10px or less), e.g., for captions or tooltips, add some small positive tracking &mdash; 1&ndash;2% is enough. It helps make the text more legible.</p>

<p>Positive tracking is also needed in lines set in capital letters. Uppercase characters (and their sidebearings) are designed to come before lowercase at the beginning of a word. For this reason, the All Caps setting is usually too tight and requires additional spacing.</p>

<p><strong>Tips</strong>:</p>

<ul>
<li>Think twice when setting text in uppercase, and don’t do this without a strong reason because it affects legibility.</li>
<li>Avoid more than three to five words in uppercase.</li>
<li>For a larger amount of text, choose a typeface with small caps.</li>
<li>Don’t try to imitate small caps by using capitals in smaller sizes.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/5-all-caps-captions-devexa-platform.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="415"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/5-all-caps-captions-devexa-platform.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/5-all-caps-captions-devexa-platform.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/5-all-caps-captions-devexa-platform.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/5-all-caps-captions-devexa-platform.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/5-all-caps-captions-devexa-platform.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/5-all-caps-captions-devexa-platform.jpg"
			
			sizes="100vw"
			alt="A screenshot where it&#39;s shown that all-Caps captions in the Devexa platform are one word long and have positive tracking"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      All-Caps captions in the Devexa platform are one word long and have positive tracking. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/5-all-caps-captions-devexa-platform.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Negative tracking might be applied when you use a type in an extremely large point size.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/6-small-negative-spacing-numerals.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="415"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/6-small-negative-spacing-numerals.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/6-small-negative-spacing-numerals.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/6-small-negative-spacing-numerals.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/6-small-negative-spacing-numerals.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/6-small-negative-spacing-numerals.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/6-small-negative-spacing-numerals.jpg"
			
			sizes="100vw"
			alt="Small negative spacing in numerals"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Small negative spacing in numerals. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/6-small-negative-spacing-numerals.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<div class="partners__lead-place"></div>

<h2 id="design-the-spreadsheets">Design The Spreadsheets</h2>

<p>A spreadsheet is a complex form of data representation that should have a high level of legibility. Setting up a spreadsheet can be tricky because, in digital products, we work with dynamic data, and therefore, we can only sometimes predict their behavior.</p>

<p>A good practice is to consider all possible corner cases. What if a number has ten digits in the fractional part? Do we really need to show the whole number, or can we shorten it? What if cells contain data of very different lengths? Ask your analyst to consider all possible situations to avoid unpleasant surprises after release.</p>

<p>Here are several core rules to improve your spreadsheet:</p>

<h3 id="use-monospace-or-tabular-digits">Use Monospace (Or Tabular) Digits</h3>

<p>Monospace digits are a set of digits with equal space width and central position within them, unlike default ones. It’s the most convenient way to align data precisely, allowing you to place digits in a column one below another. Tabular digits are especially useful in compound products like traders’ watchlists and spreadsheets. They help to keep the layout while values change in real time.</p>

<p>The Open Type format supports this feature and can be enabled in the <strong>Type Settings</strong> menu &gt; <strong>Details</strong> in Figma.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/7-monospaced-figures.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="471"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/7-monospaced-figures.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/7-monospaced-figures.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/7-monospaced-figures.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/7-monospaced-figures.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/7-monospaced-figures.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/7-monospaced-figures.jpg"
			
			sizes="100vw"
			alt="A screenshot showing where to find Monospaced digits feature in Figma"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Where to find Monospaced digits feature in Figma. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/7-monospaced-figures.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="align-numbers-by-the-right-side-or-by-a-decimal-separator">Align Numbers By The Right Side Or By A Decimal Separator</h3>

<p>Depending on using integers or fractionals, choose the appropriate alignment. The aim is to place digits with the same meaning one below another in a column.</p>

<p>Right alignment allows you to align digits according to their position in the numeral system. It works well if you work with integers.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/8-right-alignment.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="415"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/8-right-alignment.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/8-right-alignment.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/8-right-alignment.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/8-right-alignment.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/8-right-alignment.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/8-right-alignment.jpg"
			
			sizes="100vw"
			alt="Digits in right alignment"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/8-right-alignment.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If you work with fractionals, align by a decimal separator.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/9-fractionals-align-decimal-separator.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="415"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/9-fractionals-align-decimal-separator.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/9-fractionals-align-decimal-separator.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/9-fractionals-align-decimal-separator.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/9-fractionals-align-decimal-separator.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/9-fractionals-align-decimal-separator.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/9-fractionals-align-decimal-separator.jpg"
			
			sizes="100vw"
			alt="Fractionals aligned by a decimal separator"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/9-fractionals-align-decimal-separator.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Alternatively, fill empty spaces with zero symbols. In this case, columns will align by separator automatically.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/10-gate45-two-types-numeral-columns.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="415"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/10-gate45-two-types-numeral-columns.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/10-gate45-two-types-numeral-columns.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/10-gate45-two-types-numeral-columns.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/10-gate45-two-types-numeral-columns.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/10-gate45-two-types-numeral-columns.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/10-gate45-two-types-numeral-columns.jpg"
			
			sizes="100vw"
			alt="A screenshot from Gate45 showing two types of numeral columns with different alignment"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      In Gate45, we have two types of numeral columns: the ones that are not required to be comparable between each other (VWAP) have left alignment, the rest have right alignment, and decimals sit one above the other. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/10-gate45-two-types-numeral-columns.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>When adding additional symbols after values, such as currency or footnote, do it with an overhang.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/11-dxmatch-prices-aligned-decimal-separator.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="415"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/11-dxmatch-prices-aligned-decimal-separator.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/11-dxmatch-prices-aligned-decimal-separator.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/11-dxmatch-prices-aligned-decimal-separator.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/11-dxmatch-prices-aligned-decimal-separator.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/11-dxmatch-prices-aligned-decimal-separator.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/11-dxmatch-prices-aligned-decimal-separator.jpg"
			
			sizes="100vw"
			alt="A screenshot showing how prices and currency codes are aligned"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Prices are carefully aligned by the decimal separator in the given example. Currency codes are aligned to the left, next to the price. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/11-dxmatch-prices-aligned-decimal-separator.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Choose a suitable alignment for the column’s headings. Usually, the heading is aligned on the same side as the column’s content, and this is the most convenient and fast path for developers when working with dynamic data.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aTypesetting%20numeral%20data%20in%20monospaced%20figures%20and%20suitable%20alignment%20provides%20clear%20data%20representation%20and%20improves%20legibility.%0a&url=https://smashingmagazine.com%2f2023%2f10%2fchoose-typefaces-fintech-products-best-practices-guide-part2%2f">
      
Typesetting numeral data in monospaced figures and suitable alignment provides clear data representation and improves legibility.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<h3 id="use-appropriate-separation-marks">Use Appropriate Separation Marks</h3>

<p>Consider applying different rules to the sign of the decimal separator. Depending on localization, it might be a comma or period: use periods for the US, the UK, Australia, and Canada, and choose a comma if your audience is from European countries, like France, Germany, and so on.</p>

<p>Thousands of separators vary between space, comma, apostrophe, and period, depending on the region. Find out which sign is used in your case and apply your approach consistently.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/12-possible-variations-decimals-thousands-separators-various-countries.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="415"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/12-possible-variations-decimals-thousands-separators-various-countries.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/12-possible-variations-decimals-thousands-separators-various-countries.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/12-possible-variations-decimals-thousands-separators-various-countries.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/12-possible-variations-decimals-thousands-separators-various-countries.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/12-possible-variations-decimals-thousands-separators-various-countries.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/12-possible-variations-decimals-thousands-separators-various-countries.jpg"
			
			sizes="100vw"
			alt="Possible variations of decimals and thousands of separators in various countries"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Possible variations of decimals and thousands of separators in various countries. For more information, check the <a href='https://en.wikipedia.org/wiki/Decimal_separator#Examples_of_use'>Wiki article</a>. (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/12-possible-variations-decimals-thousands-separators-various-countries.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="pay-attention-to-currency-symbols">Pay Attention To Currency Symbols</h3>

<p>Note that the appropriate place for currency symbols also varies. The dollar sign and most signs of European currencies usually stand before the value. If you work with a specific symbol, ensure you know the usage rules.</p>

<p>The placement of the euro sign is determined by language. According to the <a href="https://op.europa.eu/en/publication-detail/-/publication/01ed788a-d266-11ec-a95f-01aa75ed71a1">EU Interinstitutional style guide</a> (page 114), the character is placed before value in English-speaking countries, as well as in Dutch, Irish, and Maltese. In all other European languages, the order is reversed.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/13-currency-codes-corresponding-symbols.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="471"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/13-currency-codes-corresponding-symbols.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/13-currency-codes-corresponding-symbols.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/13-currency-codes-corresponding-symbols.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/13-currency-codes-corresponding-symbols.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/13-currency-codes-corresponding-symbols.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/13-currency-codes-corresponding-symbols.jpg"
			
			sizes="100vw"
			alt="Currency codes and corresponding symbols"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Currency codes and corresponding symbols. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/13-currency-codes-corresponding-symbols.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>There are also rare cases when symbols are placed in the decimal separator position, for example, <a href="https://en.wikipedia.org/wiki/Cape_Verdean_escudo">Cape Verdean escudo</a>.</p>

<p>Make sure to place currency codes after value. It is a rule.</p>

<h3 id="avoid-unnecessary-graphics">Avoid Unnecessary Graphics</h3>

<p>Striped backgrounds, lines, and borders are instruments of cell connection that help users follow the line in the spreadsheet. Repetitive striped backgrounds and lines often create visual noise and disturb attention. Make sure you have a solid reason to use it and apply sparingly.</p>

<p>Avoid using bright colors and patterned lines (dashed, dotted, and so on). Lines and borders should be solid and thin, as they are supporting elements that shouldn’t distract from data.</p>

<p>A neat layout is the best way to connect elements (cells) into a solid unit (row). Use the <a href="https://www.nngroup.com/articles/gestalt-proximity/">Proximity principle</a> to show a relation between objects.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aMaking%20horizontal%20space%20between%20columns%20tighter%20than%20vertical%20space%20between%20rows%20will%20help%20you%20connect%20elements%20intuitively%20without%20additional%20graphic%20details.%0a&url=https://smashingmagazine.com%2f2023%2f10%2fchoose-typefaces-fintech-products-best-practices-guide-part2%2f">
      
Making horizontal space between columns tighter than vertical space between rows will help you connect elements intuitively without additional graphic details.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>Try it before using any extra elements.</p>

<div class="partners__lead-place"></div>

<h2 id="master-accessibility">Master Accessibility</h2>

<p>If you’re a designer, you probably use high-quality screens to see a wide color range. In this situation, it is very tempting to use subtle color shades, pale shadows, and other details to make your product look visually sophisticated.</p>

<p>In real life, the average trading platform user may work in various conditions: on an old computer, on a low-quality screen, or simply in bright sunlight. Do not forget about people with special needs: low vision, color blindness, and so on. It is essential to remember that 90% of your audience will barely notice delicate color schemes and nuances. And this is a reason to take care of the contrast ratio.</p>

<h3 id="contrast-ratio">Contrast Ratio</h3>

<p>Contrast ratio is a numeral value in format X:1 where X may vary from 1 (weakest contrast) to 21 (maximum). 1:1 means comparing colors with no contrast, and 21:1 is obtainable by comparing black and white.</p>

<p>When checking your contrast ratio, you will meet such labels as AA and AAA. These are levels of accessibility, from lower to higher, based on <a href="https://www.w3.org/TR/WCAG21/">WCAG accessibility standards</a>. According to several factors, such as how broad your audience is, which is the average age of the user, and which possible use circumstances you can predict, you should meet at least AA.</p>

<p>There are <a href="https://www.w3.org/TR/WCAG21/#contrast-minimum">different criteria</a> for text and graphic elements for each standard. Each level requires a specific contrast ratio:</p>

<ul>
<li><strong>AA</strong>: at least 4.5:1 for normal text and 3:1 for bold or large text,</li>
<li><strong>AAA</strong>: 7:1 for normal text and 4.5:1 for bold or large text.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/14-examples-color-pairs.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="471"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/14-examples-color-pairs.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/14-examples-color-pairs.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/14-examples-color-pairs.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/14-examples-color-pairs.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/14-examples-color-pairs.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/14-examples-color-pairs.jpg"
			
			sizes="100vw"
			alt="Examples of color pairs, their contrast ratio and the compliance with WCAG requirements"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Examples of color pairs, their contrast ratio and the compliance with WCAG requirements. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/14-examples-color-pairs.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>How do you check if your product meets these criteria? You can use one of many online tools, for example, <a href="https://webaim.org/resources/contrastchecker/">Web AIM contrast checker</a>. There are also plenty of plugins in Figma that you can try.</p>

<p>At Devexperts, we usually create products with dark themes as it gives us more freedom in color choice. Due to our specialization, we often need many colors to highlight various values and functions. It’s easier to pick a color with enough contrast to the dark background and make our products accessible to as many people as possible.</p>

<h2 id="find-that-one-typeface">Find That One Typeface</h2>

<p>So, knowing these simple steps to consider, it’s time to choose a font for your fintech product. There are plenty of marketplaces where you can purchase licensed typefaces. Check <a href="https://www.myfonts.com/">myfonts.com</a> first, as it is the biggest player in this field. Many type foundries and independent designers sell their fonts on this platform.</p>

<p>You can also buy a font directly from the type foundry’s website. This is probably the best idea, as you (or the type designer) will not pay an additional fee to the platform. You can also explore all typefaces by this type foundry and find some more fonts you like for future projects. Here is a list of foundries to check out.</p>

<h4 id="commercial-type">Commercial Type</h4>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/15-commercial-type.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/15-commercial-type.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/15-commercial-type.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/15-commercial-type.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/15-commercial-type.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/15-commercial-type.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/15-commercial-type.jpg"
			
			sizes="100vw"
			alt="Commercial Type’s library"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/15-commercial-type.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://commercialtype.com/">Commercial Type</a>’s library includes a wide range of typefaces of exceptional quality.</p>

<p>The founders of Commercial Type are Paul Barnes and Christian Schwartz, designers who are well-known for their typeface Guardian Egyptian, created for The Guardian in 2004&ndash;05.</p>

<h4 id="type-today">Type.Today</h4>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/16-type-today.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/16-type-today.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/16-type-today.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/16-type-today.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/16-type-today.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/16-type-today.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/16-type-today.jpg"
			
			sizes="100vw"
			alt="Type.Today’s collection of modern, high-quality typefaces"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/16-type-today.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://type.today/en">Type.Today</a> is a store with an inspiring collection of modern, high-quality typefaces. The project was founded by Ilya Ruderman and Yuri Ostromensky, who are also co-founders of <a href="https://cstmfonts.com/en">CSTM fonts type foundry</a>.</p>

<p>You might also want to check the other part of the project: <a href="https://tomorrow.type.today/">Type.Tomorrow</a>, which presents more experimental and crazy typefaces.</p>

<h4 id="typotheque">Typotheque</h4>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/17-typotheque.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/17-typotheque.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/17-typotheque.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/17-typotheque.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/17-typotheque.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/17-typotheque.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/17-typotheque.jpg"
			
			sizes="100vw"
			alt="Typotheque’s library of retail fonts"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/17-typotheque.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://www.typotheque.com/">Typotheque</a> is a Netherlands-based type design company founded by Peter Bilak in 1999. It has a massive library of retail fonts that may serve any designer’s need. They have plenty of great type-related products in their shop.</p>

<h4 id="klim">Klim</h4>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/18-klim.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="460"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/18-klim.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/18-klim.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/18-klim.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/18-klim.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/18-klim.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/18-klim.jpg"
			
			sizes="100vw"
			alt="Klim’s type foundry"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/18-klim.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Founded by Kris Sowersby in 2005, <a href="https://klim.co.nz/">Klim</a> type foundry creates custom and retail typefaces. Their work combines deep historical knowledge with a contemporary approach to graphics. Check their blog &mdash; it has lots of exciting reading.</p>

<h4 id="colophon-foundry">Colophon Foundry</h4>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/19-colophon-foundry.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/19-colophon-foundry.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/19-colophon-foundry.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/19-colophon-foundry.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/19-colophon-foundry.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/19-colophon-foundry.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/19-colophon-foundry.jpg"
			
			sizes="100vw"
			alt="Colophon Foundry’s type agency"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/19-colophon-foundry.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://www.colophon-foundry.org/">Colophon Foundry</a> is a London-based type agency that offers an impressive choice of modern, perfectly executed typefaces. Don’t forget to check trials as well.</p>

<h4 id="i-love-typography">I Love Typography</h4>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/20-i-love-typography.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/20-i-love-typography.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/20-i-love-typography.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/20-i-love-typography.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/20-i-love-typography.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/20-i-love-typography.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/20-i-love-typography.jpg"
			
			sizes="100vw"
			alt="ILT’s collection of accurately-picked typefaces"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/20-i-love-typography.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://fonts.ilovetypography.com/">ILT</a> is not only a shop with an impressive collection of accurately-picked typefaces. It is also a blog with lots of great type-related materials on a wide range of topics. Highly recommended!</p>

<h4 id="grilli-type">Grilli Type</h4>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/21-grilli-type.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/21-grilli-type.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/21-grilli-type.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/21-grilli-type.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/21-grilli-type.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/21-grilli-type.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/21-grilli-type.jpg"
			
			sizes="100vw"
			alt="Grilli Type’s library"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/21-grilli-type.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://www.grillitype.com/">Grilli Type</a> is a foundry that offers types with a very modern feeling. Their library is not that wide in amount of typefaces, but each has a vast number of styles. They also provide trial versions for all their faces.</p>

<h4 id="typetogether">TypeTogether</h4>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/22-typetogether.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="468"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/22-typetogether.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/22-typetogether.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/22-typetogether.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/22-typetogether.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/22-typetogether.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/22-typetogether.jpg"
			
			sizes="100vw"
			alt="TypeTogether’s homepage"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-best-practices-guide-part2/22-typetogether.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Established in 2006 by two graduates from Reading University, <a href="https://www.type-together.com/">TypeTogether</a> foundry is concentrated on text typefaces for editorial purposes. Except for that, they have plenty of display retail fonts in their catalog.</p>

<p>If you’re a student looking for a typeface for non-commercial use, check student license support on the website. Sometimes, foundries give scholars good discounts or even offer some fonts for free. There are also trial versions provided, so you can check if the typeface works well for your project before purchasing.</p>

<p>Also, you can try <a href="https://fontstand.com/">Fontstand</a>. It is a great platform where you can try and rent fonts for a couple of dollars and use them for commercial projects.</p>

<p>At <a href="https://www.futurefonts.xyz/">Future Fonts</a>, you can find a great variety of typefaces in progress available for purchase with a good discount. You will also receive all updates for the purchased typeface, which sounds like a great investment!</p>

<p>And finally, if you don’t have a budget at all, there are still some options. For example, Google Fonts have a number of good typefaces which you can use for free for any kind of project. Take a look at IBM Type Family, Open Sans, PT Sans, Inter, or Roboto. These are widely used fonts we all know and meet in various products. For sure, you will find something suitable there.</p>

<p>In any case, <strong>do not forget to read the license carefully</strong>, and feel free to ask the vendor/type foundry if you have questions.</p>

<h2 id="conclusion">Conclusion</h2>

<p>Finding the right typeface is tricky as a whole. Dividing the process into steps and having the right information at hand will make this journey a design adventure full of surprises. To avoid sinking into unnecessary details, use this guide as a map for your path, and you will never get lost.</p>

<p>That’s it! Hopefully, you’ve found this article helpful for improving your workflow. Explore typefaces, as this is a great and powerful instrument for designers, and stay in touch!</p>

<h3 id="further-reading-on-smashingmag">Further Reading On SmashingMag</h3>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2023/03/free-fonts-interface-designers/">Free Fonts For Interface Designers</a>,” Cosima Mielke</li>
<li>“<a href="https://www.smashingmagazine.com/2020/10/face-motion-typography/">How To Use Face Motion To Interact With Typography</a>,” Edoardo Cavazza</li>
<li>“<a href="https://www.smashingmagazine.com/2020/05/micro-typography-space-kern-punctuation-marks-symbols/">Micro-Typography: How To Space And Kern Punctuation Marks And Other Symbols</a>,” Thomas Bohm</li>
<li>“<a href="https://www.smashingmagazine.com/2019/07/gorgeous-free-open-source-typefaces/">7 Gorgeous Free And Open-Source Typefaces And When To Use Them</a>,” Noemi Stauffer</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Daria Karpenko</author><title>How To Choose Typefaces For Fintech Products: Our Best Practices Guide (Part 1)</title><link>https://www.smashingmagazine.com/2023/10/choose-typefaces-fintech-products-guide-part1/</link><pubDate>Fri, 13 Oct 2023 11:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/10/choose-typefaces-fintech-products-guide-part1/</guid><description>Fintech products are systems that are overloaded by many types of data like numerals, texts, spreadsheets, and so on. Working with these products requires the designer to pay a high level of attention and responsibility, as he becomes a provider between user and data. Daria shares her approach to digital product typography and reviews the key points to consider when choosing typefaces.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/10/choose-typefaces-fintech-products-guide-part1/" />
              <title>How To Choose Typefaces For Fintech Products: Our Best Practices Guide (Part 1)</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>How To Choose Typefaces For Fintech Products: Our Best Practices Guide (Part 1)</h1>
                  
                    
                    <address>Daria Karpenko</address>
                  
                  <time datetime="2023-10-13T11:00:00&#43;00:00" class="op-published">2023-10-13T11:00:00+00:00</time>
                  <time datetime="2023-10-13T11:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Hi! My name is Daria, and for the last two years, I’ve been working at Devexperts. I have experience creating various products, from crypto wallets to exchange administration platforms. Our target audience is diverse from professional and non-professional brokers, novice and experienced traders to dealing staff and trade desk operators. All of them use financial tools daily, and some of them &mdash; with high intensity.</p>

<p>Сontinuous use of the product under high tension conditions (which is common when we talk about the financial sphere) might cause eyestrain and general weariness. Consequently, users might make poor decisions and become inattentive to details, which will lead to harming their investment portfolios. My goal, as a designer, is to prevent these drawbacks and make daily operations comfortable.</p>

<p>The main designer’s instrument to work with the product is the UI kit, a collection of reusable components, such as controls, color palettes, effects, and <strong>text styles</strong>. Typography is an important part of it as it defines a text style library and conveys the most valuable and powerful instrument &mdash; the information &mdash; from platform to user.</p>

<p>To explain my approach to digital product typography, I invite you to go over each step, from research to implementation. Before diving deep, let’s cover the basic terms.</p>

<h2 id="basic-terminology-before-we-begin">Basic Terminology Before We Begin</h2>

<p><strong>A typeface</strong> (or a font family) is a range of graphically similar fonts with a common visual idea behind them. For example, Helvetica is a typeface.</p>

<p><strong>A font</strong> is part of a typeface. It is a collection of symbols that might differ in weight (Semibold/Bold/Black), might be upright or italic (Regular/Cursive/Italic), have various widths (Narrow/Wide), and so on.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/font-family.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="514"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/font-family.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/font-family.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/font-family.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/font-family.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/font-family.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/font-family.jpg"
			
			sizes="100vw"
			alt="A definition of a typeface/font family and a font"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The definition of a typeface/font family and a font. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/font-family.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Please keep in mind that these two terms are often interchangeable, even when used by type designers.</p>

<p>Now that we have our basic terms defined let’s go over our suggestions on the workflow when creating or choosing a font for a fintech product.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p><p>Meet <a data-instant href="/the-smashing-newsletter/"><strong>Smashing Email Newsletter</strong></a> with useful tips on front-end, design &amp; UX. Subscribe and <strong>get “Smart Interface Design Checklists”</strong> &mdash; a <strong>free PDF deck</strong> with 150+ questions to ask yourself when designing and building almost <em>anything</em>.</p><div><section class="nlbf"><form action="//smashingmagazine.us1.list-manage.com/subscribe/post?u=16b832d9ad4b28edf261f34df&amp;id=a1666656e0" method="post"><div class="nlbwrapper"><label for="mce-EMAIL-hp" class="sr-only">Your (smashing) email</label><div class="nlbgroup"><input type="email" name="EMAIL" class="nlbf-email" id="mce-EMAIL-hp" placeholder="Your email">
<input type="submit" value="Meow!" name="subscribe" class="nlbf-button"></div></div></form><style>.c-garfield-the-cat .nlbwrapper{margin-bottom: 0;}.nlbf{display:flex;padding-bottom:.25em;padding-top:.5em;text-align:center;letter-spacing:-.5px;color:#fff;font-size:1.15em}.nlbgroup:hover{box-shadow:0 1px 7px -5px rgba(50,50,93,.25),0 3px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025)}.nlbf .nlbf-button,.nlbf .nlbf-email{flex-grow:1;flex-shrink:0;width:auto;margin:0;padding:.75em 1em;border:0;border-radius:11px;background:#fff;font-size:1em;box-shadow:none}.promo-box .nlbf-button:focus,.promo-box input.nlbf-email:active,.promo-box input.nlbf-email:focus{box-shadow:none}.nlbf-button:-ms-input-placeholder,.nlbf-email:-ms-input-placeholder{color:#777;font-style:italic}.nlbf-button::-webkit-input-placeholder,.nlbf-email::-webkit-input-placeholder{color:#777;font-style:italic}.nlbf-button:-ms-input-placeholder,.nlbf-button::-moz-placeholder,.nlbf-button::placeholder,.nlbf-email:-ms-input-placeholder,.nlbf-email::-moz-placeholder,.nlbf-email::placeholder{color:#777;font-style:italic}.nlbf .nlbf-button{transition:all .2s ease-in-out;color:#fff;background-color:#0168b8;font-weight:700;box-shadow:0 1px 1px rgba(0,0,0,.3);width:100%;border:0;border-left:1px solid #ddd;flex:2;border-top-left-radius:0;border-bottom-left-radius:0}.nlbf .nlbf-email{border-top-right-radius:0;border-bottom-right-radius:0;width:100%;flex:4;min-width:150px}@media all and (max-width:650px){.nlbf .nlbgroup{flex-wrap:wrap;box-shadow:none}.nlbf .nlbf-button,.nlbf .nlbf-email{border-radius:11px;border-left:none}.nlbf .nlbf-email{box-shadow:0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025);min-width:100%}.nlbf .nlbf-button{margin-top:1em;box-shadow:0 1px 1px rgba(0,0,0,.5)}}.nlbf .nlbf-button:active,.nlbf .nlbf-button:focus,.nlbf .nlbf-button:hover{cursor:pointer;color:#fff;background-color:#0168b8;border-color:#dadada;box-shadow:0 1px 1px rgba(0,0,0,.3)}.nlbf .nlbf-button:active,.nlbf .nlbf-button:focus{outline:0!important;text-shadow:1px 1px 1px rgba(0,0,0,.3);box-shadow:inset 0 3px 3px rgba(0,0,0,.3)}.nlbgroup{display:flex;box-shadow:0 13px 27px -5px rgba(50,50,93,.25),0 8px 16px -8px rgba(0,0,0,.3),0 -6px 16px -6px rgba(0,0,0,.025);border-radius:11px;transition:box-shadow .2s ease-in-out}.nlbwrapper{display:flex;flex-direction:column;justify-content:center}.nlbf form{width:100%}.nlbf .nlbgroup{margin:0}.nlbcaption{font-size:.9em;line-height:1.5em;color:#fff;border-radius:11px;padding:.5em 1em;display:inline-block;background-color:#0067b859;text-shadow:1px 1px 1px rgba(0,0,0,.3)}.wf-loaded-stage2 .nlbf .nlbf-button{font-family:Mija}.mts{margin-top: 5px !important;}.mbn{margin-bottom: 0 !important;}</style></section><p class="mts mbn"><small class="promo-box__footer mtm block grey"><em>Once a week. Useful tips on <a href="https://www.smashingmagazine.com/the-smashing-newsletter/">front-end &amp; UX</a>. Trusted by 207.000 friendly folks.</em></small></p></div></p>
</div>
</div>
<div class="feature-panel-right-col">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-firechat.svg"
    alt="Feature Panel"
    width="310"
    height="400"
/>

</div>

<p></div>
</aside>
</div></p>

<h2 id="step-1-detect-data-types-and-user-flows">Step 1: Detect Data Types And User Flows</h2>

<p>If you’re a fintech designer in the trading sphere, you’ll mainly deal with <strong>spreadsheets</strong>. Usually, they represent fundamental page units with data on markets.</p>

<p>Other standard data media include product cards and forms for order entry, cancellation, adjustment, and so on. Product cards provide users with more detailed information on trading instruments, while forms allow users to interact with markets. These interactions are <strong>user flows</strong>.</p>

<p>What do all these different kinds of information have in common? They’re all displayed as texts. In this case, the core design values are the following:</p>

<ul>
<li>An appropriate typeface,</li>
<li>Working with typography,</li>
<li>A layout,</li>
<li>An accurate representation of information.</li>
</ul>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/interface.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="514"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/interface.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/interface.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/interface.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/interface.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/interface.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/interface.jpg"
			
			sizes="100vw"
			alt="Examples of data-overloaded interface, exchange administration platform"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Examples of data-overloaded interface, exchange administration platform. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/interface.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>In the picture above, you can see the example of a platform for exchange administrators with all typical types of data. A spreadsheet displays a list of trades and dozens of their parameters. At the back is an example of a trading instrument card (currency pair) with dynamic quotes that update in real time. The chart displays trade history with prices and volumes, and the Market Depth graph at the right shows the current state of the market &mdash; the volume of Buy and Sell orders and their prices.</p>

<p>Now when we have defined the most common types of data in fintech products, let’s zoom in and see what specific circumstances we need to consider in our product.</p>

<h2 id="step-2-consider-your-requirements">Step 2: Consider Your Requirements</h2>

<p>Best design practices facilitate current requirements and consider potential scenarios of product evolution. When working on a fintech product, you should also consider features such as  <strong>language support</strong>, <strong>special characters</strong>, and <strong>use conditions</strong>. Let’s have a look at these spheres and highlight the most considerable points in each of them.</p>

<h3 id="language-support">Language Support</h3>

<p>Forecasting specific typographical cases at the start of a project might be a great investment for future development. For instance, product localization and translation to various languages is one such case. Should your product support one or multiple languages? If multiple, try to understand the average difference in word lengths.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/distribution-word-lengths-various-languages.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="514"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/distribution-word-lengths-various-languages.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/distribution-word-lengths-various-languages.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/distribution-word-lengths-various-languages.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/distribution-word-lengths-various-languages.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/distribution-word-lengths-various-languages.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/distribution-word-lengths-various-languages.jpg"
			
			sizes="100vw"
			alt="Distribution of word lengths in various languages"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Distribution of word lengths in various languages. (Source: <a href='http://www.ravi.io/language-word-lengths'>www.ravi.io</a>) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/distribution-word-lengths-various-languages.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>For example, German words are generally much longer than English ones. Compared to these two, French and Spanish words are somewhere in between. Consequently, French or German versions need more text space in design than the English one, which will cause layout changes.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/screens.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/screens.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/screens.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/screens.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/screens.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/screens.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/screens.jpg"
			
			sizes="100vw"
			alt="Comparison of the same modal window for English and French language settings"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Compare the same modal window for English and French language settings. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/screens.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Many languages also use diacritics (additional typographical signs above and under the letters). These writing systems may require more space between lines to make texts more legible.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spacing-differences-depending-use-diacritics.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="515"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spacing-differences-depending-use-diacritics.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spacing-differences-depending-use-diacritics.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spacing-differences-depending-use-diacritics.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spacing-differences-depending-use-diacritics.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spacing-differences-depending-use-diacritics.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spacing-differences-depending-use-diacritics.jpg"
			
			sizes="100vw"
			alt="Spacing differences depending on the use of diacritics"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Spacing differences depending on the use of diacritics. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spacing-differences-depending-use-diacritics.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><a href="https://en.wikipedia.org/wiki/Logogram">Logographic or logosyllabic writing systems</a> are quite the opposite: unlike Latin-based languages, they are usually very compact. Few font families support both hieroglyphic and Latin languages, though. So, if you can’t find an appropriate font for your needs, you’ll have to pick out two different typefaces that will match visually.</p>

<p>Having information on supported writing systems and future localizations will allow you to choose a typeface with all the necessary languages. Contact the product owner or manager to determine which languages may appear in your product. This way, you will develop a design for all corner cases and create a visual system fit for all localizations.</p>

<h3 id="required-symbols">Required Symbols</h3>

<p>Another critical aspect to consider from the start is special characters. For example, in the fintech sphere, the designer deals with trading markets and often needs to use a variety of currency symbols, math formulas, and decimals.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/usd-symbols.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/usd-symbols.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/usd-symbols.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/usd-symbols.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/usd-symbols.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/usd-symbols.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/usd-symbols.jpg"
			
			sizes="100vw"
			alt="USD symbols"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      USD symbols in our products. (Image credit: Devexperts) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/usd-symbols.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>There are plenty of ways to find out what glyphs a typeface includes. You can learn this information on Type Foundries websites and typeface marketplaces. Check the type specimen to explore all supported features, glyphs, languages, and characteristics.</p>

<p>If you already have a typeface on your laptop, it’s easy to check glyphs in a Font book if you use macOS or a Character map if you operate Windows.</p>

<p>Below, we have an example from macOS. Select the font and switch to the repertoire preview mode to find an entire spreadsheet.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spreadsheet-pt-serif-regular-glyphs.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spreadsheet-pt-serif-regular-glyphs.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spreadsheet-pt-serif-regular-glyphs.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spreadsheet-pt-serif-regular-glyphs.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spreadsheet-pt-serif-regular-glyphs.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spreadsheet-pt-serif-regular-glyphs.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spreadsheet-pt-serif-regular-glyphs.jpg"
			
			sizes="100vw"
			alt="A spreadsheet with PT Serif Regular glyphs"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      A spreadsheet with PT Serif Regular glyphs. (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/spreadsheet-pt-serif-regular-glyphs.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>You can also make use of a font-managing app. One of its perks is the <strong>font library management</strong> according to characteristics. There are many such apps, so it should be easy to find the one that suits your taste and budget. A good option might be <a href="https://typefaceapp.com/">Typeface</a> or <a href="https://fontba.se/">FontBase</a> if you’re looking for a free app.</p>

<p>Another challenge with glyphs that awaits you is Figma. Unlike Adobe products, it doesn’t offer a glyph panel. It means you don’t see the full contents of a font and can’t choose a symbol you need directly on Figma. However, you can copy the required glyph from the Font  Book or Character map and paste it into your design.</p>

<h3 id="use-conditions">Use Conditions</h3>

<p>When you start a new project, consider what type of information it represents and the most common use conditions. For example, if it’s an article, it’s mostly text information with extensive accented quotes, or the text consists of short paragraphs broken down by photos. We presume that the user will most likely read it in a calm setting, as it is the most comfortable way to concentrate on a long text and will need half an hour to finish it.</p>

<p>Let’s review a drastically different case. We’re designing a product for professional use overloaded with data comprising mostly repetitive figures. Users operate various gadgets to work with the data all day in varying conditions. They can get tired and lack attention but must analyze the data and react swiftly.</p>

<p><strong>When we work with fintech products, we mainly work with the second scenario.</strong> Our average user deals with numbers and important operations. Investors analyze markets and trade securities, while trade desk operators manage orders. Even a slight hiccup in data performance may cause a great mistake in operations. A carefully selected typeface and precise layout will help you support your user and make their workflow convenient.</p>

<div class="partners__lead-place"></div>

<h2 id="step-3-discover-typeface-options">Step 3: Discover Typeface Options</h2>

<p>Understanding typeface features will help you decide on the most suitable fonts. For this reason, we’ll first break down the categories and characteristics of typefaces.</p>

<h3 id="classes">Classes</h3>

<p>Typeface classification has been a subject of discussion for typographers for a long time. (For further information, you can read “<a href="https://clagnut.com/blog/2367/">The trouble with font classifications</a>” and “<a href="https://ilovetypography.com/2021/05/31/talking-about-fonts/">Talking about type:
from Aristotle to Arial</a>.”) For years the common classification, adopted by <a href="https://en.wikipedia.org/wiki/ATypI">Association Typographique Internationale</a> was the Vox-ATypI system, invented by <a href="https://en.wikipedia.org/wiki/Maximilien_Vox">Maximilien Vox</a> in 1954. This system is based on two characteristics of type: visual traits and the historical period of its appearance. It included nine categories that were later expanded to 11 by ATypI.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/vox-atypI-classification-system.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/vox-atypI-classification-system.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/vox-atypI-classification-system.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/vox-atypI-classification-system.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/vox-atypI-classification-system.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/vox-atypI-classification-system.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/vox-atypI-classification-system.jpg"
			
			sizes="100vw"
			alt="Vox-ATypI Classification system"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Vox-ATypI Classification system. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/vox-atypI-classification-system.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>However, typography has developed dramatically, and this system does not reflect modern type design, as it simply ignores a big part of contemporary typefaces. Most modern typefaces tend to have a mix of characteristics from different historical periods and refer to several categories. <a href="https://atypi.org/2021/04/27/atypi-de-adopted-the-vox-atypi-typeface-classification-system/">The endorsement of this system was withdrawn in 2021</a>, and, at the current moment, the association is working on a new system that would meet needs of modern typographers.</p>

<p>The Vox system might be useful for the exploration of type design history and research if you want to dive deep into this theme. However, for the daily use of a product designer, <strong>classification according to visual characteristics rather than historical periods might be more helpful</strong>. The division into four abstract meta-groups, based on the Vox system with some <a href="https://www.fonts.com/content/learning/fontology/level-1/type-anatomy/type-classifications">additions from modern typeface design</a>, will help you to classify typefaces clearly enough.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/classification.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="418"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/classification.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/classification.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/classification.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/classification.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/classification.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/classification.jpg"
			
			sizes="100vw"
			alt="Classification system by Allan Haley"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Classification system by Allan Haley. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/classification.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Note</strong>: <em>If you’d like to dig further, you may want to check <a href="http://www.designhistory.org/Type_milestones_pages/TypeClassifications.html">other classification systems</a>.</em></p>

<h3 id="typeface-proportions">Typeface Proportions</h3>

<p>Typefaces fall under two headings: <strong>proportional</strong> or <strong>monospaced</strong>, according to the ratio of proportions within the font.</p>

<p>Proportional types have varying widths of letters according to tradition, rules, and the ideas of their designers.</p>

<p>Monospaced fonts, in contrast, comprise characters of equal width. Design of the glyphs in monospaced typeface may vary: wide characters, such as <strong>m</strong> or <strong>w</strong>, may have narrow proportions to fit the width. Such thin letters as <strong>i</strong> or <strong>l</strong> may have a lot of empty space around or long serifs to fill this space. In any case, the width of each letter, including its space around, will be equal.</p>

<p>Proportional typefaces are natural and traditionally used for daily needs. <strong>Monospaced fonts are usually used in specific cases</strong> when it is essential to set text in accurate columns with each symbol below the other, such as tables with numerals, sales checks, programming code, and so on.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-proportional-monospaced-fonts.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-proportional-monospaced-fonts.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-proportional-monospaced-fonts.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-proportional-monospaced-fonts.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-proportional-monospaced-fonts.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-proportional-monospaced-fonts.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-proportional-monospaced-fonts.jpg"
			
			sizes="100vw"
			alt="Comparison of proportional and monospaced fonts"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Comparison of proportional and monospaced fonts. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-proportional-monospaced-fonts.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<h3 id="characteristics">Characteristics</h3>

<p>An essential measurement we constantly work with is the size of a typeface or its <strong>x-height</strong>. It’s the height of the actual letter in lowercase from the baseline to the mean line that equals character x. <strong>Capital height</strong> refers to the size of uppercase letters. <strong>Small caps</strong> are the characters whose height is between lowercase and caps. They are a great instrument for particular cases.</p>

<p><strong>Ascenders and descenders</strong> are the elements that go above the mean line and beyond the baseline. The long stem in <strong>h</strong> is an ascender, and the falling tail in <strong>y</strong> is a descender.</p>

<p><strong>A counter</strong> is an enclosed space inside a letter. For example, in <strong>o’s</strong> or <strong>q’s,</strong> the white inner space is a counter.</p>

<p><strong>Serifs</strong> are short strokes at the end of stems that differentiate Serif typefaces from Sans Serifs.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/visualized-font-parameters.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="458"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/visualized-font-parameters.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/visualized-font-parameters.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/visualized-font-parameters.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/visualized-font-parameters.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/visualized-font-parameters.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/visualized-font-parameters.jpg"
			
			sizes="100vw"
			alt="Visualized font parameters"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Visualized font parameters. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/visualized-font-parameters.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>An aperture</strong> describes to what extent symbols are open. A large aperture means that such letters as <strong>c</strong> or <strong>s</strong> are open and have a lot of space between their strokes. When these symbols are tight and closed, the aperture is small. This characteristic specifies legibility: a large aperture helps distinguish similar letters in small sizes, such as <strong>c</strong> and <strong>o</strong>.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/aperture-examples.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="671"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/aperture-examples.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/aperture-examples.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/aperture-examples.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/aperture-examples.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/aperture-examples.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/aperture-examples.jpg"
			
			sizes="100vw"
			alt="Aperture examples"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Aperture examples. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/aperture-examples.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Contrast</strong> is a difference between stroke thickness in vertical and horizontal stems.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/contrast-examples.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="458"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/contrast-examples.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/contrast-examples.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/contrast-examples.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/contrast-examples.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/contrast-examples.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/contrast-examples.jpg"
			
			sizes="100vw"
			alt="Contrast examples"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Contrast examples. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/contrast-examples.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>These terms are basic but essential for understanding how the characteristics of a typeface affect its legibility. If you want to dig into this word, check out the <a href="https://www.monotype.com/resources/studio/typography-terms">Monotype terms dictionary</a>.</p>

<div class="partners__lead-place"></div>

<h2 id="step-4-define-the-typeface-s-purpose">Step 4: Define The Typeface’s Purpose</h2>

<p>All typefaces may be divided into “display” (or “headline”) and “text” groups. However, there are existing cases when typeface works well both as text and display. (For more information, check “<a href="https://www.fonts.com/content/learning/fontology/level-1/type-anatomy/text-v-display">Text v. Display</a>” and “<a href="https://www.fonts.com/content/learning/fontology/level-2/making-type-choices/selecting-display-type-getting-started">Selecting Display Type: Getting Started</a>.”) Both these sides have their character and tone of voice, but they’re meant to be used in different contexts and situations.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/scale-typefaces.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="458"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/scale-typefaces.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/scale-typefaces.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/scale-typefaces.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/scale-typefaces.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/scale-typefaces.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/scale-typefaces.jpg"
			
			sizes="100vw"
			alt="Scale of typefaces"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Scale of typefaces. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/scale-typefaces.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Display fonts are better suited for headings, accents, and other cases for large font-size texts.</strong> They often have tighter spacing and sophisticated shapes that fade and may cause visual noise in small sizes. But it never hurts to consider the circumstances of use. Users might need more time to recognize a display font with complicated shapes, even in a large size.</p>

<p>High contrast is also a font characteristic of the display role and long ascenders and descenders.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/differences-between-text-display-fonts.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/differences-between-text-display-fonts.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/differences-between-text-display-fonts.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/differences-between-text-display-fonts.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/differences-between-text-display-fonts.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/differences-between-text-display-fonts.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/differences-between-text-display-fonts.jpg"
			
			sizes="100vw"
			alt="Differences between text and display fonts from the same font family"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Differences between text and display fonts from the same font family. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/differences-between-text-display-fonts.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>Alternatively, body text fonts have a simplified appearance and a high level of legibility in small sizes. <strong>When choosing a typeface for a body text, go for one with low or no contrast.</strong> In this case, high contrast will affect readability: thin strokes will cause visual vibration and negatively influence readability. Large aperture and open shapes are also a good choice as they help keep similar letters distinct, such as <strong>c</strong> and <strong>o</strong>.</p>

<p>Different graphics in similar letters, such as <strong>i</strong>, <strong>l</strong>, and <strong>I</strong>, help perceive letters, especially without context (when used in tickers, codes, sets of symbols, and so on). Most text fonts have enlarged x-height and counters, a slight difference in heights between lowercase and caps, and short ascenders/descenders. Thus, it saves vertical space for lengthy texts and ensures their legibility.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-font-families-same-point-size.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-font-families-same-point-size.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-font-families-same-point-size.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-font-families-same-point-size.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-font-families-same-point-size.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-font-families-same-point-size.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-font-families-same-point-size.jpg"
			
			sizes="100vw"
			alt="Comparison of font families in the same point size"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Comparison of font families in the same point size. (Image credit: Daria Karpenko) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/comparison-font-families-same-point-size.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>If you have plenty of data and need to save horizontal space, a font with compact proportions may be a suitable solution. But avoid overly narrow fonts and consider a font size because you might need to enlarge it a little and add positive tracking, i.e., increased letter spacing (for further information about tracking, don’t forget to check Part 2).</p>

<p>Body text in a nice, readable font often needs strong visual accents in your design. You can approach this necessity by differentiating fonts depending on the type of information. For example, you may use Serif for headers and Sans-Serif for body text. The ultimate working solution, though, is to pick a single Font family because it has the same shapes and proportions. For example, IBM Plex has a variety of styles and supports several writing systems.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/ibm.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="518"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/ibm.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/ibm.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/ibm.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/ibm.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/ibm.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/ibm.jpg"
			
			sizes="100vw"
			alt="IBM Plex font family"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      IBM Plex font family. (Image source: <a href='https://www.ibm.com/plex/'>www.ibm.com</a>) (<a href='https://files.smashing.media/articles/choose-typefaces-fintech-products-guide-part1/ibm.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>A typeface name itself can tell you about its purpose. Terms “Text,” “Display,” “Compact,” and “Caption” in the font’s name will help you make the right choice.</p>

<p>In my projects, I  usually use Sans-Serif fonts with low contrast for practical reasons. Sans Serif doesn’t have a bright appearance or small details. Consequently, it draws little attention to itself and reduces visual noise, making the text easier to read. As a result, the user quickly receives, understands, and processes information.</p>

<h2 id="prepare-for-part-2">Prepare For Part 2!</h2>

<p>This article reviewed the key points to consider when choosing typefaces. We also reviewed all font parameters and started investigating how to choose the most suitable font for various scenarios.</p>

<p>The next part will be all about applying the fonts we chose. We’ll discuss how to work with texts and tables and what to pay attention to when handling special characters.</p>

<p>Another major topic will be readability improvement through the length of text lines, line spacing, letter spacing, and tracking.</p>

<p>We’ll also touch upon the topic of color contrast. It goes hand in hand with caring for users with all kinds of needs and work conditions.</p>

<p>Stay tuned!</p>

<h3 id="further-reading-on-smashingmag">Further Reading On SmashingMag</h3>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2022/06/measuring-performance-typefaces-users-part1/">Measuring The Performance Of Typefaces For Users (Part 1)</a>,” Thomas Bohm</li>
<li>“<a href="https://www.smashingmagazine.com/2022/10/typographic-hierarchies/">Typographic Hierarchies</a>,” Alma Hoffmann</li>
<li>“<a href="https://www.smashingmagazine.com/2022/12/fluid-typography-predict-problem-users-zoom-in/">Fluid Typography: Predicting A Problem With Your User’s Zoom-In</a>,” Ruslan Yevych</li>
<li>“<a href="https://www.smashingmagazine.com/2023/08/designing-accessible-text-over-images-part1/">Designing Accessible Text Over Images: Best Practices, Techniques, And Resources (Part 1)</a>,” Hannah Milan</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Paul Scanlon</author><title>Getting Started With Neon Branching</title><link>https://www.smashingmagazine.com/2023/09/getting-started-with-neon-branching/</link><pubDate>Tue, 26 Sep 2023 10:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/09/getting-started-with-neon-branching/</guid><description>Branches are a really nice (and safe) way to configure or reconfigure your database without fear of screwing up the production database. Let’s take a closer look at how branching works with &lt;a href="https://bit.ly/46cEgX1">Neon&lt;/a>, and the good news is, you probably already know how it works!</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/09/getting-started-with-neon-branching/" />
              <title>Getting Started With Neon Branching</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Getting Started With Neon Branching</h1>
                  
                    
                    <address>Paul Scanlon</address>
                  
                  <time datetime="2023-09-26T10:00:00&#43;00:00" class="op-published">2023-09-26T10:00:00+00:00</time>
                  <time datetime="2023-09-26T10:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                <p>This article is sponsored by <b>Neon Tech</b></p>
                

<p>Branching off to make code changes is a tried and tested approach to software development, but why should database development be any different? Well, <a href="https://bit.ly/48wLK9q">branching with Neon</a> allows you to make changes to your database without affecting the production environment. If you’re familiar with <a href="https://git-scm.com/">Git</a>, you’ll feel right at home.</p>

<p>For demonstration purposes, and to explain how branching works, I’ll use a typical “contact us” form and make a “fictional” change.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/contact-us-form.png">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/contact-us-form.png 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/contact-us-form.png 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/contact-us-form.png 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/contact-us-form.png 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/contact-us-form.png 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/contact-us-form.png"
			
			sizes="100vw"
			alt="Contact Us form"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/contact-us-form.png'>Large preview</a>)
    </figcaption>
  
</figure>

<p>The form currently submits the following fields.</p>

<ul>
<li><code>name</code></li>
<li><code>email_address</code></li>
<li><code>company_website</code></li>
<li><code>company_size</code></li>
<li><code>message</code></li>
</ul>

<p>The form works by sending the form data using a client-side request to a <a href="https://vercel.com/features/edge-functions">Vercel Edge Function</a>, which in turn securely connects to a <a href="https://bit.ly/46cEgX1">Neon Serverless Postgres database</a>.</p>

<p>Here’s a snippet of the client-side fetch request.</p>

<pre><code class="language-javascript">const handleSubmit = async (event) => {
  event.preventDefault();

  const data = Object.fromEntries(
    new FormData(event.currentTarget).entries()
  );

  try {
    await fetch('/api/submit', {
      method: 'POST',
      body: JSON.stringify({ data }),
    });
  } catch (error) {
    console.error(error);
  }
};
</code></pre>

<p>And here’s a code snippet of the Edge Function that destructures the form values from the request body and <code>INSERT</code>s them into a table named <code>contact_us</code>.</p>

<pre><code class="language-javascript">import { neon } from '@neondatabase/serverless';

export default async function handler(req) {
  const {
    data: { name, email_address, company_website, company_size, message },
  } = await new Response(req.body).json();

  const sql = neon(process.env.DATABASE_URL);

  try {
    await sql`INSERT INTO contact_us 
        (name, email_address, company_website, company_size, message)
            VALUES(
      ${name},
      ${email_address},
      ${company_website},
      ${company_size},
      ${message}
        );`;

    return Response.json({
      message: 'A Ok!',
    });
  } catch (error) {
    return Response.json({
      message: 'Error',
    });
  }
}

export const config = {
  runtime: 'edge',
};
</code></pre>

<p>The change I’d like to make will happen “behind the scenes”, and along with information entered by the user, I also want to capture and store the geographical location of where in the world the form was submitted.</p>

<p>To do this I’m going to use Vercel’s <a href="https://vercel.com/docs/functions/edge-functions/vercel-edge-package#geolocation">geolocation helper function</a> from the <a href="https://vercel.com/docs/functions/edge-functions/vercel-edge-package#">@vercel/edge</a> package. The changes I’ll be making will affect both the Edge Function and the database table schema.</p>

<p>I don’t want to change the table schema on the live production database until I’ve tested it all works correctly, and thanks to branching, I don’t have to.</p>

<p>Here’s how I’d go about making a change of this nature.</p>

<h2 id="creating-a-branch-with-neon">Creating a branch with Neon</h2>

<p>Neon has a super cool browser console (just look at it! 😍), and all database changes can be made, and tested in the browser, no messing around with a dweeby-looking terminal window!</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/1-before-the-branch.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/1-before-the-branch.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/1-before-the-branch.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/1-before-the-branch.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/1-before-the-branch.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/1-before-the-branch.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/1-before-the-branch.jpg"
			
			sizes="100vw"
			alt="Before the branch"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/1-before-the-branch.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>The project is called <code>branching-sample</code>.</li>
<li>The primary branch name is <code>main</code>.</li>
<li>To create a branch, click this button.</li>
</ol>

<p>Clicking “Create branch” will take you to the next screen where I’ll configure the new branch.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/2-create-branch.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/2-create-branch.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/2-create-branch.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/2-create-branch.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/2-create-branch.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/2-create-branch.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/2-create-branch.jpg"
			
			sizes="100vw"
			alt="Create branch"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/2-create-branch.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>This will be the name of the new branch. Typically I’ll name the branch the same as the Git branch. (I’ll show you that shortly).</li>
<li>This is the parent branch that I want to “branch off” from. Normally it’s always going to be main, but in some cases, I might branch off from another branch.</li>

<li><p>These are the branch configuration options. For this demonstration, I’ll be branching using the <strong>Head</strong> option. There are a number of reasons why branching from a specific point in <strong>Time</strong>, or <strong>LSN</strong> are more suitable. E.g, In cases where you might be performing a backup, or debugging an issue and want to see “when things went wrong”.</p>

<ol>
<li><strong>Head</strong>: Creates a branch with data up to the current point in time.</li>
<li><strong>Time</strong>: Creates a branch with data up to the specified date and time.</li>
<li><strong>LSN</strong>:  Creates a branch with data up to the specified Log Sequence Number (LSN)</li>
</ol></li>

<li><p>In order to test the changes I’ll be making in the Edge Function (which I’ll explain in a moment), I’ll want to ensure I’m inserting data correctly. By creating a compute endpoint with the branch, I can do this without worrying that I’ll be messing up the production database!</p></li>

<li><p>A button that will create the new branch</p></li>
</ol>

<p>Clicking “Create the branch” will take you to the next screen.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/3-new-endpoint.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/3-new-endpoint.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/3-new-endpoint.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/3-new-endpoint.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/3-new-endpoint.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/3-new-endpoint.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/3-new-endpoint.jpg"
			
			sizes="100vw"
			alt="New endpoint"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/3-new-endpoint.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>This is where things get really, really cool!</p>

<ol>
<li>This is a new connection string for an entirely new database, and it was set up almost instantly and contains “real” data! A key point to communicate is that any data pushed to this branch <strong>won’t</strong> appear in the production environment, but this “copy” of the database will be identical to the production database, in line with where you branched off from, in my case, Head.</li>
<li>The copy button allows you to quickly copy the connection string.</li>
</ol>

<h2 id="add-the-branch-connection-string-to-your-local-development-environment">Add the branch connection string to your local development environment.</h2>

<p>Using the handy little “copy” button, I can copy the new connection string and add it to my <code>.env</code> file.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/4-env-vars.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/4-env-vars.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/4-env-vars.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/4-env-vars.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/4-env-vars.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/4-env-vars.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/4-env-vars.jpg"
			
			sizes="100vw"
			alt="Env vars"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/4-env-vars.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>This is just my preferred approach of course but, in my <code>.env</code> file, I comment out the production database connection string, and add a new variable using the same name of <code>DATABASE_URL</code>. I then add a comment above it with the name of the branch I used in the Neon console. And for what it’s worth, my Git branch is also named the same way.</li>
</ol>

<p>I’ve found this to be super helpful when I have multiple branches on the go at the same time. That one little comment above the connection string helps me identify which branch it relates to in the Neon console.</p>

<h2 id="switch-branches-in-the-neon-console">Switch branches in the Neon console</h2>

<p>Before going too much further I like to double check I’m viewing the correct branch in the Neon console. If you’ve followed the steps above you should be able to see your new branch when selecting “Branches” from the navigation.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/5-branches-overview.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/5-branches-overview.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/5-branches-overview.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/5-branches-overview.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/5-branches-overview.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/5-branches-overview.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/5-branches-overview.jpg"
			
			sizes="100vw"
			alt="Branches Overview"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/5-branches-overview.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>Yep, this is the new branch I created.</li>
</ol>

<p>Clicking the branch name will take you to the next screen.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/6-branch.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/6-branch.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/6-branch.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/6-branch.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/6-branch.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/6-branch.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/6-branch.jpg"
			
			sizes="100vw"
			alt="Branch"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/6-branch.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>From the SQL Editor, you can also switch between branches which makes it easy to run queries against different branches.</li>
</ol>

<h2 id="alter-the-database-table-schema">Alter the database table schema</h2>

<p>Before making any changes to the code I prepare the database and test it all works by running SQL commands directly in Neon’s SQL Editor.</p>

<h3 id="show-the-current-table-schema">Show the current table schema</h3>

<p>To work out what the current schema for the <code>contact_us</code> table looks like, I can navigate to “Tables” in the navigation and see the schema for the table.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/7-schema-before.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/7-schema-before.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/7-schema-before.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/7-schema-before.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/7-schema-before.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/7-schema-before.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/7-schema-before.jpg"
			
			sizes="100vw"
			alt="Schema before"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/7-schema-before.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>Showing the branch you’re currently on.</li>
<li>The schema for the <code>contact_us</code> table.</li>
</ol>

<p>I know the change I want to make will require that I add two new columns which will store geolocation data. The two new column names will be as follows.</p>

<ol>
<li>country_code</li>
<li>city</li>
</ol>

<h3 id="alter-the-table">ALTER the table</h3>

<p>To add the new columns I use the following SQL command.</p>

<pre><code class="language-sql">ALTER TABLE contact_us 
ADD COLUMN country_code VARCHAR,
ADD COLUMN city VARCHAR;
</code></pre>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/8-alter.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/8-alter.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/8-alter.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/8-alter.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/8-alter.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/8-alter.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/8-alter.jpg"
			
			sizes="100vw"
			alt="Alter"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/8-alter.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>Using the <code>ALTER</code> <code>TABLE</code> command I’m adding both the above-named columns and giving them a data type of <code>VARCHAR</code>.</li>
</ol>

<p>To double-check check the changes were made correctly I can head back over to “Tables” and take a look at the table schema again.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/9-schema-after.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/9-schema-after.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/9-schema-after.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/9-schema-after.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/9-schema-after.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/9-schema-after.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/9-schema-after.jpg"
			
			sizes="100vw"
			alt="Schema after"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/9-schema-after.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>Showing the branch you’re currently on.</li>
<li>The <code>city</code> and <code>country_code</code> columns have been added to the schema for the <code>contact_us</code> table.</li>
</ol>

<p>Now that I know the table is configured correctly, I’ll head back to the “SQL Editor” and run a quick <code>INSERT</code> to check there are no errors.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/10-test-insert.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/10-test-insert.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/10-test-insert.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/10-test-insert.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/10-test-insert.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/10-test-insert.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/10-test-insert.jpg"
			
			sizes="100vw"
			alt="Test insert"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/10-test-insert.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li><code>INSERT</code> statement to add a row which includes values for the new <code>country_code</code> and <code>city</code> column.</li>
<li>Confirmation the request was successful.</li>
</ol>

<p>If I <code>SELECT * FROM contact_us</code>, I’ll see the row I added will contain the <code>country_code</code> and <code>city</code> columns.</p>














<figure class="
  
    break-out article__image
  
  
  ">
  
    <a href="https://files.smashing.media/articles/neon-branching/11-select-all-after.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="500"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/11-select-all-after.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/neon-branching/11-select-all-after.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/neon-branching/11-select-all-after.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/neon-branching/11-select-all-after.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/neon-branching/11-select-all-after.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/neon-branching/11-select-all-after.jpg"
			
			sizes="100vw"
			alt="Select all after"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      (<a href='https://files.smashing.media/articles/neon-branching/11-select-all-after.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<ol>
<li>A new row has been added with the correct values for <code>country_code</code> and <code>city</code>.</li>
</ol>

<p>This test data will only be added to the branch, not the production environment, so you can safely run as many tests as you like without polluting the “real” data.</p>

<p>With the change confirmed to be working, I can now switch back to the <code>main</code> branch, and run the <code>ALTER</code> command from earlier.</p>

<p><strong>This will apply the changes to the production database!</strong></p>

<pre><code class="language-sql">ALTER TABLE contact_us 
ADD COLUMN country_code VARCHAR,
ADD COLUMN city VARCHAR;
</code></pre>

<p>I can double, double check this worked by going to “Tables” again in the console. If all is ok, I can safely delete the development branch: <code>feat/geolocation-data</code> and move on to making the required changes to my Edge Function 🎉</p>

<h2 id="install-vercel-edge">Install @vercel/edge</h2>

<p>The values I’ll be adding to the <code>INSERT</code> statement can be extracted from incoming requests to an Edge Function. To access these values I&rsquo;ll use the <a href="https://vercel.com/docs/functions/edge-functions/vercel-edge-package#geolocation">geolocation</a> helper function from the <code>@vercel/edge package</code>.</p>

<p>To use this package, I’ll first need to install it.</p>

<pre><code class="language-bash">npm install @vercel/edge
</code></pre>

<p>I can then use it in my Edge Function. Here’s a diff of the change. You can <a href="https://github.com/PaulieScanlon/neon-branching-sample/pull/1/files">see the full diff for the PR on my GitHub here</a>.</p>

<pre><code class="language-diff">import { neon } from '@neondatabase/serverless';
+ import { geolocation } from '@vercel/edge';

export default async function handler(req) {
  const {
    data: { name, email_address, company_website, company_size, message },
  } = await new Response(req.body).json();

+  const { country, city } = geolocation(req);

  const sql = neon(process.env.DATABASE_URL);

  try {
    await sql`INSERT INTO contact_us (
        name,
        email_address,
        company_website,
        company_size,
        message,
+       country_code,
+       city
       )
     VALUES(
       ${name},
       ${email_address},
       ${company_website},
       ${company_size},
       ${message},
+      ${country},
+      ${city}
      );
     `;

    return Response.json({
      message: 'A Ok!',
    });
  } catch (error) {
    return Response.json({
      message: 'Error',
    });
  }
}

export const config = {
  runtime: 'edge',
};
</code></pre>

<p>One snag with this package when testing locally is, both the <code>country</code> and <code>city</code> will be <code>null</code>. The <code>geolocation</code> function will only return actual values when the Edge Function has been deployed. ☝️</p>

<p>And that’s it, brrrrranches!</p>

<p>Branches are a really nice (and safe) way to configure or reconfigure your database without fear of screwing up the production database, and in my experience, branches can really help speed up development time, and it doesn’t matter how many test  <code>INSERT</code>s I run, test data will always remain on the branch and will never affect the production environment.</p>

<p>If you’d like to try Neon today, pop over here and sign up: <a href="https://bit.ly/46cEgX1">neon.tech</a>, you might also want to sneak a peak at our getting started guides:</p>

<ul>
<li><a href="https://bit.ly/46cEgX1">Sign up</a></li>
<li><a href="https://bit.ly/3Ry0gaY">Create your first project</a></li>
<li><a href="https://bit.ly/3LH6KR8">Query with Neon’s SQL editor</a></li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(il)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Geoff Graham</author><title>Writing CSS In 2023: Is It Any Different Than A Few Years Ago?</title><link>https://www.smashingmagazine.com/2023/07/writing-css-2023/</link><pubDate>Fri, 14 Jul 2023 12:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/07/writing-css-2023/</guid><description>CSS is evolving faster than ever. With all of the new features that are now available &amp;mdash; and forthcoming &amp;mdash; since we got Flexbox and Grid years ago, the way we write CSS is evolving, too. In this article, Geoff Graham shares which features have had the most influence on his current approaches to CSS, as well as those that have not (at least yet).</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/07/writing-css-2023/" />
              <title>Writing CSS In 2023: Is It Any Different Than A Few Years Ago?</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>Writing CSS In 2023: Is It Any Different Than A Few Years Ago?</h1>
                  
                    
                    <address>Geoff Graham</address>
                  
                  <time datetime="2023-07-14T12:00:00&#43;00:00" class="op-published">2023-07-14T12:00:00+00:00</time>
                  <time datetime="2023-07-14T12:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>Is there anything in the front-end world that’s evolving faster than CSS these days? After what seemed like a long lull following blockbusters Flexbox and Grid, watching CSS release new features over the past few years has been more like watching a wild game of rugby on the telly. <a href="https://css-tricks.com/css-is-going-gosh-darned-hog-wild-i-tell-ya-what/">The pace is exciting</a>, if not <a href="https://css-tricks.com/is-there-too-much-css-now/">overwhelming at the same time</a>.</p>

<p>But have all these bells and whistles actually changed the way you write CSS? New features have certainly influenced the way I write CSS today, but perhaps not quite as radically as I would have expected.</p>

<p>And while I’ve seen no shortage of blog posts with high-level examples and creative experiments of all these newfangled things that are available to us, I have yet to see practical applications make their way into production or everyday use. I remember when Sass started finding its way into CSS tutorials, often used as the go-to syntax for code examples and snippets. I’m not exactly seeing that same organic adoption happen with, say, <a href="https://www.smashingmagazine.com/2018/03/understanding-logical-properties-values/">logical properties</a>, and we’ve had <a href="https://caniuse.com/css-logical-props">full browser support for them for about two years now</a>.</p>

<p>This isn’t to rag on anyone or anything. I, for one, am stoked beyond all heck about how CSS is evolving. Many of the latest features are ones <a href="https://css-tricks.com/2019-css-wishlist/">we have craved for many, many years</a>. And indeed, there are several of them finding their way into my CSS. Again, not drastically, but enough that I’m enjoying writing CSS more now than ever.</p>

<p>Let me count the ways.</p>

<h2 id="more-and-more-container-queries">More And More Container Queries</h2>

<p>I’ll say it: I’ve never loved writing media queries for responsive layouts. Content responds differently to the width of the viewport depending on the component it’s in. And balancing the content in one component has always been a juggling act with balancing the content in other components, adding up to a mess of media queries at seemingly arbitrary breakpoints. Nesting media queries inside a selector with Sass has made it tolerable, but not to the extent that I “enjoyed” writing new queries and modifying existing ones each time a new design with UI changes is handed to me.</p>

<p>Container queries are the right answer for me. Now I can scope child elements to a parent container and rely on the container’s size for defining where the layout shifts without paying any mind to other surrounding components.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aThe%20other%20thing%20I%20like%20about%20container%20queries%20is%20that%20they%20feel%20very%20CSS-y.%20Defining%20a%20container%20directly%20on%20a%20selector%20matches%20a%20natural%20property-value%20syntax%20and%20helps%20me%20avoid%20having%20to%20figure%20out%20math%20upfront%20to%20determine%20breakpoints.%0a&url=https://smashingmagazine.com%2f2023%2f07%2fwriting-css-2023%2f">
      
The other thing I like about container queries is that they feel very CSS-y. Defining a container directly on a selector matches a natural property-value syntax and helps me avoid having to figure out math upfront to determine breakpoints.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<pre><code class="language-css">.parent {
  container-type: inline-size;
}

@container (min-width: 600px) {
  .child {
    align-self: center;
  }
}
</code></pre>

<p>I still use media queries for responsive layouts but tend to reserve them for “bigger” layouts that are made up of assembled containers. Breakpoints are more predictable (and can actually more explicitly target specific devices) when there’s no need to consider what is happening inside each individual container.</p>

<h3 id="learn-about-container-queries">Learn About Container Queries</h3>

<ul>
<li><a href="https://drafts.csswg.org/css-contain-3/">CSS Containment Module Level 3</a> (W3C)</li>
<li>“<a href="https://www.smashingmagazine.com/2021/05/complete-guide-css-container-queries/">A Primer On CSS Container Queries</a>”, Stephanie Eckles</li>
<li>“<a href="https://www.smashingmagazine.com/2021/05/css-container-queries-use-cases-migration-strategies/">CSS Container Queries: Use-Cases And Migration Strategies</a>”, Adrian Bece</li>
<li>“<a href="https://css-tricks.com/a-cornucopia-of-container-queries/">A Cornucopia of Container Queries</a>”, Geoff Graham

<br /></li>
</ul>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="https://www.smashingconf.com/online-workshops/">Smashing Workshops</a></strong> on <strong>front-end, design &amp; UX</strong>, with practical takeaways, live sessions, <strong>video recordings</strong> and a friendly Q&amp;A. With Brad Frost, Stéph Walter and <a href="https://smashingconf.com/online-workshops/workshops">so many others</a>.</p>
<a data-instant href="smashing-workshops" class="btn btn--green btn--large" style="">Jump to the workshops&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="smashing-workshops" class="feature-panel-image-link">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-scubadiving-panel.svg"
    alt="Feature Panel"
    width="257"
    height="355"
/>

</div>
</a>
</div>
</aside>
</div>

<h2 id="grouping-styles-in-layers">Grouping Styles In Layers</h2>

<p>I love this way of managing the cascade! Now, if I have a reset or some third-party CSS from a framework or whatever, I can wrap those in a cascade layer and chuck them at the bottom of a file so my own styles are front and center.</p>

<p>I have yet to ship anything using cascade layers, but I now reach for them for nearly every CodePen demo I make. The <a href="https://caniuse.com/css-cascade-layers">browser support is there</a>, so that’s no issue. It’s more that I still rely on Sass on projects for certain affordances, and maintaining styles in partialized files still feels nice to me, at least for that sort of work.</p>

<p>But in an isolated demo where all my styles are in one place, like CodePen? Yeah, all the cascade layers, please! Well, all I really need is one layer for the base styles since <strong>un-layered styles have higher specificity than layered ones</strong>. That leaves my demo-specific styles clean, uncluttered, and still able to override the base at the top, which makes it way more convenient to access them.</p>

<pre><code class="language-css">body {
  display: grid;
  gap: 3rem;
  place-items: center;
}

@layer base {
  body {
    font-size: 1.25rem;
    line-height: 1.35;
    padding: 3rem;
  }
}
</code></pre>

<h3 id="learn-more-about-cascade-layers">Learn More About Cascade Layers</h3>

<ul>
<li>“<a href="https://css-tricks.com/css-cascade-layers/">A Complete Guide to CSS Cascade Layers</a>”, Miriam Suzanne</li>
<li>“<a href="https://www.smashingmagazine.com/2022/01/introduction-css-cascade-layers/">Getting Started With CSS Cascade Layers</a>”, Stephanie Eckles</li>
<li><a href="https://www.w3.org/TR/css-cascade-5/#layering">CSS Cascading and Inheritance Level 5</a> (W3C)</li>
<li>“<a href="https://developer.chrome.com/blog/cascade-layers/">Cascade Layers Are Coming To Your Browser</a>”, Una Kravets</li>
</ul>

<h2 id="is-and-where"><code>:is()</code> And <code>:where()</code></h2>

<p>I definitely reach for these newer relational pseudo-selectors, but not really for the benefits of selecting elements conditionally based on relationships.</p>

<p>Instead, I use them most often for managing specificity. But unlike cascade layers, I actually use these in production.</p>

<p>Why? Because with <code>:is()</code>, specificity is determined not by the main selector but by the <em>most</em> specific selector in its argument list.</p>

<pre><code class="language-css">/&#42; Specificity: 0 1 1 &#42;/
:is(ol, .list, ul) li {}

/&#42; Specificity: 0 0 2 &#42;/
ol li {}
</code></pre>

<p>The <code>.list</code> selector gives the first ruleset a higher specificity score meaning it “beats” the second ruleset even though the first ruleset is higher in the cascade.</p>

<p>On the flip side, the specificity of <code>:where()</code> is a big ol’ score of zero, so it does not add to the overall score of whatever selector it’s on. It simply doesn’t matter at all what’s in its argument list. For the same reason I use <code>:is()</code> to add specificity, I use <code>:where()</code> to strip it out. I love keeping specificity generally low because I still want the cascade to operate with as little friction as possible, and <code>:where()</code> makes that possible, especially for defining global styles.</p>

<p>A perfect example is wrapping <code>:not()</code> inside <code>:where()</code> to prevent <code>:not()</code> from bumping up specificity:</p>

<pre><code class="language-css">/&#42; Specificity: 0 0 0 &#42;/
:where(:not(.some-element)) {}
</code></pre>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aTaken%20together,%20%60:is%28%29%60%20and%20%60:where%28%29%60%20not%20only%20help%20manage%20specificity%20but%20also%20take%20some%20cognitive%20load%20from%20%e2%80%9cnaming%e2%80%9d%20things.%0a&url=https://smashingmagazine.com%2f2023%2f07%2fwriting-css-2023%2f">
      
Taken together, `:is()` and `:where()` not only help manage specificity but also take some cognitive load from “naming” things.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>I’m one of those folks who still love the BEM syntax. But naming is one of the hardest things about it. I often find myself running out of names that help describe the function of an element and its relationship to elements around it. The specificity-wrangling powers of <code>:is()</code> and <code>:where()</code> means I can rely less on elaborate class names and more on element selectors instead.</p>

<h3 id="learn-more-about-is-and-where">Learn More About <code>:is()</code> And <code>:where()</code></h3>

<ul>
<li>“<a href="https://css-tricks.com/almanac/selectors/i/is/">CSS-Tricks Almanac: <code>:is()</code></a>”, Geoff Graham</li>
<li>“<a href="https://css-tricks.com/almanac/selectors/w/where/">CSS-Tricks Almanac: <code>:where()</code></a>”, Chris Coyier</li>
<li>“<a href="https://css-tricks.com/is-is-useful/">Is “is” Useful?</a>”, Chris Coyier</li>
<li>“<a href="https://css-tricks.com/using-the-specificity-of-where-as-a-css-reset/">Using The Specificity Of <code>:where()</code> As A CSS Reset</a>”, Mojtaba Seyedi</li>
</ul>

<h2 id="the-new-color-function-syntax">The New Color Function Syntax</h2>

<p>The updated syntax for color functions like <code>rgb()</code> and <code>hsl()</code> (and the evolving <code>oklch()</code> and <code>oklab()</code>) isn’t the sort of attention-grabbing headline that leads to <em>oo’s</em> and <em>aw’s</em>, but it sure does make it a lot better to define color values.</p>

<p>For one, I never have to reach for <code>rgba()</code> or <code>hsla()</code> when I need an alpha value. In fact, I always used those whether or not I needed alpha because I didn’t want to bother deciding which version to use.</p>

<pre><code class="language-css">color: hsl(50deg, 100%, 50%);

/&#42; Same &#42;/
color: hsla(50deg, 100%, 50% / 1)
</code></pre>

<p>Yes, writing the extra <code>a</code>, <code>/</code>, and <code>1</code> was worth the cost of not having to think about which function to use.</p>

<p>But the updated color syntax is <a href="https://slate.com/technology/2015/06/honey-badger-venom-resistance-biologists-discover-the-secret.html">like a honey badger</a>: it just doesn’t care. It doesn’t care about the extra <code>a</code> in the function name. It doesn’t even care about commas.</p>

<pre><code class="language-css">color: hsl(50deg 100% 50% / .5);
</code></pre>

<p>So, yeah. That’s definitely changed the way I write colors in CSS.</p>

<p>What I’m <em>really</em> excited to start using is the newer <code>oklch()</code> and <code>oklab()</code> color spaces <a href="https://caniuse.com/mdn-css_types_color_oklch">now that they have full browser support</a>!</p>

<h3 id="learn-more-about-css-color-4-features">Learn More About CSS Color 4 Features</h3>

<ul>
<li><a href="https://drafts.csswg.org/css-color/">CSS Color Module Level 4</a> (W3C)</li>
<li>“<a href="https://www.smashingmagazine.com/2021/11/guide-modern-css-colors/">A Guide To Modern CSS Colors With RGB, HSL, HWB, LAB And LCH</a>”, Michelle Barker</li>
<li>“<a href="https://www.smashingmagazine.com/2021/07/hsl-colors-css/">Using HSL Colors In CSS</a>”, Ahmad Shadeed</li>
<li>“<a href="https://css-tricks.com/new-css-color-features-preview/">A Whistle-Stop Tour Of 4 New CSS Color Features</a>”, Chris Coyier</li>
</ul>

<div class="partners__lead-place"></div>

<h2 id="sniffing-out-user-preferences">Sniffing Out User Preferences</h2>

<p>I think a lot of us were pretty stoked when we got media queries that respect a user’s display preferences, the key one being the user’s preferred color scheme for quickly creating dark and light interfaces.</p>

<pre><code class="language-css">:root {
  --bg-color: hsl(0deg 0% 100%);
  --text-color: hsl(0deg 0% 0%);
}

@media (prefers-color-scheme: dark) {
  :root {
    --bg-color: hsl(0deg 0% 0%);
    --text-color: hsl(0deg 0% 100%);
  }
}

body {
  background: var(--bg-color);
  color: var(--text-color);
}
</code></pre>

<p>But it’s the <code>prefers-reduced-motion</code> query that has changed my CSS the most. It’s the first thing I think about any time a project involves CSS animations and transitions. I love the idea that <a href="https://www.smashingmagazine.com/2021/10/respecting-users-motion-preferences/#reduced-motion-doesn-t-mean-no-motion">a reduced motion preference doesn’t mean nuking all animation</a>, so I’ll often use <code>prefers-reduced-motion</code> to slow everything down when that’s the preference. That means I have something like this (usually in a cascade layer for base styles):</p>

<pre><code class="language-css">@layer base {
  :root {
    --anim-duration: 1s;
  }

  /&#42; Reduced motion by default &#42;/
  body {
    animation-duration: --anim-duration;
    transition: --anim-duration;
  }

  /&#42; Opt into increased motion &#42;/
  @media screen and (prefers-reduced-motion: no-preference) {
    body {
      --anim-duration: .25s;
    }
  }
}
</code></pre>

<h3 id="learn-more-about-user-preference-queries">Learn More About User Preference Queries</h3>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2021/10/respecting-users-motion-preferences/">Respecting Users’ Motion Preferences</a>”, Michelle Barker</li>
<li>“<a href="https://www.smashingmagazine.com/2020/09/design-reduced-motion-sensitivities/">Designing With Reduced Motion For Motion Sensitivities</a>”, Val Head</li>
<li>“<a href="https://css-tricks.com/a-dry-approach-to-color-themes-in-css/">A DRY Approach To Color Themes In CSS</a>”, Christopher Kirk-Nielsen</li>
<li>“<a href="https://css-tricks.com/a-complete-guide-to-dark-mode-on-the-web/">A Complete Guide to Dark Mode on the Web</a>”,  Adhuham</li>
</ul>

<h2 id="defining-color-palettes">Defining Color Palettes</h2>

<p>I’ve used <a href="https://geoffgraham.me/naming-sass-color-variables/">variables for defining and assigning colors</a> ever since I adopted Sass and was thrilled when CSS custom properties came. I’d give generic names to the colors in a palette before passing them into variables with more functional names.</p>

<pre><code class="language-css">/&#42; Color Palette &#42;/
--red: #ff0000;
/&#42; etc. &#42;/

/&#42; Brand Colors &#42;/
--color-primary: var(--red);
/&#42; etc. &#42;/
</code></pre>

<p>I still do this, but now I will abstract things even further using color functions on projects with big palettes:</p>

<pre><code class="language-css">:root {
  /&#42; Primary Color HSL &#42;/
  --h: 21deg;
  --s: 100%;
  --l: 50%;
  
  --color-primary: hsl(var(--h) var(--s) var(--l) / 1);
}

.bg-color {
  background: var(--color-primary);
}

.bg-color--secondary {
  --h: 56deg;
  background: hsl(var(--h) var(--s) var(--l) / 1);
}
</code></pre>

<p>A little too abstract? Maybe. But for those projects where you might have ten different varieties of red, orange, yellow, and so on, it’s nice to have this level of fine-grained control to manipulate them. Perhaps there is more control with <a href="https://developer.mozilla.org/en-US/docs/Web/CSS/color_value/color-mix"><code>color-mix()</code></a> that I just haven’t explored yet.</p>

<h3 id="learn-more-about-defining-color-palettes">Learn More About Defining Color Palettes</h3>

<ul>
<li>“<a href="https://www.smashingmagazine.com/2022/06/simplify-color-palette-css-color-mix/">Simplify Your Color Palette With CSS Color-Mix()</a>”, Daniel Yuschick</li>
<li>“<a href="https://www.smashingmagazine.com/2020/08/application-color-schemes-css-custom-properties/">How To Configure Application Color Schemes With CSS Custom Properties</a>”,  Artur Basak</li>
<li>“<a href="https://chriscoyier.net/2023/01/26/relative-color-syntax-plzzzzz/">CSS Color Manipulation Functions, Please Save Us From The CSS Custom Property Gotcha</a>”, Chris Coyier</li>
</ul>

<div class="partners__lead-place"></div>

<h2 id="what-i-m-not-using">What I’m Not Using</h2>

<p>Huh, I guess I am writing CSS a bit differently than I used to! It just doesn’t feel like it, but that probably has to do with the fact that there are so many other new features I am <em>not</em> currently using. The number of new features I am using is much, much lower than the number of features I have yet to pick up, whether it’s because of browser support or because I just haven’t gotten to it yet.</p>

<h3 id="css-nesting">CSS Nesting</h3>

<p>I’m really looking forward to this because it just <em>might</em> be the tipping point where I completely drop Sass for vanilla CSS. <a href="https://caniuse.com/css-nesting">It’s waiting for Firefox to support it</a> at the time of this writing, so it could be right around the corner.</p>

<h3 id="style-queries">Style Queries</h3>

<p>I’ve made no secret that applying styles to elements based on the styles of other elements is something that <a href="https://css-tricks.com/early-days-of-container-style-queries/">I’m really interested in</a>. That might be more of an academic interest because specific use cases for style queries elude me. Maybe that will change <a href="https://caniuse.com/css-container-queries-style">as they gain browser support</a>, and we see a lot more blog posts where smart folks experiment with them.</p>

<h3 id="has"><code>:has()</code></h3>

<p>I’ll definitely use this when <a href="https://caniuse.com/css-has">Firefox supports it</a>. Until then, I’ve merely tinkered with it and have enjoyed how others have been experimenting with it. Without full support, though, it hasn’t changed the way I write CSS. I expect that it will, though, because how can having the ability to select a parent element based on the child it contains be a bad thing, right?</p>

<h3 id="dynamic-viewport-units">Dynamic Viewport Units</h3>

<p>I’ve started sprinkling these in my styles since they <a href="https://caniuse.com/viewport-unit-variants">gained wide support at the end of 2022</a>. Like style queries, I only see limited use cases &mdash; most notably when setting elements to full height on a mobile device. So, instead of using <code>height: 100vh</code>, I’m starting to write <code>height: 100dvh</code> more and more. I guess that has influenced how I write CSS, even if it’s subtle.</p>

<h3 id="media-query-range-syntax">Media Query Range Syntax</h3>

<p>Honestly, I just haven’t thought much about the fact that there’s a <a href="https://css-tricks.com/the-new-css-media-query-range-syntax/">nicer way to write responsive media queries on the viewport</a>. I’m aware of it but haven’t made it a part of my everyday CSS for no other reason than ignorance.</p>

<h3 id="oklch-oklab-color-spaces">OKLCH/OKLAB Color Spaces</h3>

<p><code>oklch()</code> will most definitely be my go-to color function. <a href="https://caniuse.com/mdn-css_types_color_oklch">It gained wide support in March of this year</a>, so I’ve only had a couple of months and no projects to use it. But given the time, I expect it will be the most widely used way to define colors in my CSS.</p>

<p>The only issue with it, I see, is that <code>oklch()</code> is incompatible with another color feature I’m excited about&hellip;</p>

<h3 id="color"><code>color()</code></h3>

<p>It’s <a href="https://caniuse.com/css-color-function">widely supported</a> now, as of May 2023! That’s just too new to make its way into my everyday CSS, but you can bet that it will. The ability to tap into any color space &mdash; be it sRGB, Display P3, or Rec2020 &mdash; is just so much nicer than having to reach for a specific color function, at least for colors in a color space with RGB channels (that’s why <code>color()</code> is <a href="https://developer.chrome.com/articles/high-definition-css-color-guide/#the-color-function">incompatible</a> with <code>oklch()</code> and other non-RGB color spaces).</p>

<pre><code class="language-css">--primary-color: color(display-p3 1 0.4 0);
</code></pre>

<p>I’m not in love with RGB values because they’re tough to understand, unlike, say, HSL. I’m sure I’ll still use <code>oklch()</code> or <code>hsl()</code> in most cases for that very reason. It’s a bummer we can’t do something like this:</p>

<pre><code class="language-css">/&#42; 👎 &#42;/
--primary-color: color(oklch 70% 0.222 41.29);
</code></pre>

<p>We have to do this instead:</p>

<pre><code class="language-css">/&#42; 👍 &#42;/
--primary-color: oklch(70% 0.222 41.29);
</code></pre>

<p>The confusing thing about that is it’s not like Display P3 has its own function like OKLCH:</p>

<pre><code class="language-css">/&#42; 👎 &#42;/
--primary-color: display-p3(1 0.434 0.088);
</code></pre>

<p>We’re forced to use <code>color()</code> to tap into Display P3. That’s at odds with OKLCH/OKLAB, where we’re forced to reach for those specific functions.</p>

<p>Maybe one day we’ll have a global <code>color()</code> function that supports them all! Until then, my CSS will use both <code>color()</code> and specific functions like <code>oklch()</code> and decide which is best for whatever I’m working on.</p>

<p>I’ll also toss <code>color-mix()</code> in this bucket, as it gained full support at the same time as <code>color()</code>. It’s not something I write regularly yet, but I’ll certainly play with it, likely for creating color palettes.</p>

<h3 id="honorable-mentions">Honorable Mentions</h3>

<p>It would be quite a feat to comment on every single new CSS feature that has shipped over the past five or so years. The main theme when it comes to which features I am <em>not</em> using in my day-to-day work is that they are simply too new or they lack browser support. That doesn’t mean I <em>won’t</em> use them (I likely will!), but for the time being, I’m merely keeping a side-eye on them or simply having a fun time dabbling in them.</p>

<p>Those include:</p>

<ul>
<li>Trigonometric functions,</li>
<li>Anchor position,</li>
<li>Scroll-linked animations,</li>
<li><code>initial-letter</code>,</li>
<li><code>&lt;selectmenu&gt;</code> and <code>&lt;popover&gt;</code>,</li>
<li>View transitions,</li>
<li>Scoped Styles.</li>
</ul>

<p>What about you? You must be writing CSS differently now than you were five years ago, right? Are you handling the cascade differently? Do you write more vanilla CSS than reaching for a preprocessor? How about typography, like managing line heights and scale? Tell me &mdash; or better yet, <em>show</em> me &mdash; how you’re CSS-ing these days.</p>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(yk, il)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item><item><author>Andy Budd</author><title>How To Become A Better Speaker At Conferences</title><link>https://www.smashingmagazine.com/2023/07/become-better-speaker-conferences/</link><pubDate>Tue, 11 Jul 2023 07:00:00 +0000</pubDate><guid>https://www.smashingmagazine.com/2023/07/become-better-speaker-conferences/</guid><description>During a ten-year run curating the &lt;a href="https://uxlondon.com/">UX London&lt;/a> and &lt;a href="https://leadingdesign.com/conferences">Leading Design&lt;/a> conferences, Andy Budd has watched thousands of presentations. This article outlines some of the things that make a potentially amazing presentation, as well as a few big gotchas. If you’ve ever wondered what it takes to get a speaking slot at a conference, this article is for you.</description><content:encoded><![CDATA[
          <html>
            <head>
              <meta charset="utf-8">
              <link rel="canonical" href="https://www.smashingmagazine.com/2023/07/become-better-speaker-conferences/" />
              <title>How To Become A Better Speaker At Conferences</title>
            </head>
            <body>
              <article>
                <header>
                  <h1>How To Become A Better Speaker At Conferences</h1>
                  
                    
                    <address>Andy Budd</address>
                  
                  <time datetime="2023-07-11T07:00:00&#43;00:00" class="op-published">2023-07-11T07:00:00+00:00</time>
                  <time datetime="2023-07-11T07:00:00&#43;00:00" class="op-modified">2026-02-09T03:03:08+00:00</time>
                </header>
                
                

<p>During my time curating the <a href="https://uxlondon.com/"><em>UX London</em></a> and <a href="https://leadingdesign.com/conferences"><em>Leading Design</em></a> events, I used to watch a few hundred presentations each year. I’d be looking at a range of things, including the speaker’s domain experience and credibility, their stage presence and ability to tell a good story, and whether their topic resonated with the current industry zeitgeist.</p>

<p>When you watch that many presentations, you start to notice patterns that can either contribute to an absolutely amazing talk or leave an audience feeling restless and disengaged. But before you even start worrying about a delivery, you need to <strong>secure yourself a spot on the stage</strong>. How? Follow me along, and let’s find out!</p>

<h2 id="choosing-what-to-speak-about">Choosing What To Speak About</h2>

<p>I think one of the biggest misunderstandings people have about public speaking is the belief that you need to come up with a <em>totally new</em> and <em>unique</em> concept &mdash; one that nobody has spoken about before. As such, potentially amazing speakers will self-limit because they don’t have “something new to share.” While discovering a brand new concept at a conference is always great, I can literally count the number of times this has happened to me on the one hand. This isn’t because people aren’t constantly exploring new approaches.</p>

<p>However, in our heavily connected world, <strong>ideas tend to spread faster than a typical conference planning cycle</strong>, and the type of people who attend conferences are likely to be taped into the industry zeitgeist already. So even if the curator does find somebody with a groundbreaking new idea, by the time they finally get on stage, they’ve likely already tweeted about it, blogged about it, and potentially spoken about it at several other events.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/become-better-speaker-conferences/1-audience-dconstruct-conference.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="533"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/1-audience-dconstruct-conference.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/become-better-speaker-conferences/1-audience-dconstruct-conference.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/become-better-speaker-conferences/1-audience-dconstruct-conference.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/become-better-speaker-conferences/1-audience-dconstruct-conference.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/become-better-speaker-conferences/1-audience-dconstruct-conference.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/1-audience-dconstruct-conference.jpg"
			
			sizes="100vw"
			alt="The photo shows the audience at the dConstruct conference, lots of seated people in the room, some of them with their laptops open; all are looking at the stage where the ‘dConstruct’ logo is displayed"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The audience at dConstruct conference. (<a href='https://files.smashing.media/articles/become-better-speaker-conferences/1-audience-dconstruct-conference.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>I think the need to create something unique comes from an understandable sense of insecurity.</p>

<blockquote>“Why would anybody want to listen to me unless I have something groundbreaking to share?”</blockquote>

<p>The answer is actually more mundane than you might think. It’s the <em>personal filter</em> you bring to the topic that counts. Let’s say you want to do a talk about <a href="https://www.whatmatters.com/faqs/okr-meaning-definition-example"> OKR’s</a> (Objectives and Key Results) or <a href="https://www.usability.gov/how-to-and-tools/methods/usability-testing.html">Usability Testing</a> &mdash; two topics which you might imagine have been “talked to death” over the years.</p>

<p>However, <strong>people don’t know the specific way you tackled these subjects</strong>, the challenges you personally faced, and the roadblocks you overcame. There’s a good chance that people in your audience will already have some awareness of these techniques. Still, there’s also a good chance that they’ve been facing their <em>own challenges</em> and want nothing more than to hear how you navigate your way around them, hopefully in an interesting and engaging manner.</p>

<p>Also, let’s not forget that there are <strong>new people entering our industry every day</strong>. There are so many techniques I’ve made the mistake of taking for granted, only to realize that the people I’m talking to have not only never practiced them before but might not have even come across them; or if they have, they might have only the scantest knowledge about them, gleaned from social media and a couple of poorly written opinion pieces.</p>

<p>In fact, I think our industry is starting to atrophy as techniques we once thought were core ten years ago barely get a mention these days. So just because you think a subject is obvious doesn’t mean everybody feels the same, and there isn’t room for new voices or perspectives on the subject.</p>

<p class="c-pre-sidenote--left">Another easy way to break into public speaking is to do some kind of **case study**. So think about an interesting project you did recently. What techniques did you use, what approach did you take, what problems did you encounter, and how did you go about solving them? The main benefit of a case study type talk is that you’ll know the subject extremely well, which also helps with the nerves (more on this later).</p>
<p class="c-sidenote c-sidenote--right">During the past few years, there were published <a href="https://www.smashingmagazine.com/category/case-studies/">many excellent, very detailed case studies</a> on Smashing Magazine &mdash; take a look at this list for some inspiration.</p>

<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container">

<aside class="feature-panel" style="">
<div class="feature-panel-left-col">

<div class="feature-panel-description"><p>Meet <strong><a data-instant href="https://www.smashingconf.com/online-workshops/">Smashing Workshops</a></strong> on <strong>front-end, design &amp; UX</strong>, with practical takeaways, live sessions, <strong>video recordings</strong> and a friendly Q&amp;A. With Brad Frost, Stéph Walter and <a href="https://smashingconf.com/online-workshops/workshops">so many others</a>.</p>
<a data-instant href="smashing-workshops" class="btn btn--green btn--large" style="">Jump to the workshops&nbsp;↬</a></div>
</div>
<div class="feature-panel-right-col"><a data-instant href="smashing-workshops" class="feature-panel-image-link">
<div class="feature-panel-image">
<img
    loading="lazy"
    decoding="async"
    class="feature-panel-image-img"
    src="/images/smashing-cat/cat-scubadiving-panel.svg"
    alt="Feature Panel"
    width="257"
    height="355"
/>

</div>
</a>
</div>
</aside>
</div>

<h2 id="invest-the-right-amount-of-time-doing-prep">Invest The Right Amount of Time Doing Prep</h2>

<p>Another thing people get wrong about public speaking is feeling the need to write a new talk every time. This also comes from insecurity (and maybe a little bit of ego as well). We feel like once our talk is out in the world, everybody will have seen it. However, the sad reality is that the vast majority of people won’t be rushing to view your talk when the video comes online, and even if they do, there’s a good chance they’ll only have taken in a fraction of what you said if they remember any of it at all.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/become-better-speaker-conferences/2-margaret-lee-leading-design-talk.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="534"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/2-margaret-lee-leading-design-talk.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/become-better-speaker-conferences/2-margaret-lee-leading-design-talk.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/become-better-speaker-conferences/2-margaret-lee-leading-design-talk.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/become-better-speaker-conferences/2-margaret-lee-leading-design-talk.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/become-better-speaker-conferences/2-margaret-lee-leading-design-talk.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/2-margaret-lee-leading-design-talk.jpg"
			
			sizes="100vw"
			alt="Margaret Lee is speaking (for the first time) at the Leading Design conference in 2016. She’s standing behind a lectern; a slide is projected on the screen next to her on the stage"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Margaret Lee using personal stories to great effect at her first Leading Design talk in 2016. (<a href='https://files.smashing.media/articles/become-better-speaker-conferences/2-margaret-lee-leading-design-talk.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>It’s also worth noting that <strong>talks are super context-sensitive</strong>. I remember watching a talk from former Adaptive Path founder Jeff Veen at least five times. I enjoyed every single outing because while the talk hadn’t changed, I had. I was in a different place in my career, having different conversations and struggling with different things. As such, the talk sparked whole new trains of thought, as well as reminded me of things I knew but had forgotten.</p>

<p>It should be mentioned that, like music or stand-up comedy, <strong>talks get better with practice</strong>. I generally find that it takes me three or four outings before the talk I’m giving really hits its stride. Only then have I learnt which parts resonate with the audience and which parts need more work; how to improve the structure and cadence, moving sections around for a better flow, and I’ve learnt the bits which people find funny (some international and some not), and how to use pacing and space to make the key ideas land. If you only give a talk once, you’ll be missing out on all this useful feedback and delivering something that’s, at best, 60% of what it could potentially be.</p>

<p>On a practical level, a 45-minute talk can take a <strong>surprisingly long time to put together</strong>. I reckon it takes me at least an hour of preparation for every minute of content. That’s at least a week’s worth of work, so throwing that away after a single outing is a huge waste. Of course, that’s not what people do. If the talk is largely disposable, they’ll put a lot less effort in, often writing their talk “the night before the event.”</p>

<p>Unless you’re some sort of wunderkind, this will result in a mediocre talk, a mediocre performance, and a low chance of being asked to come back and speak again. Sadly this is one of the reasons we see a lot of the same faces on the speaker circuit. They’re the ones who put the effort in, deliver a good performance, and are rewarded with more invites. Fortunately, the quality bar at most conferences is so low that putting a little extra time into your prep can pay plenty of dividends.</p>

<h2 id="nailing-the-delivery">Nailing The Delivery</h2>

<p>As well as 45 minutes being a lot of content to create, it’s also a lot of content to sit through. No matter how interesting the subject is, a monotone delivery will make it very hard for your audience to stay engaged. As such, <strong>nailing the delivery is key</strong>. One way to do this is to see public speaking for what it is &mdash; a performance &mdash; and as the performer, you have a number of tools at your disposal.</p>

<p>First of all, you can <strong>use your voice as an instrument</strong> and try varying things like speed, pitch, and volume. Want to get people excited? Use a fast and excitable tone. Want people to lean in and pay attention? Slow down and speak quietly. Varying the way you speak gives your talks texture and can help you hold people’s attention for longer.</p>

<p>Another thing you can use is the <strong>physical space</strong>. While most people (including myself) feel safe and comfortable behind the lectern, the best speakers use the entire stage to good effect, walking to the front of the stage to address the audience in a more human way or using different sides of the stage to indicate different timelines or parts of a conversation.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/become-better-speaker-conferences/3-scott-belsky-ux-london.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="533"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/3-scott-belsky-ux-london.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/become-better-speaker-conferences/3-scott-belsky-ux-london.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/become-better-speaker-conferences/3-scott-belsky-ux-london.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/become-better-speaker-conferences/3-scott-belsky-ux-london.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/become-better-speaker-conferences/3-scott-belsky-ux-london.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/3-scott-belsky-ux-london.jpg"
			
			sizes="100vw"
			alt="Scott Belsky speaking at the UX London conference. The ‘UX London’ logo in the form of cubes is arranged on the stage next to the speaker"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Scott Belsky using the whole stage at UX London. (<a href='https://files.smashing.media/articles/become-better-speaker-conferences/3-scott-belsky-ux-london.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aStorytelling%20is%20an%20art,%20so%20consider%20starting%20your%20talk%20in%20a%20way%20that%20grabs%20your%20audience%e2%80%99s%20attention.%0a&url=https://smashingmagazine.com%2f2023%2f07%2fbecome-better-speaker-conferences%2f">
      
Storytelling is an art, so consider starting your talk in a way that grabs your audience’s attention.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>This generally isn’t a 20-minute bio of who you are and why you deserve to be on the stage. One of the most interesting talks I ever saw started with one such lengthy bio causing a third of the audience to get up and walk out. I felt really bad for the speaker &mdash; who was visibly knocked &mdash; so I stuck with it, and I’m so glad I did! The talk turned out to be amazing once all the necessary cruft was removed.</p>

<blockquote>“When presenting at work or [at a conference or] anywhere else, never assume the audience has pledged their undivided attention. They have pledged maybe 60 seconds and will divide their attention as they see fit after that. Open accordingly.”<br /><br />&mdash; <a href="https://mastodon.social/@mikeindustries@macaw.social/110180890095623158">Mike Davidson</a></blockquote>

<p>A little trick I like to use is to start my talk in the middle of the story: “So all of a sudden, my air cut out. I was in a cave, underwater, in the pitch black, and with less than 20 seconds of air in my lungs.” Suddenly the whole audience will stop looking at their phones. “Wait, what?” they’ll think. What’s happening? Who is this person? Where are they? How did he get there? And what the hell does this have to do with design? You’ve suddenly created a whole series of open questions which the audience desperately wants to be closed, and you’ve just bought yourself five minutes of their undivided attention where you can start delivery.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/become-better-speaker-conferences/4-captivated-audience-ux-london-conference.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="533"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/4-captivated-audience-ux-london-conference.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/become-better-speaker-conferences/4-captivated-audience-ux-london-conference.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/become-better-speaker-conferences/4-captivated-audience-ux-london-conference.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/become-better-speaker-conferences/4-captivated-audience-ux-london-conference.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/become-better-speaker-conferences/4-captivated-audience-ux-london-conference.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/4-captivated-audience-ux-london-conference.jpg"
			
			sizes="100vw"
			alt="UX London conference. The room is full, and people are looking at the stage (the stage is off-screen) with apparently undivided attention. ‘UX London’ letters are projected at the far side wall in the room"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      The (captivated) audience at UX London conference. (<a href='https://files.smashing.media/articles/become-better-speaker-conferences/4-captivated-audience-ux-london-conference.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p><strong>Taking too long to get to the meat of the talk is a common problem</strong>. In fact, I regularly see speakers who have spent so long on the preamble that they end up rushing the truly helpful bits. One of the reasons folks get stuck like this is that they feel the need to bring everybody up to the same base level of knowledge before they jump into the good stuff.</p>

<p>Instead, it’s much better to <strong>assume a base level of knowledge</strong>. If the talk stretches your audience’s knowledge, that’s fine. If it goes over some people’s heads, it might encourage them to look stuff up after the event. However, if you find yourself teaching people the absolute basics, there’s a good chance the more experienced members of the audience will zone out, and capturing their interest will become that much harder later on.</p>

<p>When speakers don’t give themselves enough time to prepare a good narrative, it’s easy to fall back on tried and tested patterns. One of these is the “<a href="https://neilpatel.com/blog/listicle-content/">listicle talk</a>” where the speaker explains, “Here are twelve things I think are important, and I’m going to go through them one by one.” It’s a handy formula, but it makes people super-conscious of the time. (“Crikey, they’re still only at number five! I‘m not sure I’m going to make it through another seven of these points.”)</p>

<p>In a similar vein are the talks, which are little more than a series of bullet points that the speaker reads through. The problem is that the audience is likely to read through them much quicker than the speaker, so people basically know what you’re going to say in advance. As such, keep these sorts of lists in your speaker notes and pick some sort of title or image that illustrates the points you’re about to make instead.</p>

<div class="partners__lead-place"></div>

<h2 id="tame-the-nerves">Tame The Nerves</h2>

<p>Public speaking is unnatural for us, so everybody feels some level of stress. I have one friend who is an absolutely amazing speaker on stage &mdash; funny, charming, and confident &mdash; but an absolute wreck moments before. In fact, it’s fairly common before going on stage to think, “Why the hell am I doing this to myself?” only to come off the stage 45 or 60 minutes later thinking, “That was great. When can I do it again!”.</p>

<p>One way to minimize these nerves is to <strong>memorize the first five minutes</strong> of your talk. If you can go on the stage with the first five minutes in the bag, the nerves will quickly subside, and you’ll be able to ease into your presentation some more. This is another reason why starting with a story can be helpful, as they’re easy to remember and will give you a reasonable amount of creative license.</p>

<p>A sure way to tame the nerves is to feel <strong>super-prepared and practiced</strong>; as such, it’s worth reading your talk out loud a bunch of times before you deliver it to an audience. It’s amazing how often something sounds logical when you say it in your head, but it doesn’t quite flow properly when said out loud. Practicing in front of people is very helpful, so consider asking friends or colleagues if you could practice on them. Also, consider doing a few dry runs with a local group before getting on a bigger stage. The more you know your material, the less nervous you’ll feel.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/become-better-speaker-conferences/5-molly-nix-talk-ux-london.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="533"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/5-molly-nix-talk-ux-london.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/become-better-speaker-conferences/5-molly-nix-talk-ux-london.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/become-better-speaker-conferences/5-molly-nix-talk-ux-london.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/become-better-speaker-conferences/5-molly-nix-talk-ux-london.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/become-better-speaker-conferences/5-molly-nix-talk-ux-london.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/5-molly-nix-talk-ux-london.jpg"
			
			sizes="100vw"
			alt="Molly Nix is on the stage of UX London in 2019, speaking there for the first time. The stage is dark/black, with a violet color highlight behind the speaker"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Molly Nix giving a brilliantly practiced talk for the first time at UX London 2019. (<a href='https://files.smashing.media/articles/become-better-speaker-conferences/5-molly-nix-talk-ux-london.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>While some speakers like to brag about how little prep they’ve done or how little sleep they’ve got the night before, don’t get tricked into thinking that this is the standard approach. Often these folks are actually very nervous and are saying things like this in an attempt to preempt or excuse potential poor performance.</p>

<p>It reminds me of the kids at school who used to claim they didn’t study and revise the material and ended up getting a B-. They almost certainly did some revision, albeit probably not enough. But this posturing was actually a way for them to manage their own shortcomings. “I bet I could have gotten an A if I’d put some extra work in.” Instead, make sure you’re <strong>well prepared, well rested</strong>, and set yourself up for success.</p>

<p>It’s worth mentioning that <strong>most people get nervous during public speaking</strong>, even if they like to tell you otherwise. As such, nerves are something you just need to get better at managing. One way to do this is to re-frame “nerves” (which have negative connotations) to something more positive like “excitement.” That feeling of excitement you get before giving a talk can actually be a positive thing if you don’t let it get out of hand. It’s basically your body’s way of getting you ready to perform.</p>

<p>However, this excess energy can bleed out in some less helpful ways, such as the “speaker square dance.” This is where speakers either shift their weight from one foot to the other or take a step forwards, a step to the side, and a step back, like some sort of a caged zoo animal. Unfortunately, this constant shifting can feel very unsettling and distracting for the audience, so if you can, try to plant your feet firmly and just move with deliberate intent when you want to make a point.</p>

<p>It’s also great if you can try to minimize the <em>“ums”</em> and <em>“ahs.”</em> People generally do this to give themselves pause while they’re thinking about the next thing they want to say. However, it can come across as if you are a little unprepared. Instead, do take <em>actual breaks</em> between concepts and sentences. At first, it can feel a bit weird doing this on stage, but think of it as an aural whitespace, making it easier for your audience to take in one concept before transitioning on to the next.</p>

<p><strong>Note</strong>: <em>I feel comfortable calling these behaviors out as they’re both things I personally do, and I’m working on fixing them &mdash; with mixed results so far.</em></p>

<h2 id="avoid-the-clichés">Avoid The Clichés</h2>

<p>At least once during every conference I attend, a speaker will say something jokingly along the lines of “I’m the only one standing between you and tea/lunch/beer.” It’s meant as a wry apology, and the first time I heard it, I gave a gentle chuckle.</p>

<p>However, I’ve been at some conferences where <em>three speakers in a row</em> had made the same joke. Apart from a lack of originality, this also shows that the speakers haven’t actually been listening to the other talks, probably because they’ve been in their room or backstage, tweaking their slides. Sometimes this is necessary, but I always appreciate speakers who have been engaged with the content, <strong>make references to earlier talks</strong>, and don’t trot out the same old clichés as the previous speakers.</p>

<p><strong>Note</strong>: <em>I should also add that personally, I find the joke (“the only thing between you and beer”) by the last speaker of the day somewhat problematic, as it implies that people are here for the drink rather than the conference content, and because it also somewhat normalizes overconsumption.</em></p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/become-better-speaker-conferences/6-andy-budd-speaking-leading-design-conference.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			height="533"
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/6-andy-budd-speaking-leading-design-conference.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/become-better-speaker-conferences/6-andy-budd-speaking-leading-design-conference.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/become-better-speaker-conferences/6-andy-budd-speaking-leading-design-conference.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/become-better-speaker-conferences/6-andy-budd-speaking-leading-design-conference.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/become-better-speaker-conferences/6-andy-budd-speaking-leading-design-conference.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/6-andy-budd-speaking-leading-design-conference.jpg"
			
			sizes="100vw"
			alt="The author of this article (Andy Budd) is on stage, speaking at the Leading Design conference. The Leading Design logo is behind him"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Andy Budd speaking at Leading Design conference. (<a href='https://files.smashing.media/articles/become-better-speaker-conferences/6-andy-budd-speaking-leading-design-conference.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>One thing some speakers do in order to calm their nerves (and also to increase people’s engagement, as a side-effect) is through <strong>audience participation</strong>. If you get people from the audience interacting with each other for five minutes, it takes some of the pressure and focus off of you. It’s also five fewer minutes of content you need to prepare.</p>

<blockquote class="pull-quote">
  <p>
    <a class="pull-quote__link" aria-label="Share on Twitter" href="https://twitter.com/share?text=%0aHowever,%20I%20see%20audience%20participation%20go%20wrong%20far%20more%20often%20than%20it%20goes%20right.%20This%20happens%20especially%20in%20front%20of%20Brits%20and%20Northern%20Europeans%20who%20would%20rather%20curl%20up%20into%20a%20ball%20and%20die%20rather%20than%20risk%20the%20social%20awkwardness%20of%20talking%20to%20their%20neighbors.%0a&url=https://smashingmagazine.com%2f2023%2f07%2fbecome-better-speaker-conferences%2f">
      
However, I see audience participation go wrong far more often than it goes right. This happens especially in front of Brits and Northern Europeans who would rather curl up into a ball and die rather than risk the social awkwardness of talking to their neighbors.

    </a>
  </p>
  <div class="pull-quote__quotation">
    <div class="pull-quote__bg">
      <span class="pull-quote__symbol">“</span></div>
  </div>
</blockquote>

<p>I remember seeing one American speaker walk up the aisle at a European conference encouraging the audience to whoop and cheer while they high-fived everybody or at least <em>attempted</em> to high-five everybody. Although this sort of hype-building might have worked well in Vegas, the assembled audience of Northern Europeans found the whole episode deeply embarrassing, and the speaker never truly recovered for the rest of the talk.</p>

<p>And, on the opposite side of things, if you <em>do get</em> your audience interacting, it can be quite hard to get them <em>to stop</em> a few minutes later! I have seen far too many speakers asking people to introduce themselves to their neighbors, only to cut them off 30 or so seconds later. So if you have such an activity planned, make sure you leave enough time for it to become a meaningful connection, and have a strategy on how you’re going to bring people’s focus back to you.</p>

<p>Another (negative) thing I see a lot of speakers do is make jokes about how they didn’t write their talk till last night or didn’t get to bed till late because they were out drinking. While it’s good to appear to be vulnerable and human, if played wrong, the message you might actually be sending is that you don’t really care about the audience, so be careful.</p>

<div class="partners__lead-place"></div>

<h2 id="how-to-get-invited-back">How To Get Invited Back?</h2>

<p>Organizing conferences can be stressful work. You’re trying to coordinate with a bunch of different people with widely <strong>different workloads, communication styles</strong>, and response times. People are super quick to say “Yes!” to a speaking gig, but then they might go dark for months on end. This is really difficult if you’re trying to get enough information to launch your event site and start selling tickets. It’s even harder if you’re trying to organize things like travel and accommodation and you are seeing the price of everything going up.</p>

<p>As such, you can make conference organizers’ lives a lot easier by <strong>responding to their emails in a timely manner</strong>, sending them your talk descriptions, bio information, and headshots when asked, and confirming or booking your travel details enough time in advance so that the prices don’t double in size.</p>

<p><strong>Speakers who are a pleasure to work with get recommended and invited back</strong>. Speakers who don’t respond to emails, send in overly-short descriptions or leave booking travel to the last minute often don’t. In fact, I’m a member of several conference organiser Slack groups where this sort of behaviour is regularly talked about, causing invites for certain speakers to dry up quickly.</p>

<p>This is, sadly, another reason why you see the same speakers talking at events time and again. Not necessarily because they’re the best speakers, but because they’re reliable and don’t give the organizers a heart attack.</p>

<h2 id="conclusion">Conclusion</h2>

<p>I know this article has covered a lot of public speaking <strong>do</strong>’s and <strong>don’t</strong>’s. But before wrapping things up, it’s worth mentioning that speaking is also <em>a lot of fun</em>. It’s a great way to attend conferences you might not have otherwise been able to afford; you get to meet speakers whose work you might have been following for years and learn a ton of new things. It also provides a great sense of personal accomplishment, being able to share what you’ve learnt with others and “pay it forward.”</p>

<p>While it’s easy to assume that all speakers are extroverts, (the art of) speaking is actually <strong>surprisingly good for introverts, too</strong>. A lot of people find it quite awkward to navigate conferences, go up to strangers, and make small talk. Speaking pretty much solves that problem as people immediately have something they can talk to you about, so it’s super fun walking around after your talk and chatting with people.</p>














<figure class="
  
  
  ">
  
    <a href="https://files.smashing.media/articles/become-better-speaker-conferences/7-andy-budd-chatting-attendees-coffee-break.jpg">
    
    <img
      loading="lazy"
      decoding="async"
      fetchpriority="low"
			width="800"
			
			
			srcset="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/7-andy-budd-chatting-attendees-coffee-break.jpg 400w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_800/https://files.smashing.media/articles/become-better-speaker-conferences/7-andy-budd-chatting-attendees-coffee-break.jpg 800w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1200/https://files.smashing.media/articles/become-better-speaker-conferences/7-andy-budd-chatting-attendees-coffee-break.jpg 1200w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_1600/https://files.smashing.media/articles/become-better-speaker-conferences/7-andy-budd-chatting-attendees-coffee-break.jpg 1600w,
			        https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_2000/https://files.smashing.media/articles/become-better-speaker-conferences/7-andy-budd-chatting-attendees-coffee-break.jpg 2000w"
			src="https://res.cloudinary.com/indysigner/image/fetch/f_auto,q_80/w_400/https://files.smashing.media/articles/become-better-speaker-conferences/7-andy-budd-chatting-attendees-coffee-break.jpg"
			
			sizes="100vw"
			alt="Andy Budd is chatting with attendees during a coffee break. People are smiling, talking, and gathered around tables with some food and beverages arranged on top of them"
		/>
    
    </a>
  

  
    <figcaption class="op-vertical-bottom">
      Andy Budd enjoying chatting to attendees during a coffee break. (<a href='https://files.smashing.media/articles/become-better-speaker-conferences/7-andy-budd-chatting-attendees-coffee-break.jpg'>Large preview</a>)
    </figcaption>
  
</figure>

<p>All that being said, please <strong>don’t feel pressured into becoming a speaker</strong>. I think a lot of people think that they need to add a “conference speaker” to their LinkedIn bio in order to advance their careers. However, some of the best, most successful people I know in our industry don’t speak at public events at all, so it’s definitely not an impediment.</p>

<p>But if you do want to start sharing your experience with others, now is a good time. Sure, the number of in-person conferences has dropped since the start of the pandemic, but the ones that are still around are desperate to find <strong>new, interesting voices from a diverse set of backgrounds</strong>. So if it’s something you’re keen to explore, why not put yourself out there? You’ll have nothing to lose but potentially a lot to gain as a result.</p>

<h3 id="further-reading">Further Reading</h3>

<p>Here are a few additional resources on the topic of speaking at conferences. I hope you will find something useful there, too.</p>

<ul>
<li>“<a href="https://www.andybudd.com/archives/2018/08/breaking_into_the_speaker_circuit">Breaking into the speaker circuit</a>,” by Andy Budd<br />
Here are some more thoughts on breaking into public speaking by yours truly. As somebody who both organizes and often speaks at events, I’ve got a good insight into the workings of the conference circuit. This is probably why I regularly get emails from people looking for advice on breaking into the speaking circuit. So rather than repeating the same advice via email, I thought I’d write a quick article I could point people to.</li>
<li>“<a href="https://amazon.co.uk/Confessions-Public-Speaker-Scott-Berkun/dp/1449301959/">Confessions of a Public Speaker</a>,” by Scott Berkun<br />
In this highly practical book, author and professional speaker Scott Berkun reveals the techniques behind what great communicators do and shows how anyone can learn to use them well. For managers and teachers &mdash; and anyone else who talks and expects someone to listen &mdash; the <em>Confessions of a Public Speaker</em> provides an insider’s perspective on how to effectively present ideas to anyone. It’s a unique and instructional romp through the embarrassments and triumphs Scott has experienced over fifteen years of speaking to audiences of all sizes.</li>
<li>“<a href="https://abookapart.com/products/demystifying-public-speaking">Demystifying Public Speaking</a>,” by Lara Hogan <em>(A Book Apart)</em>, with foreword by Eric Meyer<br />
Whether you’re bracing for a conference talk or a team meeting, Lara Hogan helps you identify your fears and face them so that you can make your way to the stage, big or small.</li>
<li>“<a href="https://www.amazon.co.uk/slide-Science-Creating-Presentations-Presentation/dp/0596522347/">Slide:ology: The Art and Science of Presentation Design</a>,” by Nancy Duarte<br />
No matter where you are on the organizational ladder, the odds are high that you’ve delivered a high-stakes presentation to your peers, your boss, your customers, or the general public. Presentation software is one of the few tools that requires professionals to think visually on an almost daily basis. But unlike verbal skills, effective visual expression is not easy, natural, or actively taught in schools or business training programs. This book fills that void.</li>
<li>“<a href="https://www.amazon.co.uk/Presentation-Zen-Simple-Design-Delivery/dp/0321811984/">Presentation Zen: Simple Ideas on Presentation Design and Delivery</a>,” by Garr Reynolds<br />
A best-selling author and popular speaker, Garr Reynolds, is back in this newly revised edition of his classic, best-selling book in which he showed readers there is a better way to reach the audience through simplicity and storytelling and gave them the tools to confidently design and deliver successful presentations.</li>
<li>“<a href="https://www.youtube.com/watch?v=pVumgiMJeag">How To &mdash; Public Speaking</a>,” a video talk by <a href="https://www.youtube.com/@zefrank">Ze Frank</a><br />
You may benefit a lot from this video that Ze Frank made several years ago.</li>
<li>“<a href="https://www.smashingmagazine.com/2018/02/getting-started-public-speaking/">Getting Started In Public Speaking: Global Diversity CFP Day</a>,” by Rachel Andrew <em>(Smashing Magazine)</em><br />
The Global Diversity CFP Day (Call For Proposals, sometimes also known as a Call For Papers) is aimed to help more people submit their ideas to conferences and get into public speaking. In this article, Rachel Andrew rounds up some of the best takeaways along with other useful resources for new speakers.</li>
<li>“<a href="https://www.smashingmagazine.com/2014/01/getting-the-most-out-of-your-web-conference-experience/">Getting The Most Out Of Your Web Conference Experience</a>,” by Jeremy Girard <em>(Smashing Magazine)</em><br />
To be a web professional is to be a lifelong learner, and the ever-changing landscape of our industry requires us to continually update and expand our knowledge so that our skills do not become outdated. One of the ways we can continue learning is by attending professional web conferences. But with so many seemingly excellent events to choose from, how do you decide which is right for you?</li>
<li>“<a href="https://www.smashingmagazine.com/2018/12/state-of-commercial-web-conferences-events/">Don’t Pay To Speak At Commercial Events</a>,” by Vitaly Friedman <em>(Smashing Magazine)</em><br />
The state of commercial web conferences is utterly broken. What lurks behind the scenes of such events is a widely spread, toxic culture despite the hefty ticket price. And more often than not, speakers bear the burden of all of their conference-related expenses, flights, and accommodation from their own pockets. This isn’t right and shouldn’t be acceptable in our industry.</li>
<li>“<a href="https://twitter.com/graceleaf_/status/1669500920277905408">How to make meaningful connections at in-person conferences</a>,” by <a href="https://twitter.com/graceleaf_">Grace Ling</a> <em>(Figma Config)</em><br />
This is an excellent Twitter post about how to make meaningful connections at in-person conferences &mdash; a few concise, valuable, and practical tips.</li>
</ul>

<div class="signature">
  <img src="https://www.smashingmagazine.com/images/logo/logo--red.png" alt="Smashing Editorial" width="35" height="46" loading="lazy" decoding="async" />
  <span>(mb, yk, il)</span>
</div>


              </article>
            </body>
          </html>
        ]]></content:encoded></item></channel></rss>