<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Jason Rice — Notes</title>
    <link>https://jasonrice.me</link>
    <description>Writing on engineering and building.</description>
    <language>en</language>
    <lastBuildDate>Mon, 11 May 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://jasonrice.me/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>AI as a tool</title>
      <link>https://jasonrice.me/notes/ai-as-a-tool</link>
      <guid isPermaLink="true">https://jasonrice.me/notes/ai-as-a-tool</guid>
      <pubDate>Mon, 11 May 2026 00:00:00 GMT</pubDate>
      <description>AI codes well, but it&apos;s a hyper-focused lens, not a seasoned engineer with the full picture.</description>
      <content:encoded><![CDATA[<p>AI is honestly a great tool, I use it and I think it&#39;s genuinely useful. But the way I see it right now, it&#39;s more like a hyper-focused auto coder than a standalone engineer. It can code, and it can code well.</p>
<p>What it struggles with though is the full picture. It&#39;s going to solve the problem you put in front of it, but it&#39;s not necessarily thinking about how that solution ripples out to the rest of your app. It might not catch that it&#39;s breaking something else, or that the logic it wrote technically passes your test but isn&#39;t actually doing what you meant. You get the output you asked for, not always the output you needed.</p>
<p>Take a simple example like this: Ask it for a function that filters published items by date and you will get back something like:</p>
<pre><code class="language-ts">function recent&lt;T extends { date: string; status: string }&gt;(items: T[]): T[] {
  return items
    .filter((x) =&gt; x.status === &#39;published&#39;)
    .sort((a, b) =&gt; b.date.localeCompare(a.date))
}
</code></pre>
<p>Clean, correct, does what you asked. What it didn&#39;t catch is that three other files in your repo, including a utility module, already have a byDateDesc helper doing the same thing. And separately, that sort has edge cases on entries with the same date in some browsers.</p>
<p>You can get smarter with your prompts, add more context, be more specific and that helps, it genuinely does. Once you&#39;re deep into a feature that touches auth, state, three API layers and a caching strategy, the context you&#39;d need to give it to get a truly informed response is basically the same work as just knowing it yourself. The more complex things get, the more it starts losing the thread of what you were trying to do in the first place.</p>
<p>So look, I&#39;m not knocking it. I use it, and I like it. But at the end of the day it&#39;s a tool, and you&#39;ve got to treat it like one. The experience and judgment of knowing why you&#39;re building something a certain way, that still has to come from you.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
