<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xml:base="https://paulca.com/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    
    <title>Paul Campbell</title>
    <link>https://paulca.com/</link>
    <atom:link href="https://paulca.com/feed.xml" rel="self" type="application/rss+xml" />
    <description>Writing from Paul Campbell.</description>
    <language>en</language>
    <item>
      <title>AI as augmentation</title>
      <link>https://paulca.com/blog/ai-as-augmentation/</link><description>&lt;p&gt;One of the first &amp;quot;oh shit&amp;quot; moments for me wasn&#39;t when an AI customer support agent solved my problem (to date, I don&#39;t believe any AI agent has solved any problem I&#39;ve reported). It was when it helped me do a better job of something than I wouldn&#39;t otherwise have been able to do or able to afford.&lt;/p&gt;
&lt;p&gt;Tito is an interesting case for this. Tito is a pretty healthy business that has grown well beyond our initial &amp;quot;€20k per month so we can quit our jobs&amp;quot; dreamline. But it hasn&#39;t grown so much that we can afford to hire anyone full-time, and that&#39;s been true for a number of years. The status quo is, for any piece of work: who will do it, and do we have time?&lt;/p&gt;
&lt;p&gt;There&#39;s a third intangible factor though: where do we stop polishing?&lt;/p&gt;
&lt;p&gt;Along with the enshittification of everything, gradually there has been a rising tide in expectations for how certain software works. Slowly enshittifying companies like GitHub, Stripe, and Revolut add delight to mundane things like pushing code, consuming APIs, and transferring money. And that&#39;s great!&lt;/p&gt;
&lt;p&gt;But for a small team, the rising tide isn&#39;t always &amp;quot;download a library and it will be delightful&amp;quot;. There&#39;s still layers and layers of work required to take any one feature and polish it until it shines. For a product as rich in features as Tito, that simply means: compromise.&lt;/p&gt;
&lt;p&gt;One such feature for me was webhooks. Tito Classic has supported webhooks since almost day one (fun aside: in 2007 I attended something in California called &amp;quot;Super Happy Dev House&amp;quot;, where one of the talks was about this idea that some guy had to allow web apps to send messages and &amp;quot;hook&amp;quot; into other web apps).&lt;/p&gt;
&lt;p&gt;Webhooks are very clever, and very useful, but in general, the tooling around them is very bad. Most of my use of webhooks ends up just pushing buttons, catching the webhook somewhere, tweaking some code, and doing that over and over until things just about work.&lt;/p&gt;
&lt;p&gt;Tito Classic&#39;s webhooks are very much borne of that &amp;quot;hack until it works&amp;quot; philosophy: Did the webhook send? Can I trigger a new one easily? Can I inspect the payload sender-side without catching it? Is the schema webhook-specific or does it match the REST API?&lt;/p&gt;
&lt;p&gt;When it came to implementing webhooks in Tito Pro last year, with agentic assistance (who names this shit?), I was able to keep going on the webhooks feature until it had all the attributes that I would expect a webhook implementation to have of a service I expect. Pro&#39;s webhook implementation features previews, retries, logs, and the webhook schema exactly matches the API schema: in fact they&#39;re derived from the same implementation, so in theory they will never drift.&lt;/p&gt;
&lt;p&gt;That was my first &amp;quot;oh shit&amp;quot; moment, with receipts. I built the Tito Classic webhooks implementation in 2016, and when it was &amp;quot;good enough&amp;quot;, I dropped it and moved on to the next thing. The programming tools I had available didn&#39;t really change between 2015 and 2025, so it was fairly like for like. What changed was my ability to keep iterating without burning out, without getting distracted by another challenge, and without procrastinating on doing something because it was &amp;quot;too hard&amp;quot;.&lt;/p&gt;
&lt;p&gt;When working assisted allows me to a better version of myself and to close the gap between what I intend to do and what I end up doing, it&#39;s very hard to go back to working unassisted.&lt;/p&gt;
</description><pubDate>Sun, 26 Jul 2026 01:00:00 +0100</pubDate>
      <dc:creator>Paul Campbell</dc:creator>
      <guid>https://paulca.com/blog/ai-as-augmentation/</guid>
    </item>
    <item>
      <title>Using an LLM &quot;off-the-grid&quot;</title>
      <link>https://paulca.com/blog/using-an-llm-off-the-grid/</link><description>&lt;p&gt;From the moment that OpenAI launched, I was very curious. I had met one of the founders, Greg Brockman, a few years before and he had given me a lot of time and attention. He had reached out to me, not the other way around, and we had a delightful conversation about the early history of Stripe, where he was founding CTO.&lt;/p&gt;
