<?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: Samuel Fialho</title>
    <description>The latest articles on DEV Community by Samuel Fialho (@semisse).</description>
    <link>https://dev.to/semisse</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F197922%2F0eaf66cc-e4ae-47a8-a994-c954c995bb04.jpeg</url>
      <title>DEV Community: Samuel Fialho</title>
      <link>https://dev.to/semisse</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/semisse"/>
    <language>en</language>
    <item>
      <title>Tired of babysitting your pipelines?</title>
      <dc:creator>Samuel Fialho</dc:creator>
      <pubDate>Mon, 06 Apr 2026 20:02:56 +0000</pubDate>
      <link>https://dev.to/semisse/tired-of-babysitting-your-pipelines-412i</link>
      <guid>https://dev.to/semisse/tired-of-babysitting-your-pipelines-412i</guid>
      <description>&lt;p&gt;There’s a specific kind of failure every engineer working with CI knows:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A test fails.&lt;/li&gt;
&lt;li&gt;You rerun it.&lt;/li&gt;
&lt;li&gt;It passes. &lt;/li&gt;
&lt;li&gt;You rerun again. &lt;/li&gt;
&lt;li&gt;It fails.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Now you're not debugging anymore, you're dealing with non-deterministic failures. And trying to answer a simple question: is this actually broken, or just flaky?&lt;/p&gt;

&lt;p&gt;So you start the loop: you rerun the CI; you open GitHub Actions url; you wait; you check again; when it finishes, you rerun it again; you repeat it. Not because you want to, but because you need signal.&lt;/p&gt;

&lt;p&gt;Meanwhile, your attention is split. You can’t fully go back to coding because part of your brain is still waiting for the result. That’s the problem I wanted to solve. So I built SubCat.&lt;/p&gt;

&lt;h2&gt;
  
  
  What SubCat is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5hhumprh6uomg799l0fm.png" class="article-body-image-wrapper"&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.amazonaws.com%2Fuploads%2Farticles%2F5hhumprh6uomg799l0fm.png" alt=" " width="800" height="388"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A small macOS app. You paste a GitHub Actions run URL, go back to work, and get a native notification when it finishes. You click it and it opens the run. No tabs. No babysitting.&lt;/p&gt;

&lt;h2&gt;
  
  
  Repeat mode: turning guesswork into signal
&lt;/h2&gt;

&lt;p&gt;This is the core idea. Instead of manually rerunning a flaky test over and over, SubCat does it for you and gives you a simple report in Markdown format. &lt;/p&gt;

&lt;p&gt;It’s not full-blown observability. It’s point-in-time investigation. Tools like BuildPulse or Trunk are great, but they require setup and are built for long-term analysis.&lt;/p&gt;

&lt;p&gt;SubCat is intentionally different:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local;&lt;/li&gt;
&lt;li&gt;zero setup;&lt;/li&gt;
&lt;li&gt;focused on “I need to understand this failure now”&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this exists
&lt;/h2&gt;

&lt;p&gt;This started as a productivity problem, but it turned out to be a signal vs noise problem in CI. The time cost isn’t the reruns themselves, it’s the constant context switching while waiting for answers. SubCat removes that loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  Technical notes (for those who care)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Built with Electron (pragmatism &amp;gt; purity)&lt;/li&gt;
&lt;li&gt;Native notifications + Keychain via safeStorage&lt;/li&gt;
&lt;li&gt;GitHub OAuth Device Flow (no PAT copy/paste)&lt;/li&gt;
&lt;li&gt;SQLite (better-sqlite3) with a test-time swap to node:sqlite&lt;/li&gt;
&lt;li&gt;Polling extracted into a decoupled PollManager (event-driven, fully testable)&lt;/li&gt;
&lt;li&gt;CI/CD with code signing + notarization + auto-update via GitHub Releases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The goal wasn’t to build the “perfect” stack but I wanted to optimize for iteration speed and real-world usefulness. &lt;/p&gt;

&lt;h2&gt;
  
  
  Why I’m sharing this
&lt;/h2&gt;

&lt;p&gt;SubCat is open source and free, but this is also the kind of project I value most as a developer. It started as a personal project (a problem I hit in my day-to-day work) but I approached it with the same standards I’d expect in a production system:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;clear architecture;&lt;/li&gt;
&lt;li&gt;explicit tradeoffs;&lt;/li&gt;
&lt;li&gt;testable components;&lt;/li&gt;
&lt;li&gt;end-to-end ownership (from idea to CI to distribution).&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If flaky tests are part of your daily life, this might help: &lt;a href="https://subcat.todaywedream.com/" rel="noopener noreferrer"&gt;https://subcat.todaywedream.com/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Curious how others deal with flaky tests. Reruns, quarantine, retries in CI, or something else? Let me know. Cheers.&lt;/p&gt;

</description>
      <category>ci</category>
      <category>e2e</category>
      <category>testing</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
