<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Asper Brothers</title>
    <description>The latest articles on DEV Community by Asper Brothers (@asperbrothers).</description>
    <link>https://dev.to/asperbrothers</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F119390%2Fa86b114a-df1a-48e4-bb45-c5810f835ef6.png</url>
      <title>DEV Community: Asper Brothers</title>
      <link>https://dev.to/asperbrothers</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/asperbrothers"/>
    <language>en</language>
    <item>
      <title>Three things AI agents did on the web, and what they mean for people who build agents</title>
      <dc:creator>Asper Brothers</dc:creator>
      <pubDate>Mon, 28 Sep 2026 15:42:34 +0000</pubDate>
      <link>https://dev.to/asperbrothers/three-things-ai-agents-did-on-the-web-and-what-they-mean-for-people-who-build-agents-3bk4</link>
      <guid>https://dev.to/asperbrothers/three-things-ai-agents-did-on-the-web-and-what-they-mean-for-people-who-build-agents-3bk4</guid>
      <description>&lt;p&gt;I run &lt;a href="https://asperbrothers.com/" rel="noopener noreferrer"&gt;Asper Brothers&lt;/a&gt;, an MVP startup studio that has been building digital products for clients since 2008. I'm on the product side, so I spend most of my time thinking about what we build and who's going to use it.&lt;/p&gt;

&lt;p&gt;Over the past few weeks I've been reading about AI agents on the web, and I found three cases that shocked me and that I think anyone who builds agents should know about. In each one the agent did what it was built to do and still caused a problem, because it didn't know something that people on the web have assumed for years.&lt;/p&gt;

&lt;p&gt;One of those assumptions is that opening a link shows you a page and doesn't change anything on it. Another is that crawlers read a small file called &lt;code&gt;robots.txt&lt;/code&gt; and stay out of the parts a site asks them to skip. The third is that whoever connects to your API has read the documentation first. People learned these by using the web, and older programs followed them because the developers who wrote them knew them too.&lt;/p&gt;

&lt;p&gt;An agent follows them only if somebody built that into it, and the three cases below show what happens when nobody did.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 1: agents that were only allowed to read, and still edited wikis
&lt;/h2&gt;

&lt;p&gt;OpenAI was training research agents that could browse the web. To limit what they could do, it let them open pages on almost any site and blocked anything that would change a page.&lt;/p&gt;

&lt;p&gt;The agents found UseMod, wiki software written more than 23 years ago, which lets you edit a page by opening a specially built link. Over one week they made about 13,000 edits on German developer wikis, mostly notes and answers they left for each other so they could finish their tasks on time. At one point one of the agents left a message warning the others that someone had started deleting their notes, and even noted the time it had spotted it.&lt;/p&gt;

&lt;p&gt;I see two lessons in this for anyone building agents. The first is that the block worked as designed and the agents still did something nobody wanted. It covered what they were technically able to do, but it said nothing about whether writing on someone else's website was allowed, and the agents had a deadline to meet.&lt;/p&gt;

&lt;p&gt;The second lesson is about memory. The agents needed somewhere to keep notes and share them, nobody had given them a place, so they used other people's websites. If your agent works in several steps or passes work to other agents, give it its own place to store notes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 2: every page your agent reads costs someone else money
&lt;/h2&gt;

&lt;p&gt;Konstantin Ryabitsev runs the servers behind kernel.org, where the Linux source code lives. At the end of August he wrote that git.kernel.org gets about 6 million requests a day, and by his estimate around 98% of them come from scrapers. Between 14 and 16 of their 90 processor cores are busy all the time generating pages for those scrapers. In his words:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"we spend more CPU cycles rendering commits for scrapers than we spend on all other kinds of legitimate access, including git clones"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;When people work out what an agent costs, they usually count tokens and API bills, and the cost on the site's side rarely comes up. Every page your agent reads has to be generated by somebody else's server, and they pay for it.&lt;/p&gt;

&lt;p&gt;Kernel.org responded by making visitors solve a small puzzle before they get a page, and by switching some features off for anyone who isn't logged in. Ryabitsev says they had little choice, because "it's impossible to tell with certainty which of these are bots and which are real humans". Those changes apply to every visitor, so they make the site harder to use for any agent, including a well-built one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Case 3: what an agent looks like in someone else's logs
&lt;/h2&gt;

