<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="https://roushtech.net/feed.xml" rel="self" type="application/atom+xml" /><link href="https://roushtech.net/" rel="alternate" type="text/html" /><updated>2026-09-25T18:06:35-04:00</updated><id>https://roushtech.net/feed.xml</id><title type="html">RoushTech</title><subtitle>RoushTech designs, builds, and operates custom software, SaaS platforms, and infrastructure for healthcare, e-commerce, manufacturing, and SaaS teams.</subtitle><author><name>RoushTech, LLC</name></author><entry><title type="html">AI Productivity Paradox</title><link href="https://roushtech.net/blog/ai-productivity-paradox/" rel="alternate" type="text/html" title="AI Productivity Paradox" /><published>2026-09-25T17:55:46-04:00</published><updated>2026-09-25T17:55:46-04:00</updated><id>https://roushtech.net/blog/ai-productivity-paradox</id><content type="html" xml:base="https://roushtech.net/blog/ai-productivity-paradox/"><![CDATA[<h2 id="c-levels-arent-happy">C-levels Aren't Happy</h2>

<p>Okay, are they ever?</p>

<p>However, I agree with them on this one: Fortune recently reported <a href="https://fortune.com/2026/08/22/executives-ai-productivity-layoffs-study/">90% of executives say AI hasn't boosted productivity</a>. How about <a href="https://thehill.com/policy/technology/5460663-generative-ai-zero-returns-businesses-mit-report/">95% of enterprise AI pilots return nothing</a>? How about <a href="https://www.ft.com/content/1d37cc08-e0aa-45a4-a45d-4ad282529314">spending isn't justified as companies have to rein in AI spending</a>?</p>

<p>Wait… but AI is supposed to make us more productive? I mean I know <a href="https://www.cnbc.com/2026/03/20/nvidia-ai-agents-tokens-human-workers-engineer-jobs-unemployment-jensen-huang.html">Jensen says we should be dropping $250k/yr per dev in token usage</a>, and that software engineers should be pulling $500k/yr… so why aren't we seeing companies gladly throw more money at the productivity machine? That's obviously the correct move <em>if</em> every piece of labor is cheaper through it.</p>

<h2 id="but-my-productivity-seems-increased">But… My Productivity Seems Increased</h2>

<p>Now before we dive into this, I'll preface this with an assumption: the <em>shift</em> in how my workflow goes may be biasing my stance. Some of the more stressful/grueling parts are less of a problem now, experimentation is cheaper, no longer a major consideration in solution finding…</p>

<p>With that in mind, depending on the task, I'm probably anywhere from 2-3x slower to 20-500% faster.</p>

<ul>
  <li>For slinging basic UI around, something that's code-heavy but cognitively light, things get done <em>way</em> faster.</li>
  <li>As the complexity goes up for the actual task at hand, the gap closes. LLMs are more likely to make errors, introduce more problems down the road, need more guidance, or recommend bad approaches.</li>
  <li>There is an inflection point where I've had tasks take longer on LLMs than doing it by hand. You learn which tasks those are, bail early, just make the change by hand, etc.</li>
</ul>

<p>The important part is figuring out where the tool lands on helping early on, and deciding what level of leaning on it you'll use. This varies by task. The number of times we have a task to do and Claude wants to hand-roll an entire module where a lib already exists that is built <em>explicitly</em> for this task is staggering. This <em>increases</em> our overhead and introduces bugs. Sticking my hand in the spinning machine to stop it and tell it "no no, go use this lib" saves us a ton of effort (and funny enough, tokens).</p>

<p>But overall, I feel significantly more productive, even if it's just because I can work and focus more on said work because the cognitive load isn't wasted on fiddling with layout because I wanted to add a dialog box.</p>

<h2 id="so-where-is-the-productivity-going">So Where Is The Productivity Going?</h2>

<p>RoushTech has a <a href="/how-we-use-ai/">pretty strict policy about how we can use AI in our work</a>. What we're aiming for is two major parts: first, a customer should not be paying for slop, and second, the team shouldn't have to tolerate the additional overhead you <em>add</em> by behaving like this.</p>

<p>People who act as human-to-LLM interfaces externalize a <em>massive</em> amount of cost. To the point where businesses need to adapt by updating their workplace policies so that this is behavior that leads to termination.</p>

<p>"Human-to-LLM interface"? This is the kind of person where you have a problem with their code, you write up a couple paragraphs of questions. They take it, copy it, paste it into an LLM, get the response and paste it into an e-mail back to you, and then click send. They have added exactly zero value to this process while making it massively slower.</p>

<p>The ignorant manager: "wow they're fast"</p>

<p>Anyone that has to deal with this: they're spending <em>a ton</em> of extra time babysitting this person. LLMs work best <em>under pressure</em>, having their defaults challenged and being guided. This kind of blind handoff in both directions doesn't even allow the LLM to actually work effectively. On top of that, LLM output is <em>rough</em>, it's clearly not in your voice, it's typically in a context that is <em>awkward</em> to grok, and will introduce way more of a tax sending 2-3 pages of Claude output instead of 2-3 sentences just explaining what you did…</p>

<p>Which on that point, now you have an expensive engineer that… <em>actually doesn't know what they did</em>. That is not worth anything. If I want people to copy/paste between prompts, I got a lot of kids out of high school that can do that. There is <em>zero</em> reason to pay expensive salaries for that… shoot, and that's before we even get to "I might as well just orchestrate agents myself".</p>

<p>I refer to these people as "black holes of productivity".</p>

<h2 id="the-4-types-of-worker">The 4 Types Of Worker</h2>