&lt;p&gt;When ChatGPT launched, I was naturally curious, and very excited about it. I, along with the rest of the world, got a little bit caught up in the hype about the capabilities of these new AI systems, and certainly enjoyed typing things into the box and it responding in a human-like fashion.&lt;/p&gt;
&lt;p&gt;A few months later, I stopped using it. In general, it was inferior to just finding information myself. For coding, Cursor was annoying, and it slowed me down more than it helped. GenAI was clearly an extremely impressive technical demo, but I didn&#39;t feel that it was actually making me any more productive.&lt;/p&gt;
&lt;p&gt;The next moment where the constant, incessant, unavoidable buzz buzz buzz of AI hype hit me was Claude Code (again, me and everyone else, particularly in Silicon Valley). Here was an &amp;quot;agent&amp;quot; (hate the term) who you could give a code problem to and without directing it to the files themselves, it would figure out what to do.&lt;/p&gt;
&lt;p&gt;At launch, Claude Code was again very impressive. It was able to figure out what to do and where to do it, and I put a good bit of time into asking it to do things in my day-to-day work. The problem was that while it was good at finding the right files, and was able to solve some problems, it wasn&#39;t particularly good at solving them properly. I found I was doing as much cleanup as I was saving time with the computer writing the code. I pretty much gave up on Claude Code at some point last summer.&lt;/p&gt;
&lt;p&gt;Then came the autumn, and a big project arrived on my desk that had a few particularly gnarly challenges. The project required features that I knew that I personally didn&#39;t really have the engineering aptitude for, but I believed would make Tito better. With a deadline fast approaching, I described the high-level problem to Claude Code and the recently launched Opus 4.3 (I think), and while the code it produced wasn&#39;t the prettiest, we delivered the project bug-free and ready to rock, on time. Something had shifted.&lt;/p&gt;
&lt;p&gt;Since the arrival of Opus 4.5 a few months later, I haven&#39;t hand-written a single line of code. I haven&#39;t talked publicly about it because I&#39;ve held some shame about it. The bait-and-switch non-profit to heavy-profit motives of OpenAI spooked me. The weird god-complexes of the leaders of some of these companies. The profession to be &amp;quot;open&amp;quot;, and &amp;quot;ethical&amp;quot;, but in reality being very closed. The selling of technology that works some percentage of the time and then the other non-zero percentage of the time can delete your production database. It&#39;s all a bit shady. Some of my best friends have decided that AI is simply &lt;a href=&quot;https://freelancing-gods.com/2026/02/13/ai-is-bad&quot;&gt;bad&lt;/a&gt;, and &lt;a href=&quot;https://writing.jan.io/2026/02/02/ai-veganism.html&quot;&gt;not worth even looking at&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I don&#39;t have those beliefs.&lt;/p&gt;
&lt;p&gt;Nor, however, do I subscribe to the hype. There are people who believe that an AI takeover of the world is inevitable. To me it seems they would idly sit by as we become vassals of companies run by people you probably wouldn&#39;t trust to mind your dog let alone your kids. There are people (including me) who are happily feeding data, connecting a bunch of private services to these two US firms, just for convenience.&lt;/p&gt;
&lt;p&gt;And I get it: speaking to a computer like a human and it responding is one of the most joyous ways to interact with a machine that I&#39;ve ever experienced. My whole life, I&#39;ve had to conform to how machines communicate, as programmed by someone who is not me. Now the machine conforms to how I communicate, and adapts to my preferences. It&#39;s science fiction in real life.&lt;/p&gt;
&lt;p&gt;The past few weeks, I have gone very, very deep down the rabbit hole. I&#39;ve spent quite a lot of time (and tokens, 🤮) pulling the slot machine lever and refining the output. (Although not as much as &lt;a href=&quot;https://bun.com/blog/bun-in-rust&quot;&gt;some idiots&lt;/a&gt;). The two themes of my lever pulling have been: &amp;quot;if people insist on using AI, I want to see if I can uncover ways in which it can be used effectively, efficiently, and for the betterment of communities, not for individual gain&amp;quot;. The other theme is: &amp;quot;no engineer would be stupid enough to do this&amp;quot;. I believe I have uncovered a lot of interesting ideas worth sharing. I&#39;ll post about those separately.&lt;/p&gt;
&lt;p&gt;For today though, I&#39;m writing this in a text editor. I&#39;m about to feed it in to an LLM, and to the best of my knowledge, it will be published on my very new and very plain website at paulca.com. [Update: it worked! I&#39;m now going to send these edits to a slower but more capable model after some &amp;quot;tuning&amp;quot; and my expectation is that I will paste the changes and the next thing I&#39;ll need to do is refresh my browser]&lt;/p&gt;
&lt;p&gt;The kicker is that doing that will not pass through any US-owned-or-controlled LLM provider. While Anthropic, and particularly Fable, remains best-in-class at software production and I have discovered a few tricks to make very nice software very efficiently, other open source models exist that can run very fast on hardware (ergo: GPUs [and more slowly, on CPUs]) that until a few years ago would have been considered a commodity.&lt;/p&gt;
&lt;p&gt;So that&#39;s all I have to say for now. A first blog post about AI, hand-written, but posted using a robot running in a home-office in South Dublin, powered by an open source model, where none of the data leaves my control or my jurisdiction without my consent, ironically landing on GitHub, a company whose services I once loved dearly, made by people who became some of my closest friends, that I hope to soon leave behind and never look back.&lt;/p&gt;
&lt;p&gt;Let&#39;s. Fucking. Go.&lt;/p&gt;
</description><pubDate>Sat, 25 Jul 2026 01:00:00 +0100</pubDate>
      <dc:creator>Paul Campbell</dc:creator>
      <guid>https://paulca.com/blog/using-an-llm-off-the-grid/</guid>
    </item>
  </channel>
</rss>