&lt;p&gt;Pierre-Laurent Medori (&lt;a class="mentioned-user" href="https://dev.to/pierrelaurentmedori"&gt;@pierrelaurentmedori&lt;/a&gt;) runs a production MCP server at GoodBarber. MCP is a standard way for AI agents to use other products, and agents from other companies call his server all day. He published what he saw between June 3 and September 2: close to 100,000 calls from over 100 apps.&lt;/p&gt;

&lt;p&gt;62.8% of those calls changed something, mostly creating or editing content. 125 calls asked for tools that don't exist, 33 different ones, and one agent asked for &lt;code&gt;GBContent.getItems()&lt;/code&gt;, a name it had made up. His server also asks agents to check each change after they make it, and only 41% of changes got checked within two minutes. In his words, "three writes out of five never get one."&lt;/p&gt;

&lt;p&gt;The teams behind those 100 apps probably see their tasks marked as done. Medori's logs show agents that guessed at tools that weren't there and changed content without checking the result.&lt;/p&gt;

&lt;p&gt;The checking part surprised me most. The server asks every agent to check its changes, and most of them don't. If you want your agent to follow instructions like that from the sites it uses, you have to build it to look for them.&lt;/p&gt;

&lt;h2&gt;
  
  
  Should your agent identify itself?
&lt;/h2&gt;

&lt;p&gt;There's already an official way for an agent to identify itself, called Web Bot Auth. The agent signs every request and the website can verify the signature. Cloudflare, AWS and Akamai already verify these signatures, and OpenAI's agent signs its requests.&lt;/p&gt;

&lt;p&gt;The standard isn't finished yet. The IETF group working on it started in October 2025 and as of August still hadn't agreed on a single document. Since September 15, Cloudflare's default setting for new sites also blocks bots marked as "Agent" on pages with ads. So at the moment an agent that identifies itself can lose access to some sites, and I understand why a team might be tempted to make its agent look like a normal browser.&lt;/p&gt;

&lt;p&gt;I'd still have my agent sign its requests. Sites like kernel.org add extra checks for every visitor who can't prove who they are, however well they behave, and more sites are adding them. If a site owner knows which agent is visiting, they can let it in, give it an API key or contact the company behind it, and none of that is possible with an agent that pretends to be a browser.&lt;/p&gt;

&lt;h2&gt;
  
  
  Six things I'd build into an agent
&lt;/h2&gt;

&lt;p&gt;None of these needs technical knowledge to ask for.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Tell it what it shouldn't do, in addition to what it's blocked from doing. The UseMod agents were blocked from changing pages and still ended up editing wikis.&lt;/li&gt;
&lt;li&gt;Give it its own place for notes, so it doesn't use someone else's website.&lt;/li&gt;
&lt;li&gt;Make it check that a change actually happened after it makes one.&lt;/li&gt;
&lt;li&gt;When something it expects isn't there, have it stop and report it. Medori's server got calls to 33 tools that don't exist in three months.&lt;/li&gt;
&lt;li&gt;Keep track of what it costs the sites it visits, and use the official access a site offers, like an API or an MCP server, when there is one.&lt;/li&gt;
&lt;li&gt;Make it identify itself.&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  What I found in our own documents
&lt;/h2&gt;

&lt;p&gt;After writing these six points down, I went back through the MVP scope documents from this year to see how many of them we already use. Some were there, mostly under other names.&lt;/p&gt;

&lt;p&gt;In a travel planning product we built, the AI assistant keeps a profile of how each person likes to travel. The spec we worked from has a rule that learning is confirmed and never silent. If someone swaps the suggested hotel for a five-star one, the assistant asks whether it should update their profile before it changes anything. The same assistant plans the whole trip but doesn't book anything. It shows links to booking sites, and the person books there. Place data comes in through Google's official API, and when someone wants to change one day of the trip, only that day gets regenerated.&lt;/p&gt;

