<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Product-Engineering on Armstrong Yan</title><link>https://yanqian.github.io/tags/product-engineering/</link><description>Recent content in Product-Engineering on Armstrong Yan</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Thu, 13 Aug 2026 14:08:41 +0800</lastBuildDate><atom:link href="https://yanqian.github.io/tags/product-engineering/index.xml" rel="self" type="application/rss+xml"/><item><title>The Hard Parts of Hey Jarvis II: From Demo to Mac Product</title><link>https://yanqian.github.io/posts/publish/building-hey-jarvis-mac-product/</link><pubDate>Thu, 13 Aug 2026 14:08:41 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/building-hey-jarvis-mac-product/</guid><description>&lt;p&gt;In &lt;a href="https://yanqian.github.io/posts/publish/building-hey-jarvis-voice-interaction/" &gt;the previous article&lt;/a&gt;, I wrote about how Hey Jarvis handles confirmation sounds, echo, interruptions, and microphone handoffs.&lt;/p&gt;
&lt;p&gt;Once those capabilities were working in the terminal and browser, I briefly thought I had finished the hardest part of building the product.&lt;/p&gt;
&lt;p&gt;Later, I realized I had proved only that a single voice interaction flow could work.&lt;/p&gt;
&lt;p&gt;A Demo needs to succeed once in an environment I have prepared. A product must contend with first-time installation, denied permissions, window switching, a locked Mac, system sleep, subprocess crashes, and application shutdown. It must not only succeed; when it cannot, it must stop in a state that is safe, honest, and recoverable.&lt;/p&gt;</description></item><item><title>I Built Hey Jarvis: It Started with a Bedtime Question</title><link>https://yanqian.github.io/posts/publish/building-hey-jarvis/</link><pubDate>Thu, 13 Aug 2026 13:55:06 +0800</pubDate><guid>https://yanqian.github.io/posts/publish/building-hey-jarvis/</guid><description>&lt;p&gt;My wife and I often talk before going to sleep.&lt;/p&gt;
&lt;p&gt;Sometimes we talk about what happened that day. Other times, one small detail leads us into history, technology, health, or some fact that has suddenly crossed our minds. Inevitably, we arrive at a question neither of us can answer, but both of us want answered right away.&lt;/p&gt;
&lt;p&gt;The natural thing should be to simply ask.&lt;/p&gt;
&lt;p&gt;Instead, one of us usually reaches for a phone, unlocks it, opens an app, taps a text box, and reformulates the question. By the time the answer appears, our original conversation has already been interrupted.&lt;/p&gt;</description></item></channel></rss>