<p>The "4 classifications of officers" is commonly attributed to Kurt von Hammerstein-Equord, an interwar German general. I've brought it up with <a href="/authors/zech-sloan/">Zech Sloan</a> and <a href="/authors/james-anderson/">James Anderson</a> a lot, and I think it applies just as well to workers.</p>

<blockquote>
  <p>I distinguish four types. There are clever, hardworking, stupid, and lazy officers. Usually two characteristics are combined. Some are clever and hardworking; their place is the General Staff. The next ones are stupid and lazy; they make up 90 percent of every army and are suited to routine duties. Anyone who is both clever and lazy is qualified for the highest leadership duties, because he possesses the mental clarity and strength of nerve necessary for difficult decisions. One must beware of anyone who is both stupid and hardworking; he must not be entrusted with any responsibility because he will always only cause damage.</p>

  <p><a href="https://en.wikipedia.org/wiki/Kurt_von_Hammerstein-Equord">Kurt von Hammerstein-Equord</a></p>
</blockquote>

<p>LLMs have done something massively dangerous here. They've taken the unskilled and lazy worker, and made them <em>incredibly</em> ambitious, the most dangerous kind of worker. These people can create <em>much more</em> work for everybody around them. Every piece of work they do is effectively collateral damage to the rest of the team.</p>

<p>Before LLMs, the lack of skill limited their ability to actually do work. Their blast radius was small and cycle times were measured in days and weeks. Their slowness was a <em>feature</em>.</p>

<figure class="post-figure">
<img src="/assets/images/blog/four-types-of-worker.svg" alt="A two by two grid of worker types: lazy and ambitious across, skilled and unskilled down. Skilled and ambitious is the General Staff, skilled and lazy is the highest leadership, unskilled and lazy is routine duties, and unskilled and ambitious is entrusted with nothing. An arrow labeled LLMs pushes the unskilled and lazy worker into the unskilled and ambitious quadrant." loading="lazy" />
<figcaption>Where LLMs push the unskilled and lazy worker.</figcaption>
</figure>

<h2 id="why-the-llm-fails">Why The LLM Fails</h2>

<p>One of the most common things that we've seen is an LLM will take every piece of feedback and turn it into an immediate and aggressive action. The default to "hey what do we do if $x happens" becomes code in our code base that requires upkeep and may introduce bugs. We've caught many of these situations <em>causing bugs</em> before they ship to production. We had Claude offer to add complex state management for a bug that's already fixed! But you know… in Claude's mind (to anthropomorphize it for a moment), "just in case".</p>

<p>There's a cascade of other issues LLMs will present. We had Claude take our staging environment offline due to a relatively boneheaded mistake on its part. It then spent over half an hour misdirecting us until I stepped in and found it in two commands.</p>

<p>I have <em>endless</em> stories just this month alone, on Fable, the model that was supposed to be crazy good.</p>

<p>These failures are basically the reason we hire humans and delegate. This goes back to basic business 101: you delegate because to do otherwise requires you to have infinite time to do all of the work. This delegation is only valuable if <em>another</em> person is putting <em>their</em> time into making sure things work.</p>

<p>If your meat proxy is just going to accept whatever Claude outputs, you're getting zero value off of delegation.</p>

<h2 id="the-slop-grenade">The Slop Grenade</h2>

<p>Tobias Lütke of Shopify had recently talked about "Slop Grenades" which I think is such an accurate term for it. A pin is pulled, it rolls into the room and everyone else pays the price.</p>

<p>While Tobias is a bit bitter about people poking fun at him for promoting AI in the way that led to slop grenades being the norm (he argues he never told people to use it poorly…), the problem is industry-wide and deep-rooted in the complexities of the people who make up the work force.</p>

<figure class="post-figure">
<img src="/assets/images/blog/tobi-use-it-well.png" alt="Post by tobi lutke (@tobi) on X, Sep 21: definitely use it, use it well. Too complex a set of instructions for various people around here it seems." loading="lazy" />
<figcaption><a href="https://x.com/tobi/status/2102162939679490175">Tobias Lütke on X</a>, September 21, 2026.</figcaption>
</figure>

<h2 id="what-the-industry-needs-to-do">What The Industry Needs To Do</h2>

<p>The problem exists because our social expectations at work have not caught up with the new type of work being done. This leads to a massive asymmetry of expectations and a time sink where there originally was not one.</p>

<p>We need to stop tolerating the unskilled and ambitious. They're now actively holding teams back.</p>

<p>RoushTech has a very simple approach to this, and it's a Human Resources one: if you are actively a detriment to your team because you're being lazy, you get put on a Performance Improvement Plan, and if you don't stop, you will be terminated.</p>]]></content><author><name>william-roush</name></author><summary type="html"><![CDATA[People keep reporting productivity gains, but executives are reporting the opposite. Why?]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://roushtech.net/assets/images/blog/ai-productivity-paradox.png" /><media:content medium="image" url="https://roushtech.net/assets/images/blog/ai-productivity-paradox.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Engineers Like to Screw Around</title><link href="https://roushtech.net/blog/engineers-like-to-screw-around/" rel="alternate" type="text/html" title="Engineers Like to Screw Around" /><published>2026-08-12T08:00:00-04:00</published><updated>2026-08-12T08:00:00-04:00</updated><id>https://roushtech.net/blog/engineers-like-to-screw-around</id><content type="html" xml:base="https://roushtech.net/blog/engineers-like-to-screw-around/"><![CDATA[<h2 id="it-started-with-a-linkedin-post">It started with a LinkedIn Post</h2>

<blockquote>
  <p>Your company builds a CRUD app that serves 5,000 users. Your interview asks candidates to optimize distributed systems at scale. What are we doing here?</p>