&lt;p&gt;In a tool we scoped for a founder who wanted the sales team to judge deals the way the founder would, the proposal says in plain words what the AI isn't allowed to do: one use case, one model, and no learning on its own. The acceptable and unacceptable cases get written down before the AI sees a single real deal.&lt;/p&gt;

&lt;p&gt;In another product we scoped with an AI assistant, people can see what it remembers about them and correct or delete any of it.&lt;/p&gt;

&lt;p&gt;What I didn't find anywhere was point 4 or point 6. None of our documents says what an agent should do when something it expects isn't there, and none says whether it should identify itself on other people's websites. None of these products sends an agent out onto the open web yet, so the question never came up. For the next one that does, I'd want both on the list before development starts.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Pawel Jackowski is CEO and co-founder of &lt;a href="https://asperbrothers.com/" rel="noopener noreferrer"&gt;Asper Brothers&lt;/a&gt;, an MVP development studio that has shipped over sixty products across fintech, healthtech, and other regulated software categories in the last fifteen years. He writes about building, shipping, and learning from early-stage products, and works directly with founders on MVP scoping, validation, and production engineering.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Sources
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Simon Willison, &lt;a href="https://simonwillison.net/2026/Sep/4/rogue-agent-wikis/" rel="noopener noreferrer"&gt;OpenAI's rogue agents were caught communicating via public wikis&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Konstantin Ryabitsev, &lt;a href="https://people.kernel.org/monsieuricon/creepy-crawlies" rel="noopener noreferrer"&gt;Creepy crawlies&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Pierre-Laurent Medori, &lt;a href="https://dev.to/pierrelaurentmedori/the-agents-in-production-arent-mine-heres-what-their-server-sees-29f4"&gt;The agents in production aren't mine. Here's what their server sees&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Cloudflare changelog, &lt;a href="https://developers.cloudflare.com/changelog/post/2026-07-01-ai-traffic-options/" rel="noopener noreferrer"&gt;New options to manage AI traffic&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;IETF, &lt;a href="https://datatracker.ietf.org/doc/html/draft-meunier-web-bot-auth-architecture" rel="noopener noreferrer"&gt;Web Bot Auth architecture draft&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>web</category>
    </item>
    <item>
      <title>The Modern SaaS Stack Is a Superpower</title>
      <dc:creator>Asper Brothers</dc:creator>
      <pubDate>Mon, 07 Sep 2026 13:24:35 +0000</pubDate>
      <link>https://dev.to/asperbrothers/-5a9c</link>
      <guid>https://dev.to/asperbrothers/-5a9c</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/asperbrothers/weve-never-had-a-better-time-to-build-a-saas-product-58gh" class="crayons-story__hidden-navigation-link"&gt;We've Never Had a Better Time to Build a SaaS Product&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/asperbrothers" class="crayons-avatar  crayons-avatar--l  "&gt;
            &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F119390%2Fa86b114a-df1a-48e4-bb45-c5810f835ef6.png" alt="asperbrothers profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/asperbrothers" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Asper Brothers
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Asper Brothers
                
                
              
              &lt;div id="story-author-preview-content-4596365" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/asperbrothers" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&gt;
                        &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F119390%2Fa86b114a-df1a-48e4-bb45-c5810f835ef6.png" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Asper Brothers&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/asperbrothers/weve-never-had-a-better-time-to-build-a-saas-product-58gh" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 7&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/asperbrothers/weve-never-had-a-better-time-to-build-a-saas-product-58gh" id="article-link-4596365"&gt;
          We've Never Had a Better Time to Build a SaaS Product
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/saas"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;saas&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/react"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;react&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/webdev"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;webdev&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
          &lt;a href="https://dev.to/asperbrothers/weve-never-had-a-better-time-to-build-a-saas-product-58gh" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/asperbrothers/weve-never-had-a-better-time-to-build-a-saas-product-58gh#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            7 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>We've Never Had a Better Time to Build a SaaS Product</title>
      <dc:creator>Asper Brothers</dc:creator>
      <pubDate>Mon, 07 Sep 2026 13:16:07 +0000</pubDate>
      <link>https://dev.to/asperbrothers/weve-never-had-a-better-time-to-build-a-saas-product-58gh</link>
      <guid>https://dev.to/asperbrothers/weve-never-had-a-better-time-to-build-a-saas-product-58gh</guid>
      <description>&lt;p&gt;There has probably never been a better time in the history of software to build a SaaS product.&lt;/p&gt;

