<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Sam Currie</title>
  <subtitle>Personal website of Sam Currie, CEO of Heyo Computer.</subtitle>
  <link href="https://blog.sarocu.com/feed.xml" rel="self"/>
  <link href="https://blog.sarocu.com/"/>
  <updated>2026-04-07T00:00:00Z</updated>
  <id>https://blog.sarocu.com/</id>
  <author>
    <name>Sam Currie</name>
  </author>
  <entry>
    <title>Yet Another Sandbox Company</title>
    <link href="https://blog.sarocu.com/blog/yasc/"/>
    <updated>2026-04-07T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/yasc/</id>
    <content type="html">&lt;p&gt;You may have noticed a couple of things in the last few months. One, I started a company that sells sandboxes. Two, that there are a bunch of new companies selling sandboxes. So why did I start yet another sandbox co?&lt;/p&gt;
&lt;p&gt;Well, let&#39;s step back for a minute. What&#39;s a sandbox and what does it provide? A sandbox is just an isolation mechanism for things you don&#39;t trust, it gives you a place to run code written by LLMs or customers or install things safely. How the isolation is created matters and there&#39;s a whole bunch of ways to do it - file system isolation, cgroups, namespacing, virtual machines, etc. The strictest form of isolation is going to come from a virtual machine, of which there&#39;s a lot of options as well.&lt;/p&gt;
&lt;p&gt;In the world of agents, most apps use a coding agent under the hood - the agent is generally tuned for its specific task and market but its still writing code and scripts and then invoking them most of the time. Naturally, we want some isolation for that agent to protect us and prevent issues from the agent spilling over and affecting other customers (noisy neighbor problems). There are sandbox companies solving for this problem specifically (actually most of them are dialed into this problem). The core thing these companies will publish is an SDK for other developers to integrate into their apps. The most common isolation technique in this space is a virtual machine monitor called Firecracker which makes use of Linux&#39;s KVM (kernel virtual machine) to spin up tiny stripped down VMs. KVM itself is really wonderful technology and is now about 20 years old and is quite well understood by now.&lt;/p&gt;
&lt;p&gt;I first started messing about with Firecracker several years ago at Flatfile. We had a fleet of compute for asynchronous workers that would grab jobs off of a queue. We were running the workers as containers in Kubernetes and because autoscaling just isn&#39;t instantaneous, we were generally always running a bit overprovisioned so that some core services wouldn&#39;t get bogged down waiting for capacity to come online. Originally, we were just seeking to offload the jobs into AWS lambdas but controlling the invocations became complex (something has to tell the lambda to wake up and check the queue), we couldn&#39;t just shove the service into the lambda cleanly, and the developer experience left a lot to be desired. I experimented with building custom root filesystems for Firecracker to solve some of the issues but there wasn&#39;t an off the shelf control plane at the time to do manage at scale across multiple machines so I packed the project up and put it on the shelf.&lt;/p&gt;
&lt;p&gt;The agentic era made me grab it back off the shelf but alas, no real control planes still. More than that however, the more side projects I bootstrapped with coding agents the more I wanted extra features that don&#39;t come out of the box with firecracker: I wanted stateful VMs, I wanted to plug multiple agents into the VM, I wanted to use the VM locally and not in someone else&#39;s cloud, I wanted to share the VM (more accurately I wanted to share what I built inside of it), I wanted to ship it to the internet and expose a service. I wanted to manage many VMs across multiple machines. I wanted VMs on my Mac and my Linux box; I wanted to run a service in a VM on my linux box and hit it from my Mac.&lt;/p&gt;
&lt;p&gt;I wanted a lot.&lt;/p&gt;
&lt;p&gt;Personally, I don&#39;t think the hard part about what we&#39;re doing is the VM. We&#39;re putting a wrapper around 20 year old linux tech after all. Making VMs behave like containers in agentic apps is challenging, and there&#39;s value in that (indeed, try &lt;code&gt;heyvm --api&lt;/code&gt; to run it as a REST API for building with). I think however, that if we were to stop there we would be leaving a lot on the table. I tend to think about agentic development as centering on the sandbox - it&#39;s your isolation but its also where all of your artifacts live. It&#39;s almost like a folder on your hard drive - create a folder for a new project and stuff everything about that project into it. The sandbox has the potential to be the folder for AI, except instead of just a container it can also power the thing you&#39;re building. Now, for that to truly be valuable, it also needs to be fairly portable. There&#39;s a reason that file sharing apps were all the rage during the cloud boom - most things we work on or create aren&#39;t done in a vacuum, they have a purpose and they have people that they are prepared for. So what if the sandbox we&#39;re using for AI assisted work can additionally be the folder, the compute, and access layer all at the same time? That&#39;s the reason I started another sandbox company, and its the reason that Heyo Computer looks a lot different from our peers (several of whom are doing awesome stuff and I&#39;d love to support as backends in &lt;code&gt;heyvm&lt;/code&gt;). When the sandbox becomes a first class citizen we unlock a lot of potential (we also unlock a lot of hard problems but those will be follow up posts).&lt;/p&gt;
&lt;p&gt;PS - if you haven&#39;t already, head to &lt;a href=&quot;https://heyo.computer/&quot;&gt;https://heyo.computer&lt;/a&gt; and sign up for the mailing list to track our progress.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How to Build Internal Software in 2026</title>
    <link href="https://blog.sarocu.com/blog/build-internal-2026/"/>
    <updated>2026-04-03T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/build-internal-2026/</id>
    <content type="html">&lt;p&gt;The agentic era allows us to make software fast and cheap - it&#39;s not just SaaS companies that should be taking advantage of it. Internal software has always been about solving a hyper specific problem; the core issue is that it was usually prohibitively expensive and had to provide a huge amount of value in order to justify building and supporting it. I tend to think that a really targetted solution tends to beat a general solution any of day of the week, so if the cost of creating that software are close enough zero, why go buy a license from a vendor that only solves 80 or 90% of the problem? Software companies themselves are currently ditching vendors in droves and preferring to build in house solutions. As that trend accelerates and as non-software organizations gain access to the right tools, its a reasonable bet that the future of software lies in hyper specific internal software.&lt;/p&gt;
