<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tech on Armstrong Yan</title><link>https://yanqian.github.io/categories/tech/</link><description>Recent content in Tech on Armstrong Yan</description><generator>Hugo</generator><language>en</language><lastBuildDate>Sun, 21 Jun 2026 18:34:32 +0800</lastBuildDate><atom:link href="https://yanqian.github.io/categories/tech/index.xml" rel="self" type="application/rss+xml"/><item><title>Why Sharing Myinfo Is More Than Autofill</title><link>https://yanqian.github.io/posts/publish/why-sharing-myinfo-is-more-than-autofill/</link><pubDate>Sun, 21 Jun 2026 18:34:32 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/why-sharing-myinfo-is-more-than-autofill/</guid><description>&lt;p>A form asks for your name, address, nationality, contact details, income information, or family records. You have filled in some version of this form before. The service may also ask for documents, then someone or some backend process has to verify that the documents match what you typed.&lt;/p>
&lt;p>Then a button appears:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Retrieve Myinfo
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>From the user&amp;rsquo;s point of view, this looks like autofill.&lt;/p>
&lt;p>That is true, but incomplete. Autofill saves typing. Myinfo does something more important:&lt;/p></description></item><item><title>What Happens When You Scan a Singpass QR Code</title><link>https://yanqian.github.io/posts/publish/what-happens-when-you-scan-a-singpass-qr-code/</link><pubDate>Sun, 21 Jun 2026 18:33:32 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/what-happens-when-you-scan-a-singpass-qr-code/</guid><description>&lt;p>You open a banking website on your laptop.&lt;/p>
&lt;p>You click &amp;ldquo;Log in with Singpass&amp;rdquo;.&lt;/p>
&lt;p>A QR code appears.&lt;/p>
&lt;p>You open the Singpass app, scan the code, check the service name, approve the login, and the website suddenly knows it can let you in.&lt;/p>
&lt;p>From the user&amp;rsquo;s point of view, the whole thing feels almost too simple. The QR code appears, the phone approves, the browser continues.&lt;/p>
&lt;p>But the important question is:&lt;/p></description></item><item><title>Why Singpass Becomes National Trust Infrastructure</title><link>https://yanqian.github.io/posts/publish/why-singpass-becomes-national-trust-infrastructure/</link><pubDate>Sun, 21 Jun 2026 18:32:34 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/why-singpass-becomes-national-trust-infrastructure/</guid><description>&lt;p>At first glance, Singpass looks like a login system.&lt;/p>
&lt;p>You open a government website, click &amp;ldquo;Log in with Singpass&amp;rdquo;, scan a QR code, approve it on your phone, and continue. From the user&amp;rsquo;s point of view, the experience is simple. It feels like a national version of &amp;ldquo;Sign in with Google&amp;rdquo;.&lt;/p>
&lt;p>But if we design such a system from first principles, it quickly becomes clear that login is only the visible tip of the system.&lt;/p></description></item><item><title>A Podcast Summarizer Taught Me That Summaries Are Not Understanding</title><link>https://yanqian.github.io/posts/publish/a-podcast-summarizer-taught-me-that-summaries-are-not-understanding/</link><pubDate>Wed, 10 Jun 2026 15:43:19 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/a-podcast-summarizer-taught-me-that-summaries-are-not-understanding/</guid><description>&lt;p>Someone asked me a simple question about a project on my resume:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Did this software actually solve your problem?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>It was a good question.&lt;/p>
&lt;p>The project was a podcast summarizer.&lt;/p>
&lt;p>The source code is public here: &lt;a href="https://github.com/yanqian/podcast-summarizer" class="external-link" target="_blank" rel="noopener">yanqian/podcast-summarizer&lt;/a>.&lt;/p>
&lt;p>The original idea was straightforward.&lt;/p>
&lt;p>Long audio is expensive to consume.&lt;/p>
&lt;p>If I could transcribe it, summarize it, and read the summary, then maybe I could understand the whole episode without spending an hour listening.&lt;/p></description></item><item><title>I Built a Small Harness to Stop AI Coding Projects From Forgetting State</title><link>https://yanqian.github.io/posts/publish/i-built-a-small-harness-to-stop-ai-coding-projects-from-forgetting-state/</link><pubDate>Thu, 04 Jun 2026 10:46:50 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/i-built-a-small-harness-to-stop-ai-coding-projects-from-forgetting-state/</guid><description>&lt;p>AI coding agents are powerful.&lt;/p>
&lt;p>But long-running AI coding projects break in a very specific way:&lt;/p>
&lt;ul>
&lt;li>the session is interrupted&lt;/li>
&lt;li>the context becomes too long&lt;/li>
&lt;li>the weekly quota runs out&lt;/li>
&lt;li>tomorrow&amp;rsquo;s agent forgets yesterday&amp;rsquo;s decisions&lt;/li>
&lt;li>the agent changes unrelated files&lt;/li>
&lt;li>the agent marks work done too early&lt;/li>
&lt;/ul>
&lt;p>The problem is not that AI cannot write code.&lt;/p>
&lt;p>The problem is that AI coding projects often do not have durable project state.&lt;/p></description></item><item><title>AI-Native Software Engineering, Part 1: Mental Models in Agentic Coding</title><link>https://yanqian.github.io/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/</link><pubDate>Sat, 23 May 2026 20:33:47 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/</guid><description>&lt;p>AI can generate code. Harnesses can validate behavior. But who builds understanding?&lt;/p>
&lt;p>This is Part 1 of the AI-Native Software Engineering series.&lt;/p>
&lt;p>The series asks a larger question:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">When AI lowers the cost of implementation,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">what remains scarce in software engineering?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This article starts with the first scarce resource:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">Understanding.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Over the past few months, I&amp;rsquo;ve been experimenting heavily with AI-assisted software development.&lt;/p>
&lt;p>Not autocomplete.&lt;/p>
&lt;p>Not AI as a coding copilot.&lt;/p></description></item><item><title>AI-Native Software Engineering, Part 2: Harness Engineering and Correctness</title><link>https://yanqian.github.io/posts/publish/harness-engineering-is-about-limiting-ai-not-empowering-it/</link><pubDate>Sat, 23 May 2026 20:33:47 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/harness-engineering-is-about-limiting-ai-not-empowering-it/</guid><description>&lt;p>Why the most important part of AI-native software engineering may not be generation, but constraint.&lt;/p>
&lt;p>This is Part 2 of the AI-Native Software Engineering series.&lt;/p>
&lt;p>It continues from &lt;a href="https://yanqian.github.io/posts/publish/agentic-coding-mental-models-and-the-new-depth-of-software-engineering/" >AI-Native Software Engineering, Part 1: Mental Models in Agentic Coding&lt;/a>.&lt;/p>
&lt;p>The previous question was:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">If understanding no longer comes mainly from writing code,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">how do humans build mental models in an agentic workflow?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The next question is:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">If implementation is delegated,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">where does correctness come from?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The conversation around AI-assisted software development often focuses on one thing:&lt;/p></description></item><item><title>AI-Native Software Engineering, Part 3: Software as Search</title><link>https://yanqian.github.io/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/</link><pubDate>Sat, 23 May 2026 20:33:47 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/</guid><description>&lt;p>When implementation becomes abundant, engineering starts to look less like construction and more like navigation.&lt;/p>
&lt;p>This is Part 3 of the AI-Native Software Engineering series.&lt;/p>
&lt;p>It continues from &lt;a href="https://yanqian.github.io/posts/publish/harness-engineering-is-about-limiting-ai-not-empowering-it/" >AI-Native Software Engineering, Part 2: Harness Engineering and Correctness&lt;/a>.&lt;/p>
&lt;p>The first article asked:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">How does understanding form when implementation is delegated?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>The second article asked:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">How does correctness form when generation is cheap?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>This article asks:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">If implementation keeps getting cheaper,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">what are engineers actually doing?
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>Here, constraints shift meaning.&lt;/p></description></item><item><title>AI-Native Software Engineering, Part 4: Human Judgment Against Vibe Coding</title><link>https://yanqian.github.io/posts/publish/against-vibe-coding-why-human-judgment-still-matters/</link><pubDate>Sat, 23 May 2026 20:33:47 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/against-vibe-coding-why-human-judgment-still-matters/</guid><description>&lt;p>You can automate implementation. You can automate evaluation. But judgment remains stubbornly human.&lt;/p>
&lt;p>This is Part 4 of the AI-Native Software Engineering series.&lt;/p>
&lt;p>It continues from &lt;a href="https://yanqian.github.io/posts/publish/software-is-becoming-search-why-engineers-are-turning-into-constraint-designers/" >AI-Native Software Engineering, Part 3: Software as Search&lt;/a>.&lt;/p>
&lt;p>The first article asked how understanding forms.&lt;/p>
&lt;p>The second asked how correctness forms.&lt;/p>
&lt;p>The third argued that software is starting to look like search.&lt;/p>
&lt;p>This article pushes back on a dangerous misunderstanding:&lt;/p>
&lt;div class="highlight">&lt;pre tabindex="0" class="chroma">&lt;code class="language-text" data-lang="text">&lt;span class="line">&lt;span class="cl">If we have agents, harnesses, and constraints,
&lt;/span>&lt;/span>&lt;span class="line">&lt;span class="cl">software can produce itself.
&lt;/span>&lt;/span>&lt;/code>&lt;/pre>&lt;/div>&lt;p>That is not true.&lt;/p></description></item><item><title>Understanding Singapore's Payment Stack: From Bank Apps to SGQR, PayNow, FAST, Contactless, and NETS</title><link>https://yanqian.github.io/posts/publish/understanding-singapore-payment-stack/</link><pubDate>Mon, 11 May 2026 00:00:00 +0000</pubDate><guid>https://yanqian.github.io/posts/publish/understanding-singapore-payment-stack/</guid><description>&lt;p>If you live in Singapore, you probably use these payment methods every day:&lt;/p>
&lt;ul>
&lt;li>You send money to a friend via PayNow.&lt;/li>
&lt;li>You scan a QR code at a hawker stall.&lt;/li>
&lt;li>You tap your card or phone at a supermarket.&lt;/li>
&lt;li>You use NETS at a local merchant.&lt;/li>
&lt;/ul>
&lt;p>They look similar from the user side, but underneath they solve different problems.&lt;/p>
&lt;hr>
&lt;h2 id="the-big-picture">
 The Big Picture
 &lt;a class="heading-link" href="#the-big-picture">
 &lt;i class="fa-solid fa-link" aria-hidden="true" title="Link to heading">&lt;/i>
 &lt;span class="sr-only">Link to heading&lt;/span>
 &lt;/a>
&lt;/h2>
&lt;p>&lt;img src="assets/singapore-payment-stack.svg" alt="Singapore Payment Stack">&lt;/p></description></item></channel></rss>