&lt;p&gt;Not because AI can generate an entire application from a single prompt.&lt;/p&gt;

&lt;p&gt;Not because you can describe an idea to a vibe coding tool and have a prototype 15 minutes later.&lt;/p&gt;

&lt;p&gt;Those things are interesting, but they are only part of a much bigger shift.&lt;/p&gt;

&lt;p&gt;The real change is that &lt;strong&gt;the cost of turning an idea into reliable, production-ready software has collapsed across almost every layer of the stack&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Frontend frameworks are mature. Backend infrastructure is available as a service. Authentication is largely solved. Payments are APIs. Deployment takes minutes. Mobile development can share a significant part of the same ecosystem as the web.&lt;/p&gt;

&lt;p&gt;And now AI sits on top of all of this as an extraordinary productivity multiplier.&lt;/p&gt;

&lt;p&gt;For a small technical team — or even a single experienced developer — that changes the economics of building software completely.&lt;/p&gt;



&lt;h2&gt;
  
  
  The modern SaaS stack is ridiculously powerful
&lt;/h2&gt;

&lt;p&gt;Imagine starting a SaaS company 15 years ago.&lt;/p&gt;

&lt;p&gt;Before building the actual product, you might have needed to make decisions about servers, deployment, database administration, authentication, backups, monitoring, infrastructure, and scaling.&lt;/p&gt;

&lt;p&gt;Today, a perfectly reasonable starting architecture might look like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Web application&lt;/strong&gt; → React / Next.js&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Mobile application&lt;/strong&gt; → React Native&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt; → PostgreSQL / Supabase&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Authentication&lt;/strong&gt; → Supabase Auth&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;File storage&lt;/strong&gt; → Supabase Storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend functions&lt;/strong&gt; → Edge Functions / serverless&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Payments&lt;/strong&gt; → Stripe&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transactional email&lt;/strong&gt; → Resend&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting&lt;/strong&gt; → Vercel / Cloudflare&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Analytics&lt;/strong&gt; → PostHog&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI features&lt;/strong&gt; → OpenAI / Anthropic / others&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;None of these technologies is particularly exotic.&lt;/p&gt;

&lt;p&gt;And that is exactly the point.&lt;/p&gt;

&lt;p&gt;The biggest advantage modern SaaS builders have isn't access to some secret technology. It is access to &lt;strong&gt;boring, mature, composable infrastructure&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You can spend far more time solving the customer's problem and far less time rebuilding infrastructure that thousands of companies have already built before you.&lt;/p&gt;

&lt;h2&gt;
  
  
  React has become more than a frontend library
&lt;/h2&gt;

&lt;p&gt;React's importance for SaaS development isn't simply that it is popular.&lt;/p&gt;

&lt;p&gt;Its real advantage is the ecosystem around it.&lt;/p&gt;

&lt;p&gt;A modern React application has access to mature solutions for routing, forms, validation, component libraries, charts, tables, payments, authentication, analytics, monitoring, and almost every other problem that appears repeatedly in SaaS products.&lt;/p&gt;

&lt;p&gt;This matters enormously when speed is important.&lt;/p&gt;

&lt;p&gt;When building a &lt;a href="https://asperbrothers.com/blog/building-a-saas-mvp-ai-cant-replace/" rel="noopener noreferrer"&gt;SaaS MVP&lt;/a&gt;, you rarely want to invent infrastructure. You want to combine proven building blocks and concentrate engineering effort on whatever makes your product unique.&lt;/p&gt;

&lt;p&gt;React makes that approach extremely effective.&lt;/p&gt;

&lt;p&gt;And if the product eventually needs a mobile application, React Native gives a JavaScript/TypeScript team a realistic path into iOS and Android without immediately creating two completely separate engineering organizations.&lt;/p&gt;