&lt;p&gt;So with that in mind, here&#39;s my top 10 for making internal software. We&#39;ll start off with what is probably a hard one if you aren&#39;t an engineer - tooling.&lt;/p&gt;
&lt;h2&gt;1. Tools: Use a coding agent, git worktrees, and a decent terminal&lt;/h2&gt;
&lt;p&gt;The real concept here is have a cohesive setup. If you are a software engineer, you probably have strong opinions and an existing setup. If you are reading this in 2027, this is probably outdated but all you should take away is that you need a development environment that&#39;s ergonomic, doesn&#39;t get in your way and that you can develop muscle memory for. The rest of the points in this blog are going to be more about architecture, identity and workflows so if you have a setup already, skip to #2.&lt;/p&gt;
&lt;p&gt;Anyways, back to tooling.&lt;/p&gt;
&lt;p&gt;I use Claude Code, it&#39;s fairly cheap for what you get out of it. Cursor is pretty good and the agent is built into a VS Code clone, although TBH you probably aren&#39;t gonna look at the code much. There&#39;s a bunch of open source agents that you can plug whatever provider in - the Vibe CLI from Mistral is great for this, I use it to wrap ollama for doing work with local models.&lt;/p&gt;
&lt;p&gt;Git worktrees make working with agents a ton nicer and there&#39;s lots of tools out there for making it ergonomic. The basic premise is to create a repository and have an agent scaffold your app out, then create a worktree for each feature you want to add, run an agent in each worktree and merge then back in as agents complete. This requirement implies that you need git - and you do, it&#39;s what engineers use for version control and enables multiple people (or clankers) to work on the same codebase. Plus it&#39;s also how we share code. Apps like &lt;a href=&quot;https://www.emdash.sh/&quot;&gt;Emdash&lt;/a&gt; do a great job of abstracting the technical bits away.&lt;/p&gt;
&lt;p&gt;The terminal is something you should be comfortable working in. Software tooling is usually native to the command line (e.g. a CLI, command line interface), so you will be lost if you can&#39;t work in your terminal. &lt;a href=&quot;https://warp.dev/&quot;&gt;Warp&lt;/a&gt; is a great one - they build an agent right in it so you can always just ask it for the command you need. It also has nifty autocomplete.&lt;/p&gt;
&lt;h2&gt;2. Multi-tenacy is hard, avoid if possible&lt;/h2&gt;
&lt;p&gt;Multi-tenant software is predominant in SaaS because the entire idea of SaaS is to spread the cost of the application over as many customers as possible. If your app is multi-tenant, there is a whole list of complications that come up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;logical separation of data (e.g. customer A can&#39;t see customer B&#39;s data)&lt;/li&gt;
&lt;li&gt;user data structures go a level deeper - users and accounts&lt;/li&gt;
&lt;li&gt;authentication and authorization (identity) needs to be fancier&lt;/li&gt;
&lt;li&gt;database structures contain more relationships&lt;/li&gt;
&lt;li&gt;etc&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;So you know, just avoid. Internal software is kinda magical these days; its cheap to make and once you strip away the complexity of commercial SaaS, relatively easy to create something that solves your problems. As far as identity goes, you probably already have some ways of verifying the user. Company email works great, just go send a magic link with a token in it. Maybe your company has an internal intranet, pop it in there and you know that the user was already authorized. If your company uses gsuites, just slap a Google login in front of it.&lt;/p&gt;
&lt;h2&gt;3. Modular Monoliths&lt;/h2&gt;
&lt;p&gt;We call an app a monolith if a single program runs everything that your software does. The opposite is microservices where we break tasks out into dedicated programs like authentication or event publishing. The hard part of making your app out of microservices is sharing state, that is, keeping all the different parts of your app on the same page with respect to what users are doing on it.&lt;/p&gt;
&lt;p&gt;I recommend something in between these architectures - small but complete applications. Coding agents will have an easier time creating an updating a small application and monoliths are way easier to host - it&#39;s just one app after all.&lt;/p&gt;
&lt;h2&gt;4. Use a lightweight data layer&lt;/h2&gt;
&lt;p&gt;There is probably no need for a Postgres cluster. You probably don&#39;t need Redis. High availability? Doubt that too.&lt;/p&gt;
&lt;p&gt;Most production level, commercial software products are a distributed system - multiple physical machines are involved in delivering different aspects of the software, the services themselves likely all have multiple copies running at once (hundreds or thousands of copies even), and there are usually several pieces of software making up one &amp;quot;app&amp;quot;. This complexity introduces several things that make your life harder than it needs to be and one of those is how to share state across everything. One way is to use a database and let everything connect to it and query for the application state. Another method is called &amp;quot;consensus&amp;quot; where each copy of a service communicates state with each other. Both are probably more complicated than your four person team at work needs to generate reports on weekly orders for pizza boxes. Design the app so that it only ever expects one copy of the application running at any given time - keep your data in memory and flush it to disk in a JSON file or a CSV every now and then. Back up to S3 or similar if it&#39;s really important.&lt;/p&gt;
&lt;h2&gt;5. Use a Sandbox&lt;/h2&gt;
&lt;p&gt;Get ready for a shameless plug (&lt;a href=&quot;https://heyo.computer/&quot;&gt;Heyo Computer&lt;/a&gt; sells sandboxes, although you can create and run them on your own hardware for free).&lt;/p&gt;
&lt;p&gt;In all seriousness however, you want a sandbox for a couple of reasons and uses. First off, its convenient. Very likely during the development of an app, you will be installing software and tooling - either as dependencies of what you&#39;re building or even just as helpers. Polluting your own machine can have downsides and if you have multiple different projects going at once, you need a way to separate concerns. Sandboxes come in many different forms but are essentially just an isolation system for your project. A sandbox makes development easier, but choosing the right kind of sandbox also makes deployment and sharing your app easier. In a perfect world, when you need to share your app with someone else, you can just move the sandbox to the internet or send the entire thing to your coworker.&lt;/p&gt;
&lt;p&gt;Another use of a sandbox: making an agent. If you are building an agent to do some hyper specific task for you, you will want an isolation layer for the agent. Typically, an &amp;quot;agent&amp;quot; is a loop of LLM inference calls and tool calling; the LLM requests a tool call by responding in a specific format and we use traditional software to run the tool (which is just another piece of code). A lot of agents complete tasks by writing scripts and then calling the script. The sandbox isolates the LLM generated code when it runs, protecting you from side effects.&lt;/p&gt;
&lt;h2&gt;6. Think about how much you trust your users&lt;/h2&gt;
&lt;p&gt;Is your only user you? Great, don&#39;t bother building RBAC (role based access control, a very enterprisy feature). Is it machine to machine and you control both machines? Great, use bearer tokens. The point is really, get away with the least complicated identity system you can, ideally relying on another, more authoritative system.&lt;/p&gt;
&lt;p&gt;If you are distributing on the web or over HTTP, the simplest form of authorization can be done at the header level on requests; it&#39;s so easy that it would be weird if you did nothing else.&lt;/p&gt;
&lt;h2&gt;7. Plan Ahead for Distribution&lt;/h2&gt;
&lt;p&gt;Who needs to access the app and where do they need to do it from? Will everyone using the app have the source code?&lt;/p&gt;
&lt;p&gt;Not everything needs distributed over the public internet. Distributing securely on the web and doing so on an internal intranet are different ballgames - having identity built into your distribution mechanism reduces your &lt;a href=&quot;https://blog.sarocu.com/blog/vendors-vendors/&quot;&gt;surface area&lt;/a&gt;. A private git repo and a shared secret in a password manager can go a long way.&lt;/p&gt;
&lt;p&gt;Desktop apps generally require signing and other privacy measures if you want to distribute widely, and have a far different distribution mechanism then web apps - notably, that a desktop or CLI user gets a choice when they update.&lt;/p&gt;
&lt;p&gt;Web apps have the disadvantage of being, well, web apps - having public entrypoints to your software introduces its own class of problems. At a minimum you now need to have and configure a web server, web application firewall, and internet gateway. A lot of platforms will do this for you but you&#39;ll usually want to control the DNS as well.&lt;/p&gt;
&lt;h2&gt;8. Make a Pipeline&lt;/h2&gt;
&lt;p&gt;Regardless of where you distribute your app, a build and deploy pipeline will save both time and tears. That is, these steps should be automated: you push a change, the change makes it to the users. Deploys can be manually gated; e.g. someone has to click a button or run a command to kick it off, but builds shouldn&#39;t, especially if you have multiple contributors - breaking the build sucks for everyone, and the person who breaks it should be informed of the matter as soon as possible, because they are also the most likely person to fix the issue. Automated pipelines are also nice for any alerting you might want to integrate for important services - &amp;quot;this deployed successfully&amp;quot; can stay in your build system, but &amp;quot;failed to deploy&amp;quot; and &amp;quot;health check failed&amp;quot; are really helpful to know about &lt;em&gt;when they happen&lt;/em&gt;.&lt;/p&gt;
&lt;h2&gt;9. At the minimum, have an agent investigate security&lt;/h2&gt;
&lt;p&gt;The same advantages that make creating software fast and cheap in the AI era also make it fast and cheap for bad actors to create and take advantage of vulnerabilities.&lt;/p&gt;
&lt;p&gt;Access control is likely the most common security failure out there - coding agents are great at writing tests, have it make a bunch of end-to-end tests (that is, tests that work through an entire feature or code path), that attempt to compromise access control.&lt;/p&gt;
&lt;p&gt;Then, inspect your supply chain - ideally everytime you add a package or upgrade something should do a sweep on your dependencies. &lt;a href=&quot;https://socket.dev/&quot;&gt;Socket.dev&lt;/a&gt; is great for the JavaScript ecosystem.&lt;/p&gt;
&lt;h2&gt;10. Build for updates&lt;/h2&gt;
&lt;p&gt;There&#39;s a couple of themes to tie up here - distribution and identity. Identity governs who you can trust and how well you can trust them while distribution is kind of the mechanics of getting it to a user - build it, copy the artifacts somewhere, make a container image, deploy it to production, migrate data, etc.&lt;/p&gt;
&lt;p&gt;Traditional software goes through a review and approval process, what compliance frameworks call &amp;quot;change management&amp;quot;. Reviewing code written by the clankers can be onerous, so some teams elect to have another clanker review a pull request (a bunch of related changes that we want to merge into the working branch of source control) but be warned, clankers cannot be held accountable, only you can.&lt;/p&gt;
&lt;p&gt;After reviews and approval, you need a path to update your project. If you distribute the app via source code and its repository, you are done. Otherwise, you will need to push an update through to whereever the app is running. One aspect to be careful with is the data layer. It is very common to have to change the shape of the data you are storing (e.g. adding a column to a database), it is also very common for these data migrations to cause incidents and it can be difficult to roll back changes which in the event something goes wrong you can easily find yourself in a place where you are restoring from a backup (if it exists!) or you are manually doing surgery on your data. Neither is very much fun. If you have a change to your data shape to roll out, test it locally on data that looks like &amp;quot;production&amp;quot; (in a compliance constrained environment, pulling production data onto a local machine for testing is typically a no-no). If you use a traditional database and the data is critical, you should be taking backups anyways and ensuring that you know how the write ahead log works. Take the 2 minutes to ensure that you can recover before pushing out a data change.&lt;/p&gt;
&lt;p&gt;During deployments, it&#39;s likely that services will go down - you can architect for high availability but that adds a fair amount of complexity for internal software and you should be pragmatic about what you actually need. Give your users a heads up.&lt;/p&gt;
&lt;p&gt;Finally, have a way to verify that a fresh update is working as intended. The simplest form of this is simply opening the app and running through core features. You can add simple automation scripts or something like &lt;a href=&quot;https://playwright.dev/&quot;&gt;Playwright&lt;/a&gt; to make things more consistent (always a good idea) and basic health checks (ping test) and alerts go a long way.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>How Many Vendors does your Vendor Have?</title>
    <link href="https://blog.sarocu.com/blog/vendors-vendors/"/>
    <updated>2026-03-31T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/vendors-vendors/</id>
    <content type="html">&lt;p&gt;If you asked me for a list of how to run a secure software or IT department, number one on that list would be &lt;code&gt;reduce the surface area&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Reducing the surface area all boils down to this: if there are less places to attack you, you will get attacked less and it&#39;s easier to defend what&#39;s left.&lt;/p&gt;
&lt;p&gt;That&#39;s not to say that things like encryption, intrusion detection, and RBAC aren&#39;t valuable; I&#39;m saying that the most pragmatic thing to do is to limit your vulnerabilities in the first place. Realistically, no one is going to break encryption, but someone might discover a key in a really old commit in a public repo or some credentials accidentally pasted into a public Slack used for customer support - in these cases, the breach will almost certainly look like legitimate access in which your encryption doesn&#39;t matter and at best your IDS will be a forensic log.&lt;/p&gt;
&lt;p&gt;One thing that matters a lot in these cases is where the compromised service lives. Is it a public multi-tenant SaaS app? Ope, that sucks. How about a cloud vendor? Dang, sucks to suck. If instead the compromised key belongs to an internal application running inside of a private network without a public entrypoint? Nice bullet dodge. (still tho, clean up your keys).&lt;/p&gt;
&lt;p&gt;Keeping the surface area small is a core part of infrastructure architecture - put a load balancer in a public internet and have it control traffic to services inside of a private network. Large companies recognize it as part of how you responsibly run a business, which is why we have concepts like federated identity. Which brings us back to the topic at hand...&lt;/p&gt;
&lt;h2&gt;How many vendors do you have?&lt;/h2&gt;
&lt;p&gt;The SaaS era birthed so many domain specific tools, most folks probably don&#39;t know off the top of their head how many tools it takes to run their team or business. There are your big ones like email, documents, storage, and hosting. There are your team&#39;s specific needs like sales tools and CRMs. There are the quiet ones that run in the background like data exfiltration detection. There are boring company wide vendors helping do things like HR and payroll. Have contractors? They probably have their own stack of tools too.&lt;/p&gt;
&lt;p&gt;Now ask yourself, how many vendors does a given vendor have? Don&#39;t know? Check out a company&#39;s privacy policy, most companies are nice enough to list the major vendors that act as &amp;quot;data subprocessors&amp;quot; (that is, their vendors that they send your data to). Most at least. Here&#39;s what OpenAI says:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;To assist us in meeting business operations needs and to perform certain services and functions, we disclose Personal Data to vendors and service providers, including providers of hosting services, customer service vendors, cloud services, content delivery services, support and safety services, email communication software, web analytics services, payment and transaction processors, search and shopping providers, and information technology providers.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;If you actually wanted to know who those vendors are, you need to head on over to their trust center and fire off some requests for documents. So this is where the trouble begins - if OpenAI is a major, critical vendor for your company, your surface area is pretty vague, at least until they respond to your requests (get the SOC2 Type 2 report at a minimum).&lt;/p&gt;
&lt;p&gt;Companies selling agents tend to use a lot of vendors for delivering their services; most are a little nicer than OpenAI and will tell you in plain language where your data gets shipped off to. Take a peak at Genspark&#39;s policy https://www.genspark.ai/privacy. You get Azure, Stripe, Google Workspace and then inference providers: Anthropic, xAI, Google again, ElevenLabs, and our old friends OpenAI. So if Genspark is a vendor that means OpenAI is a 3rd party, now their vendors are 4th parties to you. It&#39;s concievable that the prompts you slam into the app are now stored not only on OpenAI but on a telemetry vendor too and all of a sudden a data breach at any of three different companies could result in sensitive info getting leaked. This is the real surface area you are dealing with.&lt;/p&gt;
&lt;h2&gt;How do you reduce the surface area?&lt;/h2&gt;
&lt;p&gt;There are two obvious paths here, both have traditionally been expensive - roll your own or self host.&lt;/p&gt;
&lt;p&gt;&amp;quot;Roll your own&amp;quot; refers to building out your own solution to a problem. The SaaS era was predicated on an app solving a class of problems and then spreading the cost of it out among as many customers as possible. Building internal software projects means there is only one company to absorb the cost of the project; that was a problem once upon a time, now however coding agents have made this cheap and fast.&lt;/p&gt;
&lt;p&gt;&amp;quot;Self host&amp;quot; refers to taking off the shelf software (open or closed source) and running it on your own hardware or cloud. Even if the software is open source, you will spend engineering time deploying and maintaining it. This approach is probably the most familiar to anyone who has worked on a team or sold software to a company in a regulated industry or one that deals with sensitive data. Most of the time, you see companies that run infra via a cloud vendor or hybrid with some racks that they own and access control tends to be locked down, but otherwise is not a dramatic departure from running infra on a typical public cloud. You will still find that self hosting means maintenance but when you aren&#39;t engineering for a public SaaS platform it makes a lot of decisions much easier - skip Kubernetes, schedule maintanence and don&#39;t bother with high availability deployments if you don&#39;t have to. Sometimes you can even forget about the whole pets vs cattle thing and just run a VM configured with a few bash scripts - the level of sophistication should match the need but don&#39;t over do it.&lt;/p&gt;
&lt;p&gt;Either approach (or both at the same time) gives you the ability to limit access by design which is rather nice! Put things in private networks, only build for a specific identity provider, design for single tenacy - all the things that make your life easier and the surface area smaller. The key takeaway is that this is a pragmatic choice; reducing the surface area can and should simplify your stack at the same it makes you more secure.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Slack doesn&#39;t care about your &quot;Slack Killer&quot;</title>
    <link href="https://blog.sarocu.com/blog/slack-doesnt-care/"/>
    <updated>2026-03-28T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/slack-doesnt-care/</id>
    <content type="html">&lt;p&gt;Slack isn&#39;t going to sweat it if Garry Tan invests in a couple of kids building out a Slack killer with the help of some clankers.&lt;/p&gt;
&lt;p&gt;The thing that kills slack probably won&#39;t even be a single application or company. I&#39;m unsure if we&#39;re having a &amp;quot;can&#39;t see the forest through the trees&amp;quot; moment or what, but I think the future of software looks a lot like the past - internal software that is hyper focussed on a single company&#39;s problem. In that world, conventional SaaS isn&#39;t competing against a hot YC startup, they are competing against Claude Code making simple apps that are just good enough.&lt;/p&gt;
&lt;p&gt;Flatfile, where I ran the Infra team, started to experience this at the start of the AI transition. Formerly, many of our deals were essentially competing against Microsoft Excel in the sense that Excel was where the workflow was currently happening and in many cases it was &amp;quot;good enough&amp;quot;. We had to show that our product provided an incredible amount of value over a home grown solution that consisted of emailing Excel spreadsheets back and forth. That all started to change about a year and half or so ago - instead of a deal dying because Excel was good enough, deals started dying because customers were pasting data into ChatGPT and asking for it to restructure it and then sending the results to their coworkers (this is not a commentary of the wisdom of pasting in sensitive data into ChatGPT, that&#39;s for a different article). For a complicated case, Cursor or Claude Code could vibe out a script that was precisely tailored to your data, which beats a complex generalized solution all to hell.&lt;/p&gt;
&lt;p&gt;I&#39;ve used Slack for a long time so when I started a new company, Heyo Computer, one of the first things I did was spin up a free Slack workspace. Then at some point I needed automation. Ok, well Slack is $18 a month per user for a business plan and the company is currently running on my personal credit card. I was on the bus going from where I live, deep in the Rocky mountains in the Arkansas Valley, to San Francisco to see my cofounder one day and had some time so I vibe coded out a Slack clone. Now, I know that I am not going to just vibe code Slack quality chat and business functions on my 3 hour bus ride, but at the same time, that really just wasn&#39;t necessary. I just need my founder and I to be in a chat app that has some webhook functionality. So good enough for us is pretty simple; single tenant app that needs stupid simple auth, a KV store, files API, and a webhook feature that uses bearer tokens. That ain&#39;t ever going to kill Slack, so Saleforce isn&#39;t going to sweat it, but they ain&#39;t going to get $18 per month per person for the four of us in the chat.&lt;/p&gt;
&lt;p&gt;And that I think, is the real danger to Slack and other traditional SaaS companies, which Wall Street seems to agree: its the evolving nature of what getting to &amp;quot;good enough&amp;quot; actually costs a business.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>What does software look like when it costs nearly nothing?</title>
    <link href="https://blog.sarocu.com/blog/software-costs-nothing/"/>
    <updated>2026-03-23T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/software-costs-nothing/</id>
    <content type="html">&lt;p&gt;There have been a lot of takes on this recently, not to mention a lot of businesses like Replit and Lovable making big bets on the outcome. Personally, I think its weird that a lot of these bets just seem to be &amp;quot;regular software but cheap&amp;quot;. Indeed, go ask an agent from one of these CO&#39;s to build you an app and it will make something that looks like normal software in 2024 — there&#39;s a full stack app with a UI, backend and a data layer, probably postgres. There&#39;s some CRUD forms and an integration or two. There&#39;s a CSS file that looks strikingly similar to all of the other ones the agent spits out.&lt;/p&gt;
&lt;p&gt;Conversely, if you were on a team making internal software a decade or so ago, you know that when the cost of a project is spread over a single company and isn&#39;t the primary revenue driver, that it looks pretty messy: spreadsheets, some JSON files for configuration, a couple of bash scripts, maybe an HTML page generated from python with a report, and a crontab to run it all at 7 AM every day. It&#39;s messy but its also hyper specific, which is the real point.&lt;/p&gt;
&lt;p&gt;Why wouldn&#39;t some vibe coded fix for a hard scheduling problem that only Bob in logistics deals with that cost $46 in credits be any different? It doesn&#39;t need to be sophisticated - it solves the problem, it&#39;s easy to modify by the person who knows the problem space the best; what would adding an agent, Postgres and a Telegram integration do to improve it? Probably not a lot, so Bob won&#39;t be taking that demo for your AI native app, Bob already moved on.&lt;/p&gt;
&lt;p&gt;The SaaS era didn&#39;t arrive because a beautiful UI with a multi-tenant, microservice based, container fleet solves every problem perfectly. It was powered on the premise that an application could help solve an entire class of problems and became cost efficient when spread out over many customers. Bob might have bought a license to your app once upon a time, but that doesn&#39;t mean he was in love with it, he just did the math: &lt;code&gt;(value of time saved + additional value - cost of license) &amp;gt; $0&lt;/code&gt; . Now in 2026 we not only take that equation and swap the license cost for token cost;  the &amp;quot;additional value&amp;quot; changes a bit as well - a hyper targeted solution is likely going to save more time or create a better outcome, so it creates more value. So we&#39;re left with the &amp;quot;time saved&amp;quot; being the real variable here; if you cannot use a terminal and have no desire to learn the basics of a coding agent from YouTube then perhaps your &amp;quot;time saved&amp;quot; is actually negative infinity, in which case a SaaS app is still really valuable. If the problem is very complicated or requires enoughb stakeholders, then the &amp;quot;time saved&amp;quot; may be sufficiently negative to also choose a SaaS app. For the rest of folks out there, the learning curve ain&#39;t that steep however.&lt;/p&gt;
&lt;p&gt;So that&#39;s my take on this one — making full stack apps is fun but the future of software looks a lot like a warp speed version of internal software from 10 years ago - highly targeted and functional but messy, and everyone just gets back to working on the thing that&#39;s the actual revenue driver.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Self Publish, Syndicate Out. For the AI Era.</title>
    <link href="https://blog.sarocu.com/blog/posse/"/>
    <updated>2026-03-19T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/posse/</id>
    <content type="html">&lt;p&gt;Known as &lt;a href=&quot;https://indieweb.org/POSSE&quot;&gt;&amp;quot;POSSE&amp;quot; on the Indieweb&lt;/a&gt; (&amp;quot;Publish own site, syndicate everywhere&amp;quot;), the concept of having your own website to distribute the things you write and talk about is an old one. The once ubiquitous language &amp;quot;PHP&amp;quot; originally stood for &amp;quot;personal home page&amp;quot;. The concept goes that self publishing on your own site establishes permalinks that give attribution and ownership to the author, not a platform.&lt;/p&gt;
&lt;p&gt;That&#39;s all well and good but there&#39;s a reason platforms exist - the critical mass of eyeballs that they have attracted make two things really easy: publishing and discovery. You need to put something that you created on the internet with the least friction as possible, and someone else hopefully wants to find and consume what you created. Platforms have done a really good job of establishing moats to protect themselves, such a good job that providing a nice experience for their users isn&#39;t really all that important; e.g. Facebook can allow a mass amount of slop in your feed because your grandma is already there and your small rural town gossip lives and dies by a Facebook group. Meta itself freely admits they make a ton of money on scams - &lt;a href=&quot;https://www.reuters.com/investigations/meta-is-earning-fortune-deluge-fraudulent-ads-documents-show-2025-11-06/&quot;&gt;perhaps as much as 10%, which represents about $7 billion&lt;/a&gt;. Personally, I don&#39;t much buy the perspective that corporations are evil - they are more like a huge boat that takes thousands of people to crew and a primary goal of staying afloat (making money), regardless of whatever the captain says it still takes thousands of people working together to change directions and they still prioritize making money regardless, it&#39;s just a big dumb ship trying not to sink. In that context, no surprise here that Facebook is a slop fest and Twitter is a goblin posting dumpster fire.&lt;/p&gt;
&lt;p&gt;So no surprise that current platforms are a mess but what can anyone do about it? These things are dominant due to network effects right?&lt;/p&gt;
&lt;p&gt;Well that&#39;s where things might get interesting in the AI era. &lt;a href=&quot;https://www.wired.com/story/ai-bots-are-now-a-signifigant-source-of-web-traffic/&quot;&gt;Agents are quickly becoming the number one user of the internet&lt;/a&gt; — software documentation these days are primarily serving agent traffic even. In a world where content is consumed and distributed via autonomous agents, the discovery mechanism of large platforms becomes much less valuable. If agents are pushing users towards content instead of the platforms themselves, then the network value of a platform is greatly diminished and then what&#39;s left? Oh its super easy to publish on? Well geez, it&#39;s super easy to have Claude go make a website (e.g. like this one), why send my readers to an ad-tech hell hole at all?&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Wow TikTok is Still in the News</title>
    <link href="https://blog.sarocu.com/blog/tiktok/"/>
    <updated>2025-05-02T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/tiktok/</id>
    <content type="html">&lt;p&gt;For months, every time TikTok is in the news for a potential ban or sale I complain to my wife. That complaint usually goes something like “There’s already a fix for this, I can’t believe we’re still talking about it.” For the uninitiated, the drama supposedly centers on protecting the personal information of Americans using an app created and controlled by a Chinese company. But privacy frameworks exist to different degrees in many jurisdictions and they form a well established set of legal controls for doing the very thing that US lawmakers think they are accomplishing by forcing the sale of TikTok or banning the app altogether.&lt;/p&gt;
&lt;p&gt;Now, the current administration — once hailed as the savior of TikTok — has granted another extension for the sale of the app, so its quite likely that the story dies down for a while before coming back ‘round after a sale goes through or another extension, so we will see how this actually plays out. But the thing I would like to highlight is that this is a silly way for lawmakers to go about securing American’s privacy.&lt;/p&gt;
&lt;p&gt;Today, the European Union shows us the way to go — using their existing and robust privacy framework called GDPR (General Data Protection Regulation, a legal framework that has been evolving since 1995), they slapped a $600 million dollar fine on ByteDance for illegal data export (data pertaining to citizens of the EU are subject to data protection agreements in order to be exported to a country that does not have equivalent privacy protections). It is absolute silliness for the United States congress to individually police tech companies (and indeed, I’m not convinced protecting American’s privacy is the goal with this saga) and if you think TikTok is the only platform that is harvesting and exporting personal data (quite legally at that) you are very much mistaken. The real answer to this problem is to create a national framework and then enforce it with our existing legal infrastructure.&lt;/p&gt;
&lt;p&gt;Granted, it’s true that the US simply doesn’t care very much about privacy. Sure, you can pontificate all you like about it, but since we lack a cohesive framework at the federal level we certainly aren’t doing much more than pontificating about it. Privacy is one of those things we can all agree is a “good” thing; it’s like being a “good person”, we can all agree on it but it’s vague enough where no one need do anything different. And there are a smattering of efforts and laws out there:&lt;/p&gt;
&lt;p&gt;HIPAA — protects some forms of health and personal information and requires a data processor (that is, an app) to inform HHS of a data breach&lt;/p&gt;
&lt;p&gt;FERPA — protects some forms of educational data&lt;/p&gt;
&lt;p&gt;COPPA — restricts the collection of use of children’s information for online services&lt;/p&gt;
&lt;p&gt;Dept of Commerce Privacy Framework — a good faith program to enable data export with countries that do take privacy seriously (and thus enable US countries to export services easily)&lt;/p&gt;
&lt;p&gt;…And there’s a few other industry specific laws — no overarching, nationwide privacy and compliance framework that applies to all businesses however. These types of laws only exist at the state level (and there’s a bunch), making regulation onerous and compliance even more so since a company’s legal obligations may vary based on the zip code of the end user. It’s kinda like Colorado not having statewide building codes so a contractor in Denver might not be licensed to do business a few miles away in Jefferson County until they learn another set of codes and take another exam and register their business; all of which makes it more expensive to offer their services to everyone. That’s what we’re doing with privacy protections in the United States: we make it weaker and more expensive for everyone and ask the people in congress who likely don’t have the slightest notion of how the internet works to make a flashy show of it when it serves their political interests.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Another Era is Ending So Let&#39;s Break Up Big Tech</title>
    <link href="https://blog.sarocu.com/blog/breakup-big-tech/"/>
    <updated>2025-04-17T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/breakup-big-tech/</id>
    <content type="html">&lt;p&gt;The front page of the New York Times today features Google’s legal woes —&lt;/p&gt;
&lt;h3&gt;Google Is a Monopolist in Online Advertising Tech&lt;/h3&gt;
&lt;p&gt;And don’t forget that Zuck is sitting in court all this week trying his best to prevent Meta from breaking up.&lt;/p&gt;
&lt;p&gt;But let’s party like its the 90’s.&lt;/p&gt;
&lt;p&gt;Who remembers the Microsoft antitrust trials? They didn’t really result in a sea change by any means; Microsoft argued that a monopoly can actually serve the consumer in the case of software - in that a larger ecosystem and larger user base lead to a better product, and theoretically cheaper prices. Microsoft had some experience fucking up monopolies as well; Word and Excel weren’t always the entrenched products they are today, and the launched into a world where there were real monopolies in these spaces. There was WordStar and then WordPerfect. There was Lotus 1-2-3. And slowly but surely Microsoft wrested away market share until it dominated. That’s not to mention Internet Explorer; engineers may have a longstanding hatred of IE8 and 9, but there was a time when Netscape dominated the market before losing their lunch to Microsoft in the browser wars. When the antitrust trials started in 1998, Microsoft controlled a vast holding of the software landscape.&lt;/p&gt;
&lt;p&gt;But.&lt;/p&gt;
&lt;p&gt;But the PC was also becoming a commodity product when the trials started. The great mobile shift was beginning, which Microsoft famously missed the boat on. A new wave of tech rose up as the old guard was mostly relegated to commodity products (Apple going from near bankrupt in the PC era to the winner of the mobile shift).&lt;/p&gt;
&lt;p&gt;It seems fitting that Google and Meta are in the hotseat now in 2025. I personally doubt the antitrust proceedings will result in anything astonishing; even if you break up Facebook, the constituent companies will still be wildly successful and do their best to keep a grip on their marketshare. But the vibe shift is underway anyways. AI native companies are introducing new ways to use computers that are dramatically changing how software engineers work — it’s mostly a matter of time before the wave catches the rest of the workforce and then the consumer. In this wave, we’re seeing OpenAI capturing the consumer and nontechnical market while Anthropic entrenches itself in the developer space; I doubt the old guard is catching up, which is likely why Microsoft itself is betting so heavily on OpenAI.&lt;/p&gt;
&lt;p&gt;The DOJ is a little late, just like last time. Search, ads, and social media are commodity services. LLM’s might become a commodity themselves a little faster in this world but the next decade or so is bright, just watch out for the next antitrust fight.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Think About Privacy Like an Engineer</title>
    <link href="https://blog.sarocu.com/blog/privacy/"/>
    <updated>2025-03-26T00:00:00Z</updated>
    <id>https://blog.sarocu.com/blog/privacy/</id>
    <content type="html">&lt;p&gt;There are lots of ways to think about privacy these days. If you happen to be a lawyer at Meta, you probably think about privacy in terms of all the bits of information that is being collected from users and is legally required to be listed in a privacy policy. If, by chance, you happen to be a member of the US Congress, privacy might mean the protected classes of data including things like medical and educational records. In the much more likely case that you are a normal user of various apps and websites, privacy probably just means that there’s a checkbox or a button that you need to click before you use the aforementioned app and/or website that says you must accept “cookies”.&lt;/p&gt;
&lt;p&gt;Alternatively, if you happen to know many software engineers (and in particular, a software engineer that works in infrastructure) and ask them what privacy means, you may end up in a conversation about risk aggregation. That’s because risk is typically a currency in business and crucially in software businesses. You can bet that any software company with a stamp that says “SOC II” on it has a “risk register” that they maintain (at least they update it once a year when the auditors ask about it) and the purpose is pretty simple - gauge the likelihood that a certain event will take place as well as it’s downside impacts to the business. By events, we generally talk about things like data breaches or fraud, and the likelihood and impacts are the risk that the business takes. Take the entire registry altogether and that is the aggregated risk assumed by a business in order to offer its services.&lt;/p&gt;
&lt;p&gt;Need an example? Pretend you are an executive at Equifax circa 2017. You might have a risk register that has a line item that looks like this:&lt;/p&gt;
&lt;p&gt;Risk: Personal information database breach&lt;/p&gt;
&lt;p&gt;Likelihood: Low&lt;/p&gt;
&lt;p&gt;Impacts: Reputation loss, financial impacts due to exposure to class action settlement, regulatory oversight compresses margins&lt;/p&gt;
&lt;p&gt;This risk exists because the product consists of collecting lots of personal financial data about individuals; if they don’t take this risk, they don’t have a product (arguably they have been such poor stewards of data they likely shouldn’t have this product anyways).&lt;/p&gt;
&lt;p&gt;Most modern businesses rely on information flowing cleanly between different pieces of infrastructure and vendors (subprocessors); for example, when you buy a fancy espresso from the local coffee shop and pay with a credit card, the point of sale system sends data to an app hosted on a cloud provider like AWS, which interacts with a vendor like Square to process the payment (that’s two vendors, or subprocessors) and then the rewards system updates your history to record the purchase (a third subprocessor). What’s your risk registry look like for this transaction?&lt;/p&gt;
&lt;p&gt;Your credit card number (high impact, low likelihood of exposure)&lt;/p&gt;
&lt;p&gt;You like coffee (low impact, high likelihood of exposure via data sharing)&lt;/p&gt;
&lt;p&gt;This contrived example isn’t terribly risky but its just one of hundreds of decisions we make subconsciously and the registry adds up over time — you are aggregating risk, just like Equifax as they accumulated personal financial information one person at a time, 147 million times over.&lt;/p&gt;
&lt;p&gt;The way we use devices and the internet has evolved a lot over time (duh) and data has emerged as a hard currency of the information era. Sometimes you are paying money to manage risk (buying an app that runs locally on your laptop), and sometimes you are forking over data to get some service for free (e.g. Instagram, paid for by ads) and when that happens, you are aggregating risks. This is the part of the post where I should write a “call to action” so that you hopefully exchange cash for something from me, but I haven’t built that part yet. I can tell you what I want for myself however —&lt;/p&gt;
&lt;p&gt;I want to use LLM’s on my own machine&lt;/p&gt;
&lt;p&gt;When I need to do some one off task, I want to make an LLM do it for me on my own computer, and not sign up for yet another service&lt;/p&gt;
&lt;p&gt;When I save a file, I want to save it to my local machine&lt;/p&gt;
&lt;p&gt;When I send someone a file, I don’t want to save it to some cloud drive&lt;/p&gt;
&lt;p&gt;When I need to buy pants I don’t need my algorithm updated&lt;/p&gt;
&lt;p&gt;When I publish things, I don’t want companies scraping it for financial gain without permission&lt;/p&gt;
&lt;p&gt;I could really keep going on, but I think you get the point — I want to use my computer like its 2002. What are you nostalgic for in today’s computering world? How do you want the internet to change?&lt;/p&gt;
</content>
  </entry>
</feed>