</blockquote>

<p>The post details an all-too-common problem, an application that honestly doesn't need to deal with scale, but their interview process (and likely their engineering team) is caught up worried about problems they'll never have.</p>

<p>But it sets the tone, <em>this</em> is how you should be approaching problems. We build for scale, we build to be a billion dollar unicorn (which is a complete engineering misstep and frankly in my opinion: negligent), it doesn't matter that we only make $2m/yr and our growth is 9%/mo. We don't build for what we're going to do, we build for the never-will-be.</p>

<p>That tone carries over to the whole industry.</p>

<h2 id="what-are-we-doing-here">What ARE we doing here?</h2>

<p>Over my 2+ decades of experience I've seen:</p>

<ul>
  <li>Time-wasting automation: where neither time nor consistency improved (but a job to maintain those scripts was created)</li>
  <li>Microservices: I'm going to come out and say it, for the vast majority of companies, microservices <em>harmed</em>, <em>significantly</em>. Likely if your company isn't shoving 9+ figures of revenue through its doors, this initiative was for job-creation, if you think you'll be a 9-figure company, like every other 9-figure company, fix it when that's on your horizon, not your day-dreams.</li>
  <li>Mediator/Actor models/CQRS/etc: Needed in <em>very specific</em> circumstances, I've seen it complicate and make systems fragile and slow more often than robust and efficient.</li>
  <li>Kubernetes: If I'm lucky a Kubes deployment is kept simple, most of the time they're engineering it to need to orchestrate a thousand servers, no. (Expect me to publish an article about frustration that Kubes <em>is</em> kind of an annoying-but-best go-to, this doesn't apply to those deployments)</li>
  <li>Rewriting Libraries: I've seen many engineers that didn't like how something was done, didn't just sit down and tolerate it, and made a more fragile, more opinionated version that now was the company's problem to maintain.</li>
</ul>

<figure class="post-figure">
<img src="/assets/images/blog/needs-vs-architecture.svg" alt="Two stacks compared. What the product needs: a CRUD app, one database, a monolith, for five thousand users. What got built on top of the same CRUD app: microservices, Kubernetes, CQRS and mediator, custom libraries. The extra layers are bracketed as resume-driven development." loading="lazy" />
<figcaption>The gap between the two stacks is the playground.</figcaption>
</figure>

<h2 id="why-do-engineers-keep-doing-this">Why Do Engineers Keep Doing This?</h2>

<p><a href="/authors/james-anderson/">James Anderson</a> from our team put a name to it: "Resume-driven development." It's pretty on the nose, but there are a handful of reasons it happens:</p>

<ul>
  <li>Padding their resume with "accomplishments" - those accomplishments aren't actually improving your bottom line, but they'll sure improve their resume when they jump ship to a new job.</li>
  <li>Read too much Reddit / lobste.rs / Hacker News - A flavor of "keeping up with the Joneses", other Engineers get to work with cool new toys, I want to also!</li>
  <li>"This is what we did before" - Engineers basically rubber-stamping the same solution their entire career.</li>
  <li>Not actually engineering - A flavor of above, but to a point.</li>
</ul>

<p>There are so many engineers that just kind of… don't think, they rubber-stamp solutions regardless of how ill-fitting they are.</p>

<h2 id="so-how-do-we-stop-this">So How Do We Stop This?</h2>

<p>Most of this just comes down to better vetting and better management.</p>

<p>Those are honestly two <em>entire</em> other articles in and of themselves, stay tuned for those.</p>

<p>The bottom line is this: engineering is expensive… <em>mentally</em> - it takes a very concentrated and pragmatic approach to do well, and the best engineers I've worked with weren't the ones chasing the newest pattern or padding their resume – they were the ones solving the actual problem in front of them. Knowing what your business actually needs is what separates an engineer from someone just screwing around on company time.</p>]]></content><author><name>william-roush</name></author><summary type="html"><![CDATA[How software engineering has become a playground and less of an engineering practice.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://roushtech.net/assets/images/blog/engineers-like-to-screw-around.png" /><media:content medium="image" url="https://roushtech.net/assets/images/blog/engineers-like-to-screw-around.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">AI Is Giving Us Engineers More Work, Not Less</title><link href="https://roushtech.net/blog/ai-is-giving-us-more-work-not-less/" rel="alternate" type="text/html" title="AI Is Giving Us Engineers More Work, Not Less" /><published>2026-07-26T00:00:00-04:00</published><updated>2026-07-26T00:00:00-04:00</updated><id>https://roushtech.net/blog/ai-is-giving-us-more-work-not-less</id><content type="html" xml:base="https://roushtech.net/blog/ai-is-giving-us-more-work-not-less/"><![CDATA[<h2 id="the-narrative">The Narrative</h2>

<p>So we've seen it all over social media, every engineer can be a 10x engineer now, get rid of 90% of your team, no wait software engineers are cooked, everyone can be a 10x engineer now! Actually just get rid of your engineering team!</p>

<p>But it's been over 3 years of this, Devin AI, the AI to "replace all devs" has been out for over 2 years, and where are we really today?</p>

<h2 id="learning-programming-languages-was-never-the-barrier">Learning Programming Languages Was Never The Barrier</h2>

<p>I've picked up languages in a few days, I have over 15 under my belt, many engineers are thrown at languages that were developed for specific platforms, shoot I've seen projects where all-too-silly engineers developed their own <em>language</em> then used it at work.</p>

<p><a href="/authors/zech-sloan/">Zech Sloan</a> was nearly hired a few job placements ago to lead a Ruby team - zero Ruby experience, the founder wanted his technical acumen <em>that badly</em>, the language didn't matter, the skill to make well informed and solid decisions did. <em>Zech</em> turned down the offer.</p>

<p>At the end of the day, learning how to write an <code class="language-plaintext highlighter-rouge">if</code> statement wasn't the big barrier that AI influencers want you to believe. What is <em>basically</em> being said is "oh look, now people who can't be bothered to put in <em>a little</em> bit of effort can do this too!", that's <em>not a good thing</em>.</p>

<h2 id="10x-development">10x Development!</h2>

<p>Are engineers hitting 10x productivity? No not really, we've seen a lot of projects still <em>crawl</em>, releases aren't that frequent, road map is still way behind schedule, us as users, owners, or investors are left still just <em>waiting</em>.</p>

<p>We're seeing no renaissance of software - have we seen <em>20 years of software development</em> in the past 2? No, not even close. If anything we're seeing an unprecedented <em>slump</em> in software quality. Windows had one of the worst rollouts since Vista, and Vista had an excuse! <a href="https://www.tomsguide.com/computing/aws-suffered-at-least-two-outages-caused-by-ai-tools-and-now-im-convinced-were-living-inside-a-silicon-valley-episode">AWS has gone down at least twice due to AI-assisted deployment changes</a>. Cloudflare's AI-driven Bot Management system took down a chunk of the internet. These kinds of incidents during the "Boring Cloud" last decade would get people <em>fired</em>.</p>

<p>We do see <em>some</em> software building fast, stuff like <a href="https://github.com/accius/openhamclock/">OpenHamClock</a> is a decent example, but I ended up not using it because it kept changing frequently, branched from the original app it replaced (functionality wise), and kept adding so many random things it made what use I got out of it <em>less useful</em>.</p>

<p>OpenClaw is a new flavor of abandonware: endless issues generated by bots, bots endlessly PRing against broken builds, activity everywhere and care nowhere, the bots just make the project worse continuously, this is the 10x you get.</p>

<h2 id="have-non-engineers-write-code">Have Non-Engineers Write Code!</h2>

<p>I love how I'm watching the flavor-of-the-month tell teams to do this, guys we <em>just</em> came out of low/no-code. We <em>just</em> experienced what happens. Engineers aren't just English -&gt; Code translators, a good team pushes back, a good team understands the industry, a good team guides product development to be better.</p>

<p>We have seen <em>zero</em> people handle this for anything non-trivial. No/low code has always had a very important role, are you a mom and pop shop that needs something that's better than an Excel spreadsheet? Low/No code works <em>great</em> for this, when your budget is $100 and your own time. I think Vibe coding still sits in this comfortably, can you reach further? Yes. Will it bite you? Even worse than old low/no code did.</p>

<p>I personally have had multiple projects come to me from individuals taking the bait on this, usually the story is the same: "this is a nightmare to work with, I need [quote a 5-figure number]", what people don't understand is a few very clear problems:</p>

<ol>
  <li>As a non-engineer these platforms will let you do terrible things</li>
  <li>They have a tendency to make a mess of the code base by default</li>
  <li>They're <em>immensely</em> fragile, usually that's why you've reached out, because you've gotten to the point where you can't fix anything without breaking something else</li>
  <li>Me re-architecting this is a lot of work, not only time wise, but it's stressful and some of the worst work to do, that'll come at a premium</li>
</ol>

<h2 id="we-were-never-short-of-work-to-do">We Were Never Short of Work To Do</h2>

<p>And the biggest point, I've never, in over two decades of professional software engineering, ever been <em>close</em> to not having a backlog, not only that, AI allows us to consider <strong>SO MUCH MORE</strong> on our backlog.</p>

<ul>
  <li>Need a tool to do something? Build it, the cost to do things manually instead of having this tool has compressed greatly.</li>
  <li>Would a UI flow catered to this specific flow be better than using the already-existing flow? Do it, it's a better UX, cost is no longer the major barrier for these little UX improvements.</li>
  <li>Want to reconsider a UI reflow because we've been adding features? The cost of prototyping it just fell through the floor, see if anything sticks.</li>
  <li>Quality of life improvement? A must-have now. I have more flexibility to wager if we can fit it into the pipeline.</li>
  <li>We need to refactor this code? I can prototype those refactors quickly, for trivial-but-heavy moves (lots of code but easy approach) LLMs will make quick work.</li>
</ul>

<figure class="post-figure">
<img src="/assets/images/blog/ai-induced-demand.svg" alt="Two panels compare the cost to build small tasks before and with AI. Before, items like an internal tool, a custom UX flow, and quality of life fixes sit above the worth-building line and stay on the wishlist. With AI, the same items fall below the line and land on the backlog." loading="lazy" />
<figcaption>The threshold moved. The backlog did not get shorter, it got wider.</figcaption>
</figure>

<h3 id="no-tests-dont-save-you">No, Tests Don't Save You</h3>

<p>I don't care what anybody says, I've watched multiple teams do this, and I've experienced it myself multiple times, on <em>every</em> project without manual review and correction the same thing holds true: Claude will <em>lie</em>. Claude will build tests that are useless, it'll inflate that test count quickly, but your software will still be amazingly fragile.</p>

<ul>
  <li>I've had Claude generate hundreds of tests, we went from 30 -&gt; 230 tests in a week, confirming payload parsing was good, real-world testing showed 25% error rate, I had to go in and very surgically build tests and fixes, reduced it to &lt;3% (packets outside of spec, so honestly effectively a 0% error rate). Those 200 tests dedicated to packet parsing were checking garbage.
    <ul>
      <li>We had a documented specification</li>
      <li>We had over 25,000 example packets</li>
      <li>Claude was given clear instructions multiple times, including leveraging the packet dumps to find parsing errors</li>
      <li>Claude still helped - but required significant hand-holding to get it to actually do what we wanted it to and <em>many</em> iterations of useless tests</li>
      <li>I still don't entirely trust the new test suite now, how many of those 200 tests are redundant? How many could I trim and lose nothing?</li>
    </ul>
  </li>
  <li>One of our colleagues gave Claude the job of generating regression tests for a major refactor they were doing, they had to fight with it a lot to keep the tests on-track</li>
  <li>I've had to argue with Claude to not create overly-fragile tests.</li>
  <li>We had worked on a data issue for one of our platforms, where we had Claude write a test to confirm a bug was fixed - we wanted Claude to check two reports against each other, explicitly checking the report <em>results</em>, but it decided to write a 40 line internal-gut-checking test instead of the 5 lines of "did this function output match this expected value" (it also ended up not doing it right and passing when it should have failed, resulting in a bug in production persisting)</li>
</ul>

<figure class="post-figure">
<img src="/assets/images/blog/ai-tests-vs-reality.svg" alt="Left, the test count grew from 30 to 230 in a week of AI-generated tests. Right, the real-world parsing error rate stayed at 25 percent despite those tests, and only dropped under 3 percent after surgical, hand-built tests and fixes." loading="lazy" />
<figcaption>Coverage went up. Correctness did not, until a human got surgical.</figcaption>
</figure>

<p>You can always roll around and say "well you have to…", no, over all the projects I've seen, everyone is doing this wrong, and those telling me I need to hold it sideways? I bet they're doing it wrong too.</p>

<h2 id="the-people-saying-it-has-a-low-error-rate-are-insane-and-bad-at-their-jobs">The People Saying It Has a Low Error Rate Are Insane (and bad at their jobs)</h2>

<p>This comes in from the test portion above too, so I get a number of people, usually people that are coding with mostly vibes, who insist Claude isn't making mistakes – now this doesn't pass a simple logic sniff test (most engineers don't pass one in general), <em>how</em> do you validate something that you don't spend the time to validate because you "trust" it?</p>

<blockquote>
  <p>Well I have it test itself</p>
</blockquote>

<p>That… is stupid, you have to assume the tests it's generating are good to begin with.</p>

<p>The problem is we <em>do</em> check, and we <em>do</em> correct, <em>A LOT</em>.</p>

<blockquote>
  <p>Well you need to make agent personas</p>
</blockquote>

<p>OK, see that's the thing, I did that, I spent a bunch of time going down that path, building a <em>team</em> to handle some basic tasks. I gave it a task to do, it eats 70% of my tokens for the day (OK it was a large task), I review the output, out of like a 20-point list, assumption 2, a basic assumption, was <em>massively</em> wrong. Like "it didn't even try" wrong.</p>

<p>I'm not spending those tokens, that downtime, on <em>that</em>. Sure if it isn't your money, your time, your chair spins while your employer pays you, have at. It's my time, my money, my investments.</p>

<p>This behavior is a known psychological concept: Automation bias. It's people's tendency to believe the computer, we've seen it a lot recently - <a href="https://thisisreno.com/2025/11/peppermill-casino-ai-misidentification/">police and hotel staff trusting AI algorithms that are plain-as-day misidentifying a person</a>. We've seen it in data analytics, a bad number is spit out and the majority of people will trust it instead of saying "this doesn't look right…". Machine learning is super nasty in a way people aren't used to, it has a very atypical state when it "isn't working" – when a program fails to run, we usually expect it to crash or error, ML algorithms will just display bad data basically every time. Its failure state isn't a nice pop-up error message, it just <em>lies</em>.</p>

<h2 id="but-the-job-market">But the Job Market</h2>

<p>Job markets are complex and multi-faceted, we're coming off the heels of COVID era <em>ridiculousness</em>, people coming out of high school saw "hey, get a 6 figure job as your first job", those are the fresh people hitting the market <em>today</em> as juniors.</p>

<p>That was not sustainable, nothing about that was, people predicted "this is the new norm", none of it was (keep that in mind when the same people are predicting AI too).</p>

<ul>
  <li>We have a significant number of tourists; people who are effectively only here for a 9-5 job and couldn't care less, they always underperform people with a passion for the work by a significant margin</li>
  <li>Companies (especially startups) practiced IT-heavy hiring, effectively over-hiring because big IT teams always <em>seemed</em> impressive (though more likely a dysfunctional team)</li>
  <li>The end of low interest rates reduced the available cash to be thrown around (almost for free) for investments</li>
  <li>There is a bit of "follow the leader" on seeing that you can cut your IT team and "totally not have a problem" (we saw this start with Elon Musk and X, the main fallout I was worried about: people thinking X wasn't in a unique position of <em>gross</em> over-hiring)</li>
  <li>There is some flow back to outsourcing, mostly to low bidders, we know what that gets us in the long-run (it's why we keep ebb and flowing back and forth)</li>
</ul>

<p>The above isn't AI, AI has been an excuse to try to keep investors happy, vs. "we're preparing for not-so-great performance soon".</p>

<h2 id="ai-doesnt-leave-us-less-busy">AI Doesn't Leave Us Less Busy</h2>

<p>Maybe for some, who see it as a 15 minute break 10 times a day, for me even if I'm chugging on something big, I'm spinning around to do a bunch of smaller "light-duty" work that wasn't possible to fit into budgets before. I'm <em>constantly</em> busy, with a backlog we <em>still</em> cannot get all done. I am still 100% budget constrained, and a lot of this work on our backlog is revenue generating, or cost cutting. It's stuff with tangible business value.</p>

<p>And I've never had it any other way in 2 decades, I don't feel AI is changing that.</p>]]></content><author><name>william-roush</name></author><summary type="html"><![CDATA[Over two decades in and my backlog has never once been empty. AI hasn't replaced engineers or made anyone a 10x dev, it just made the small stuff cheap enough that there's way more of it to do now.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://roushtech.net/assets/images/blog/ai-is-giving-us-more-work-not-less.png" /><media:content medium="image" url="https://roushtech.net/assets/images/blog/ai-is-giving-us-more-work-not-less.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Mantle is Shutting Down – And I Breathed a Sigh of Relief</title><link href="https://roushtech.net/blog/mantle-is-shutting-down/" rel="alternate" type="text/html" title="Mantle is Shutting Down – And I Breathed a Sigh of Relief" /><published>2026-06-16T00:00:00-04:00</published><updated>2026-06-16T00:00:00-04:00</updated><id>https://roushtech.net/blog/mantle-is-shutting-down</id><content type="html" xml:base="https://roushtech.net/blog/mantle-is-shutting-down/"><![CDATA[<h2 id="what-is-mantle">What is Mantle</h2>

<p>Mantle (<a href="https://heymantle.com/">heymantle.com</a>) is a SaaS product that sits on top of Shopify's App Billing for managing your app's payments and general sales/marketing flow. It's something I've eyeballed off and on between when I was working on Shoplift and our own platform <a href="https://raptifyapp.com/">Raptify</a>. It helps manage all of your Shopify payments, your contacts, set up tiers and discounts and usage tracking and all that good stuff, sounds great right? This all takes significant time to set up…</p>

<h2 id="so-why-didnt-we-use-it">So… Why Didn't We Use It?</h2>

<p>Initially we shot it down because of requirements (and we ended up building out before Mantle was even a thing), but with Raptify we were much more aligned: we needed stronger usage-based billing, we wanted to pull all feature sets from billing information, and I had zero sales-pipeline requirements beyond "put money in my bank account". Wonderful, the gaps are not a problem, and the benefits are great… or so I thought.</p>

<p>So we heavily developed with Mantle in mind, wiring up to their tooling, manually loading our plan data, testing, validating. Things were going sort of well minus one <em>major</em> roadblock.</p>

<p>I had no good way to keep our 6 environments synced plan wise (staging + hotfix + production + 3 engineers having their own), this basically meant we were chasing a lot of bugs that boiled down to poor plan configuration in Mantle. <em>Surely</em> we have a way to keep this synced in Mantle right?</p>

<p>Nope, well – what about their API? Nope, couldn't do what we needed.</p>

<p>This missing functionality was going to be a deal-breaker for us, we've already spent a significant amount of QA time chasing bugs that were configuration mis-matches, doing it manually was a <em>huge</em> time sink and would be error prone…</p>

<h2 id="when-ai-focus-kills-your-product">When AI Focus Kills Your Product</h2>

<p>So I asked – "How can we keep these in sync? Or have any sort of copy ability? Is this on the roadmap?"</p>

<blockquote>
  <p>No we don't support that, but maybe you can use our MCP to do that?</p>
</blockquote>

<p>What? That had been their response to a lot of people lately, I had noticed there'd been a significant dip in focus on maturing the platform and going all-in on messing with their MCP a lot (at least from my perspective), most of their updates seemed about it, a lot of answers were "just use the MCP" without clarity on if the MCP provided the additional exposure to actually do the things we need, consistently and reliably enough and without additional overhead coaxing the LLM to do what we need…</p>

<p>Should we have just used the MCP? It's a deterministic flow we need – so I'm iffy on that one at best, and the <em>first</em> thing we're seeing get knee-capped in the world of AI is automated flows. Human-in-the-loop at least is probably going to be the last that gets priced to the moon.</p>

<h2 id="want-me-to-use-ai-that-much-well-just-use-it-to-replace-your-platform">Want Me To Use AI That Much? We'll Just Use It To Replace Your Platform</h2>

<p>Ultimately, even <em>with</em> Claude, their platform would have been worth the money… <em>if it didn't incur additional overhead to do what we needed</em>.</p>

<p>I'm extremely familiar with many payment platforms, we even built our own back at my OrthoBanc days with Zech and interfaced directly with banks. Stripe being one of my favorite due to a <em>really</em> polished developer experience and a pretty good business ops experience, is an easy choice. I'm familiar with the pitfalls of Shopify's billing system (at least a lot of them), so I draft up a plan and get to work with Claude.</p>

<p>It's maybe a weeks worth of work if even that, and we have exactly what I want: Raptify supports Stripe for standalone accounts and Shopify for in-store customers. One platform, two payment providers, Plan data is internal and seeded for devs and test environments, editable in production, supports all the extra bells and whistles, and I don't need anything else fancy because remember: baseline payment requirements is "I just need to get paid", I'm not going to try to do weird unreliable projections based on Shopify's weird payment behaviors.</p>

<h2 id="so-i-let-out-a-sigh-of-relief">So… I Let Out A Sigh Of Relief</h2>

<p>Today, we get this announcement: <a href="https://docs.heymantle.com/migrating-off-mantle/wind-down">https://docs.heymantle.com/migrating-off-mantle/wind-down</a> – Mantle is shutting down, end of services is in <em>September</em>.</p>

<p>I still had questioned if I made the right call, even with Claude, code costs money to maintain (even without the looming AI cost increases popping up), but with Mantle shutting down, I have no choice but to admit: we made the right choice. Porting off of this would have been a <em>nightmare</em> (especially in 90 days) and I feel sorry for those having to deal with this.</p>

<h2 id="and-there-is-a-void">And… There is a Void</h2>

<p>On the Shopify Dev Discord <code class="language-plaintext highlighter-rouge">TeamDijon</code> pointed out:</p>

<blockquote>
  <p>This causes a void<br />
Alternatives will surface sooner rather than later</p>
</blockquote>

<p>And I'm <em>torn</em> on the viability of filling that void. Why did Mantle decide to shut down? Did they know of some lingering change on Shopify's horizon? Did the business model not pan out to be worth the effort? Were there just greener pastures their team was drawn to? Hard to tell right now…</p>

<p>We'll see, but I don't feel those platforms will really be on our radar.</p>

<h2 id="theyre-not-the-only-ones">They're Not The Only Ones</h2>

<p>I feel I would have stuck around if they leveraged AI to improve their platform instead of trying to add the latest AI-tooling bells-and-whistles to their product. They're not the only product that I feel ignores the thing that is actively making them money, and the vertical that could continue to make <em>more</em> money, to play with the hottest new <em>fun</em> tech stack (don't worry, we have an article about how Engineers get distracted with fun toys at the cost of your company coming up soon).</p>]]></content><author><name>william-roush</name></author><summary type="html"><![CDATA[Why we dropped Mantle for Raptify's billing, replaced it with Stripe and Shopify Billing in about a week, and why the shutdown confirmed it was the right call.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://roushtech.net/assets/images/blog/mantle-is-shutting-down.png" /><media:content medium="image" url="https://roushtech.net/assets/images/blog/mantle-is-shutting-down.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">Postgres is my go-to database and I&apos;m tired of pretending there are other options</title><link href="https://roushtech.net/blog/postgres-is-my-goto/" rel="alternate" type="text/html" title="Postgres is my go-to database and I&apos;m tired of pretending there are other options" /><published>2026-05-08T00:00:00-04:00</published><updated>2026-05-08T00:00:00-04:00</updated><id>https://roushtech.net/blog/postgres-is-my-goto</id><content type="html" xml:base="https://roushtech.net/blog/postgres-is-my-goto/"><![CDATA[<p>Ok, hot-take title aside: this is specifically with regards to <em>relational</em> databases (and hybrid document stores if you use Postgres that way), obviously if you need time series, graph, key-value, there are better engines…</p>

<p>But without further ado.</p>

<h2 id="yes-just-use-postgres">Yes Just Use Postgres</h2>

<p>The idea to write this came from a Reddit post: <a href="https://www.reddit.com/r/dotnet/comments/1t67sr7/why_does_postgresql_net_feel_so_much_better_than/">Why does PostgreSQL + .NET feel so much better than SQL Server these days?</a></p>

<p>Here at RoushTech we average shipping a new mainline market product about every 2 years, with smaller products dotted around, it's just how the work comes in, but regardless when it comes down to database choice we always "evaluate what our options are", then we choose Postgres, we really should cut out the middle man on this.</p>

<h2 id="what-about-other-engines">What About Other Engines?</h2>

<p>OK, again keeping this fair and sticking to <abbr title="Relational Database Management System">RDBMS</abbr> platforms, let's talk about our options:</p>

<ul>
  <li>Microsoft SQL Server - <em>Okay</em>, I'm going to be honest, I love MSSQL… until I have to license it. It's an <em>extremely</em> powerful engine, a good set of tools, some really nice failover options. Two major downsides: we've seen massive performance degradation when running on Linux due to how Microsoft got it to actually <em>run</em> on Linux, and secondly, the biggest one… Licensing. In the past we'd easily drop thousands or <em>tens of thousands</em> on licensing. It's become a major barrier. 2 months of development for an MVP or your SQL server license?</li>
  <li>MySQL/MariaDB - A <em>very</em> outdated engine, InnoDB hasn't seen meaningful improvements in forever, Oracle is effectively doing nothing with it (and no, MariaDB isn't different enough to warrant its own line), and my favorite deal-breaker in why we almost never run it. <em>ALTER TABLE STATEMENTS ARE IMPLICIT COMMITS</em>, that's right! When your software is running a migration, if it fails, it'll leave the DB in an invalid state because every table alter breaks out of your transaction! That's great!</li>
  <li>Oracle - Did you look at Microsoft's license and determine you were a glutton for punishment beyond that?</li>
  <li>[Insert Scale-Out DB Here] - Platforms like CockroachDB are cool, but scale-out DBs are a completely different class, complexities change a lot, design options are limited, latency floors are usually pretty high.</li>
  <li>SQLite - OK I love SQLite but only really great for local/embedded DBs.</li>
</ul>

<h2 id="ok-but-how-does-postgres-stack-up">OK But How Does Postgres Stack Up?</h2>

<p>This is the wonderful part, and some of the <em>really fun</em> parts people miss out on:</p>

<ul>
  <li>It's extremely performant in a lot of cases, we've shoved a <em>ridiculous</em> amount of traffic through it.</li>
  <li>You can use it as a doc store! Yeah, okay, I usually don't opt for using engines "incorrectly" but Postgres has come a long way, the ability to dig and index into JSON columns is great.</li>
  <li>You can beat the <em>everliving snot</em> out of an <abbr title="Relational Database Management System">RDBMS</abbr> if you're a half-decent engineer. We've had single-instance Postgres systems doing tens of thousands of non-trivial transactions per second, and yes, that's even after someone trots out the "well this key-value or document store can do 400k/sec" comparison everyone loves, sure, but those 400k are <em>trivial</em> ops on a single key or document. One non-trivial Postgres transaction is doing joins, constraint checks, and atomic writes across multiple tables. They're not the same unit and the comparison only flatters them if you pretend they are.</li>
  <li>Has a good amount of tuning options allowing you some decent influence on performance.</li>
  <li>Has a healthy extension market with a lot of additional bells-and-whistles you can add (PostGIS for spatial, pgvector for embeddings/RAG, TimescaleDB for time-series).</li>
  <li>The <abbr title="Multi-Version Concurrency Control">MVCC</abbr> system is complex but powerful.</li>
</ul>

<h2 id="where-am-i-going-to-get-bit">Where Am I Going To Get Bit?</h2>

<ul>
  <li>I've had the query planner lie to me about costs, just straight up <em>lie</em>, "this is cheap" then thread-spins.</li>
  <li>Like any <abbr title="Relational Database Management System">RDBMS</abbr>, beware of locking, a sloppy ALTER TABLE statement may be the difference between something that takes 100ms and 100 <em>minutes</em> (or longer). Learn how the engine allocates data.</li>
  <li>There are <em>many</em> ways to set up clusters, each with their own pros and cons.</li>
  <li>Postgres uses a process-per-connection model (every client connection forks its own backend OS process), which gets expensive at scale. PGBouncer is your friend, and your enemy. There is no free lunch with connection limits and port limitations, PGBouncer can make these logistics <em>easier</em>, but port exhaustion is still a thing.</li>
  <li>If you need something truly scale-out, it likely isn't here, but you should also be making $100+m/yr, why are you even here?</li>
  <li>Postgres is case-sensitive by default, unlike basically every other DB engine on the face of the planet. Configure case-insensitive collations on day one or you'll be patching application bugs forever.</li>
  <li>Run <code class="language-plaintext highlighter-rouge">VACUUM FULL</code>, you'll have a good time (<em>insert massive amounts of sarcasm here</em>). Imagine a hard drive defrag from back in the day but it locks your hard drive while doing so. MSSQL got online index rebuilds right at least, at least if you're paying for Enterprise.</li>
  <li>Major version upgrades can be annoying, not super bad though.</li>
</ul>

<h2 id="i-hate-to-say-it">I Hate To Say It…</h2>

<p>But yeah, just use Postgres, our options have narrowed over the years, and I agree, it's annoying, I almost feel like I'm not doing my job, but Microsoft's licensing and Oracle's lack of caring for MySQL did that for me.</p>]]></content><author><name>william-roush</name></author><summary type="html"><![CDATA[Why we always end up choosing Postgres, and what to watch out for if you do too.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://roushtech.net/assets/images/blog/postgres-is-my-goto.png" /><media:content medium="image" url="https://roushtech.net/assets/images/blog/postgres-is-my-goto.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry><entry><title type="html">New Look, Old Us</title><link href="https://roushtech.net/blog/new-look-old-us/" rel="alternate" type="text/html" title="New Look, Old Us" /><published>2026-04-23T19:00:00-04:00</published><updated>2026-04-23T19:00:00-04:00</updated><id>https://roushtech.net/blog/new-look-old-us</id><content type="html" xml:base="https://roushtech.net/blog/new-look-old-us/"><![CDATA[<p>We went ahead and deployed our new website, we're back on Jekyll on Cloudflare Workers, the process is pretty quick, I've always liked Jekyll for a lot of reasons (good basis, doesn't mix up a bunch of SPA concerns, lightweight, extensible with Ruby, front-matter is a first-class concern)</p>

<p>So with the new site comes some major new changes, we have some new pages better describing what we do, we have some regional pages up and we'll probably have more in the future, we have a list of our projects publicly (we used to have a hidden portfolio a couple of sites ago)</p>

<p>One of the major changes: public pricing</p>

<h2 id="okay-but-public-pricing">Okay, but public pricing?</h2>

<p>Along with us using Claude with a lot of our development, Claude has helped a bit with this site – Claude constantly complained "Don't put up pricing", "it doesn't allow you to drive higher margin if people know what you charge"</p>

<p>Yes Claude that's the point, we're not like every dev house where your pricing fits your business size (oh, you got lots of money, guess our hourly rate went up…). We work backwards from what we pay our engineers, since that's the basis that we have to clear as a business, we put a few levels of margin on top of that which represent our different discount tiers, and that's it. Nothing else special.</p>

<p>I mean Exhibit A of our MSA that shows our rates is basically the same for everybody (there are some edge cases where people get some slightly tweaked rate sheets but mostly driven by stability of the contract).</p>

<h2 id="weird-so-why">Weird, so why?</h2>

<p>There is a significant number of customers that appreciate that we just shoot straight, someone asks what we think something will cost, we'll throw some numbers based on our experience, not based on me having to come back and figure out what we can squeeze them for, just honest off-the-cuff assessments of what they're trying to do.</p>

<p>Of course we're generally in agreement: I'm giving <em>examples</em>, details can drive differences, but I get a lot of "I can't get a vendor to just shoot straight with me, Will"… well we should really do that up-front too. If the pricing makes you a bit skittish, if you're unsure of how or why we do things, talk to us, I'm more than happy to discuss how this makes sense.</p>

<p>Or hang around for more articles. Along with industry insights, I'm planning to explain a lot of the ethos behind why we do what we do and where these systems and theories come from, some maybe more hot takes than others…</p>

<p>See ya around!</p>]]></content><author><name>william-roush</name></author><summary type="html"><![CDATA[New website design, why we're doing it, what comes next.]]></summary><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://roushtech.net/assets/images/blog/new-look-old-us.png" /><media:content medium="image" url="https://roushtech.net/assets/images/blog/new-look-old-us.png" xmlns:media="http://search.yahoo.com/mrss/" /></entry></feed>