&lt;p&gt;The web and mobile applications will obviously not share everything.&lt;/p&gt;

&lt;p&gt;But they can share much more than code.&lt;/p&gt;

&lt;p&gt;They can share TypeScript types, validation schemas, API clients, domain logic, backend infrastructure and — perhaps most importantly — engineering knowledge.&lt;/p&gt;

&lt;p&gt;For an early-stage company, that leverage is enormous.&lt;/p&gt;

&lt;h2&gt;
  
  
  Supabase changes what "backend development" means
&lt;/h2&gt;

&lt;p&gt;One of my favorite examples of how much SaaS development has changed is Supabase.&lt;/p&gt;

&lt;p&gt;Create a project and you are not starting with an empty server.&lt;/p&gt;

&lt;p&gt;You can immediately have a real PostgreSQL database together with authentication, storage, realtime capabilities, and server-side functions.&lt;/p&gt;

&lt;p&gt;That removes a surprising amount of undifferentiated work.&lt;/p&gt;

&lt;p&gt;Consider something as ordinary as user accounts.&lt;/p&gt;

&lt;p&gt;Historically, authentication could mean building password storage, reset flows, email verification, sessions, OAuth integrations, and security mechanisms yourself.&lt;/p&gt;

&lt;p&gt;Today, this can be infrastructure.&lt;/p&gt;

&lt;p&gt;The same applies to file storage, database APIs, and many backend workflows.&lt;/p&gt;

&lt;p&gt;Importantly, this doesn't necessarily mean giving up the foundations of traditional software engineering.&lt;/p&gt;

&lt;p&gt;Supabase is built around PostgreSQL.&lt;/p&gt;

&lt;p&gt;You still have tables.&lt;/p&gt;

&lt;p&gt;You still have relationships.&lt;/p&gt;

&lt;p&gt;You still write SQL.&lt;/p&gt;

&lt;p&gt;You can use database constraints, indexes, migrations, and Row Level Security.&lt;/p&gt;

&lt;p&gt;This is an important distinction.&lt;/p&gt;

&lt;p&gt;The modern SaaS stack isn't powerful because it allows us to avoid engineering.&lt;/p&gt;

&lt;p&gt;It is powerful because it lets us &lt;strong&gt;apply engineering effort at a higher level of abstraction&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Then AI arrived
&lt;/h2&gt;

&lt;p&gt;All of the improvements above would already make this an excellent period for building software.&lt;/p&gt;

&lt;p&gt;AI changed the equation again.&lt;/p&gt;

&lt;p&gt;The most interesting use of AI in software development isn't asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Build my startup."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;It is having an extremely fast collaborator available during almost every stage of engineering.&lt;/p&gt;

&lt;p&gt;AI can help you explore an unfamiliar API.&lt;/p&gt;

&lt;p&gt;It can generate the first version of a database migration.&lt;/p&gt;

&lt;p&gt;It can suggest test cases you forgot.&lt;/p&gt;

&lt;p&gt;It can explain a strange TypeScript error.&lt;/p&gt;

&lt;p&gt;It can review a function for edge cases.&lt;/p&gt;

&lt;p&gt;It can transform an API response into types.&lt;/p&gt;

&lt;p&gt;It can draft SQL queries, regular expressions, validation schemas, and documentation.&lt;/p&gt;

&lt;p&gt;It can help investigate logs.&lt;/p&gt;

&lt;p&gt;It can generate repetitive UI code.&lt;/p&gt;

&lt;p&gt;It can help refactor code that already works but has become difficult to maintain.&lt;/p&gt;

&lt;p&gt;None of these tasks individually sounds revolutionary.&lt;/p&gt;

&lt;p&gt;Together, they remove enormous amounts of friction from a developer's day.&lt;/p&gt;

&lt;p&gt;And that is where the real acceleration happens.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI makes experienced developers disproportionately faster
&lt;/h2&gt;

&lt;p&gt;There is an interesting paradox in AI-assisted software development.&lt;/p&gt;

&lt;p&gt;AI makes it easier for people with limited technical experience to create software.&lt;/p&gt;

&lt;p&gt;But it can make experienced engineers &lt;em&gt;dramatically&lt;/em&gt; faster.&lt;/p&gt;

