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

<channel>
	<title>The NOKIA Blog</title>
	<atom:link href="https://thenokiablog.com/feed/" rel="self" type="application/rss+xml" />
	<link>https://thenokiablog.com/</link>
	<description></description>
	<lastBuildDate>Fri, 22 May 2026 13:00:00 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.8.5</generator>

<image>
	<url>https://thenokiablog.com/wp-content/uploads/2024/03/cropped-Cjdowner-Cryptocurrency-Flat-ICON-ICX.512-32x32.png</url>
	<title>The NOKIA Blog</title>
	<link>https://thenokiablog.com/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Four Levels Of Customer Understanding</title>
		<link>https://thenokiablog.com/four-levels-of-customer-understanding/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Fri, 22 May 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[data]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/four-levels-of-customer-understanding/</guid>

					<description><![CDATA[<p>What people say, feel, think, and do are often very different things. To understand the underlying...</p>
<p>The post <a href="https://thenokiablog.com/four-levels-of-customer-understanding/">Four Levels Of Customer Understanding</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<div class="c-garfield-summary">
<section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>What people say, feel, think, and do are often very different things. To understand the underlying reasons for user behavior, it helps to look beyond the surface and explore hidden motivations, root causes, and the different layers of reality that shape how people act. Brought to you by Measuring UX Impact, <strong>friendly video course on UX</strong> and design patterns by Vitaly.</section>
</div>
<p>Many companies think they know fairly well what their users want and need, and how they make their decisions. Yet most of the time these are merely big assumptions and big hunches &mdash; with little real evidence to support them. In practice, <strong>obvious reasons</strong> might be true, but they rarely paint the full picture.</p>
<p>To understand our customers, we must triangulate across four levels of customer understanding by Hannah Shamji. It&rsquo;s a useful way to think about the <strong>underlying reasons</strong> for user behavior, hidden motivations, and the complex layers of messy and noisy reality that are often overlooked. Let&rsquo;s see how it works.</p>
<figure><img decoding="async" loading="lazy" width="800" height="706" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding.jpg" alt="A diagram titled Understanding Customers: Four levels of customer understanding, showing four nested pink circles, each representing a level of understanding, with descriptions beside. From outermost to innermost: Level 1 (What they say), Level 2 (What they think or feel), Level 3 (What they do), and Level 4 (Why they do it)."><figcaption class="op-vertical-bottom">Four levels of customer understanding: what people say, think or feel, do, and why they do it. By Hannah Shamji. (Large preview)</figcaption></figure>
<h2 id="don-t-ask-users-your-burning-questions">Don&rsquo;t Ask Users Your Burning Questions</h2>
<p>To learn about customers, it might seem reasonable to <strong>ask people</strong> what they think and draw conclusions from it. But it&rsquo;s rarely an effective way to get actionable answers. In fact, as it turns out, what people <em>think</em>, <em>feel</em>, <em>say</em>, and <em>do</em> are often very different things.</p>
<figure><img decoding="async" loading="lazy" width="800" height="1001" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding-1.jpg" alt="A list detailing six reasons people cancel subscriptions, categorized into voluntary and involuntary churn, with explanations for each."><figcaption class="op-vertical-bottom">People don&rsquo;t always cancel because they want to. Reasons for voluntary and involuntary customer churn. By Emily Anderson. (Large preview)</figcaption></figure>
<p>As Erika Hall wrote, asking a question directly is the <strong>worst way</strong> to get a true and useful answer to that question. We don&rsquo;t always understand or are aware of our <strong>true motivations</strong>. We often apply our own context and interpretations to questions.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>We also exaggerate (<em>a lot!</em>). We focus on <strong>edge cases</strong> and unrealistic scenarios, and we favor <strong>short-term goals</strong> over long-term goals. So if users say that they absolutely need to <em>compare products in a table</em>, it doesn&rsquo;t mean that they couldn&rsquo;t get to their underlying goal without it.</p>
<h2 id="possible-vs-probable">&ldquo;Possible&rdquo; vs. &ldquo;Probable&rdquo;</h2>
<p>Just to indicate how tricky listening to <em>words</em> alone is: even little <strong>nuances in words chosen</strong> matter. In practice, users are rarely precise in expressing their thoughts, and a good example is the distinction between <em>possible</em>, <em>plausible</em>, and <em>probable</em>, as discovered by Thomas D&rsquo;hooge.</p>
<figure><img decoding="async" loading="lazy" width="800" height="1000" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding-2.jpg" alt="A chart showing overlaid density plots (ridge plots) that illustrate the numerical interpretation of various probability phrases"><figcaption class="op-vertical-bottom">Numerical interpretation of probability phrases and their ranges. Source. (Large preview)</figcaption></figure>
<p>A study on Dutch verbal probability terms shows how unreliable the choice of words is. While extreme words have some agreement, terms like &ldquo;possible,&rdquo; &ldquo;maybe,&rdquo; &ldquo;uncertain,&rdquo; or &ldquo;likely&rdquo; lead to a wide spread of <strong>interpretations</strong>. So we shouldn&rsquo;t rely on what people say, but rather try to go deeper.</p>
<h2 id="the-levels-of-understanding">The Levels Of Understanding</h2>
<p>To get a <strong>more realistic and less biased</strong> view of customers&rsquo; needs, we need to understand a broader picture across 4 levels:</p>
<figure><img decoding="async" loading="lazy" width="800" height="800" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding-3.jpg" alt="A diagram titled Understanding Customers: Four levels of customer understanding, showing four nested pink circles, each representing a level of understanding, with descriptions beside. From outermost to innermost: Level 1 (What they say), Level 2 (What they think or feel), Level 3 (What they do), and Level 4 (Why they do it)."><figcaption class="op-vertical-bottom">Four levels of customer understanding: what people say, think or feel, do, and why they do it. By Hannah Shamji, visualized by Helio. (Large preview)</figcaption></figure>
<ul>
<li><strong>Level 1: &ldquo;What they say&rdquo;</strong><br>Easier to collect, but mostly opinions, and most unreliable. People often explain their behavior through the lens of how they <em>perceive</em> it, or how they <em>want it to be perceived</em>, which isn&rsquo;t always accurate. We shouldn&rsquo;t rely too much on CRM data, surveys, or polls.</li>
<li><strong>Level 2: &ldquo;What they think and feel&rdquo;</strong><br>Gives more context, but is still heavily shaped by memory and personal preferences. Good user research and interviews help us understand expectations and experiences.</li>
<li><strong>Level 3: &ldquo;What they do&rdquo;</strong><br>We study actual behavior, actions taken or skipped, usage data, and analytics. We run task analysis and workflow analysis to understand how people use the product.</li>
<li><strong>Level 4: &ldquo;Why they do it&rdquo;</strong><br>We study <strong>underlying motivations</strong> and root causes, through observations of real workflows and in-depth interviews. Typically, it requires a trustworthy relationship with the user, repeat interviews, and task walkthroughs.</li>
</ul>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>Personally, I wouldn&rsquo;t recommend NPS (alternative). It&rsquo;s worth noting that different levels might reveal conflicting or contradictory data. To get a better understanding, we need to triangulate and reconcile data with mixed-method research.</p>
<h2 id="capturing-emotions-and-nuance">Capturing Emotions And Nuance</h2>
<p>Emotions are always difficult to capture, but they are easier to spot once you observe people doing what they need to do <strong>without external influence</strong> or interruptions. The ability to positively impact users grows by moving from sympathy to empathy or even compassion, as articulated by Sarah Gibbons.</p>
<figure><img decoding="async" loading="lazy" width="800" height="643" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding.png" alt="A diagram titled &lsquo;Spectrum of Empathy&rsquo; with a vertical &lsquo;Effort&rsquo; axis and a horizontal &lsquo;Understanding &amp; Engagement&rsquo; axis. Four overlapping circles, increasing in size from left to right, represent Pity, Sympathy, Empathy, and Compassion, each with a corresponding phrase."><figcaption class="op-vertical-bottom">Spectrum of Empathy: from pity to sympathy to empathy to compassion. By Sarah Gibbons. (Large preview)</figcaption></figure>
<p>In the past, I was using <em>&ldquo;speak-aloud&rdquo; protocol</em> and asked users to walk me through their thought process as they were completing tasks. But it actually turns out to be quite disruptive. Because people are focused on speaking at the same time while solving a task, many <strong>emotions remain hidden</strong> or obscured by their language.</p>
<p>So, when conducting usability testing, <strong>I don&rsquo;t ask users to speak</strong> through their experience. Instead, I observe where they tap or hover with the mouse, where their mouse circles without an action, where they scroll, and how long. Eventually, when a user confirms that they are done or that they are stuck, I ask questions.</p>
<figure><img decoding="async" loading="lazy" width="800" height="800" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding-4.jpg" alt="A colorful circular chart of emotions, starting with Happy, Sad, Angry, Fearful, Bad, Surprised, and Disgusted at the inner ring, branching out to more specific feelings in the outer rings."><figcaption class="op-vertical-bottom">The Wheel of Emotions helps articulate emotions more precisely. (Large preview)</figcaption></figure>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>The Emotion Wheel (website) by Geoffrey Roberts is a helpful little tool for better describing a range of emotions during user interviews or design sessions. It certainly needs refinement for <strong>product design needs</strong>, but it helps us get more precise about <strong>the sentiment</strong> customers or colleagues might be experiencing, moving beyond just &ldquo;good&rdquo; or &ldquo;bad&rdquo;.</p>
<p>One helpful trick is to use <strong>mirroring</strong> &mdash; repeating what a user has said, or ask the same question twice, just paraphrasing it. Or navigating the emotions wheel (see above) to better capture and understand the emotion.</p>
<p>These strategies help uncover some of the issues that perhaps didn&rsquo;t come up in the first answer. That&rsquo;s also when a user tends to add more useful context and details as they explain their confusion.</p>
<h2 id="emotions-aren-t-everything">Emotions Aren&rsquo;t Everything</h2>
<p>Some people strongly disagree:</p>
<blockquote><p>&ldquo;Our work is about others &mdash; their problems, their pain, their mess. Our job is to make sense of it and then do something about it. Not to emote or perform but to act on and solve it. There is a <strong>flawed belief</strong> that to build great things, you first need to emotionally fully absorb someone else&rsquo;s experience.&rdquo;</p>
<p>&mdash; Alin Buda</p>
</blockquote>
<figure><img decoding="async" loading="lazy" width="800" height="549" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding-5.jpg" alt="A diagram categorizing potential harms of solutions into mild, serious, lasting, and systemic, with corresponding examples."><figcaption class="op-vertical-bottom">Different solutions can cause different levels of harm, which can be way more severe and impactful than emotional response. By Indi Young. (Large preview)</figcaption></figure>
<p>I think that Alin brings up a very strong argument, and personally, I find it difficult to disagree with. However, I do see user&rsquo;s emotional response as a <strong>signal</strong> of how well the product is working for them. How engaged or detached they are in their journey, how they react to aesthetics, how confused or confident they are.</p>
<p>Ultimately, these are signals. To make a difference, we must go <strong>beyond emotions</strong> and explore what people actually do. Usually, this means relentlessly observing, diagnosing, and focusing on underlying user needs.</p>
<h2 id="observe-and-diagnose-don-t-validate">Observe And Diagnose, Don&rsquo;t Validate</h2>
<p>Instead of asking, we need to <strong>observe</strong>. Usually, I focus on small things that make or break an experience. I see where users <strong>lose time</strong>, repeat actions, hover without clicking, or click and then go back. Pay attention to subtle cues like scratching their neck, raising eyebrows, or expressions of worry, joy, or confusion.</p>
<p>Many companies talk about &ldquo;validation&rdquo; through user testing, but often that means simply confirming existing assumptions. But we should instead <strong>diagnose existing behavior</strong> without preconceived notions or affiliations. We don&rsquo;t validate &mdash; we actually research instead.</p>
<figure><img decoding="async" loading="lazy" width="800" height="1002" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding-6.jpg" alt="A diagram categorizing potential harms of solutions into mild, serious, lasting, and systemic, with corresponding examples."><figcaption class="op-vertical-bottom">Words to use instead of &ldquo;validate&rdquo;: research, understand, investigate, assess, evaluate, examine, learn. By Nikki Anderson. (Large preview)</figcaption></figure>
<p>That research means not just understanding <strong>customers&rsquo; real motivations</strong>, but also risks, doubts, concerns, worries, and perhaps even harms.</p>
<p>The only way to get there is by building a sincere, honest, and <strong>trustworthy relationship</strong> &mdash; one that feels right and resonates deeply. When customers truly care and want to help, getting to a real understanding becomes much, much easier.</p>
<h2 id="practical-ways-to-uncover-user-needs">Practical Ways To Uncover User Needs</h2>
<p>We don&rsquo;t need expensive tools to uncover user needs. David Travis provides a fantastic overview of helpful strategies to do just that. Here are some initiatives to spread the word about real user&rsquo;s struggles or gain a <strong>deeper understanding</strong> of user needs:</p>
<ul>
<li><strong>Exposure hours</strong>, when every employee must be exposed to their customers for at least 2 hours every 6&ndash;12 weeks.</li>
<li><strong>Live UX testing</strong>, where we invite everyone in the company to join and observe.</li>
<li><strong>Co-design with users</strong>, where we show new features and ask users to rank them.</li>
<li><strong>Helpdesk insights</strong>, where we ask for frequent complaints and questions from the support every 3&ndash;6 months.</li>
<li><strong>Listening in</strong>, where we tune in on a customer service call, web chat, or eavesdrop where users hang out.</li>
</ul>
<p>The core idea here is that you don&rsquo;t need extensive and expensive tools to uncover user needs. You need to create spaces where <strong>customers&rsquo; struggles can be exposed</strong> and make these struggles visible across the entire company.</p>
<p>It can be <strong>short video clips</strong> of user sessions or a monthly newsletter with what we learned this month. Making these pain points visible can rally everyone from marketing to engineering to keep users&rsquo; struggles at the back of their minds.</p>
<h2 id="wrapping-up">Wrapping Up</h2>
<p>To make an impact, we must go way <strong>beyond user feedback</strong>. It&rsquo;s never enough to listen to surveys &mdash; we must <strong>observe customers&rsquo; actual behaviors</strong> and build relationships to truly understand their goals and their motivations.</p>
<p>And most importantly, we need to understand <strong>what questions</strong> we actually want to have answered. Not what &ldquo;validation&rdquo; we need to move on with the project, but what we don&rsquo;t know and what we need to <strong>research</strong>.</p>
<p>Without it, everything else is merely hunches and assumptions &mdash; and often wrong and expensive ones.</p>
<h2 id="meet-measure-ux-amp-design-impact">Meet &ldquo;Measure UX &amp; Design Impact&rdquo;</h2>
<p>Meet Measure UX &amp; Design Impact, Vitaly&rsquo;s practical guide <strong>for designers and UX leads</strong> on how to track and visualize the incredible <strong>impact</strong> of your UX work on business &mdash; with a live UX training later this year. Jump to details.</p>
<figure class="article__image"><img fetchpriority="high" decoding="async" width="900" height="466" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding-1.png" alt="How to Measure UX and Design Impact, with Vitaly Friedman."><figcaption class="op-vertical-bottom">Meet Measure UX and Design Impact, a practical video course for designers and UX leads.</figcaption></figure>
<h2 id="useful-resources">Useful Resources</h2>
<h3 id="useful-books">Useful Books</h3>
<ul>
<li><em>Deploy Empathy: A practical guide to interviewing customers</em>, by Michele Hansen</li>
<li><em>Humankind</em>, by Rutger Bregman</li>
</ul>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/four-levels-of-customer-understanding-2.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(yk)</span></div>
<p>The post <a href="https://thenokiablog.com/four-levels-of-customer-understanding/">Four Levels Of Customer Understanding</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS Weekly Roundup: AWS Transform at 1 year, Claude Platform on AWS, EC2 M3 Ultra Mac instances, and more (May 18, 2026)</title>
		<link>https://thenokiablog.com/aws-weekly-roundup-aws-transform-at-1-year-claude-platform-on-aws-ec2-m3-ultra-mac-instances-and-more-may-18-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Mon, 18 May 2026 19:13:20 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Bedrock]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[Amazon EC2 Mac Instances]]></category>
		<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[AWS Trainium]]></category>
		<category><![CDATA[AWS Transform]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Education]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Graviton]]></category>
		<category><![CDATA[Kiro]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Startup]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/aws-weekly-roundup-aws-transform-at-1-year-claude-platform-on-aws-ec2-m3-ultra-mac-instances-and-more-may-18-2026/</guid>

					<description><![CDATA[<p>Just a year ago, we launched AWS Transform for .NET, Mainframe and VMware workloads, the first...</p>
<p>The post <a href="https://thenokiablog.com/aws-weekly-roundup-aws-transform-at-1-year-claude-platform-on-aws-ec2-m3-ultra-mac-instances-and-more-may-18-2026/">AWS Weekly Roundup: AWS Transform at 1 year, Claude Platform on AWS, EC2 M3 Ultra Mac instances, and more (May 18, 2026)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/aws-weekly-roundup-aws-transform-at-1-year-claude-platform-on-aws-ec2-m3-ultra-mac-instances-and-more-may-18-2026.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p><img decoding="async" class="wp-image-103968 size-full alignright" src="https://thenokiablog.com/wp-content/uploads/2026/05/aws-weekly-roundup-aws-transform-at-1-year-claude-platform-on-aws-ec2-m3-ultra-mac-instances-and-more-may-18-2026.jpg" alt width="250" height="250">Just a year ago, we launched AWS Transform for .NET, Mainframe and VMware workloads, the first agentic AI service purpose-built for modernizing enterprise applications at scale. At re:Invent 2025, we introduced AWS Transform custom, which enables organizations to modernize and transform code at scale using AWS-managed and custom transformations. You can upgrade language versions, migrate frameworks, optimize performance, and analyze code bases using transformations that are ready to use or can be customized to meet your organization&rsquo;s specific requirements. We also introduced full-stack Windows modernization capabilities and Reimagine capabilities and automated testing functionality for mainframe.</p>
<p>In 12 months, thousands of customers migrated hundreds of thousands of servers, saved 1.6+ million hours, and processed 4.5+ billion lines of code with AWS Transform. Celebrating its 1-year anniversary, AWS Transform agents now available in Kiro, Claude, Cursor, and Codex, including the agent builder toolkit Kiro power for building customized transformation agents.</p>
<p>To learn what happened in 12 months, the four things we learned, and how that evolved our roadmap, visit the one-year anniversary blog post.</p>
<p><strong>Last week&rsquo;s launches</strong><br>
        <br>Here are last week&rsquo;s launches that caught my attention:</p>
<ul>
<li>The general availability of Claude Platform on AWS &ndash; You can get direct access to Anthropic&rsquo;s native Claude Platform experience, including APIs, console, and early-access beta features, directly through your existing AWS account, without managing separate accounts, billing, or tracking. Claude Platform on AWS is operated by Anthropic, and customer data is processed outside the AWS security boundary. To learn more, visit the deep dive blog post.</li>
<li>Amazon EC2 M3 Ultra Mac instances &ndash; These instances are built on Apple M3 Ultra Mac Studio computers featuring a 28-core CPU, 60-core GPU, 32-core Neural Engine, and 256GB of unified memory. Compared to EC2 M4 Max Mac instances, M3 Ultra Mac instances provide 2x the unified memory, 1.75x the CPU cores, 1.5x the GPU cores, and 2x the Neural Engine cores, giving Apple developers the headroom to run significantly more Xcode simulators in parallel and accelerate on-device ML workflows to improve product time to market.</li>
<li>Amazon Redshift RG instances powered by AWS Graviton &ndash; These instances deliver better performance, running data warehouse and data lake workloads up to 2.4x as fast as previous generation RA3 instances, at 30% lower price per vCPU. RG instances include Redshift&rsquo;s custom-built vectorized data lake query engine that processes Apache Iceberg and Parquet data on your cluster nodes.</li>
<li>Amazon Bedrock Advanced Prompt Optimization &ndash; You can optimize your prompts for any model on Bedrock, while comparing your original prompts to your optimized prompts across up to 5 models simultaneously. You can also use this if you are migrating to a new model or just want to get better performance on your current model.</li>
<li>AWS Security Agent full repository code scanning (preview) &ndash; You can use a new capability in AWS Security Agent that performs deep, context-aware security analysis of your entire codebase. When vulnerabilities are found, the scanner generates code remediation&mdash;specific fixes tied to the exact file and line&mdash;enabling teams to remediate security vulnerabilities faster than ever before. This capability is available at no additional charge for existing AWS Security Agent customers during the preview.</li>
<li>AWS Interconnect &ndash; multicloud connectivity with Oracle Cloud Infrastructure (preview) &ndash; You can quickly provision resilient, scalable private connections to other cloud providers using AWS Interconnect &ndash; multicloud connectivity. OCI is the latest CSP to adopt the open specification that powers AWS Interconnect. This allows AWS to provide a consistent, simple experience to our customers on OCI (preview), Google Cloud (generally available), and Microsoft Azure (coming later in 2026).</li>
</ul>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p><strong>Additional updates</strong><br>
        <br>Here are some additional news items that you might find interesting:</p>
<ul>
<li>Accelerate AI research and education with Build on Trainium program &ndash; Read how the next generation of AI researchers is using Amazon chips to accelerate discovery. AWS invested $110 million to give university researchers access to purpose-built AI chips. AWS Trainium is speeding up AI research at UC Berkeley, MIT, Carnegie Mellon, and more. All research is open source, meaning improvements flow back to the broader developer community.</li>
<li>A full list of AWS Community Days 2026 &ndash; There&rsquo;s something different about an event where the speakers are your peers, the organizers are volunteers who do this out of passion, and the agenda was shaped by the community itself. That&rsquo;s exactly what AWS Community Days are, and they&rsquo;re happening in cities across every continent, every year.</li>
<li>The Kiro Startups Credit program is back &ndash; Thousands of founders applied in the first round, and now applications are open again. Apply to receive up to one year of Kiro Pro+ credits automatically applied to your organization&rsquo;s AWS account.</li>
</ul>
<p>For a full list of AWS blog posts, be sure to keep an eye on the AWS Blogs page.</p>
<p>Learn more about AWS, browse and join upcoming AWS-led in-person and virtual events, startup events, and developer-focused events including AWS Summits. Join the AWS Builder Center to connect with builders, share solutions, and access content that supports your development.</p>
<p>That&rsquo;s all for this week. Check back next Monday for another Weekly Roundup!</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p>&mdash; Channy</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/aws-weekly-roundup-aws-transform-at-1-year-claude-platform-on-aws-ec2-m3-ultra-mac-instances-and-more-may-18-2026/">AWS Weekly Roundup: AWS Transform at 1 year, Claude Platform on AWS, EC2 M3 Ultra Mac instances, and more (May 18, 2026)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>10+ Best Color Grading LUTs for DaVinci Resolve in 2026</title>
		<link>https://thenokiablog.com/10-best-color-grading-luts-for-davinci-resolve-in-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Fri, 15 May 2026 14:05:09 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[Color Schemes & Swatches]]></category>
		<category><![CDATA[DaVinci Resolve]]></category>
		<category><![CDATA[DaVinci Resolve Templates]]></category>
		<category><![CDATA[DaVinci Resove]]></category>
		<category><![CDATA[LUTs]]></category>
		<category><![CDATA[Video & Motion Design]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/10-best-color-grading-luts-for-davinci-resolve-in-2026/</guid>

					<description><![CDATA[<p>Originally used in film labs, LUTs, or Look-Up Tables, are vital resources in digital editing software...</p>
<p>The post <a href="https://thenokiablog.com/10-best-color-grading-luts-for-davinci-resolve-in-2026/">10+ Best Color Grading LUTs for DaVinci Resolve in 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Originally used in film labs, LUTs, or Look-Up Tables, are vital resources in digital editing software like DaVinci Resolve. They work by mapping current colors to preferred colors, giving you consistent color correction and grading across different scenes.</p>
<p>In video editing, LUTs make the color grading process easier, allowing you to quickly create professional and creative results. They save time, maintain uniformity, and give you more creative control.</p>
<p>This collection shares the best DaVinci Resolve LUT packs. From cinematic and wedding LUTs to those designed for travel and social media, these color grading resources will help you find the perfect look for your footage.</p>
<hr>
<div class="favorite">
<p class="title-details">12 DaVinci Resolve LUTS</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>This DaVinci Resolve LUT pack has been designed to add cinematic color effects to your footage, replicating the look and feel of professional movie productions. It&rsquo;s an excellent choice if you&rsquo;re looking to add some movie magic to your videos.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026.jpg" alt="Professional Film LUTs for DaVinci Resolve Look-Up Tables" width="900" height="480"></p>
</div>
<p class="title-details">12 DaVinci Resolve LUTS</p>
<p>This LUT pack has been designed to give your videos an authentic street or city color effect. Whether you&rsquo;re working on a documentary, music video, or any project with a city backdrop, this pack is perfect for capturing the mood of urban environments.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-1.jpg" alt="Street LUTs for DaVinci Resolve Look-Up Tables" width="900" height="480"></p>
<p class="title-details">12 DaVinci Resolve LUTS</p>
<p>If you&rsquo;re working on a project that needs an old-school aesthetic, these DaVinci Resolve LUTs are a simple way to achieve it. This pack includes 12 LUTs, all designed to bring a retro or vintage feel to your video projects. </p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-2.jpg" alt="Old School DaVinci Resolve LUTs Look-Up Tables" width="900" height="480"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p class="title-details">20 DaVinci Resolve LUTS</p>
<p>This DaVinci Resolve LUT pack has 20 unique thermograph color effects. They add a distinctive heat-vision style to your footage, perfect for artistic videos, music clips, and experimental films.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-3.jpg" alt="Thermograph LUTs for DaVinci Resolve Look-Up Tables" width="900" height="480"></p>
<p class="title-details">15 DaVinci Resolve LUTS</p>
<p>This DaVinci Resolve LUT pack gives you fifteen epic movie-style color effects. These LUTs provide deep, impactful color grades, making them a valuable addition to your toolkit.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-4.jpg" alt="Cinematic Tone LUTs for DaVinci Resolve Look-Up Tables" width="900" height="480"></p>
<p class="title-details">12 DaVinci Resolve LUTS</p>
<p>This pack includes 12  dark and moody color effect LUTs. They&rsquo;re ideal if you&rsquo;re looking for a deep and emotional aesthetic. Perfect for suspenseful thrillers, dramatic short films, or any content needing a darker feel.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-5.jpg" alt="Aesthetic Dark DaVinci Resolve LUTs Look-Up Tables" width="900" height="480"></p>
<p class="title-details">30 DaVinci Resolve LUTS</p>
<p>This pack includes 30 LUTs designed for any travel and adventure video that needs a dark color grading style. It is ideal for travel filmmakers and videographers who want a more emotional tone in their videos.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-6.jpg" alt="Moody Travel DaVinci Resolve LUTs Look-Up Tables" width="900" height="480"></p>
<p class="title-details">74 DaVinci Resolve LUTS</p>
<p>This DaVinci Resolve LUT pack includes a variety of color grades that will help create striking tones and effects that will make your social media content stand out. They&rsquo;re also perfect for Instagram-style color grading.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-7.jpg" alt="Social Media LUTs for DaVinci Resolve Look-Up Tables" width="900" height="480"></p>
<p class="title-details">16 DaVinci Resolve LUTS</p>
<p>This set of 16 color grading presets has been designed for fashion and modeling. Perfect for fashion photographers and videographers, these presets will give your projects a sophisticated and modern look.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-8.jpg" alt="Fashion LUTs Pack for DaVinci Resolve Look-Up Tables" width="900" height="480"></p>
<p class="title-details">10 DaVinci Resolve LUTS</p>
<p>These color grading presets are ideal for video creators who want to highlight the natural beauty of landscapes and the outdoors. They offer precise color corrections to make your landscape footage vibrant and lifelike.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-9.jpg" alt="Stunning Landscape DaVinci Resolve LUTs Look-Up Tables" width="900" height="480"></p>
<p class="title-details">15 DaVinci Resolve LUTS</p>
<p>This DaVinci Resolve LUT pack includes 15 color grading presets designed for wedding videographers. These presets will add elegance to your footage and capture the emotional and romantic atmosphere of the wedding.</p>
<p><img decoding="async" loading="lazy" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-color-grading-luts-for-davinci-resolve-in-2026-10.jpg" alt="Romantic Wedding LUT Pack for DaVinci Resolve Look-Up Tables" width="900" height="480"></p>
<h2><span id="Color_Grading_in_DaVinci_Resolve">Color Grading in DaVinci Resolve</span></h2>
<p>As you dive deeper into DaVinci Resolve, remember to explore and experiment with different LUTs to find the packs that work best for you and your project.</p>
<p>These LUT packs offer a unique spectrum of colors, tones, and moods, giving you endless creative possibilities. As color grading trends change, staying updated with the latest LUTs will ensure your work is always fresh and engaging.</p>
<hr>
<p>Read more articles by Paul Andrew
                    </p>

<hr>
<p>The post <a href="https://thenokiablog.com/10-best-color-grading-luts-for-davinci-resolve-in-2026/">10+ Best Color Grading LUTs for DaVinci Resolve in 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Ten Data-Backed Truths Of User Experience ROI</title>
		<link>https://thenokiablog.com/ten-data-backed-truths-of-user-experience-roi/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Fri, 15 May 2026 10:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Fonts]]></category>
		<category><![CDATA[Generative AI]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[Retail]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/ten-data-backed-truths-of-user-experience-roi/</guid>

					<description><![CDATA[<p>Every extra second of friction has a measurable business cost. Carrie Webster shares ten data-backed UX...</p>
<p>The post <a href="https://thenokiablog.com/ten-data-backed-truths-of-user-experience-roi/">Ten Data-Backed Truths Of User Experience ROI</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>Every extra second of friction has a measurable business cost. Carrie Webster shares ten data-backed UX facts that link user experience directly to revenue, retention, and long-term growth.</section>
</p>
<p>In the high-stakes economy of today, the cost of a friction-heavy interface is no longer just &ldquo;lost clicks&rdquo;, but potentially millions in wasted engineering spend and lost business value. As a veteran UX designer who has helped build digital products since the early mobile-first era, I&rsquo;ve watched business leaders shift from viewing design as a &ldquo;cosmetic preference&rdquo; to recognising that user experience is actually the primary engine of business survival.</p>
<p>A UX design role is as much about <strong>research</strong> and <strong>analytics</strong> as it is about pixels, and I believe that hard data is the only tool powerful enough to bridge the gap between design and the boardroom. Facts don&rsquo;t just advocate for the user; they prove that UX is a <strong>non-negotiable requirement</strong> for a healthy bottom line. Even in the rooms where decisions are made, UX is frequently undervalued as a &lsquo;visual&rsquo; role. I&rsquo;ve learned that the most effective way to dismantle this myth is through <strong>data</strong>.</p>
<p>The following ten facts represent the current reality of the digital world. These are not just &ldquo;design tips&rdquo;; they are the clinical, data-backed pillars for financial growth in a saturated market. Some of these facts are also commonly used by designers as best practices.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>For example, I once led a B2C mobile design project, where I was able to strip 1.2 seconds off the mobile load time by reducing and removing some of the visual assets. The result was an immediate 12% lift in completed transactions, proving that in UX, every tenth of a second is a direct lever for revenue.</p>
<h2 id="1-fixing-issues-in-the-design-phase-is-100-times-cheaper">1. Fixing Issues In The Design Phase Is 100 Times Cheaper</h2>
<p>One of the most compelling financial arguments for UX is the <strong>1:100 rule</strong>. Modern studies, such as from the IBM Systems Institute and Sugue Technologies, show that fixing an error after a product has been developed and launched can be <strong>up to 100 times more expensive</strong> than fixing it during the initial design and prototyping phase.</p>
<p>Think of UX as &ldquo;engineering insurance.&rdquo; By the time a developer touches the code, every interaction should have been validated. If you discover a fundamental navigation flaw after launch, you aren&rsquo;t just paying for the fix; you&rsquo;re paying for technical debt, lost developer time, and the revenue lost while users struggle with a broken flow.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="420" src="https://thenokiablog.com/wp-content/uploads/2026/05/ten-data-backed-truths-of-user-experience-roi.png" alt="Graph showing the cost of bug fixing during different phases."><figcaption class="op-vertical-bottom">Graph showing the cost of bug fixing during different phases. (Image source: QATestLab) (Large preview)</figcaption></figure>
<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container"><img decoding="async" loading="lazy" class="feature-panel-image-img" src="https://www.smashingmagazine.com/images/smashing-cat/cat-scubadiving-panel.svg" alt="Feature Panel" width="257" height="355"></div>


<h2 id="2-performance-impacts-user-experience">2. Performance Impacts User Experience</h2>
<p>In the current landscape, performance is the essential foundation of user experience. A beautiful interface is worthless if the user bounces before it renders. The data is uncompromising: <strong>47% of users expect a page to load in two seconds or less</strong>, and missing this window is a financial catastrophe. A mere one-second delay can reduce conversions by <strong>20%</strong> and satisfaction by <strong>16%</strong>, while retail businesses lose an estimated <strong>$2.6 billion annually</strong> to slow load times. When mobile load time moves from one to three seconds, the bounce rate spikes by <strong>32%</strong>, and by the third second, conversion rates typically plummet from <strong>40% to 29%</strong>.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>However, this volatility offers a massive lever for growth. Even a microscopic <strong>0.1-second improvement</strong> can lift retail conversions by <strong>8.4%</strong>, and travel site conversions by <strong>10.1%</strong>. Improving your Largest Contentful Paint (LCP) by 31% &mdash; a benchmark 67% of websites achieved as of June 2025 &mdash; can drive a direct <strong>8% increase in sales</strong>. As a long-time designer, I treat speed as a primary design element.</p>
<blockquote><p>If the site isn&rsquo;t instantaneous, the design hasn&rsquo;t just failed &mdash; it effectively doesn&rsquo;t exist.</p></blockquote>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="467" src="https://thenokiablog.com/wp-content/uploads/2026/05/ten-data-backed-truths-of-user-experience-roi-1.png" alt="Graph showing conversion rate by page load time"><figcaption class="op-vertical-bottom">When pages load in one second, conversion rates are about 40%. (Image source: Tenet) (Large preview)</figcaption></figure>
<h2 id="3-your-site-has-50-milliseconds-to-impress-your-customers">3. Your Site Has 50 Milliseconds to Impress Your Customers</h2>
<p>First impressions are both visceral and aesthetic. Research indicates that users form an opinion about a website&rsquo;s visual appeal in approximately <strong>50 milliseconds</strong> (0.05 seconds). That&rsquo;s not a lot of time! This split-second &ldquo;gut-feeling&rdquo; is a survival mechanism that dictates whether a user stays to explore your value proposition or bounces immediately.</p>
<p>In the current market, <strong>94% of first impressions</strong> are strictly design related. If your interface feels &ldquo;off&rdquo; or dated, users subconsciously project that lack of quality onto your entire product or service. Your content effectively doesn&rsquo;t exist if your design hasn&rsquo;t earned the five seconds of attention required to read it.</p>
<h2 id="4-hick-s-law-the-cost-of-overwhelm">4. Hick&rsquo;s Law: The Cost of Overwhelm</h2>
<p>Stakeholders often think &ldquo;more options&rdquo; equals &ldquo;more value.&rdquo; Psychology proves the opposite. Hick&rsquo;s Law states that the time it takes to make a decision increases with the number of options available.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>Every extra menu item or form field is a &ldquo;tax&rdquo; on the user&rsquo;s brain. As noted by Landbase, top-performing sites now achieve conversion rates exceeding 11%, while average performers struggle below 3%. Those performing well have applied personalization and optimization strategies to simplify the experience.</p>
<blockquote><p>If you want to increase your revenue by tomorrow, find one field to delete from your checkout flow today.</p></blockquote>
<figure><img decoding="async" loading="lazy" width="800" height="608" src="https://thenokiablog.com/wp-content/uploads/2026/05/ten-data-backed-truths-of-user-experience-roi-2.png" alt="Demonstrating complex choices vs simple."><figcaption class="op-vertical-bottom">Demonstrating complex choices vs simple. (Image source: Mads Soegaard) (Large preview)</figcaption></figure>
<h2 id="5-white-space-improves-comprehension">5. White Space Improves Comprehension</h2>
<p>&ldquo;White space&rdquo; is often viewed as wasted real estate by non-designers. In reality, it is a tool for focus. Strategic use of white space can increase a user&rsquo;s content comprehension by up to 20%.</p>
<p>White space prevents &ldquo;cognitive load&rdquo; from peaking. By giving the user&rsquo;s eyes a place to rest, you guide them toward the most important elements, usually your &ldquo;Buy&rdquo; or &ldquo;Sign Up&rdquo; button. In 2026, as attention spans have dropped to roughly <strong>8 seconds</strong>, simplicity is the ultimate luxury and a major driver of engagement.</p>
<p>For example, in a fintech dashboard I worked on, analyst users were feeling overwhelmed by a &lsquo;data dump&rsquo; layout in some of the dashboard components. I applied more white space around the data to lower their cognitive load. Simply giving the data room to breathe led to a 25% decrease in time-on-task and a significant boost in trial-to-paid conversions.</p>
<h2 id="6-the-power-of-fake-progress">6. The Power Of &ldquo;Fake&rdquo; Progress</h2>
<p>One of the most surprising psychological hacks in UX is that users will complete a task faster if they believe they have already made progress. This is known as the <strong>Goal Gradient Effect</strong>.</p>
<p>In a classic study, researchers found that a 10-stamp coffee card with two stamps already &ldquo;pre-filled&rdquo; was completed significantly faster than an 8-stamp card with zero pre-fills, even though the total spend required was identical. In digital design, showing a progress bar that starts at 15% (simply for creating an account) increases completion rates for onboarding by over 40%. We aren&rsquo;t just designing screens &mdash; we are managing the user&rsquo;s dopamine and sense of momentum.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="287" src="https://thenokiablog.com/wp-content/uploads/2026/05/ten-data-backed-truths-of-user-experience-roi-3.png" alt="Goal Gradient Effect"><figcaption class="op-vertical-bottom">Increased motivation to reach the target based on current progress. (Image source: Conversion Uplift) (Large preview)</figcaption></figure>
<h2 id="7-make-your-content-readable">7. Make Your Content Readable</h2>
<p>Many stakeholders believe that cramming more text &ldquo;above the fold&rdquo; increases value. Data proves the opposite. Proper typography, specifically line spacing (leading) and paragraph width, can increase content comprehension and reading speed by up to <strong>20%</strong>.</p>
<p>Optimal line height (generally 1.5x the font size) reduces &ldquo;visual noise,&rdquo; allowing the brain to process information with less cognitive effort. When users struggle to read your text due to tight spacing or small fonts, their &ldquo;perceived effort&rdquo; increases, leading to a higher bounce rate. Legibility is a conversion tool: if it&rsquo;s hard to read, it&rsquo;s hard to buy.</p>
<p>There are many ways to display more legible text. For example, if line spacing (leading) is too small or the font is too heavy, this also impacts readability.</p>
<figure><img decoding="async" loading="lazy" width="800" height="618" src="https://thenokiablog.com/wp-content/uploads/2026/05/ten-data-backed-truths-of-user-experience-roi-4.png" alt="This example demonstrates the difference in readability between a light and a heavy font display."><figcaption class="op-vertical-bottom">This example demonstrates the difference in readability between a light and a heavy font display. (Image source: Anchor) (Large preview)</figcaption></figure>
<h2 id="8-your-users-only-read-20-of-your-content">8. Your Users Only Read 20% of Your Content</h2>
<p>This truth meshes well with the previous one. Users do not read your website; they scan it. On a typical web page, users read only about <strong>20% to 28% of the text</strong>.</p>
<p>Because modern users scan in an <strong>F-pattern</strong> or <strong>Spotted pattern</strong>, designing for reading is a tactical error. We must design for scanning.</p>
<p>This requires the following:</p>
<ul>
<li>Bold headers that narrate the value proposition.</li>
<li>Bullet points for key benefits.</li>
<li>White space to connect users to key information (discussed in the previous truth).</li>
<li>High-contrast call-to-action (CTA) buttons. If your core message is buried in a paragraph, it is invisible to nearly 80% of your audience.</li>
</ul>
<h2 id="9-why-user-testing-with-5-people-is-the-magic-number">9. Why User Testing With 5 People Is the Magic Number</h2>
<p>I have heard of companies that waste six-figure budgets on massive user studies with 100 people, only to get buried in noise. The reality is that testing with just <strong>5 users</strong> typically uncovers <strong>85% of usability problems</strong>.</p>
<p>This is a mathematical sweet spot. After the fifth user, you reach the point of diminishing returns &mdash; you spend more money to find fewer new bugs. The competitive advantage belongs to small and frequent user testing activities. Test with 5 people, iterate, and test with 5 more. It is the most cost-effective way to build a bulletproof product.</p>
<p>Personally, I have followed this guideline many times during user testing activities, and I can confidently say that testing with 5 people does deliver the majority of issues in your design.</p>
<h2 id="10-the-financial-roi-of-9-900">10. The Financial ROI of 9,900%</h2>
<p>Last, but definitely not least, the most staggering statistic in our industry remains consistent. On average, every <strong>$1 invested in UX returns $100</strong>. This 9,900% ROI isn&rsquo;t magic, but the sum of increased conversion and reduced support.</p>
<p>A fully optimised UX design can improve conversion rates by up to 400%. Furthermore, intuitive design significantly lowers customer support requirements. When a product is self-explanatory, you don&rsquo;t need a massive call centre to explain how to use it.</p>
<h2 id="the-depth-of-ux-investment">The Depth of UX Investment</h2>
<p>Beyond these individual statistics, we must address the cumulative effect of a mature UX practice. In my years of practising, the most successful firms are those that treat UX as a continuous improvement loop rather than a one-off project. The data shows that companies with high design maturity see <strong>32% higher revenue growth</strong> and <strong>56% higher total returns to shareholders</strong> compared to their less design-focused peers.</p>
<p>This discrepancy exists because mature UX organisations move beyond &ldquo;user delight&rdquo; and into &ldquo;user efficiency.&rdquo; When you shave 30 seconds off a workflow for a team of 1,000 employees, you aren&rsquo;t just making them happier; you are reclaiming hundreds of thousands of dollars in annual productivity. This internal ROI is often overlooked, but it is just as vital as consumer-facing conversion rates.</p>
<p>Furthermore, the &ldquo;experience gap&rdquo; is real. 80% of companies believe they deliver a &ldquo;superior experience,&rdquo; but only 8% of customers agree. This massive disconnect represents a significant market opportunity for those willing to look at the hard data. By bridging this gap through continuous user testing and performance optimisation, you aren&rsquo;t just improving a product but capturing market share that your competitors are leaving on the table.</p>
<h2 id="the-impact-of-ai">The Impact of AI</h2>
<p>Today, we cannot talk about UX without talking about AI. However, AI hasn&rsquo;t replaced these 10 facts, but it has accelerated the solution on some of these.</p>
<ul>
<li><strong>Agentic UX</strong><br>60% of designers are now building &ldquo;AI agents&rdquo; that take actions on behalf of the user, drastically reducing the impact of <strong>Hick&rsquo;s Law</strong> by narrowing down choices before the user even sees them.</li>
<li><strong>Real-Time Personalisation</strong><br>32% of teams use AI to personalise interfaces in real-time, meaning the <strong>F-Pattern scanning</strong> habits are catered to by moving the most relevant content to exactly where that specific user&rsquo;s eyes are likely to land.</li>
<li><strong>Automated ROI</strong><br>93% of designers are using generative AI tools to prototype faster, which brings the <strong>1:100 Cost Ratio</strong> even lower by allowing us to find and fix errors before a single line of production code is written.</li>
</ul>
<p>AI has turned UX from a static map into a living, breathing guide for users. But the fundamental rules of human psychology, such as our 50ms judgments and our need for white space, remain unchanged.</p>
<h2 id="conclusion">Conclusion</h2>
<p>In summary, here is a list of the key truths to remember:</p>
<ol>
<li>Fixing issues in the design phase is 100 times cheaper.</li>
<li>Performance impacts user experience.</li>
<li>Your site has 50 milliseconds to impress your customers.</li>
<li>Hick&rsquo;s Law: The cost of overwhelm.</li>
<li>White space improves comprehension.</li>
<li>The power of &ldquo;fake&rdquo; progress.</li>
<li>Make your content readable.</li>
<li>Your users only read 20% of your content.</li>
<li>Why user testing with 5 people is the magic number.</li>
<li>The financial ROI of 9,900%.</li>
</ol>
<p>As we move deeper into the late 2020s, the line between &ldquo;design&rdquo; and &ldquo;business strategy&rdquo; has vanished. The data is in, and companies that lead in design outperform their competitors by <strong>1.7x in revenue growth</strong>.</p>
<blockquote class="pull-quote">
<p>UX design is no longer a team you hire to &ldquo;make things look nice.&rdquo; It is the research-driven, data-backed discipline that ensures your digital product isn&rsquo;t just a cost centre, but a revenue-generating machine.</p>
</blockquote>
<p>In fact, this has always been the case, but I hope that in presenting these cold, hard truths, it now becomes a reality for your business.</p>
<p>As I have found over the years, implementing factual design improvements does make a difference that intuition alone can&rsquo;t replicate. We are past the era of subjective opinions. The data is clear, the psychology is proven, and the ROI is undeniable. The only question left is whether you&rsquo;re ready to let the facts lead your design, or if you&rsquo;ll let your competitors do it first.</p>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/ten-data-backed-truths-of-user-experience-roi-5.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(yk)</span></div>
<p>The post <a href="https://thenokiablog.com/ten-data-backed-truths-of-user-experience-roi/">Ten Data-Backed Truths Of User Experience ROI</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Amazon Bedrock introduces new advanced prompt optimization and migration tool</title>
		<link>https://thenokiablog.com/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Thu, 14 May 2026 22:03:39 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Bedrock]]></category>
		<category><![CDATA[Amazon Bedrock Prompt Management]]></category>
		<category><![CDATA[Amazon Machine Learning]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[AWS Lambda]]></category>
		<category><![CDATA[AWS Support]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Regions]]></category>
		<category><![CDATA[Storage]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool/</guid>

					<description><![CDATA[<p>Today, we&#8217;re announcing Amazon Bedrock Advanced Prompt Optimization, a new tool that you can use to...</p>
<p>The post <a href="https://thenokiablog.com/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool/">Amazon Bedrock introduces new advanced prompt optimization and migration tool</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>Today, we&rsquo;re announcing <strong>Amazon Bedrock Advanced Prompt Optimization</strong>, a new tool that you can use to optimize your prompts for any model on Amazon Bedrock, while comparing your original prompts to optimized prompts across up to 5 models simultaneously. With the new prompt optimization, you can migrate to a new model or improve performance from your current model. You can test them to make sure they see no regressions on known use cases and also improve on underperforming tasks.</p>
<p><img loading="lazy" decoding="async" class="aligncenter wp-image-103964 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool-1.png" alt width="1740" height="410"></p>
<p>The new prompt optimizer takes in your prompt template, example user inputs for the variable values, ground truth answers, and an evaluation metric to use as a guide. You can even use this with multimodal user inputs &ndash; it supports <code>png</code>, <code>jpg</code>, and <code>pdf</code> as inputs to your prompt templates so you can optimize prompts for tasks like document and image analysis.</p>
<p>You can also provide an AWS Lambda function, LLM-as-a-judge rubric, or a short natural language description to guide the optimization. The prompt optimizer works in a metric-driven feedback loop to optimize the prompt and resulting model responses for the evaluation metric, and outputs the original and final prompt templates with evaluation scores, cost estimates, and latency.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p><strong><u>Bedrock Advanced Prompt Optimization in action</u></strong><br>
        <br>To get started with the new prompt optimization, choose <strong>Create prompt optimization</strong> on the <strong>Advanced Prompt Optimization</strong> page of Amazon Bedrock console.</p>
<p><img decoding="async" loading="lazy" class="aligncenter wp-image-103951 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool.jpg" alt width="2560" height="1506"></p>
<p>Pick up to 5 inference models for which to optimize your prompts. You can use this if you are migrating to a new model or just want to get better performance on their current model. If you&rsquo;re changing models, you can select your current model as a baseline and up to 4 other models. If you aren&rsquo;t changing models, then just select your current model to see before and after optimization.</p>
<p><img decoding="async" loading="lazy" class="aligncenter wp-image-103952 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool-2.png" alt width="2245" height="2373"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p>You should prepare your prompt templates in JSONL format with example user data, ground truth answers, and an evaluation metric or rewriting guidance. For <code>.jsonl</code> files, each JSON object must be on a single line.</p>
<pre><code class="lang-json">{
    "version": "bedrock-2026-05-14",           // required; Fixed value
    "templateId": "string",                    // required
    "promptTemplate": "string",                // required
    "steeringCriteria": ["string"],            // optional
    "customEvaluationMetricLabel": "string",   // required if customLLMJConfig or evaluationMetricLambdaArn is used
    "customLLMJConfig": {                      // optional
        "customLLMJPrompt": "string",          // required if customLLMJConfig present
        "customLLMJModelId": "string"          // required if customLLMJConfig present
    },
    "evaluationMetricLambdaArn": "string",     // optional
    "evaluationSamples": [                     // required
        {
            "inputVariables": [                // required
                {
                    "variableName1": "string",
                    "variableName2": "string"
                }
            ],
            "referenceResponse": "string"      // optional
            "inputVariablesMultimodal": [      // optional
                {
                "Arbitrary_Name": {            // required for your multimodal variable.
                    "type": "string",          // choose from "PDF" or "IMAGE". Acceptable filetypes for IMAGE = png, jpg,  
                    "s3Uri": "string"          // input the S3 path of the file
                }
            ]
        }
    ]
}</code></pre>
<p>You can upload files directly or import prompt templates from Amazon Simple Storage Service (Amazon S3) and set an S3 output location where prompt optimization results and evaluation data will be stored. Then, choose <strong>Create optimization</strong>.</p>
<p>Amazon Bedrock automatically sends your prompt templates and example data with optional ground truth to your inference models, evaluates the responses with your evaluation metric, then rewrites the prompt in a feedback loop to optimize it for your inference models. You&rsquo;ll see evaluation results based on your provided metric and your final optimized prompts.</p>
<p><img decoding="async" loading="lazy" class="aligncenter wp-image-103953 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool-3.png" alt width="2375" height="1225"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/gone-phishing-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Gone Phishing | cPanel Blog</span></a></div><p>As you noted, you can evaluate prompt quality in three ways: a Lambda function with your own Python scoring logic, LLM-as-a-Judge with a custom rubric, or natural-language steering criteria. You can just choose one per prompt template, but can do multiple prompt templates in a job, so they can use a different method for each prompt template if they want.</p>
<ul>
<li><strong>Lambda function</strong> &mdash; If you have a concrete metric (accuracy, F1, execution accuracy, structured-JSON match, etc.), you can deploy a Lambda function containing your custom scoring logic and configure <code>evaluationMetricS3Uri</code> field of the prompt template. Inside the Lambda, the core is a compute_score implementation that programmatically compares model outputs against reference responses.</li>
<li><strong>LLM-as-a-Judge</strong> &mdash; If your task is open-ended (summarization, generation, reasoning explanations) and you want a rubric-based score, you can configure the S3 config file in the <code>customLLMJConfig</code> field of the prompt template to define named metrics with structured instructions and a rating scale. A Bedrock judge model evaluates each prompt-response pair and returns a score with reasoning. The default model is Claude Sonnet 4.6 and you can also select your own from a list of judge models.</li>
<li><strong>Steering criteria</strong> &mdash; If you know the qualities you want (brand voice, format, safety constraints) but don&rsquo;t want to author a full judge prompt, you can define criteria in the input dataset through the <code>steeringCriteria</code> array of the prompt template. Instead of structured metrics with rating scales, you provide free-form natural language criteria that the LLM judge evaluates holistically. If you use this option, then a default LLM-as-a-judge prompt will evaluate the responses and incorporate your steering criteria into the judge prompt. The judge model in this case is Anthropic Claude Sonnet 4.6.</li>
</ul>
<p>To learn more about how to use the advanced prompt optimization and migration, visit the advanced prompt optimization in Bedrock guide&nbsp;and the sample codes in Github.</p>
<p><strong><u>Now available</u></strong><br>
        <br>Amazon Bedrock Advanced Prompt Optimization is available today in US East (N. Virginia, Ohio), US West (Oregon), Asia Pacific (Mumbai, Seoul, Singapore, Sydney, Tokyo), Canada (Central), Europe (Frankfurt, Ireland, London, Zurich), and South America (S&atilde;o Paulo) Regions. You are charged based on the Bedrock model-inference tokens consumed during optimization, at the same per-token rates as regular Bedrock inference. To learn more, visit the Amazon Bedrock pricing page.</p>
<p>Give the advanced prompt optimization a try in the Amazon Bedrock console or with <code>CreateAdvancedPromptOptimizationJob</code> API today and send feedback to AWS re:Post for Amazon Bedrock or through your usual AWS Support contacts.</p>
<p>&mdash; Channy</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/amazon-bedrock-introduces-new-advanced-prompt-optimization-and-migration-tool/">Amazon Bedrock introduces new advanced prompt optimization and migration tool</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>10+ Best Free Minimal Logo Template Collections in 2026</title>
		<link>https://thenokiablog.com/10-best-free-minimal-logo-template-collections-in-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Thu, 14 May 2026 15:42:25 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Color]]></category>
		<category><![CDATA[Fonts]]></category>
		<category><![CDATA[Free Templates]]></category>
		<category><![CDATA[Illustrator]]></category>
		<category><![CDATA[Illustrator Templates]]></category>
		<category><![CDATA[Logo Design]]></category>
		<category><![CDATA[Logo Templates]]></category>
		<category><![CDATA[Minimal Design]]></category>
		<category><![CDATA[Photography]]></category>
		<category><![CDATA[Photoshop]]></category>
		<category><![CDATA[Photoshop PSD Templates]]></category>
		<category><![CDATA[Print & Graphic Design]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/10-best-free-minimal-logo-template-collections-in-2026/</guid>

					<description><![CDATA[<p>Minimalist design has become the go-to choice for brand designers in recent years. While it looks...</p>
<p>The post <a href="https://thenokiablog.com/10-best-free-minimal-logo-template-collections-in-2026/">10+ Best Free Minimal Logo Template Collections in 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p>Minimalist design has become the go-to choice for brand designers in recent years. While it looks simple, getting the balance right can be harder than it seems. That&rsquo;s why starting with a solid template can save time and help things move along faster.</p>
<p>This collection includes some of the best minimalist logo templates that are free for personal and commercial projects. They can be used as inspiration or as a base for your next logo design.</p>
<p>A clean, minimal logo is easier to remember and works well in different settings &mdash; whether online, on packaging, or in print. Scroll through the templates and download anything that fits your next brand project.</p>
<p>You might also like our collection of free feminine logo templates.</p>
<h2><span id="What_Defines_a_Minimal_Logo">What Defines a Minimal Logo?</span></h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>Minimal logos are designed to be clear, direct, and easy to recognize. Instead of trying to say everything at once, they focus on just one idea&mdash;and make that idea as strong as possible. </p>
<ul>
<li><strong>Few elements</strong>: Every shape, line, or letter has a reason to be there. Nothing extra is added just to fill space.</li>
<li><strong>Clean lines and simple shapes</strong>: The design stays basic so it&rsquo;s easier to read, scale, and remember.</li>
<li><strong>No decoration</strong>: Shadows, gradients, and textures are usually left out. The design speaks for itself.</li>
<li><strong>Works in black and white</strong>: A minimal logo holds up without color, making it more flexible across different uses.</li>
<li><strong>Scales without losing detail</strong>: Whether on a billboard or a business card, the logo stays sharp and readable.</li>
<li><strong>Focuses on one idea</strong>: It&rsquo;s built around a single concept, like a letterform, shape, or symbol that ties to the brand.</li>
<li><strong>Simple typefaces</strong>: Fonts are usually plain, bold, or custom, but never overdesigned or hard to read.</li>
<li><strong>Limited colors</strong>: If color is used, it&rsquo;s often one or two flat tones that work well together.</li>
<li><strong>Balanced layout</strong>: Shapes and spacing are carefully arranged so nothing feels off-center or heavy on one side.</li>
<li><strong>Open space</strong>: The design doesn&rsquo;t try to fill every corner. Empty space is part of the design and gives it room to breathe.</li>
</ul>
<hr>
<div class="favorite">
<p class="title-details">In PSD, EPS &amp; AI Formats</p>
<p>Check out this collection of 100 minimal logo templates if you&rsquo;re looking for multiple and varied options. The templates come in Photoshop and Illustrator formats.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026.jpg" height="500" width="900" alt=" 100 minimal ai eps illustrator psd photoshop logo template brand collection pack"></p>
</div>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p class="title-details">In Free, PSD Formats</p>
<p>This collection includes 15 different logo design templates for Adobe Photoshop. You can easily customize the typography as well as the colors.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-1.jpg" height="500" width="900" alt="15 minimal psd photoshop free logo template brand collection pack"></p>
<p class="title-details">In PSD &amp; AI Formats</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>The logos in this collection are perfect if you need to work on a monogram or logo for a brand with a very short name. The templates are in Photoshop and Illustrator formats and have well-organized layers for easy editing.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-2.jpg" height="500" width="900" alt=" 50 minimal ai illustrator psd photoshop logo template brand collection pack"></p>
<p class="title-details">In Free, AI, EPS, PSD &amp; PNG Formats</p>
<p>The Camelia collection of logos is a perfect choice for projects that revolve around natural and organic brands. The logo templates feature delicate floral elements, and you can easily modify the fonts thanks to the layered files.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-3.jpg" height="500" width="900" alt="Camelia 15 minimal ai eps illustrator psd photoshop free logo template brand collection pack"></p>
<p class="title-details">In PSD &amp; AI Formats</p>
<p>This impressive collection of 100 minimal logo templates is a great choice no matter what type of project you&rsquo;re working on. You will find fully editable, layered files as well as a help file that lists all the fonts used in the templates.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-4.jpg" height="500" width="900" alt=" 100 minimal ai illustrator psd photoshop logo template brand collection pack"></p>
<p class="title-details">In Free, PSD Formats</p>
<p>If you&rsquo;re working on a logo design for a photography business, this collection of 3 minimal photography logos will come in handy. The logos can be edited with Photoshop and use free fonts.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-5.jpg" height="500" width="900" alt=" Photography minimal psd photoshop free logo template brand collection pack"></p>
<p class="title-details">In PSD &amp; AI Formats</p>
<p>When you subscribe, you will be able to download this collection of 20 minimalist logo templates. The logo designs come in Photoshop and Illustrator formats and are fully editable.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-6.jpg" height="500" width="900" alt=" minimal ai illustrator psd photoshop logo template brand collection pack"></p>
<p class="title-details">In Free, PSD &amp; AI Formats</p>
<p>This pack contains a grand total of 25 unique minimalist logo designs that can be used as a starting point for your next brand design or as an inspiration. The logo files can be edited using Photoshop and Illustrator.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-7.jpg" height="500" width="900" alt=" minimal ai illustrator psd photoshop free logo template brand collection pack"></p>
<p class="title-details">In PSD &amp; AI Formats</p>
<p>Consider this collection of 50 minimal logos if you&rsquo;re looking for variety in your logo designs. You&rsquo;ll find monogram logos as well as wordmarks. The logos can be edited using either Photoshop or Illustrator.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-8.jpg" height="500" width="900" alt=" 50 minimal ai illustrator psd photoshop logo template brand collection pack"></p>
<p class="title-details">In Free, PSD, AI &amp; EPS Formats</p>
<p>This free collection offers fifteen minimal logo templates, all using a stylish typographical style. Each logo works well on both light and dark backgrounds. The templates are available in Illustrator AI and EPS, and Photoshop PSD format.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-9.jpg" height="500" width="900" alt=" PSD Photoshop AI EPS Illustrator Logo Template Brand Collection Pack"></p>
<p class="title-details">In Free, AI, EPS &amp; SVG Formats</p>
<p>This set includes nine minimal logo templates with geometric designs and a simple, flat color scheme. The logo set is available in Illustrator AI, EPS, and SVG formats.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-10.jpg" height="500" width="900" alt=" Elements AI EPS SVG Illustrator Logo Template Brand Collection Pack"></p>
<p class="title-details">In Free, EPS &amp; SVG Formats</p>
<p>This free package offers ten minimal logo templates with styles ranging from vintage crests to geometric badges. They are available in Illustrator EPS and SVG formats.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-11.jpg" height="500" width="900" alt=" Modern Minimal EPS SVG Illustrator Logo Template Brand Collection Pack"></p>
<p class="title-details">In Free, AI &amp; PSD Formats</p>
<p>This collection features twenty free minimalist vector logo templates, including abstract and geometric designs. These are easy to edit and available in Photoshop PSD format.</p>
<p><img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/10-best-free-minimal-logo-template-collections-in-2026-12.jpg" height="500" width="900" alt=" Minimalistic Vector Logos Logo Template Brand Collection Pack"></p>
<h2><span id="Conclusion">Conclusion</span></h2>
<p>A minimal logo keeps things simple without losing meaning. It&rsquo;s not just about taking things away &mdash; it&rsquo;s about making sure what stays actually matters. When done well, it communicates clearly and leaves a lasting impression.</p>
<p>Whether you&rsquo;re starting fresh or updating an old design, minimalism can help focus attention on the core of the brand. No extra noise. Just what needs to be there, and nothing more.</p>
<hr>
<p>More Logo Templates </p>

<div class="topics">
<h2>Related Topics</h2>
</div>
<p>                                Read more articles by Paul Andrew
                    </p>

<hr>
<p>The post <a href="https://thenokiablog.com/10-best-free-minimal-logo-template-collections-in-2026/">10+ Best Free Minimal Logo Template Collections in 2026</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Practical Interface Patterns For AI Transparency (Part 2)</title>
		<link>https://thenokiablog.com/practical-interface-patterns-for-ai-transparency-part-2/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 13 May 2026 13:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Animation]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Security]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/practical-interface-patterns-for-ai-transparency-part-2/</guid>

					<description><![CDATA[<p>Why traditional loading patterns like spinners fail in agentic AI experiences, and how interface patterns that...</p>
<p>The post <a href="https://thenokiablog.com/practical-interface-patterns-for-ai-transparency-part-2/">Practical Interface Patterns For AI Transparency (Part 2)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>Why traditional loading patterns like spinners fail in agentic AI experiences, and how interface patterns that reveal the system&rsquo;s process, status, and decision-making can improve transparency and build user trust.</section>
</p>
<p>In the first part of this series, we talked about the <strong>Decision Node Audit</strong>. We mapped out the internal workings of our AI system to pinpoint the exact moments it makes decisions based on probabilities. This told us when the system needs to be transparent with the user. Now, the big question is <em>how</em> to share that information.</p>
<p>You&rsquo;ve got your <strong>Transparency Matrix</strong> ready. You know which behind-the-scenes API calls need a visible status update. Your engineers are on board with the technical aspects. The next step is designing the visual container for those updates.</p>
<p>We face a legacy problem. For thirty years, interface designers have relied on a single pattern to handle latency: <strong>the spinner</strong>. The spinning wheel, the throbber, the progress bar. These patterns communicate a specific technical reality. They tell the user that the system is retrieving data. The delay is caused by bandwidth or file size.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>AI agents introduce a new kind of wait time. When an agent pauses for twenty seconds, it&rsquo;s not just downloading something; it&rsquo;s <em>thinking</em>. It&rsquo;s figuring out the best steps, weighing options, and creating the content you asked for.</p>
<p>If we use a basic spinning icon for this &ldquo;thinking time,&rdquo; users get confused and anxious. They watch a looping animation and can&rsquo;t tell if the system is stalled or crashed. They don&rsquo;t know if the agent is handling a very complicated task or if it has simply failed.</p>
<p>To build user trust, we need to turn this waiting time into a <strong>moment for reassurance</strong>. Instead of a passive <em>&ldquo;something is happening,&rdquo;</em> we need to communicate an active, <em>&ldquo;Here is exactly how I am working to solve your problem.&rdquo;</em></p>
<h2 id="writing-clear-status-updates">Writing Clear Status Updates</h2>
<p>We often think of transparency as a visual design problem, but it&rsquo;s really about the <strong>words</strong> we use. Simple, clear explanations (the microcopy) are what build trust and separate a reliable AI from one that feels broken.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>We need to retire generic placeholders like <em>Loading</em> or <em>Working</em>. These words are remnants of the era of static software. Instead, we must construct our status updates using a specific formula that mirrors the agency of the system. Let&rsquo;s stop using vague words like &ldquo;Loading&rdquo; or &ldquo;Working.&rdquo; Those terms belong to the past, when software was simple and static. Instead, we should create status updates that clearly tell the user what the system is <em>actually doing</em> and make the system&rsquo;s actions transparent.</p>
<p>Imagine, for the sake of an example, you are deploying agentic AI that will help team members organize their calendars and plan recurring meetings on their behalf, once prompted.</p>
<p>When an AI displays a message like &ldquo;Checking availability&rdquo; for an unknown amount of time, users often feel lost because it doesn&rsquo;t offer enough information. While they understand the AI is looking at a calendar, they don&rsquo;t know <em>whose</em> calendar it is, what other steps are involved (before or after), or if the AI even remembered the people and purpose of the scheduling request. Waiting for the final result can be a tense, uneasy experience, like anticipating a gift that you suspect might be a prank.</p>
<p>Perplexity AI provides a strong example of doing status updates right. Figure 1 below shows that when users ask a question, the interface displays exactly what it is doing in real time. You see a list of activities updating as they are accomplished. Users do not need to guess what is happening as the AI works.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="354" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2.png" alt="Perplexity AI example"><figcaption class="op-vertical-bottom">Figure 1: Perplexity AI is a good example of showing users the AI&rsquo;s status, including what terms it is using to search the web. (Image source: SaaSUI) (Large preview)</figcaption></figure>
<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container"><img decoding="async" loading="lazy" class="feature-panel-image-img" src="https://www.smashingmagazine.com/images/smashing-cat/cat-scubadiving-panel.svg" alt="Feature Panel" width="257" height="355"></div>


<h2 id="the-agentic-update-formula">The Agentic Update Formula</h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>To give people useful status updates, we need to connect what the system is <em>doing</em> with <em>why</em> it&rsquo;s doing it. Keeping with our scheduling agent example, the system should break down that waiting period into at least four clear, separate steps.</p>
<ul>
<li>First, the interface displays <em>Checking your calendar to find open times for a recurring Thursday call with [Name(s)]</em>.</li>
<li>Then, it updates to: <em>Cross-checking availability with [Name(s)] calendars</em>.</li>
<li>Next, it might display: <em>Syncing [Name(s)] schedules to secure your meeting time on [Data and Time]</em>.</li>
<li>Finally, at the conclusion, the agent might state they have successfully completed the task and request the user check their email to confirm the invite that&rsquo;s been shared with the group having the recurring meeting.</li>
</ul>
<p>This communication process grounds the technical process in the user&rsquo;s actual life.</p>
<p>Making an AI&rsquo;s progress easy to understand boils down to a three-part structure: a strong <strong>Action Word</strong>, what the AI is working on (the <strong>Specific Item</strong>), and any <strong>Limits</strong> or rules it has to follow.</p>
<p>Think about an AI helping you book a trip. A weak, unhelpful update would just be: <em>Searching for flights&hellip;</em></p>
<p>A much better update uses the formula:</p>
<ul>
<li><strong>Action Word:</strong> <em>Scanning</em></li>
<li><strong>Specific Item:</strong> <em>the prices on Lufthansa and United</em></li>
<li><strong>Limits/Rules:</strong> <em>to find anything under $600.</em></li>
</ul>
<p>This approach clearly shows the user that the AI understood their request and is working within the set boundaries.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="437" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2-1.png" alt="The Anatomy of an Agentic AI Status Update"><figcaption class="op-vertical-bottom">Figure 2: The Anatomy of an Agentic AI Status Update. (Large preview)</figcaption></figure>
<h2 id="matching-tone-to-the-risk-matrix">Matching Tone to the Risk Matrix</h2>
<p>Should an AI sound like a person or act like a robot? The right answer depends on the task&rsquo;s importance, which we can figure out using the <strong>Impact/Risk Matrix</strong> from our <strong>Decision Node Audit</strong>.</p>
<p>For simple, low-risk tasks, a friendly, conversational tone works best. For example, a scheduling assistant can say it&rsquo;s checking your calendar for the best time. This creates a comfortable, easygoing experience for the user.</p>
<p>However, high-stakes tasks demand clear, mechanical accuracy. If the AI is managing a big financial transfer or a complicated database migration, users don&rsquo;t want a playful interface; they want precision. A screen that says <em>&ldquo;I am thinking hard about your money&rdquo;</em> would possibly cause panic. Instead, the interface should use straightforward language like <em>&ldquo;Verifying account routing numbers.&rdquo;</em> By adjusting the AI&rsquo;s &ldquo;personality&rdquo; to match the level of risk, we give users exactly the experience they need in that moment. While the Impact/Risk Matrix provides a necessary starting point, the ultimate determinant of the appropriate AI voice and tone is rigorous <strong>user research</strong>.</p>
<p>It&rsquo;s impossible for any set of rules to predict the exact words or tone that will build trust or cause stress for every group of users or in every situation. That&rsquo;s why hands-on research is essential. You need to:</p>
<p>This kind of research ensures the AI&rsquo;s &ldquo;personality&rdquo; is comfortable and appropriate for the actual people who will be using the system in their specific context.</p>
<p>We&rsquo;ve now covered the <em>&ldquo;what&rdquo;</em> &mdash; the critical microcopy, the clear action words, and the necessary limits that make an AI status update honest and informative. But words alone aren&rsquo;t enough. A perfect sentence hidden in a poor interface is still a failure of transparency.</p>
<p>The next challenge is the <em>&ldquo;how&rdquo;</em> &mdash; designing the physical delivery system for that message. You can think of the status update formula as the engine, and the interface pattern as the car. A powerful engine needs a reliable, well-designed chassis to carry it down the road.</p>
<h2 id="interface-patterns-a-library-for-agents">Interface Patterns: A Library For Agents</h2>
<p>Once we have the right words, we need <strong>the right container</strong>. The key is matching the message&rsquo;s weight to the pattern&rsquo;s visibility. A tiny background task (like an agent gently tidying up your files) doesn&rsquo;t need a loud, flashing banner. That message is best delivered subtly. A high-stakes, multi-step process (like moving money) potentially demands a more robust container that forces the user to pay attention.</p>
<p>By creating a library of these patterns, we ensure the right level of transparency is delivered at the right moment, turning the anxiety of waiting into a moment of informed confidence. Let&rsquo;s review a few common, critical patterns.</p>
<h3 id="the-living-breadcrumb-ai-working-in-the-background">The Living Breadcrumb: AI Working in the Background</h3>
<p>For those low-importance tasks that an AI is handling quietly in the background, we need a way to show users it&rsquo;s working without constantly distracting them. We can call this the living breadcrumb.</p>
<p>Think of an email app where an AI is drafting a reply for you. You don&rsquo;t want a disruptive pop-up message. Instead, a small, subtle status indicator pulses within the application&rsquo;s border or menu area.</p>
<p>The solution needs to go beyond a static icon. The living breadcrumb smoothly transitions between different text updates. It might pulse from <em>Reading email</em> to <em>Drafting reply</em> to <em>Checking tone</em>. It&rsquo;s there if you want to check on its progress, offering a quiet assurance that the task is underway, but it won&rsquo;t demand your immediate attention.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="437" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2.jpg" alt><figcaption class="op-vertical-bottom">Figure 3: A subtle, living breadcrumb provides assurance in the background for low-priority tasks, showing the AI is working without demanding constant attention. (Large preview)</figcaption></figure>
<h3 id="dynamic-checklists">Dynamic Checklists</h3>
<p>When dealing with critical, high-stakes tasks &mdash; like processing a complex financial transaction or migrating a large, intricate dataset &mdash; we recommend using a <strong>Dynamic Checklist</strong> (illustrated in Figure 3).</p>
<p>This pattern serves as a powerful anchor for the user, providing clarity and confidence about the <strong>process&rsquo;s progress</strong>. Instead of a simple bar, the Dynamic Checklist lays out every planned step the AI agent will take. It clearly highlights the step that is currently in progress, marks preceding steps as complete, and lists future actions as pending.</p>
<p>For example:</p>
<ul>
<li><strong>Step 1</strong>: Verify Account Balance <strong>[Complete]</strong>.</li>
<li><strong>Step 2</strong>: Convert Currency <strong>[Processing]</strong>.</li>
<li><strong>Step 3</strong>: Transfer Funds <strong>[Pending]</strong>.</li>
</ul>
<p>The Dynamic Checklist offers a significant advantage over a traditional progress bar because it expertly manages unpredictable time. If the currency conversion (Step 2) unexpectedly requires an extra ten seconds, the user won&rsquo;t feel sudden anxiety or panic. They have full visibility into the system&rsquo;s exact location, understanding that the delay is occurring during the <em>Converting Currency</em> step. Because they recognize this is a potentially complex action, they are naturally more patient and trusting of the system&rsquo;s ongoing work.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="652" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2-2.png" alt="Devin.ai example"><figcaption class="op-vertical-bottom">Figure 4: Devin (AI) shows users a dynamic checklist of the tasks it&rsquo;s accomplished, as well as what remains to be done. (Image source: Devin) (Large preview)</figcaption></figure>
<p>The pattern itself is a compelling UI idea, but designers must remember that its implementation transforms the task into a full-stack design requirement. Unlike a simple loading flag, the dynamic checklist requires a robust front-end state management system to listen for step-completion events, which are typically triggered by a back-end webhook structure. This ensures the interface is always reflecting the agent&rsquo;s real-time position in the workflow.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="437" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2-1.jpg" alt="A dynamic checklist example"><figcaption class="op-vertical-bottom">Figure 5: A dynamic checklist is excellent to show transparency in what the AI is doing. It clearly shows the user what steps the AI has already finished, what it&rsquo;s currently working on, and what it plans to do next. (Large preview)</figcaption></figure>
<h3 id="the-thinking-toggle">The Thinking Toggle</h3>
<p>Some users with higher information needs or higher needs for transparency may not trust a simple summary; they want to see the system&rsquo;s raw processing. For this audience, we&rsquo;ve designed the <strong>Thinking Toggle</strong>.</p>
<p>This is a simple progressive disclosure UI control, like a chevron or a &ldquo;View Logs&rdquo; button, that lets the user expand a friendly status update into a raw terminal view. It displays the sanitized logic logs of the AI agent, such as:</p>
<ul>
<li><em>Querying API endpoint /v2/search</em>;</li>
<li><em>Response received: 200 OK</em>;</li>
<li><em>Filtering results by relevance score &gt; 0.8</em>.</li>
</ul>
<p>Many people will never open this view. However, for the user who needs deep transparency, the very presence of this toggle is a signal of trust. It reassures them that the system is not concealing anything.</p>
<p>Keep in mind, with this deep transparency comes a critical technical risk. Even for your most expert audience, you must sanitize and abstract these raw logs before display. This step is non-negotiable to prevent accidentally exposing proprietary business logic, internal data structure names, or security tokens that could be exploited. This process ensures trust is built through honesty, not security vulnerability.</p>
<h3 id="designing-for-partial-success">Designing For Partial Success</h3>
<p>In standard software, things are often black or white. A file either saves or it doesn&rsquo;t. But with AI agents, things are often grey. An agent might plan most of a trip perfectly, yet struggle to book that one special restaurant.</p>
<p>We need to design for when the AI is mostly successful.</p>
<p>Standard binary (yes or no) error messages are trust-killers because they suggest the AI failed completely. If an agent does 90% of a task and only misses the last 10%, a big red &ldquo;Request Failed&rdquo; banner is misleading.</p>
<p>Instead, the interface should clearly show what worked and what didn&rsquo;t:</p>
<ul>
<li><em>Flight booked: UA 492</em> [Success].</li>
<li><em>Hotel reserved: Marriott Downtown</em> [Success].</li>
<li><em>Car rental: Hertz</em> [Failed &mdash; No inventory].</li>
</ul>
<p>This way, you only have to step in and fix the parts that failed, like booking the car yourself, while keeping all the good work the agent already did.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="437" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2-2.jpg" alt><figcaption class="op-vertical-bottom">Figure 6: We need to be more granular in defining how much of a task has been completed when designing content for agentic AI experiences. (Large preview)</figcaption></figure>
<h3 id="disentangling-the-tool">Disentangling The Tool</h3>
<p>When an AI system doesn&rsquo;t perform as expected, it&rsquo;s crucial to be absolutely clear about the true reason for the failure. Users often mistakenly blame the AI itself for problems that are actually caused by an external service or tool the AI relies on.</p>
<p>For example, imagine a virtual assistant tries to look at your schedule, but the connection to the Google Calendar API is down. The error message shouldn&rsquo;t make the assistant look like it failed to do its job.</p>
<ul>
<li><strong>Less helpful:</strong> <em>&ldquo;I could not check your calendar.&rdquo;</em> (This suggests the assistant is incompetent.)</li>
<li><strong>More helpful and honest:</strong> <em>&ldquo;The Google Calendar connection is not responding. I will automatically try again in 30 seconds.&rdquo;</em></li>
</ul>
<p>The first message is frustrating because it makes the AI look like it failed. The second message, though, is much clearer. It explains that the AI is capable, but a broken tool outside its control is causing the issue. This distinction is really important because it keeps the user from losing faith in the AI, even when things go wrong.</p>
<h3 id="the-audit-trail-trust-after-the-fact">The Audit Trail: Trust After The Fact</h3>
<p>Real-time transparency is fleeting. If a user walks away from their desk while the agent is working, they miss the Dynamic Checklist. They return to a finished screen. If the result looks odd, they have no way to verify the work. This is why every agentic workflow requires a persistent Audit Trail.</p>
<p>We need to design a <em>Show Work</em> interaction. On the final result screen, provide a link or history log that allows the user to replay the decision logic.</p>
<ul>
<li><em>See how this price was calculated</em>;</li>
<li><em>View search sources</em>.</li>
</ul>
<p>This receipt is the ultimate safety net. It allows the user to spot-check the validity of the output. Even if they never click it, the mere presence of the receipt tells the user that the system stands behind its work.</p>
<figure class="break-out article__image"><img decoding="async" loading="lazy" width="800" height="437" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2-3.jpg" alt="The Audit trail design pattern"><figcaption class="op-vertical-bottom">Figure 7: The Audit trail design pattern provides the needed transparency to show users how an outcome was achieved. (Large preview)</figcaption></figure>
<p>ChatGPT provides an example of how now providing users with an easy way to audit the information AI uses can cause confusion or user frustration. ChatGPT remembers you in the way a file cabinet quietly fills up with notes about everything you&rsquo;ve ever said, then uses those notes to shape every future conversation without telling you. This is called memory. According to developer Simon Willison, in April 2025, that memory was getting fed into every new conversation automatically.</p>
<p>The problem with ChatGPT&rsquo;s memory at that time was that you couldn&rsquo;t see what it remembers, or when it&rsquo;s using that information, or how it&rsquo;s influencing what you get back. There&rsquo;s no log. No timeline. No plain-language list of <em>&ldquo;here&rsquo;s what the AI has decided about you.&rdquo;</em></p>
<p>The only way to glimpse the dossier was to know a specific prompt trick &mdash; essentially asking the model to quote its own hidden instructions back to you. Most users will never discover this. They&rsquo;ll just notice, as Willison did, that ChatGPT placed a &ldquo;Half Moon Bay&rdquo; sign in the background of an image they generated (Figure 8) because it had silently cross-referenced their location from previous conversations. This is the absence of transparency (the ability to audit the memory with ease) disguised as personalization. You need to provide users with both.</p>
<figure><img decoding="async" loading="lazy" width="800" height="636" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2-3.png" alt><figcaption class="op-vertical-bottom">Figure 8: Willison asked ChatGPT to put the dog in a pelican costume, but he did not ask for the &ldquo;Half Moon Bay&rdquo; sign. Proving that ChatGPT was tracking information on users without clearly allowing users to access what information was being stored. (Image source: Simon Willison&rsquo;s Weblog) (Large preview)</figcaption></figure>
<p><strong>The Audit Trail pattern</strong> is the ultimate solution to the memory audit problem demonstrated by ChatGPT. It is one of four core design solutions that, together, create a library of options for improving AI transparency.</p>
<p>Here is a quick summary of the key interface patterns discussed in this article, which are designed to transform AI waiting time from a moment of anxiety into an opportunity to build user confidence:</p>
<table class="tablesaw break-out">
<thead>
<tr>
<th>Pattern</th>
<th>Best Use Case</th>
<th>The User&rsquo;s Anxiety</th>
<th>The Trust Signal</th>
</tr>
</thead>
<tbody>
<tr>
<td>The Living Breadcrumb</td>
<td>Low-stakes, background tasks (e.g., drafting emails, sorting files).</td>
<td>Did the system stall or freeze?</td>
<td>I am active, but I won&rsquo;t disturb you.</td>
</tr>
<tr>
<td>The Dynamic Checklist</td>
<td>High-stakes workflows with variable time (e.g., financial transfers, booking travel).</td>
<td>Is it stuck? What step is taking so long?</td>
<td>I have a plan, and I am currently executing Step 2.</td>
</tr>
<tr>
<td>The Thinking Toggle</td>
<td>Expert tools or complex data analysis (e.g., code generation, market research).</td>
<td>Is this hallucinating or using real data?</td>
<td>I have nothing to hide; here are my raw logs.</td>
</tr>
<tr>
<td>The Audit Trail</td>
<td>Post-task review for any outcome (e.g., final reports, completed bookings).</td>
<td>How do I know this result is accurate?</td>
<td>Here is the receipt of my work for you to verify.</td>
</tr>
</tbody>
</table>
<p><strong><em>Table 1:</em></strong> <em>Four design patterns enhancing transparency.</em></p>
<h3 id="the-reality-of-attention-when-users-ignore-the-interface">The Reality of Attention: When Users Ignore the Interface</h3>
<p>Even the most perfectly designed checklist or the clearest status message may still go ignored by many users.</p>
<p>When people are working on tons of tasks, especially professionals, they often tune out the interface. Think of an insurance underwriter creating fifty quotes a day &mdash; they&rsquo;re not watching a progress bar. They click &ldquo;Generate,&rdquo; switch tabs to answer an email, and only come back when the task is done.</p>
<p>My research with these experts shows they judge the system based entirely on the final result. They have a good idea of what the answer <em>should</em> be. If a salesperson expects a premium between $500 and $600, and the system returns $550, they accept it right away, and trust is established.</p>
<p>These experts tell me that over time, as the AI continues to provide what they perceive as accurate outputs, usage will increase, and they will save time versus manual quoting. Essentially, the system is now viewed as an efficient accelerator of an otherwise monotonous yet mandatory task.</p>
<p>But if the system returns $900, the user stops. The output is not aligned with expectations, and that&rsquo;s a problem they must solve. At that moment, the user switched tabs; they missed the little explanation about the high-risk surcharge that popped up in real-time. They didn&rsquo;t see the specific rule that was triggered. If that explanation disappeared with the progress bar, the user has no way to understand the difference between expectation and outcome. They certainly won&rsquo;t run the query again just to watch the animation play out.</p>
<p>They will run the quote by hand, effectively treating the AI&rsquo;s output as useless and initiating a complete rework of their effort. This manual recalculation feels like a waste of time, which further erodes their confidence in the tool. Once this happens, the user is not interested in <em>why</em> the system chose $900; they are focused purely on validating or invalidating the system&rsquo;s accuracy against their own, trusted methods. This lack of transparency, especially in moments of disagreement, is a primary barrier to adoption and consistent use. The audit trail allows us to provide persistent transparency and is the mechanism that prevents the AI from creating more work.</p>
<p>We need to keep this in mind, particularly when delivering AI-powered tools meant for enterprise use. If the tool delivers a result that misaligns with expectations, you rarely get a second chance. If the user must spend ten minutes investigating why the AI provided that number, they will stop using the AI.</p>
<h3 id="predictability-reliability-and-understanding-are-the-product">Predictability, Reliability, and Understanding Are The Product</h3>
<p>We are not building magic tricks. A magic trick relies on misdirection and hidden mechanics. We are building colleagues.</p>
<p>Think of a good colleague, they keep you in the loop. They let you know what they&rsquo;re up to, what&rsquo;s taking their time, and when they hit a snag. That honesty is what helps you trust them.</p>
<p>We can apply this to AI. By using the practical patterns we discussed: giving specific updates, showing a dynamic checklist, acknowledging partial wins, and keeping an audit trail, we stop seeing AI as a mysterious black box that just needs a nice coat of paint. Instead, we start treating it like a team member we can rely on and manage, which builds trust and a clear understanding.</p>
<p>The main reason for using these interface ideas is to achieve real transparency, going beyond explaining the AI&rsquo;s complicated inner workings. Here, transparency means showing the user the <strong>AI&rsquo;s process and performance</strong> right when they need to see it. This involves plainly communicating the <strong>AI&rsquo;s current status</strong>, its known <strong>limits</strong>, and an easy-to-follow <strong>history of its decisions</strong>. This level of openness changes the interaction from just accepting what the AI does to actively working with it. It lets users understand why they got a certain result and how they can best step in or guide the system for the best possible outcome.</p>
<h3 id="references">References</h3>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/practical-interface-patterns-for-ai-transparency-part-2-4.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(yk)</span></div>
<p>The post <a href="https://thenokiablog.com/practical-interface-patterns-for-ai-transparency-part-2/">Practical Interface Patterns For AI Transparency (Part 2)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Amazon Redshift introduces AWS Graviton-based RG instances with an integrated data lake query engine</title>
		<link>https://thenokiablog.com/amazon-redshift-introduces-aws-graviton-based-rg-instances-with-an-integrated-data-lake-query-engine/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 12 May 2026 16:05:12 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Redshift]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[AWS Management Console]]></category>
		<category><![CDATA[AWS Support]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Business Intelligence]]></category>
		<category><![CDATA[Compute]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Generative AI]]></category>
		<category><![CDATA[Graviton]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Regions]]></category>
		<category><![CDATA[Serverless]]></category>
		<category><![CDATA[Storage]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/amazon-redshift-introduces-aws-graviton-based-rg-instances-with-an-integrated-data-lake-query-engine/</guid>

					<description><![CDATA[<p>Since 2013, Amazon Redshift has given the full power of a data warehouse in the cloud,...</p>
<p>The post <a href="https://thenokiablog.com/amazon-redshift-introduces-aws-graviton-based-rg-instances-with-an-integrated-data-lake-query-engine/">Amazon Redshift introduces AWS Graviton-based RG instances with an integrated data lake query engine</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/amazon-redshift-introduces-aws-graviton-based-rg-instances-with-an-integrated-data-lake-query-engine.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>Since 2013, Amazon Redshift has given the full power of a data warehouse in the cloud, at a fraction of the on-premises cost. Every architectural generation&mdash;from dense compute to Amazon RA3 instances, from provisioned to Amazon Redshift Serverless&mdash;has made each query cheaper, faster, and more efficient than the last.</p>
<p>For over a decade, as data volumes have grown and analytics requirements have evolved, organizations increasingly leverage both data warehouse tables for structured, frequently-accessed data and data lakes for cost-effective storage of diverse datasets. Add AI agents to the mix and they query your data warehouse at a scale that dwarfs typical human usage, leading to spiraling operational costs.</p>
<p>Amazon Redshift has doubled down on its core strengths to meet the demands of any workload &mdash; whether driven by humans or AI agents. For example, in March 2026, Amazon Redshift improved the performance of business intelligence (BI) dashboards and ETL workloads by speeding up new queries by up to 7 times. This significantly improves the response times of low-latency SQL queries, such as those used in near-real-time analytics applications, BI dashboards, ETL pipelines, and autonomous, goal-seeking AI agents.</p>
<p>Today, we&rsquo;re announcing Amazon Redshift RG instances, a new instance family powered by AWS Graviton. RG instances deliver better performance, running data warehouse workloads up to 2.2x as fast as RA3 instances at 30% lower price per vCPU. Their integrated data lake query engine lets you run SQL analytics across your data warehouse and data lake from a single engine with performance up to 2.4x as fast as RA3 for Apache Iceberg and up to 1.5x as fast as RA3 for Apache Parquet.&nbsp;This blend of speed, cost efficiency, and an integrated data lake query engine makes Redshift RG instances well-suited to handle the high query volumes and low-latency requirements of today&rsquo;s analytics and agentic AI workloads.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p>You can compare new RG instances and current RA3 instances:</p>
<table>
<tbody readability="3.5">
<tr>
<td><strong>Current RA3 Instance</strong></td>
<td><strong>Recommended RG instance</strong></td>
<td><strong>vCPU</strong></td>
<td><strong>Memory (GB)</strong></td>
<td><strong>Primary Use Case</strong></td>
</tr>
<tr readability="2">
<td><code>ra3.xlplus</code></td>
<td><code>rg.xlarge</code></td>
<td>4</td>
<td>32</td>
<td>Small cluster departmental analytics</td>
</tr>
<tr readability="5">
<td><code>ra3.4xlarge</code></td>
<td><code>rg.4xlarge</code></td>
<td>12 &rarr; 16 (1.33:1)</td>
<td>96 GB &rarr; 128 GB (1.33:1)</td>
<td>Standard production workloads, medium data volumes</td>
</tr>
</tbody>
</table>
<p>This approach reduces total analytics costs for customers running combined data warehouse and data lake workloads, while simplifying operations through a single system for querying both warehouse tables and Amazon Simple Storage Service (Amazon S3) data lakes. We recommend using the AWS Pricing Calculator with your specific workload patterns to estimate savings.</p>
<p><strong><u>Getting started with Amazon Redshift RG instances</u></strong><br>
        <br>You can launch new clusters or migrate existing clusters through the AWS Management Console, AWS Command Line Interface (AWS CLI), or AWS API. The integrated data lake query engine is enabled by default.</p>
<p>In the Amazon Redshift console, you can choose new RG instances when you create a cluster.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p><img loading="lazy" decoding="async" class="aligncenter wp-image-103897 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/amazon-redshift-introduces-aws-graviton-based-rg-instances-with-an-integrated-data-lake-query-engine-1.png" alt width="2120" height="1254"></p>
<p>You can migrate previous-generation instances to RG instances with optimal paths based on your cluster configuration to estimate costs, validate compatibility, and automate execution.</p>
<ul>
<li><strong>Elastic Resize</strong>&mdash;in-place migration with 10-15 minutes downtime for compatible configurations</li>
<li><strong> Snapshot and Restore</strong>&mdash;create a RG cluster from an RA3 snapshot. This is best for customers who want to make configuration changes during the migration</li>
</ul>
<p>Your external tables, schemas, and query syntax&mdash;including existing Spectrum queries&mdash;remain unchanged. There is no need to recreate external tables or modify application code.&nbsp;To learn more, visit the Redshift Management Guide.</p>
<p>Amazon Redshift now executes data lake queries on cluster nodes&mdash;the same compute that processes data warehouse workloads. As a result, Amazon Redshift Spectrum is no longer required. Data lake queries stay within your VPC boundary, use existing IAM roles, and incur zero per-terabyte scanning charges. This removes the $5/TB Spectrum scanning fees that previously added to total Redshift costs.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/gone-phishing-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Gone Phishing | cPanel Blog</span></a></div><p><strong><u>Now available</u></strong><br>
        <br>Amazon Redshift RG instances are now available in the following AWS Regions: US East (N. Virginia, Ohio), US West (N. California, Oregon), Asia Pacific (Hong Kong, Hyderabad, Jakarta, Malaysia, Melbourne, Mumbai, Osaka, Seoul, Singapore, Sydney, Taiwan, Tokyo), Canada (Central), Europe (Frankfurt, Ireland, Milan, London, Paris, Spain, Stockholm), and South America (S&atilde;o Paulo). For Regional availability and a future roadmap, visit the AWS Capabilities by Region.&nbsp;For Redshift Provisioned, you can select On-Demand Instances with hourly billing and no commitments or choose Reserved Instances for cost savings.&nbsp;To learn more, visit the Amazon Redshift Pricing page.</p>
<p>Give RG instances a try in the Redshift console and send feedback to AWS re:Post for Amazon Redshift or through your usual AWS Support contacts.</p>
<p>&mdash; Channy</p>
<p>Updated 5/12/26: Middle East (UAE) removed from available regions.</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/amazon-redshift-introduces-aws-graviton-based-rg-instances-with-an-integrated-data-lake-query-engine/">Amazon Redshift introduces AWS Graviton-based RG instances with an integrated data lake query engine</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>AWS Weekly Roundup: Amazon Bedrock AgentCore payments, Agent Toolkit for AWS, and more (May 11, 2026)</title>
		<link>https://thenokiablog.com/aws-weekly-roundup-amazon-bedrock-agentcore-payments-agent-toolkit-for-aws-and-more-may-11-2026/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Mon, 11 May 2026 16:08:26 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Aurora]]></category>
		<category><![CDATA[Amazon Bedrock]]></category>
		<category><![CDATA[Amazon Bedrock AgentCore]]></category>
		<category><![CDATA[Amazon CloudWatch]]></category>
		<category><![CDATA[Amazon EC2]]></category>
		<category><![CDATA[Amazon ElastiCache]]></category>
		<category><![CDATA[Amazon Machine Learning]]></category>
		<category><![CDATA[Amazon WorkSpaces]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Compute]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[DevOps]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[Kiro]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Startup]]></category>
		<category><![CDATA[Week in Review]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/aws-weekly-roundup-amazon-bedrock-agentcore-payments-agent-toolkit-for-aws-and-more-may-11-2026/</guid>

					<description><![CDATA[<p>My most exciting news of last week: Amazon Bedrock AgentCore previewed the first managed payment capabilities...</p>
<p>The post <a href="https://thenokiablog.com/aws-weekly-roundup-amazon-bedrock-agentcore-payments-agent-toolkit-for-aws-and-more-may-11-2026/">AWS Weekly Roundup: Amazon Bedrock AgentCore payments, Agent Toolkit for AWS, and more (May 11, 2026)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/aws-weekly-roundup-amazon-bedrock-agentcore-payments-agent-toolkit-for-aws-and-more-may-11-2026.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>My most exciting news of last week: Amazon Bedrock AgentCore previewed the first managed payment capabilities enabling AI agents to autonomously access and pay for APIs, MCP servers, web content, and other agents. Built in partnership with Coinbase and Stripe, it removes the undifferentiated heavy lifting of building customized systems for billing, credential management, and compliance.</p>
<p><img decoding="async" class="aligncenter size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/aws-weekly-roundup-amazon-bedrock-agentcore-payments-agent-toolkit-for-aws-and-more-may-11-2026.jpg" align="center"></p>
<p>You can connect a Coinbase CDP wallet or Stripe Privy wallet as a payment connection, set session-level spending limits, and your agent transacts autonomously during execution. What excites me most is what AgentCore payments can unlock&mdash;like a research agent that can pay for real-time market data on the fly, or a coding agent calling paid APIs mid-task.</p>
<p>To learn more, visit the blog post, dive deeper using the documentation, and get started with the AgentCore CLI.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p><strong>Last week&rsquo;s launches</strong><br>
        <br>Here are last week&rsquo;s launches that caught my attention:</p>
<ul>
<li>Agent Toolkit for AWS &ndash; A production-ready suite of tools and guidance, available at no additional charge, that helps AI coding agents build on AWS with fewer errors, lower token costs, and enterprise-grade security controls. The Agent Toolkit for AWS is the successor to the MCP servers, plugins, and skills available on AWS Labs. To get started, visit&nbsp;the quick start guide or browse the available skills and plugins on GitHub.</li>
<li>AWS MCP Server GA &ndash; You can use a managed remote Model Context Protocol (MCP) server that gives AI agents and coding assistants secure, authenticated access to all AWS services through a small, fixed set of tools. It is part of the Agent Toolkit for AWS. To learn more, visit Seb Stormacq&rsquo;s blog post.</li>
<li> Amazon WorkSpaces for AI agents (Preview) &ndash; You can use AI agents to securely access and operate desktop applications through managed WorkSpaces environments. This capability allows organizations to automate everyday workflows at scale while maintaining full enterprise-grade governance and compliance. To learn more, visit Micah Walter&rsquo;s blog post.</li>
<li>Amazon EC2 M8idn/M8idb and R8idn/R8idb instances &ndash; These instances are powered by custom sixth-generation Intel Xeon Scalable processors available only on AWS and the latest sixth-generation AWS Nitro cards. These instances deliver up to 43% better compute performance per vCPU compared to previous-generation instances. M8idn/R8idn instances offer up to 600 Gbps network bandwidth, and M8idb/R8idb instances deliver up to 300 Gbps EBS bandwidth.</li>
</ul>
<p>For a full list of AWS announcements, be sure to keep an eye on the What&rsquo;s New with AWS page.</p>
<p><strong>Additional updates</strong><br>
        <br>Here are some additional news items that you might find interesting:</p>
<ul>
<li>Valkey turns two &ndash; Valkey stands as proof that open, community-driven technology innovates faster, scales further, and delivers more value than any single-vendor model. Valkey has surpassed 100 million Docker pulls (up 17x year over year) and attracted more than 225 contributors who have submitted over 1,500 pull requests, roughly double the development pace of Redis over the same period. You can also use the latest Valkey 9.0 in Amazon ElastiCache.</li>
<li>Query billion-scale vectors with SQL &ndash; You can learn how to query Amazon S3 Vectors from Amazon Aurora PostgreSQL-Compatible Edition using standard SQL, and how to combine vector similarity results with relational filters in a single query, for example, finding the most semantically similar products and then filtering by price, stock status, or tenant in one SQL statement.</li>
<li>Building an end-to-end agentic SRE using AWS DevOps Agent &ndash; Learn how to configure DevOps Agent Spaces that define an investigation scope, integrating seamlessly with Amazon CloudWatch, Splunk, GitHub, and Slack. You can also learn how to trigger automated investigations via webhooks, generate mitigation plans, and hand off agent-ready specs to coding agents like Kiro for implementation.</li>
</ul>
<p>For a full list of AWS blog posts, be sure to keep an eye on the AWS Blogs page.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p>Learn more about AWS, browse and join upcoming AWS-led in-person and virtual events, startup events, and developer-focused events as well as AWS Summits and AWS Community Days. Join the AWS Builder Center to connect with builders, share solutions, and access content that supports your development.</p>
<p>That&rsquo;s all for this week. Check back next Monday for another Weekly Roundup!</p>
<p>&mdash; Channy</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/aws-weekly-roundup-amazon-bedrock-agentcore-payments-agent-toolkit-for-aws-and-more-may-11-2026/">AWS Weekly Roundup: Amazon Bedrock AgentCore payments, Agent Toolkit for AWS, and more (May 11, 2026)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The AWS MCP Server is now generally available</title>
		<link>https://thenokiablog.com/the-aws-mcp-server-is-now-generally-available/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 06 May 2026 15:36:44 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Aurora]]></category>
		<category><![CDATA[Amazon Bedrock]]></category>
		<category><![CDATA[Amazon Bedrock AgentCore]]></category>
		<category><![CDATA[Amazon CloudWatch]]></category>
		<category><![CDATA[Announcements]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[AWS CLI]]></category>
		<category><![CDATA[AWS Cloud Development Kit]]></category>
		<category><![CDATA[AWS CloudFormation]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[DSQL]]></category>
		<category><![CDATA[Identity]]></category>
		<category><![CDATA[Kiro]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Open Source]]></category>
		<category><![CDATA[Regions]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/the-aws-mcp-server-is-now-generally-available/</guid>

					<description><![CDATA[<p>I have been building with AI agents and MCP tools for a while now, and one...</p>
<p>The post <a href="https://thenokiablog.com/the-aws-mcp-server-is-now-generally-available/">The AWS MCP Server is now generally available</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/the-aws-mcp-server-is-now-generally-available.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>I have been building with AI agents and MCP tools for a while now, and one question kept coming up: how do you give an agent real, authenticated access to AWS without handing it the keys to the kingdom? Today, there is an answer.</p>
<p>I&rsquo;m happy to announce the general availability of the AWS MCP Server, a managed remote Model Context Protocol (MCP) server that gives AI agents and coding assistants secure, authenticated access to all AWS services through a small, fixed set of tools.</p>
<p>The AWS MCP Server is part of the Agent Toolkit for AWS, a suite of tooling that includes the MCP Server, skills, and plugins that help coding agents build more effectively and efficiently on AWS.</p>
<p>AI coding agents are already useful for many tasks, but they run into real trouble when working with AWS at any meaningful depth. Without access to current AWS documentation, agents rely on training data that may be months out of date and may not know about services like Amazon S3 Vectors, Amazon Aurora DSQL, or Amazon Bedrock AgentCore. When asked to build infrastructure, they tend to reach for the AWS Command Line Interface (AWS CLI) rather than AWS Cloud Development Kit (AWS CDK) or AWS CloudFormation, and they produce AWS Identity and Access Management (IAM) policies that are far broader than necessary. The result is infrastructure that works in a demo but is not production-ready.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p>The AWS MCP Server addresses this through a compact set of tools that do not consume your model&rsquo;s context window. The <code>call_aws</code> tool executes any of the 15,000+ AWS API operations using your existing IAM credentials. When we will launch new APIs, they will be supported within days. The <code>search_documentation</code> and <code>read_documentation</code> tools retrieve current AWS documentation and best practices at query time, so the agent always works from up-to-date information.</p>
<p>With general availability, we are introducing several new capabilities. The AWS MCP Server now supports IAM context keys, so you no longer need a separate IAM permission to use the server and can express fine-grained access in a standard IAM policy. Documentation retrieval no longer requires authentication. We have also reduced the number of tokens required per interaction, which matters for complex, multi-step workflows.</p>
<p>Also new, the <code>run_script</code> tool lets the agent write a short Python script that runs server-side in a sandboxed environment. The sandbox inherits your IAM permissions but has no network access, so you can give an agent the ability to process data without giving it access to your local file system or a shell. When an agent needs to call multiple APIs and combine the results, making them one at a time is slow and burns context. With <code>run_script</code>, the agent chains API calls, filters responses, and computes results in a single round-trip, which is both faster and more context-efficient.</p>
<p>The most significant addition is the transition from Agent SOPs to Skills. Skills provide curated guidance and best practices for the tasks where agents most commonly make mistakes. This helps agents complete work faster, using validated best practices, with fewer errors and fewer tokens &mdash; all of which saves you time and money. Skills are contributed and maintained by AWS service teams. This keeps the tool list short and predictable, which reduces hallucination and keeps the agent focused.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p>For enterprise customers, the AWS MCP Server provides a clear separation between human and agent permissions. You can use IAM policies or Service Control Policies to specify that a given user can perform mutating operations while the MCP server is restricted to read-only actions. Amazon CloudWatch metrics published under the <code>AWS-MCP</code> namespace let you observe MCP server calls separately from direct human calls, giving you the audit trail that compliance teams require. Amazon CloudTrail captures all API calls for a complete record.</p>
<p><span><strong>Let&rsquo;s see it in action<br>
          <br></strong></span>For this demo, I chose to use Claude Code, but I can use the AWS MCP Server with any AI agent that supports MCP, which is basically all tools available today: Kiro CLI, Kiro, Cursor, Codex, and more. I configure Claude Code to use the Anthropic Opus 4.6 model.</p>
<p>Opus 4.6 has a knowledge cutoff date in May 2025. It means it doesn&rsquo;t know anything that happened after May last year. I ask a question about an AWS service that was introduced recently: Amazon S3 Vectors, launched in preview in July 2025 and that went GA in December 2025.</p>
<p>The question is &ldquo;how to store embedding on S3&Prime;. (embedding is a kind of vector)</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/gone-phishing-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Gone Phishing | cPanel Blog</span></a></div><p>It gives me five solutions, all correct, but none using S3 Vectors as I asked. Note that this answer comes from the Opus 4.6 model, not from Claude Code. Any AI tool using the same model will return similar answers because S3 Vectors wasn&rsquo;t announced at the time the model was trained.</p>
<p><img loading="lazy" decoding="async" class="aligncenter size-large wp-image-103776" src="https://thenokiablog.com/wp-content/uploads/2026/05/the-aws-mcp-server-is-now-generally-available-1.png" alt="Claude Code response about S3 Vectors with Opus 4.6 and no AWS MCP Server" width="1024" height="813"></p>
<p>Let&rsquo;s now try with the AWS MCP Server.</p>
<p>The AWS MCP Server uses AWS Identity and Access Management (IAM) and IAM SigV4 authentication. To use my local AWS credentials configuration over MCP, which only supports OAuth 2.1, I configure my AI coding agent to call the AWS MCP Server through a proxy. The MCP Proxy for AWS is an open source proxy that runs on my machine and bridges the world of IAM authentication to OAuth.</p>
<p>I add the MCP configuration with this command:</p>
<pre><code class="lang-bash">claude mcp add-json aws-mcp --scope user 
   '{"command":"uvx","args":["mcp-proxy-for-aws@latest","https://aws-mcp.us-east-1.api.aws/mcp","--metadata","AWS_REGION=us-west-2"]}'
</code></pre>
<p>You&rsquo;ll have to have <code>uv</code> installed before you can use the AWS MCP server. On Linux or Mac, you can run: <code>curl -LsSf https://astral.sh/uv/install.sh | sh </code><br>
        <br>Let&rsquo;s analyze the JSON configuration:</p>
<ul>
<li>I use the user scope to make the server available to all my projects on my laptop.</li>
<li><code>uvx mcp-proxy-for-aws</code> is the command to launch the proxy; the rest of the arguments are parameters passed to the proxy.</li>
<li><code>https://aws-mcp.us-east-1.api.aws/mcp</code> is one of the two regional endpoints for the AWS MCP Server. The proxy will forward Claude Code&rsquo;s requests to that endpoint.</li>
<li><code>--metadata</code> are passed to the proxy target. Here, it tells the AWS MCP Server to use the US West (Oregon) Region.</li>
</ul>
<p>I start Claude Code and I type <code>/mcp</code> to verify the AWS MCP Server is correctly installed and can use my credentials.</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-103775" src="https://thenokiablog.com/wp-content/uploads/2026/05/the-aws-mcp-server-is-now-generally-available-2.png" alt="Verify AWS MCP Server in Claude Code" width="1024" height="678"></p>
<p>I ask the same question: &ldquo;how can I store embedding on S3&rdquo;.</p>
<p>This time, Claude Code knows it has a tool it can use to answer the question. It asks me permission to invoke the <code>aws___search_documentation</code> tool. After a few seconds, I receive a correct answer: &ldquo;AWS now has a dedicated service for this: Amazon S3 Vectors &hellip;&rdquo;</p>
<p><img decoding="async" loading="lazy" class="aligncenter size-large wp-image-103777" src="https://thenokiablog.com/wp-content/uploads/2026/05/the-aws-mcp-server-is-now-generally-available-3.png" alt="Claude Code correct response about S3 Vectors" width="1024" height="813"></p>
<p><span><strong>Pricing and availability<br>
          <br></strong></span>The AWS MCP Server is available today in the US East (N. Virginia) and Europe (Frankfurt) AWS Regions and can make API calls to any Region. There is no additional charge for the AWS MCP server itself. You pay only for the AWS resources you create and any applicable data transfer costs.</p>
<p>The AWS MCP Server works with Claude Code, Kiro, Cursor, and any MCP-compatible client. To get started, see the AWS MCP Server User Guide.</p>
<p>I have been waiting for something like this since I started using MCP tools in my AI agents early last year. The combination of current documentation, authenticated API access, and sandboxed script execution in a single server changes what an agent can actually do on AWS. I am curious what you build with it. Let me know in the comments.</p>
<p>       &mdash; seb</p>
<p><strong>Updated on May 6th</strong> &ndash; Added <code>uv</code> installation script.</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/the-aws-mcp-server-is-now-generally-available/">The AWS MCP Server is now generally available</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>The Architecture Of Local-First Web Development</title>
		<link>https://thenokiablog.com/the-architecture-of-local-first-web-development/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Wed, 06 May 2026 10:00:00 +0000</pubDate>
				<category><![CDATA[Design]]></category>
		<category><![CDATA[Analytics]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Dashboard]]></category>
		<category><![CDATA[data]]></category>
		<category><![CDATA[Database]]></category>
		<category><![CDATA[Developer]]></category>
		<category><![CDATA[Events]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Startup]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/the-architecture-of-local-first-web-development/</guid>

					<description><![CDATA[<p>What does it really take to build local-first web apps in 2026? A grounded, experience-driven perspective...</p>
<p>The post <a href="https://thenokiablog.com/the-architecture-of-local-first-web-development/">The Architecture Of Local-First Web Development</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<p><section aria-label="Quick summary" class="article__summary"><span id="article__start" class="summary__heading" aria-hidden="true"></span>What does it really take to build local-first web apps in 2026? A grounded, experience-driven perspective for developers who&rsquo;ve been doing this long enough to be skeptical of silver bullets.</section>
</p>
<p>Last October, I was sitting in a hotel room in Lisbon, the night before I was supposed to demo a project management tool my team had spent four months building. The hotel Wi-Fi was doing that thing where it <em>connects</em> but nothing actually loads. And I watched our app, this thing I was genuinely proud of, render a blank screen with a spinner. Then a timeout error. Then nothing.</p>
<p>I pulled out my phone, tethered to cellular, and got a shaky connection. The app loaded, but every click was a two-second wait. Create a task? Spinner. Move a task between columns? Spinner. I sat there thinking: we built a front end in React, a back end in Node, a Postgres database, a Redis cache, a GraphQL API with six resolvers just for the task board. All that infrastructure, and the damn thing can&rsquo;t show me my own data without a round-trip to a server 3,000 miles away.</p>
<p>That was the night I started seriously looking at <strong>local-first architecture</strong>. Not because I read a blog post or saw a tweet. Because I was <em>embarrassed</em>.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/rose-gold-design/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Rose gold design</span></a></div><p>I want to be upfront about something: I spent the first year or so dismissing local-first as academic. I read the Ink &amp; Switch &ldquo;Local-First Software&rdquo; paper when it came out in 2019 and thought, <em>&ldquo;Cool research, not practical for real apps.&rdquo;</em> I was wrong. The tooling in 2019 genuinely wasn&rsquo;t ready. But I was also being lazy, defaulting to the architecture I already knew. The paper laid out seven ideals for software: <strong>fast, multi-device, offline, collaboration, longevity, privacy, user ownership</strong>. And I remember thinking those sounded like a wish list, not engineering requirements.</p>
<p>Seven years later, I&rsquo;ve shipped three production apps using local-first patterns. I&rsquo;ve also ripped local-first out of two projects where it was the wrong call. I have opinions. Some of them are probably wrong. But they&rsquo;re earned.</p>
<p>So here&rsquo;s what I actually think about building local-first web apps in 2026, written for developers who&rsquo;ve been doing this long enough to be skeptical of silver bullets.</p>
<div data-audience="non-subscriber" data-remove="true" class="feature-panel-container"><img decoding="async" loading="lazy" class="feature-panel-image-img" src="https://thenokiablog.com/wp-content/uploads/2026/05/the-architecture-of-local-first-web-development.png" alt="Feature Panel" width="481" height="698"></div>


<h2 id="what-local-first-actually-means-and-the-confusion-that-won-t-die">What &ldquo;Local-First&rdquo; Actually Means (And The Confusion That Won&rsquo;t Die)</h2>
<p>I need to clear something up because I keep having this conversation at meetups. <strong>Local-first is not offline-first.</strong> It&rsquo;s not &ldquo;add a service worker and call it a day.&rdquo; It&rsquo;s not a synonym for PWA. I&rsquo;ve seen all of these conflated in conference talks, and it drives me a little crazy.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/passion-work/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Passion &amp; work</span></a></div><p>Offline-first means your app handles network loss gracefully, but the server is still the source of truth. When the network comes back, the server wins. Cache-first (service workers caching responses) is a performance optimization. You&rsquo;re serving stale data faster, which is great, but you haven&rsquo;t changed who <em>owns</em> the data. PWAs are a delivery mechanism: installable, cached, push notifications. None of these is a data architecture.</p>
<p><strong>Local-first is a data architecture.</strong> Your user&rsquo;s device holds the primary copy of their data. The app reads and writes to a local database. Renders instantly. Syncs with servers or other devices in the background. The server, when it exists, is a sync peer with some special authority (authentication, backup, access control). But it&rsquo;s not the gatekeeper.</p>
<p>The Ink &amp; Switch paper defined seven ideals, and I think they still hold up. But the one that matters most in practice, the one that changes how you build everything, is this:</p>
<blockquote><p>The client is not a thin view requesting permission to show data. The client is a <strong>node</strong> in a distributed system with its own database.</p></blockquote>
<p>That distinction sounds subtle. It isn&rsquo;t. It changes your entire stack.</p>
<h2 id="be-honest-early-when-you-should-not-do-this">Be Honest Early: When You Should Not Do This</h2>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/the-joy-of-art/" class="template-2"><span class="cta">Read more</span><span class="postTitle">The joy of art</span></a></div><p>I&rsquo;m putting this near the top because I&rsquo;ve watched too many developers (including myself, once) get excited about a new architecture and shoehorn it into projects where it doesn&rsquo;t belong. I wasted about six weeks trying to make a local-first approach work for an internal analytics dashboard at a previous job. My colleague Sarah finally pulled me aside and said, <em>&ldquo;The data is generated on the server. There&rsquo;s nothing to replicate to the client. What are you doing?&rdquo;</em> She was right.</p>
<p>Local-first is a bad fit when your data is primarily server-generated. Analytics dashboards, social media feeds, search results: the server <em>produces</em> this data, so the client consuming it via API requests is completely fine.</p>
<p>It&rsquo;s wrong for systems that need strong transactional consistency. Banking, payment processing, and inventory management. If two people try to buy the last item in stock, you need a single authoritative database making that decision with ACID guarantees. Eventual consistency will lose you money, or worse.</p>
<p>It&rsquo;s overkill for simple CRUD apps with no offline or collaboration needs. If you&rsquo;re building an internal admin panel used by five people in an office with good internet, adding a sync engine is over-engineering. And it&rsquo;s physically impractical for massive datasets that won&rsquo;t fit on client devices.</p>
<p>But here&rsquo;s where it shines: note-taking, document editing, collaborative design tools, project management, field apps with unreliable connectivity, basically anything where <strong>data privacy is a selling point</strong>, as well as anything with <strong>real-time collaboration</strong>. In other words, it&rsquo;s great for <strong>user-generated data</strong> that benefits from instant interaction and should survive the server going down.</p>
<p>One more thing I wish someone had told me earlier: you don&rsquo;t have to go all-in. I&rsquo;ve had the best results using local-first for <em>specific features</em> within otherwise traditional apps. Offline drafts in a blog editor. Real-time collaborative notes inside a project management tool that&rsquo;s otherwise standard REST.</p>
<blockquote class="pull-quote">
<p>The &ldquo;spectrum of local-first&rdquo; is a real thing, and starting with one feature is how I&rsquo;d recommend anyone begin.</p>
</blockquote>
<h2 id="replicas-not-requests">Replicas, Not Requests</h2>
<p>If you&rsquo;ve used Git, you already understand the mental model.</p>
<p>SVN (remember SVN?) was centralized. One server. You check out files, make changes, and commit to the server. Server down? Can&rsquo;t commit. Can&rsquo;t even see history.</p>
<p>Git gave every developer a full clone. You commit locally, branch locally, and merge locally. Push and pull when you&rsquo;re ready. The remote repository is important, but it&rsquo;s not the only copy of the truth.</p>
<p><strong>Local-first web development is Git for application data.</strong> Every client device holds a replica (full or partial) of the relevant data. Writes happen locally. Sync is push/pull in the background. Conflicts get resolved through defined merge strategies.</p>
<p>I remember the first time this clicked for me in practice. I was prototyping a task board, and I wrote a function to add a task. In our old architecture, it would be:</p>
<ol>
<li>POST to API.</li>
<li>Wait for the response.</li>
<li>If success, update the local state.</li>
<li>If failure, show error toast and maybe roll back optimistic update.</li>
</ol>
<p>In the local-first version, it was: write to local SQLite, done. The UI updated instantly because it was reading from the same local database. Sync happened whenever. No loading state, no error handling for the write itself, no optimistic update logic (because there&rsquo;s nothing to be &ldquo;optimistic&rdquo; about; the local write <em>is</em> the state).</p>
<p>The implications ripple through everything. You don&rsquo;t need React Query or SWR for data fetching, because you&rsquo;re not fetching. You don&rsquo;t need Redux or Zustand for server-derived state, because the local database <em>is</em> your state. Your routing doesn&rsquo;t trigger API calls. Authentication works differently because the server isn&rsquo;t checking permissions on every read.</p>
<p>Here&rsquo;s a visual comparison that might help if you&rsquo;re the kind of person (like me) who thinks spatially:</p>
<figure><img decoding="async" loading="lazy" width="800" height="800" src="https://thenokiablog.com/wp-content/uploads/2026/05/the-architecture-of-local-first-web-development.jpg" alt="Traditional request/response architecture vs. local-first architecture"><figcaption class="op-vertical-bottom">Traditional request/response architecture vs. local-first architecture. (Large preview)</figcaption></figure>
<p>On the left, every user interaction is a round-trip. Click, wait, render. On the right, reads and writes hit the local database directly. The sync server is still there, but it&rsquo;s doing its work in the background. The user never waits for it. That&rsquo;s the fundamental shift.</p>
<p>But I&rsquo;m getting ahead of myself. Before we can talk about sync and conflicts, we need to talk about where the data actually lives on the client.</p>
<h2 id="where-data-lives-on-the-client">Where Data Lives on the Client</h2>
<p>Forget <code>localStorage</code>. It&rsquo;s synchronous (blocks the main thread), caps at 5-10 MB, and only stores strings. It&rsquo;s fine for a theme preference. It&rsquo;s not a database.</p>
<p>IndexedDB is the workhorse that nobody loves. It&rsquo;s in every browser, it&rsquo;s asynchronous, it can handle hundreds of megabytes, and its API is absolutely miserable to work with. I&rsquo;ve used it directly a grand total of once. Now I use it through abstractions or, more often, I don&rsquo;t use it at all.</p>
<p>Because the real story in 2026 is SQLite running in the browser via WebAssembly.</p>
<p>I know that sounds like a party trick, but it&rsquo;s not. SQLite compiled to WASM, persisted to the Origin Private File System (OPFS), gives you a <em>real relational database</em> in the browser. Full SQL queries. Transactions. Indexes. The works.</p>
<p>OPFS is the newer API that makes this practical. It gives web apps a sandboxed file system with high-performance synchronous access (in Web Workers), which is exactly what SQLite needs. Before OPFS, you could run SQLite in memory and manually persist to IndexedDB, which worked but was slow and fragile.</p>
<p>Here&rsquo;s roughly what initialization looks like in a real project (I&rsquo;m using wa-sqlite here, which is the library I&rsquo;ve had the best luck with):</p>
<div class="break-out">
<pre><code class="language-typescript">import { SQLiteAPI } from 'wa-sqlite';
import { OPFSCoopSyncVFS } from 'wa-sqlite/src/examples/OPFSCoopSyncVFS.js';

async function initDatabase() {
  const module = await SQLiteAPI.initialize();
  const vfs = new OPFSCoopSyncVFS('pm-tool-db');
  await vfs.initialize(module);

  const db = await module.open_v2('workspace.db');

  // HACK: wa-sqlite doesn't handle concurrent writes well on Safari,
  // so we serialize through a queue. See vlcn-io/wa-sqlite#247
  await module.exec(db, `PRAGMA journal_mode=WAL`);

  await module.exec(db, `
    CREATE TABLE IF NOT EXISTS tasks (
      id TEXT PRIMARY KEY,
      title TEXT NOT NULL,
      status TEXT DEFAULT 'backlog',
      assignee_id TEXT,
      project_id TEXT NOT NULL,
      position REAL DEFAULT 0,
      created_at TEXT DEFAULT (datetime('now')),
      updated_at TEXT DEFAULT (datetime('now'))
    )
  `);

  return db;
}
</code></pre>
</div>
<p>In production, I wrap all database access in a write queue that serializes mutations. I also log every failed write to Sentry with the full SQL statement (scrubbed of PII, obviously) because debugging database issues in a user&rsquo;s browser is hell without that telemetry.</p>
<p>A gotcha I wasted almost two days on: Safari&rsquo;s OPFS implementation behaves differently from Chrome&rsquo;s in subtle ways. Specifically, I hit a bug where <code>createSyncAccessHandle()</code> would silently fail in certain iframe contexts on Safari 18. There&rsquo;s no error, no exception. It just doesn&rsquo;t work. I ended up falling back to IndexedDB-backed persistence on Safari, which was slower but at least functioned. (I&rsquo;m told Safari 19&frasl;26 fixes this, but I haven&rsquo;t verified it yet.)</p>
<p>Quick comparison of the options I&rsquo;ve actually used:</p>
<table class="tablesaw break-out">
<thead>
<tr>
<th>Storage</th>
<th>Good For</th>
<th>Watch Out For</th>
</tr>
</thead>
<tbody>
<tr>
<td>IndexedDB</td>
<td>Broad compatibility, moderate data</td>
<td>Terrible DX, no SQL, verbose</td>
</tr>
<tr>
<td>OPFS + SQLite WASM</td>
<td>Relational data, complex queries, serious apps</td>
<td>Safari quirks, ~400KB bundle addition</td>
</tr>
<tr>
<td>PGlite (Postgres in WASM)</td>
<td>Full Postgres compatibility on client</td>
<td>Newer, larger bundle, still maturing</td>
</tr>
</tbody>
</table>
<p>I&rsquo;ve also tried cr-sqlite, which adds CRDT column support directly to SQLite tables. Clever idea, but I found it too early-stage for production use when I evaluated it in late 2025. The merge semantics were sometimes surprising, and debugging CRDT state inside SQLite was painful. I&rsquo;d revisit it later this year.</p>
<h2 id="the-part-that-s-actually-hard">The Part That&rsquo;s Actually Hard</h2>
<p>Storing data locally is a solved problem. Syncing it reliably across devices and users is where you earn your gray hairs.</p>
<p>When multiple replicas can independently read and write, you need a mechanism to reconcile changes. There are basically four approaches, and I&rsquo;ve used three of them.</p>
<p><strong>CRDTs (Conflict-Free Replicated Data Types)</strong> are data structures designed so that concurrent edits can always be merged without conflicts, mathematically guaranteed. Yjs is the most popular implementation in JavaScript, and it&rsquo;s genuinely excellent for real-time collaborative text editing. I used it to build a collaborative document editor at my last company, and the experience was mostly good, though I&rsquo;ll get into the pain points in the conflict resolution section.</p>
<p>Here&rsquo;s what setting up a shared Yjs document looks like in practice:</p>
<pre><code class="language-typescript">import * as Y from 'yjs';
import { WebsocketProvider } from 'y-websocket';

const ydoc = new Y.Doc();

const provider = new WebsocketProvider(
  'wss://sync.our-app.dev',
  'workspace-a1b2c3d4',
  ydoc
);

const tasks = ydoc.getMap('tasks');

// Add a task
const task = new Y.Map();
task.set('title', 'Review Q3 roadmap draft');
task.set('completed', false);
task.set('assignee', 'maria');
// TODO: type this properly once; yjs exports better TS types
// for nested maps. For now, this works fine.
tasks.set('f47ac10b-58cc-4372-a567-0e02b2c3d479', task as any);

tasks.observeDeep(() =&gt; {
  // Re-render UI. In practice, I debounce this to ~16ms
  // because observeDeep fires a LOT during active collaboration
  renderTaskList(tasks.toJSON());
});
</code></pre>
<p>Automerge is the other major CRDT library, backed by Rust and with a document-oriented model. I&rsquo;ve used it less, but I know teams who swear by it. Loro is newer, Rust-based, and claims better performance. I haven&rsquo;t shipped anything with Loro yet.</p>
<p><strong>Database replication</strong> is the other big approach, and honestly, for most apps that don&rsquo;t need Google Docs-style real-time text editing, I think it&rsquo;s the better choice. The idea is straightforward: replicate rows between a server database (Postgres) and a client database (SQLite) with a sync engine managing the plumbing.</p>
<p>PowerSync does this well. It gives you one-way replication from Postgres to client SQLite with a write-back path for mutations. ElectricSQL is more ambitious, going for full active-active sync between Postgres and SQLite. I&rsquo;ve used PowerSync in production and ElectricSQL in prototypes. PowerSync felt more stable when I evaluated them both in early 2026, but ElectricSQL&rsquo;s approach is more powerful if they nail the execution.</p>
<p>Triplit takes a different angle entirely: it&rsquo;s a full-stack database with sync built in, so you don&rsquo;t think about &ldquo;client DB&rdquo; and &ldquo;server DB&rdquo; separately. I haven&rsquo;t tried it beyond a weekend prototype, but the developer experience was surprisingly nice.</p>
<p><strong>Event sourcing</strong> (syncing a log of mutations rather than the current state) is the approach LiveStore takes. I find it intellectually appealing and occasionally useful, but in practice, I&rsquo;ve found that reconstructing state from an event log adds complexity that most apps don&rsquo;t need. My controversial opinion: Event sourcing is over-recommended for application development. It&rsquo;s great for audit logs and certain domains, but for a task board? Just sync the rows.</p>
<p>Not everyone will agree with that. I know event sourcing has passionate advocates, and I&rsquo;ve been told I&rsquo;m wrong about this at least twice at conferences. Maybe I just haven&rsquo;t built the right app for it yet.</p>
<h2 id="conflicts-the-thing-everyone-s-afraid-of">Conflicts: The Thing Everyone&rsquo;s Afraid Of</h2>
<p>I used to think conflict resolution was a terrifying, unsolvable problem. After building three apps that handle it, I&rsquo;d revise that to: it&rsquo;s a <em>manageable</em> problem that requires you to think carefully about your specific data model, and most developers overthink it.</p>
<p>Conflicts happen when two replicas modify the same data without seeing each other&rsquo;s changes. User A edits a task title on their phone while offline. User B edits the same title on their laptop. Both come back online. Now what?</p>
<p>My first attempt at handling this was embarrassingly naive:</p>
<pre><code class="language-typescript">// My first try. Don't do this.
function resolveConflict(local: any, remote: any) {
  // just... take the remote one? sure?
  return remote;
}
</code></pre>
<p>The problem is obvious: local changes get silently dropped. User A edits a title, syncs, and their edit vanishes. They don&rsquo;t even know it happened.</p>
<p>What actually works for most cases is <strong>last-write-wins (LWW)</strong> at the <em>field</em> level, not the record level. If User A changes the title and User B changes the due date, you keep both changes because they touched different fields. You only have a real conflict when both modified the same field, and then you pick the later timestamp.</p>
<div class="break-out">
<pre><code class="language-typescript">interface FieldValue {
  value: string | number | boolean;
  // ISO timestamp with enough precision to break most ties
  updatedAt: string;
  // Client ID as tiebreaker when timestamps match.
  // This happens more often than you'd think.
  clientId: string;
}

function pickWinner(a: FieldValue, b: FieldValue): FieldValue {
  const timeA = new Date(a.updatedAt).getTime();
  const timeB = new Date(b.updatedAt).getTime();
  if (timeA !== timeB) return timeA &gt; timeB ? a : b;
  // Deterministic tiebreaker when timestamps match
  return a.clientId &gt; b.clientId ? a : b;
}

// In practice, I apply this per-field across the whole record.
function mergeTask(local: Record&lt;string, FieldValue&gt;, remote: Record&lt;string, FieldValue&gt;) {
  const merged: Record&lt;string, FieldValue&gt; = {};
  const allKeys = new Set([...Object.keys(local), ...Object.keys(remote)]);
  for (const key of allKeys) {
    if (!local[key]) { merged[key] = remote[key]; continue; }
    if (!remote[key]) { merged[key] = local[key]; continue; }
    merged[key] = pickWinner(local[key], remote[key]);
  }
  return merged;
}
</code></pre>
</div>
<p>In our production app, this handles about 95% of conflicts without any user-visible issues. For the remaining cases (two people editing the same text field), LWW means one person&rsquo;s edit silently wins. For a task title? Honestly, that&rsquo;s usually fine. For a document body? No. That&rsquo;s where CRDTs earn their keep.</p>
<p>But there&rsquo;s a subtler problem I didn&rsquo;t appreciate until I hit it: <strong>semantic conflicts</strong>. Data merges cleanly at the structural level, but the result is nonsensical. Two users, both offline, book the same 2 PM meeting slot with different meetings. Field-level merge accepts both writes because they&rsquo;re writing to different records. No structural conflict. But you&rsquo;ve got a double-booking, and your merge function has no idea that&rsquo;s a problem.</p>
<p>Semantic conflicts require application-level validation, and that has to happen on the server during sync. Your sync engine merges the data structurally, but <em>your</em> server needs to check domain invariants before accepting the result. The approach I&rsquo;ve landed on (after getting it wrong twice) is: validate on the server during the write-back phase, but <em>flag</em> violations rather than silently rejecting them.</p>
<p>Here&rsquo;s what I mean. When the client pushes mutations to the server during sync, the server runs them through a constraint validation layer before applying them to Postgres:</p>
<div class="break-out">
<pre><code class="language-typescript">interface SyncViolation {
  type: 'scheduling_conflict' | 'capacity_exceeded' | 'stale_assignment';
  recordId: string;
  description: string;
  // The conflicting records so the client can show context
  conflictingRecords: string[];
  // When was this violation detected
  detectedAt: string;
}

async function validateSyncBatch(
  mutations: SyncMutation[],
  serverDb: Database
): Promise&lt;{ accepted: SyncMutation[]; violations: SyncViolation[] }&gt; {
  const accepted: SyncMutation[] = [];
  const violations: SyncViolation[] = [];

  for (const mutation of mutations) {
    if (mutation.table === 'calendar_events') {
      // Check for double-booking
      const overlapping = await serverDb.query(
        `SELECT id, title FROM calendar_events
         WHERE room_id = ? AND id != ?
         AND start_time &lt; ? AND end_time &gt; ?`,
        [mutation.data.room_id, mutation.data.id,
         mutation.data.end_time, mutation.data.start_time]
      );

      if (overlapping.length &gt; 0) {
        violations.push({
          type: 'scheduling_conflict',
          recordId: mutation.data.id,
          description: `Conflicts with "${overlapping[0].title}"`,
          conflictingRecords: overlapping.map(r =&gt; r.id),
          detectedAt: new Date().toISOString()
        });
        // Still accept the write, but flag it
        // The alternative is rejecting it, but then the user's
        // local state and server state diverge, and that's worse
        accepted.push(mutation);
        continue;
      }
    }
    accepted.push(mutation);
  }

  return { accepted, violations };
}
</code></pre>
</div>
<p>The key decision here &mdash; and I went back and forth on this &mdash; is that we <em>accept</em> the conflicting write and flag it, rather than rejecting it outright. If you reject it, the user&rsquo;s local database has a record that the server refuses to acknowledge, and now you&rsquo;re in a state divergence situation that&rsquo;s genuinely hard to recover from. I tried the rejection approach first, and it led to ghost records on the client that users couldn&rsquo;t delete because they didn&rsquo;t exist on the server. Nightmare.</p>
<p>So instead, the server accepts the write, stores the violation, and syncs the violation back to the client. The client shows a non-blocking notification: <em>&ldquo;Your meeting &lsquo;Q3 Planning&rsquo; conflicts with &lsquo;Design Review&rsquo; in Room B at 2 PM. Tap to resolve.&rdquo;</em> The user taps, sees both meetings, and picks one to reschedule or cancel. The resolution is a normal write that syncs back.</p>
<p>Is this perfect? No. There&rsquo;s a window between when the violation is created and when the user resolves it, where both conflicting records exist. For meeting rooms, that&rsquo;s tolerable. For something like inventory management where two people &ldquo;buy&rdquo; the last item, that window is unacceptable, and that&rsquo;s exactly why I said earlier that local-first is wrong for systems requiring strong transactional consistency.</p>
<p>I&rsquo;m still iterating on this pattern. The violation table grows if users ignore notifications (we expire them after 72 hours, which feels arbitrary). And deciding <em>which</em> invariants to validate on the server requires you to essentially maintain a parallel set of business rules outside your client-side application logic. It&rsquo;s not elegant. But it works, and it&rsquo;s the best approach I&rsquo;ve found for the class of apps I&rsquo;m building. If you&rsquo;ve built something cleaner, I genuinely want to hear about it.</p>
<p>For CRDTs like Yjs, conflict resolution at the character level (for text) works remarkably well. Two people typing in the same paragraph will see both sets of characters appear in a sensible order. But CRDT merging of structured data (maps, arrays, nested objects) can produce results that surprise you. I once watched a Yjs-backed task list duplicate items after a merge because two users had reordered the same list offline, and the CRDT&rsquo;s list merge semantics interleaved their orderings. Technically correct. Practically confusing. We ended up adding a post-merge de-duplication step, which felt like a hack but solved the problem.</p>
<p>When should you surface conflicts to the user, Git-style? In my experience, almost never for typical app data. Users don&rsquo;t want to resolve merge conflicts. They want the app to figure it out. The exception is high-stakes content: legal documents, medical records, anything where silently dropping an edit could cause real harm.</p>
<p>I&rsquo;m going to give you my honest read on the tools available as of mid-2026, with the caveat that this space is moving fast enough that some of this might be outdated by the time you read it.</p>
<p><strong>Yjs</strong> is the most mature CRDT library. Production-ready, huge community, integrates with most collaborative editors (TipTap, BlockNote, Lexical). If you need real-time collaborative editing, start here.</p>
<p><strong>Automerge</strong> is solid, Rust-backed, and takes a more document-oriented approach than Yjs. I&rsquo;ve seen it used well in apps where the data model fits a document metaphor. Fewer integrations than Yjs, but the core is well-engineered.</p>
<p><strong>PowerSync</strong> is what I&rsquo;d recommend for teams that have an existing Postgres back-end and want to add offline support. It&rsquo;s production-ready, the docs are good, and the mental model (Postgres syncs to client SQLite, client writes go through a defined upload path) is easy to reason about. In our app, initial sync for a workspace with around 5,000 tasks takes about 1.2 seconds on a decent connection and about 3.5 seconds on a throttled 3G simulation. That was acceptable for us.</p>
<p><strong>ElectricSQL</strong> is going for something more ambitious: true active-active replication between Postgres and SQLite, with &ldquo;shapes&rdquo; defining what data syncs to which client. I want this to succeed because the developer experience in prototypes was excellent. But when I evaluated it for production in February 2026, I hit enough rough edges (particularly around shape management and reconnection behavior) that I went with PowerSync instead. I plan to revisit it.</p>
<p><strong>Triplit</strong> impressed me in a weekend prototype. Full-stack database with sync built in, nice TypeScript API. I haven&rsquo;t stress-tested it with real production load, and I&rsquo;d want to before committing.</p>
<p>Zero (from Rocicorp, the Replicache people) is interesting because it takes a query-based approach to sync, which is different from the row-replication model. Replicache was sunset in favor of Zero, which tells you something about how fast approaches are evolving in this space. Worth watching, but I wouldn&rsquo;t build on it yet for a production app.</p>
<p>TinyBase is a lightweight reactive store that&rsquo;s great for smaller apps or prototyping. I used it for a personal side project (a reading tracker) and liked it a lot. Not sure I&rsquo;d use it for a team-scale product.</p>
<p>PGlite (Postgres compiled to WASM) is wild. Same SQL dialect on client and server. Combined with ElectricSQL, you could theoretically run identical queries everywhere. I think this is where things are heading long-term, but PGlite&rsquo;s bundle size and memory footprint are still concerns for mobile browsers.</p>
<p>One thing the Replicache sunset taught me: don&rsquo;t bet your architecture on a single tool from a small company without a fallback plan. I keep my sync layer abstracted enough that I could swap engines in a few weeks, not months. I know that sounds like premature abstraction, but in a space this young, I think it&rsquo;s just prudence.</p>
<h2 id="building-a-real-app-architecture-auth-and-migrations">Building A Real App: Architecture, Auth, And Migrations</h2>
<p>I want to walk through how I actually structure a local-first app in practice, because the layer diagrams you see in blog posts rarely match what the code looks like.</p>
<p>My current stack for a collaborative project management tool looks like this:</p>
<ul>
<li><strong>UI:</strong> React components that never call <code>fetch()</code> for data reads.</li>
<li><strong>Query layer:</strong> <code>useLiveQuery</code> hooks that subscribe to the local SQLite database and re-render automatically when data changes.</li>
<li><strong>Local database:</strong> SQLite via wa-sqlite, persisted to OPFS.</li>
<li><strong>Mutation layer:</strong> Plain <code>INSERT</code>/<code>UPDATE</code>/<code>DELETE</code> statements against local SQLite.</li>
<li><strong>Sync:</strong> PowerSync managing replication between local SQLite and our Postgres back-end.</li>
<li><strong>Server:</strong> Postgres, a Node.js auth service, and a small sync validation layer.</li>
</ul>
<p>The component code ends up looking almost absurdly simple compared to what I used to write:</p>
<div class="break-out">
<pre><code class="language-typescript">import { useLiveQuery } from '@powersync/react';
import { db } from '../lib/database';

function TaskBoard({ projectId }: { projectId: string }) {
  const tasks = useLiveQuery(
    `SELECT * FROM tasks WHERE project_id = ? AND archived = 0 ORDER BY position`,
    [projectId]
  );

  async function addTask(title: string) {
    await db.execute(
      `INSERT INTO tasks (id, title, project_id, position, created_at)
       VALUES (?, ?, ?, ?, datetime('now'))`,
      [crypto.randomUUID(), title, projectId, tasks.length]
    );
    // That's it. useLiveQuery picks up the change automatically.
    // No invalidation, no refetch, no loading state.
  }

  // No isLoading check. Data is local. It's always there after the first sync.
  return (
    &lt;div&gt;
      {tasks.map(task =&gt; &lt;TaskCard key={task.id} task={task} /&gt;)}
      &lt;NewTaskInput onSubmit={addTask} /&gt;
    &lt;/div&gt;
  );
}
</code></pre>
</div>
<p>Compare that to the React Query + REST equivalent, which would be at least twice the code and include loading states, error states, optimistic update logic with rollback, and cache invalidation. I don&rsquo;t miss it.</p>
<h3 id="auth-in-a-local-first-world">Auth In A Local-First World</h3>
<p>Authentication works roughly the same as traditional apps: JWT tokens, OAuth flows, and session management. The token authenticates the sync connection rather than every individual request. Offline access works because the data is already local. The user was authenticated when the data was originally synced.</p>
<p>Authorization is trickier, and I think most local-first articles under-explain this. You cannot sync your entire database to every client and rely on client-side code to hide unauthorized data. Someone will open DevTools, find the local SQLite file, and see everything. The client is not a trust boundary.</p>
<p>You enforce authorization at the sync layer. PowerSync has &ldquo;sync rules&rdquo; that define which rows go to which clients. ElectricSQL has &ldquo;shapes.&rdquo; Either way, the server only sends data that the user is authorized to see. When the client sends writes back, the server validates them against authorization rules before applying them to Postgres. If a user tries to modify something they shouldn&rsquo;t, the server rejects it during sync.</p>
<p>I also want to mention <strong>end-to-end encryption (E2EE)</strong>, because it pairs naturally with local-first. Since data lives on the client, you can encrypt it before sync. The server stores and relays encrypted blobs it can&rsquo;t read. Apps like Anytype do this. We haven&rsquo;t implemented E2EE in our current app, but it&rsquo;s on the roadmap for when we handle more sensitive data.</p>
<h3 id="schema-migrations-on-a-thousand-devices">Schema Migrations On A Thousand Devices</h3>
<p>This one caught me off guard the first time. On the server, you run a migration against one database you control. On the client, every user has their own database that might be running any version of your schema, depending on when they last opened the app.</p>
<p>I use a simple migration runner that checks a version number at app startup:</p>
<div class="break-out">
<pre><code class="language-typescript">const MIGRATIONS = [
  {
    version: 1,
    sql: `
      CREATE TABLE IF NOT EXISTS tasks (
        id TEXT PRIMARY KEY,
        title TEXT NOT NULL,
        status TEXT DEFAULT 'backlog',
        project_id TEXT NOT NULL,
        created_at TEXT DEFAULT (datetime('now'))
      );
    `
  },
  {
    version: 2,
    // Added priority and due_date in sprint 4
    sql: `
      ALTER TABLE tasks ADD COLUMN priority INTEGER DEFAULT 0;
      ALTER TABLE tasks ADD COLUMN due_date TEXT;
    `
  },
  {
    version: 3,
    // Denormalized assignee name for offline display.
    // Yes, I know this is a trade-off. The JOIN was killing
    // performance on low-end Android devices.
    sql: `
      ALTER TABLE tasks ADD COLUMN assignee_name TEXT DEFAULT '';
    `
  }
];

async function runMigrations(db: Database) {
  await db.execute(`
    CREATE TABLE IF NOT EXISTS _schema_version (version INTEGER)
  `);

  const rows = await db.execute('SELECT version FROM _schema_version');
  const currentVersion = rows.length &gt; 0 ? rows[0].version : 0;

  for (const migration of MIGRATIONS) {
    if (migration.version &gt; currentVersion) {
      console.log(`Migrating local DB to v${migration.version}`);
      await db.execute('BEGIN');
      try {
        await db.execute(migration.sql);
        await db.execute(
          'INSERT OR REPLACE INTO _schema_version (rowid, version) VALUES (1, ?)',
          [migration.version]
        );
        await db.execute('COMMIT');
      } catch (err) {
        await db.execute('ROLLBACK');
        // In production, this fires a Sentry alert with the
        // migration version and error details
        throw err;
      }
    }
  }
}
</code></pre>
</div>
<p><strong>Design your migrations to be additive.</strong> New columns with defaults. New tables. Don&rsquo;t rename or drop columns unless you absolutely must, because users running old app versions will still be syncing data, and your server needs to handle the mismatch. I learned this the hard way when I dropped a column that an older client was still writing to, which caused silent sync failures for about 200 users over a weekend. Not fun.</p>
<h2 id="if-i-were-starting-a-new-project-today">If I Were Starting A New Project Today</h2>
<p>I get asked this a lot, so here&rsquo;s my current answer. It changes every six months or so.</p>
<p>For a collaborative app with real-time features and offline support, I&rsquo;d start with: <strong>React</strong> on the front end, <strong>PowerSync</strong> for sync, <strong>SQLite via wa-sqlite</strong> on the client (persisted to OPFS with IndexedDB fallback for Safari), and <strong>Supabase</strong> (which gives me Postgres, auth, and row-level security out of the box). I&rsquo;d use <strong>Yjs</strong> only if I needed rich text collaboration, and I&rsquo;d avoid it if I didn&rsquo;t, because CRDTs add meaningful complexity to your data model.</p>
<p>For a simpler app where I mostly need offline support and instant reads but collaboration is secondary, I might skip the sync engine entirely and just use a local SQLite database with a custom sync layer that pushes/pulls from a REST API. I know that sounds like reinventing the wheel, but for simple cases, a custom sync that you fully understand is better than a general-purpose sync engine that adds concepts you don&rsquo;t need.</p>
<p>I would not currently use ElectricSQL or Zero for production, not because they&rsquo;re bad, but because I want another 6-12 months of maturity before I&rsquo;d trust them for something I&rsquo;m on-call for. I&rsquo;ve been burned before by building on early-stage infrastructure (I was an early Meteor adopter, if that tells you anything) and I&rsquo;m more cautious now about where I accept novelty risk.</p>
<h2 id="performance-what-s-actually-fast-and-what-hurts">Performance: What&rsquo;s Actually Fast And What Hurts</h2>
<p>Reads are instant. That&rsquo;s not marketing. Querying a local SQLite database for a list of 500 tasks takes under two milliseconds on my M2 MacBook and about eight milliseconds on a mid-range Android phone. No network. No spinner. No loading state.</p>
<p>Writes are instant, too. <code>INSERT INTO tasks</code> runs locally, the UI updates reactively, and sync happens whenever. Users perceive writes as instantaneous because they are.</p>
<p>Initial sync is where you pay the cost. Bootstrapping the local replica on first load (or on a new device) means downloading potentially megabytes of data. In our app, a workspace with 5,000 tasks, 200 projects, and 50 users takes about 1.2 seconds on broadband and four to five seconds on a slow mobile connection. We mitigate this with partial sync (only sync the user&rsquo;s active projects) and by showing a one-time &ldquo;Setting up your workspace&rdquo; screen during the first sync. After that initial sync, incremental updates are tiny.</p>
<p>Bundle size is a real concern. SQLite compiled to WASM adds roughly 400KB gzipped to your JavaScript bundle. That&rsquo;s not trivial, especially if you care about Time to Interactive on mobile. I lazy-load the database module with dynamic <code>import()</code> so it doesn&rsquo;t block the initial render.</p>
<p>Memory is the other gotcha. SQLite WASM runs in memory, and on mobile browsers with aggressive memory limits, a large database can cause tab crashes. I haven&rsquo;t found a great solution for this beyond keeping the synced dataset small through partial sync and being aggressive about pruning old data.</p>
<p><strong>Note</strong>: Speaking of memory issues, I&rsquo;ve been reading Designing Data-Intensive Applications by Martin Kleppmann for the third time. Every re-read, I catch something new. If you haven&rsquo;t read it and you&rsquo;re thinking about distributed data, just stop and read it first.</p>
<h2 id="testing-this-stuff">Testing This Stuff</h2>
<p>I&rsquo;ll keep this brief because the honest answer is that testing local-first apps is harder than testing traditional apps, and the tooling isn&rsquo;t great yet.</p>
<p>What works for me: unit tests for merge logic (these are pure functions, easy to test), integration tests that spin up two client instances in memory and verify they converge after concurrent edits, and Playwright E2E tests that use <code>context.setOffline(true)</code> to simulate offline/online transitions.</p>
<p>What I haven&rsquo;t figured out well: reproducing bugs that only happen during conflict resolution with specific timing. When a user reports that a task <em>&ldquo;lost its description,&rdquo;</em> I often can&rsquo;t reproduce it because I don&rsquo;t know exactly what sequence of offline edits and sync events led to the conflict. I&rsquo;ve started logging sync events in more detail (what was sent, what was received, what conflicts were detected, how they were resolved) and shipping those logs to our observability stack. It helps, but it&rsquo;s not as clean as I&rsquo;d like.</p>
<p>Property-based testing with something like fast-check is genuinely useful for CRDT logic. Generate random operation sequences, apply them in random orders, and assert convergence. I wish I&rsquo;d started doing this earlier.</p>
<h2 id="what-i-m-watching-what-worries-me">What I&rsquo;m Watching, What Worries Me</h2>
<p>I&rsquo;m excited about where this is going. PGlite (full Postgres in the browser) feels like a glimpse of a future where the client/server data layer distinction just dissolves. You write SQL, it runs everywhere, sync is a runtime concern rather than an architectural decision. We&rsquo;re not there yet, but you can see it from here.</p>
<p>I&rsquo;m also watching the convergence of local-first and AI. Running models locally, keeping data on-device, using cloud AI only with explicit consent, and encrypted data. The privacy implications are compelling, and I think <em>&ldquo;your data never leaves your device&rdquo;</em> will become a real product differentiator as AI eats more of the software experience.</p>
<p>What worries me is <strong>fragmentation</strong>. Every sync engine uses its own protocol. There&rsquo;s no standard. If ElectricSQL shuts down (it won&rsquo;t, probably, but <em>if</em>), migrating to PowerSync isn&rsquo;t trivial. I abstract my sync layer partly for this reason, but it still makes me nervous.</p>
<blockquote class="pull-quote">
<p>The web has standards for nearly everything. We don&rsquo;t have one for sync, and I don&rsquo;t see one emerging soon.</p>
</blockquote>
<p>I&rsquo;m also worried about the <strong>complexity budget</strong>. Local-first adds real architectural complexity: sync engines, conflict resolution, client-side migrations, partial replication, and auth at the sync boundary. For a team of experienced developers building the right kind of app, that complexity pays for itself many times over. For a team that just needs a CRUD app, it&rsquo;s a trap.</p>
<p>I keep coming back to something a developer named Kevin said to me at a local-first meetup in Berlin last year:</p>
<blockquote><p>&ldquo;The best architecture is the one your team can debug at 2 AM.&rdquo;</p></blockquote>
<p>He&rsquo;s right. If local-first makes your app faster, more reliable, and better for users, and your team understands how the sync works, go for it. If you&rsquo;re adding it because it sounds cool and you don&rsquo;t fully understand the failure modes yet, build a prototype first. Learn where it breaks. Then decide.</p>
<p>I&rsquo;m building my fourth local-first app right now: a collaborative planning tool for small teams, with offline support and optional E2E encryption. It&rsquo;s the most ambitious thing I&rsquo;ve attempted with this architecture. I&rsquo;ll write about how it goes.</p>
<p>If you&rsquo;re starting out, pick one feature in your current app that would benefit from instant local reads and offline writes. Add a local SQLite database. Wire up reactive queries. See how it feels. I think you&rsquo;ll have the same reaction I did: oh, <em>this</em> is how it should have always worked.</p>
<h2 id="further-reading">Further Reading</h2>
<div class="signature"><img decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/the-architecture-of-local-first-web-development-1.png" alt="Smashing Editorial" width="35" height="46" loading="lazy"><br>
<span>(gg, yk)</span></div>
<p>The post <a href="https://thenokiablog.com/the-architecture-of-local-first-web-development/">The Architecture Of Local-First Web Development</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>Modernize your workflows: Amazon WorkSpaces now gives AI agents their own desktop (preview)</title>
		<link>https://thenokiablog.com/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview/</link>
		
		<dc:creator><![CDATA[Mister Nokia]]></dc:creator>
		<pubDate>Tue, 05 May 2026 17:23:40 +0000</pubDate>
				<category><![CDATA[Nokia Mobile Phone]]></category>
		<category><![CDATA[Amazon Bedrock]]></category>
		<category><![CDATA[Amazon Bedrock Guardrails]]></category>
		<category><![CDATA[Amazon CloudWatch]]></category>
		<category><![CDATA[Amazon WorkSpaces]]></category>
		<category><![CDATA[Amazon WorkSpaces Secure Browser]]></category>
		<category><![CDATA[Artificial Intelligence]]></category>
		<category><![CDATA[AWS CloudTrail]]></category>
		<category><![CDATA[AWS Management Console]]></category>
		<category><![CDATA[Business]]></category>
		<category><![CDATA[Compliance]]></category>
		<category><![CDATA[Identity]]></category>
		<category><![CDATA[Industries]]></category>
		<category><![CDATA[Launch]]></category>
		<category><![CDATA[News]]></category>
		<category><![CDATA[Regions]]></category>
		<category><![CDATA[Security]]></category>
		<category><![CDATA[Storage]]></category>
		<category><![CDATA[Strands Agents]]></category>
		<guid isPermaLink="false">https://thenokiablog.com/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview/</guid>

					<description><![CDATA[<p>Enterprises face a significant challenge when deploying AI agents: the desktop and legacy applications that power...</p>
<p>The post <a href="https://thenokiablog.com/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview/">Modernize your workflows: Amazon WorkSpaces now gives AI agents their own desktop (preview)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></description>
										<content:encoded><![CDATA[<table id="amazon-polly-audio-table">
<tbody>
<tr>
<td id="amazon-polly-audio-tab">
<div id="amazon-polly-by-tab">
            <img loading="lazy" decoding="async" src="https://thenokiablog.com/wp-content/uploads/2026/05/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview.png" alt="Voiced by Polly" width="554" height="56">
           </div>
</td>
</tr>
</tbody>
</table>
<p>Enterprises face a significant challenge when deploying AI agents: the desktop and legacy applications that power most business workflows are simply inaccessible to modern AI systems. According to a 2024 Gartner report, 75% of organizations run legacy applications that lack modern APIs, and 71% of Fortune 500 companies operate critical processes on mainframe systems without adequate programmatic access. For many organizations, this has meant choosing between delaying AI adoption or undertaking expensive and risky modernization projects.</p>
<p>Today, we are announcing that Amazon WorkSpaces now enables AI agents to securely operate desktop applications without requiring application modernization. The same managed virtual desktops that millions of employees use and trust can now also serve AI agents, turning WorkSpaces into infrastructure for scaling enterprise productivity, not just delivering it. Because agents operate within your existing WorkSpaces environment, there are no APIs to build, no application migrations to plan, and no new infrastructure to manage.</p>
<p>Some of our customers had an early opportunity to give their agents a WorkSpace. Chris Noon, Director, Nuvens Consulting shared with us, <em>&ldquo;WorkSpaces lets our clients give AI agents the same secure, governed desktop environment their employees already use &mdash; no custom API integrations, full audit trails, and enterprise-grade isolation out of the box. For regulated industries, that&rsquo;s not a nice-to-have &mdash; it&rsquo;s the baseline.&rdquo;</em></p>
<p><span><strong>Secure cloud desktop access for AI agents<br>
          <br></strong></span>With WorkSpaces, AI agents can securely access and operate desktop applications running inside managed WorkSpaces environments to complete complex business workflows. Agents authenticate through AWS Identity and Access Management (IAM) and connect via Workspaces with complete audit trails available through AWS CloudTrail and Amazon CloudWatch. Because agents operate within secure WorkSpaces environments rather than on local machines, your existing security controls and compliance policies remain fully intact.</p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/html-element-select-envato-tuts/" class="template-2"><span class="cta">Read more</span><span class="postTitle">HTML Element: select | Envato Tuts+</span></a></div><p>Amazon Workspaces supports the industry-standard Model Context Protocol (MCP), which means WorkSpaces works with any agent framework, such as LangChain, CrewAI and Strands Agents.</p>
<p><span><strong>Let&rsquo;s try it out<br>
          <br></strong></span>To set up a WorkSpaces environment for AI agents, I started in the AWS Management Console by creating a new WorkSpaces Applications stack&mdash;the environment definition that controls how agents connect and what they&rsquo;re allowed to do.</p>
<p>From the Amazon WorkSpaces console, I chose <strong>Create stack</strong> and configured the basics: name, fleet association, and VPC endpoints. In Step 3 of the stack creation workflow, I noticed the new AI agents section with two options. The first, <strong>No AI agent access</strong>, is the default configuration for standard WorkSpaces designed for people. The second, <strong>Add AI Agents</strong>, allows AI agents to securely access and operate applications using their own identity and permissions. I selected Add AI Agents to enable agent connections on this stack.</p>
<p><img decoding="async" loading="lazy" class="alignnone wp-image-103876 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview-1.png" alt="Workspaces Screenshot" width="1628" height="1012"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/skipping-the-whm-getting-started-wizard-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Skipping the WHM Getting Started Wizard | cPanel Blog</span></a></div><p>Next, I will enable storage before configuring the agent access settings to define how agents interact with the desktop.</p>
<p><img decoding="async" loading="lazy" class="alignnone wp-image-103881 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview-2.png" alt="Workspaces screenshot" width="1625" height="461"></p>
<p>Under Agent features, I enabled three capabilities. <strong>Computer input</strong> allows the agent to click, type, and scroll within the desktop. <strong>Computer vision</strong> allows the agent to capture screenshots of the desktop, which is how it &ldquo;sees&rdquo; the application. Finally, screenshot storage configures where session screenshots are stored for audit and debugging.</p>
<p><img decoding="async" loading="lazy" class="alignnone wp-image-103877 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview-3.png" alt="Workspaces Screenshot" width="1618" height="1002"></p>
<div class="internal-linking-related-contents"><a href="https://thenokiablog.com/gone-phishing-cpanel-blog/" class="template-2"><span class="cta">Read more</span><span class="postTitle">Gone Phishing | cPanel Blog</span></a></div><p>Under <strong>Desktop screen layout</strong>, I set the screen resolution to 1280&times;720 and image format to PNG. The resolution determines the fidelity of what the agent sees during a session&mdash;a complex application with dense UI elements might benefit from higher resolution, while a terminal-style interface works well at 720p.</p>
<p><img decoding="async" loading="lazy" class="alignnone wp-image-103878 size-full" src="https://thenokiablog.com/wp-content/uploads/2026/05/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview-4.png" alt="Workspaces Screenshot" width="1624" height="1363"></p>
<p>With my stack configured, WorkSpaces exposes a managed MCP endpoint. I pointed my agent framework to this endpoint, provided IAM credentials for authentication, and my agent began interacting with the desktop applications installed on the fleet&rsquo;s image.</p>
<p>To see this in action, here&rsquo;s an agent built with the Strands Agent SDK and Amazon Bedrock handling a prescription refill, looking up the patient record, searching for the medication, placing the order, and confirming a successful refill, all inside a sample pharmacy system with no API.</p>
<p>The application doesn&rsquo;t know an agent is driving it. Nothing about the software was modified, rebuilt, or integrated. The agent worked with it exactly as it exists today.</p>
<p><span><strong>Now available<br>
          <br></strong></span>This feature is available today in public preview at no additional cost in US East (N. Virginia, Ohio), US West (Oregon), Canada (Central), Europe (Frankfurt, Ireland, Paris, London), and Asia (Tokyo, Mumbai, Sydney, Seoul, Singapore) Regions.</p>
<p>Get started building today using our GitHub repo, or visit the WorkSpaces page for more details.</p>
<p>       <!-- '"` --></p>
<p>The post <a href="https://thenokiablog.com/modernize-your-workflows-amazon-workspaces-now-gives-ai-agents-their-own-desktop-preview/">Modernize your workflows: Amazon WorkSpaces now gives AI agents their own desktop (preview)</a> appeared first on <a href="https://thenokiablog.com">The NOKIA Blog</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