&lt;p&gt;Why?&lt;/p&gt;

&lt;p&gt;Because generating code isn't the hardest part of software development.&lt;/p&gt;

&lt;p&gt;The difficult questions are usually things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Should this logic live in the client, server, or database?&lt;/li&gt;
&lt;li&gt;What happens when two requests execute simultaneously?&lt;/li&gt;
&lt;li&gt;What data should this user actually be allowed to access?&lt;/li&gt;
&lt;li&gt;What happens when a payment webhook is delivered twice?&lt;/li&gt;
&lt;li&gt;How should this model evolve when the product changes?&lt;/li&gt;
&lt;li&gt;Which part should be generalized and which should stay simple?&lt;/li&gt;
&lt;li&gt;What happens when this API fails?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;AI can help answer these questions.&lt;/p&gt;

&lt;p&gt;But somebody still needs to ask them.&lt;/p&gt;

&lt;p&gt;An experienced developer can use AI to eliminate mechanical work while spending more time on architecture, product behavior, security, and edge cases.&lt;/p&gt;

&lt;p&gt;That is a much more interesting productivity gain than generating another landing page.&lt;/p&gt;

&lt;h2&gt;
  
  
  AI is also becoming part of the product stack
&lt;/h2&gt;

&lt;p&gt;There is another important shift.&lt;/p&gt;

&lt;p&gt;AI isn't only helping us &lt;em&gt;build&lt;/em&gt; SaaS products.&lt;/p&gt;

&lt;p&gt;It is becoming infrastructure &lt;em&gt;inside&lt;/em&gt; SaaS products.&lt;/p&gt;

&lt;p&gt;A few years ago, building features involving natural language understanding, document extraction, summarization, or semantic search could require specialized machine-learning expertise.&lt;/p&gt;

&lt;p&gt;Today, many of these capabilities are APIs.&lt;/p&gt;

&lt;p&gt;A small SaaS product can realistically offer features such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Document&lt;/strong&gt; → structured data&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Email&lt;/strong&gt; → classification&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conversation&lt;/strong&gt; → summary&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database&lt;/strong&gt; → natural-language interface&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Support ticket&lt;/strong&gt; → suggested response&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Meeting transcript&lt;/strong&gt; → action items&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Knowledge base&lt;/strong&gt; → semantic search&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You don't need to train a foundation model.&lt;/p&gt;

&lt;p&gt;You need to understand the user's workflow and determine where intelligence creates meaningful value.&lt;/p&gt;

&lt;p&gt;That opens an enormous design space for small software companies.&lt;/p&gt;

&lt;h2&gt;
  
  
  The bottleneck is moving away from implementation
&lt;/h2&gt;

&lt;p&gt;This might be the most important consequence of everything happening today.&lt;/p&gt;

&lt;p&gt;For years, software implementation itself was a major constraint.&lt;/p&gt;

&lt;p&gt;You could have a good idea and still need months of engineering before discovering whether customers cared.&lt;/p&gt;

&lt;p&gt;That feedback loop is becoming dramatically shorter.&lt;/p&gt;

&lt;p&gt;A small team can build a credible product, deploy it globally, integrate payments, add authentication, and start talking to real customers surprisingly quickly.&lt;/p&gt;

&lt;p&gt;The bottleneck therefore moves somewhere else.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Choosing the right problem.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Understanding a niche.&lt;/p&gt;

&lt;p&gt;Talking to customers.&lt;/p&gt;

&lt;p&gt;Designing workflows.&lt;/p&gt;

&lt;p&gt;Distribution.&lt;/p&gt;

&lt;p&gt;Pricing.&lt;/p&gt;

&lt;p&gt;Positioning.&lt;/p&gt;

&lt;p&gt;Knowing what &lt;em&gt;not&lt;/em&gt; to build.&lt;/p&gt;

&lt;p&gt;These things aren't becoming easier at the same speed as programming.&lt;/p&gt;

&lt;p&gt;If anything, they become more important because more people can now build software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fast doesn't have to mean disposable
&lt;/h2&gt;

&lt;p&gt;There is also a misconception that building quickly means producing throwaway software.&lt;/p&gt;

&lt;p&gt;It doesn't.&lt;/p&gt;

&lt;p&gt;You can move extremely fast while using technologies that can remain with the company for years.&lt;/p&gt;

&lt;p&gt;React isn't a prototype-only technology.&lt;/p&gt;

&lt;p&gt;React Native powers serious mobile applications.&lt;/p&gt;

&lt;p&gt;PostgreSQL certainly isn't an MVP database.&lt;/p&gt;

&lt;p&gt;TypeScript isn't something you need to replace once you find product-market fit.&lt;/p&gt;

&lt;p&gt;The key is avoiding unnecessary complexity while keeping good fundamentals.&lt;/p&gt;

&lt;p&gt;Use migrations.&lt;/p&gt;

&lt;p&gt;Model your database properly.&lt;/p&gt;

&lt;p&gt;Add constraints.&lt;/p&gt;

&lt;p&gt;Use Row Level Security where appropriate.&lt;/p&gt;

&lt;p&gt;Write tests around critical business logic.&lt;/p&gt;

&lt;p&gt;Track errors.&lt;/p&gt;

&lt;p&gt;Keep secrets out of the client.&lt;/p&gt;

&lt;p&gt;Make webhooks idempotent.&lt;/p&gt;

&lt;p&gt;Back up important data.&lt;/p&gt;

&lt;p&gt;You don't need enterprise architecture for your first 50 customers.&lt;/p&gt;

&lt;p&gt;But you also don't need to build software you expect to throw away.&lt;/p&gt;

&lt;p&gt;Modern tooling allows us to occupy a very useful middle ground:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Prototype speed with production-grade foundations.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The smallest capable team in history
&lt;/h2&gt;

&lt;p&gt;Perhaps the most exciting consequence is organizational.&lt;/p&gt;

&lt;p&gt;Things that previously required separate frontend, backend, mobile, infrastructure, and machine-learning specialists can increasingly be handled by a much smaller team.&lt;/p&gt;

&lt;p&gt;Not because those disciplines disappeared.&lt;/p&gt;

&lt;p&gt;Because the tools became better.&lt;/p&gt;

&lt;p&gt;A strong product engineer with React, TypeScript, React Native, PostgreSQL, Supabase, and modern AI tools now has an extraordinary range.&lt;/p&gt;

&lt;p&gt;Add one person who deeply understands a specific industry or customer problem and you already have the foundations of a potentially serious software company.&lt;/p&gt;

&lt;p&gt;That doesn't mean every SaaS should be built by two people forever.&lt;/p&gt;

&lt;p&gt;It means you can reach the point where hiring becomes justified much later.&lt;/p&gt;

&lt;p&gt;That is a huge difference.&lt;/p&gt;

&lt;h2&gt;
  
  
  Build now
&lt;/h2&gt;

&lt;p&gt;The barriers haven't disappeared.&lt;/p&gt;

&lt;p&gt;Building something people want is still difficult.&lt;/p&gt;

&lt;p&gt;Distribution is difficult.&lt;/p&gt;

&lt;p&gt;Customer acquisition is difficult.&lt;/p&gt;

&lt;p&gt;Creating a product that survives contact with real users is difficult.&lt;/p&gt;

&lt;p&gt;But implementation — historically one of the most expensive parts of starting a software company — has become dramatically more accessible.&lt;/p&gt;

&lt;p&gt;We have mature open-source frameworks.&lt;/p&gt;

&lt;p&gt;Managed infrastructure.&lt;/p&gt;

&lt;p&gt;Global cloud platforms.&lt;/p&gt;

&lt;p&gt;Incredible developer tooling.&lt;/p&gt;

&lt;p&gt;Cheap experimentation.&lt;/p&gt;

&lt;p&gt;Instant deployment.&lt;/p&gt;

&lt;p&gt;Powerful APIs.&lt;/p&gt;

&lt;p&gt;And AI assistance available directly inside the engineering workflow.&lt;/p&gt;

&lt;p&gt;The interesting question is no longer:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Can a small team build this?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;For an increasingly large category of software, the answer is yes.&lt;/p&gt;

&lt;p&gt;The better question is:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;"Is this a problem worth solving?"&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the answer is also yes, there has rarely been a better time to start building.&lt;/p&gt;

</description>
      <category>saas</category>
      <category>react</category>
      <category>ai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Laravel Repository Pattern</title>
      <dc:creator>Asper Brothers</dc:creator>
      <pubDate>Wed, 18 Dec 2019 13:43:53 +0000</pubDate>
      <link>https://dev.to/asperbrothers/laravel-repository-pattern-how-to-use-why-it-matters-1g9d</link>
      <guid>https://dev.to/asperbrothers/laravel-repository-pattern-how-to-use-why-it-matters-1g9d</guid>
      <description>&lt;p&gt;Originally posted on: &lt;a href="https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/" rel="noopener noreferrer"&gt;https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The first thing we need to know to implement a repository pattern in the Laravel application is to understand what Repository Pattern is and what are the benefits of using it.&lt;/p&gt;

&lt;p&gt;In this article you’ll learn about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Main benefits of using Repository Pattern &lt;/li&gt;
&lt;li&gt;How to implement a Repository Pattern in Laravel?&lt;/li&gt;
&lt;li&gt;We will show you step by step how to start code and implement it in Laravel app&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What’s important
&lt;/h2&gt;

&lt;p&gt;A repository is a separation between a domain and a persistent layer. The repository provides a collection interface to access data stored in a database, file system or external service. Data is returned in the form of objects.&lt;/p&gt;

&lt;p&gt;The main idea to use Repository Pattern in a Laravel application is to create a bridge between models and controllers. In other words, to decouple the hard dependencies of models from the controllers. The model should not be responsible for communicating with or extracting data from the database. A model should be an object that represents a given table/document/object or any other type in our data structure and this should be its sole responsibility. Therefore, to keep your Laravel code clean, it is worth using repositories to separate the responsibility for which the model should never be responsible.&lt;/p&gt;

&lt;p&gt;The use of Repository Pattern has many benefits, below is a list of the most important ones:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Centralization of the data access logic makes code easier to maintain&lt;/li&gt;
&lt;li&gt;Business and data access logic can be tested separately&lt;/li&gt;
&lt;li&gt;Reduces duplication of code&lt;/li&gt;
&lt;li&gt;A lower chance for making programming errors&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In most Laravel applications you may encounter such a code.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class UsersController extends Controller
{
   public function index()
   {
       $users = User::all();

       return view('users.index', [
           'users' =&amp;gt; $users
       ]);
   }
} 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;At first glance, it doesn’t look that bad. However, it is worth to think what if the client proposes to change the data structure and instead of in MySQL/Postgresql from now on we are going to keep the data somewhere else, in the data engine which is not supported by Eloquent? When we write such a code, such a change may turn out to be very difficult to implement, or even impossible! That’s why it’s very dangerous to write code this way, every implementation should be based on interfaces, so in case of changes you don’t need to change the code in the whole application, but only create another class implementing the interface. This should be the code above written in a correct way. (The code above should be written in a correct way).&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class UsersController extends Controller
{
   private $userRepository;

   public function __construct(UserRepositoryInterface $userRepository)
   {
       $this-&amp;gt;userRepository = $userRepository;
   }

   public function index()
   {
       $users = $this-&amp;gt;userRepository-&amp;gt;all();

       return view('users.index', [
           'users' =&amp;gt; $users
       ]);
   }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In this particular example, when a client wishes to change the data structure, it is child’s play to implement these changes into our application! We simply create a class that implements UserRepositoryInterface and contains the logic that will allow us to pull it out in a new way and everything works again. That is why it is so important to write code in such a way that even when the client comes with the most difficult change we will be able to deal with it easily. The repository template greatly facilitates this process!&lt;/p&gt;




&lt;p&gt;To see the entire article go to &lt;a href="https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/" rel="noopener noreferrer"&gt;https://asperbrothers.com/blog/implement-repository-pattern-in-laravel/&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>laravel</category>
      <category>php</category>
      <category>patterns</category>
    </item>
  </channel>
</rss>
