<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.4.1">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2025-12-29T09:22:48-08:00</updated><id>/feed.xml</id><title type="html">hernanat</title><subtitle>I mostly write software and ramble.</subtitle><entry><title type="html">Ditching GitHub</title><link href="/tech/2025/12/28/ditching-github.html" rel="alternate" type="text/html" title="Ditching GitHub" /><published>2025-12-28T00:00:00-08:00</published><updated>2025-12-28T00:00:00-08:00</updated><id>/tech/2025/12/28/ditching-github</id><content type="html" xml:base="/tech/2025/12/28/ditching-github.html"><![CDATA[<h2 id="introduction">Introduction</h2>

<p>It’s been a long time coming, but as of this post, I’m <em>mostly</em> off GitHub. If I
  didn’t need it for work, I’d have deleted my account entirely. Unfortunately,
  our organization still relies pretty heavily on some features, at least for the
  time being.</p>

<p>My open source projects have been relocated and their GitHub repositories have
  been archived. This site, which was previously hosted on GitHub Pages, has also
  been moved.</p>

<h2 id="why">Why?</h2>

<p>Like many others, I’ve been uneasy about GitHub’s direction ever since the
  Microsoft acquisition. The acquisition itself was pretty ironic given the
  company’s historically hostile stance towards open source. For a while,
  though, things mostly stayed the same.</p>

<p>Over time, that changed. Between the continued enshitification of the user
  experience, the organizations they continue to do business with, and the
  increasingly questionable actions and practices around AI, I finally hit my
  limit. Every other thing they do feels like a middle finger to the developer
  community, and I’m over it.</p>

<p>Countless others have already written about this in far more detail than I will
  here, so I’m not going to turn this into another one of those posts. If you’re
  curious, you can easily find plenty of discussion on places like lobste.rs or
  the orange site.</p>

<h2 id="where-am-i-going">Where Am I Going?</h2>

<p><a href="https://docs.codeberg.org/getting-started/what-is-codeberg">Codeberg</a> is a
  non-profit alternative powered by
  <a href="https://forgejo.org">Forgejo</a>. All of my semi-active open source projects have
  been moved there, and you can find me at
  <a href="https://codeberg.org/hernanat">https://codeberg.org/hernanat</a>.</p>

<p>Hosting open source projects on a community-run, non-profit platform feels far
  more aligned with the ideals of open source than keeping them on a
  commercialized slop app that I no longer enjoy using. The community is growing
  quickly, and I’m interested to see whether the operating model holds up long
  term.</p>

<p>Even if it doesn’t, it felt worth the risk to get away from what Microsoft has
  turned a service I once loved into.</p>

<h2 id="migration-experiences">Migration Experiences</h2>

<h3 id="repos">Repos</h3>

<p>I kept putting this off because I assumed it would be a pain in the ass, but the
  actual migration ended up being surprisingly painless. Codeberg provides a
  <a href="https://docs.codeberg.org/advanced/migrating-repos">tool</a> for migrating
  repositories from a number of providers, including GitHub.</p>

<p>For each repo, all I had to do was provide a link, check a couple of boxes, and
  supply an API key for the migration. The entire process, including archiving
  the old repositories, took less than ten minutes. After that, I went through
  and purged a bunch of long-dead repos from my GitHub account as well.</p>

<h3 id="this-blog">This Blog</h3>

<p>This part was less pleasant. This site is a
  <a href="https://jekyllrb.com">Jekyll</a> blog that I had been hosting on GitHub Pages for
  quite some time. Codeberg offers a similar
  <a href="https://docs.codeberg.org/codeberg-pages">Pages</a> feature, but it is currently
  in maintenance mode after being maintained by a single person for a long time.</p>

<p>On top of that, some users have reported intermittent availability issues, so I
  decided it probably wasn’t something I wanted to rely on yet.</p>

<p>In the end, I migrated the site to a cheap DigitalOcean droplet for the time
  being. It’s less convenient, but it gives me an excuse to play around with
  nginx and other things I don’t usually touch, which has been fun. When I’m
  feeling less lazy, I’ll put together a sane deployment process and probably
  write about it.</p>

<h2 id="closing">Closing</h2>

<p>If you’re thinking about exiting GitHub yourself, I’d encourage you to give
  Codeberg a try. Some notable projects, like
  <a href="https://codeberg.org/ziglang/zig">Zig</a>, have already moved over, which gives it
  more credibility than it might have otherwise.</p>

<p>Right now my only real complaint is that things can feel a bit slow at times,
  but with more projects, more users, and so – hopefully – more resources and
  funding, I expect that to improve. I’m also looking into how I can contribute
  myself. Stay tuned.</p>]]></content><author><name></name></author><category term="tech" /><category term="coding" /><category term="git" /><summary type="html"><![CDATA[Introduction]]></summary></entry><entry><title type="html">In Response to ‘Ruby Is Not a Serious Programming Language’</title><link href="/tech/2025/12/03/in-response-to-ruby-is-not-a-serious-programming-language.html" rel="alternate" type="text/html" title="In Response to ‘Ruby Is Not a Serious Programming Language’" /><published>2025-12-03T00:00:00-08:00</published><updated>2025-12-03T00:00:00-08:00</updated><id>/tech/2025/12/03/in-response-to-ruby-is-not-a-serious-programming-language</id><content type="html" xml:base="/tech/2025/12/03/in-response-to-ruby-is-not-a-serious-programming-language.html"><![CDATA[<h2 id="response">Response</h2>

<p>Other people spent more time writing actual responses (more power to you), but
  after reading it myself, all I could do was cackle and say: What a lazy and
  uninformed shit post lol.</p>

<p>Cheers.</p>]]></content><author><name></name></author><category term="tech" /><category term="coding" /><category term="rant" /><category term="ruby" /><summary type="html"><![CDATA[Response]]></summary></entry><entry><title type="html">Vibin’</title><link href="/tech/2025/11/25/vibin.html" rel="alternate" type="text/html" title="Vibin’" /><published>2025-11-25T00:00:00-08:00</published><updated>2025-11-25T00:00:00-08:00</updated><id>/tech/2025/11/25/vibin</id><content type="html" xml:base="/tech/2025/11/25/vibin.html"><![CDATA[<h2 id="introduction">Introduction</h2>

<p>At this point most of us devs have been beaten down by the nonstop hype and
  hate around AI tools (primarily dev tools). Depending on who is talking,
  these things are either going to 10x our productivity, put us all out of work
  before lunch, or are so worthless we should not touch them at all. A lot of
  that noise is complete bullshit. Non-technical C-Suiters, VCs, and sales types
  love to hype this stuff because there is almost always a financial angle, or
  they are just riding the latest hype train (blockchain flashbacks, anyone?). On
  the other end of the spectrum, the people who dismiss the tools outright are
  usually reacting more to their own hangups than to the tools themselves.</p>

<p>Like a lot of folks in the industry, I am skeptical of anything that promises
  magical productivity boosts. My team has also been asked to increase our use
  of AI tools, which means I have had plenty of chances to mess with them in
  real work. This post is about how I actually use them, where they help, where
  they fall flat, and how I sift through all the hype and doom. It is all
  anecdotal and based on my own experience. I am not an AI expert. I am just a
  dev who has spent enough time with these tools to have opinions.</p>

<h2 id="hypers">Hypers</h2>

<p>Every day on my LinkedIn feed, on certain news channels, and across the internet
  in general, I see the same AI hype posts from some CxO, VC, or other suit
  talking about how AI is going to render us obsolete or 100x our productivity.
  Then there are the endless announcements about a new company <em>using AI to
  revolutionize X</em> (just do a find + replace with <em>using blockchain to
  revolutionize X</em> … same energy).</p>

<p>This isn’t an original thought, as many have said it before me, but: I genuinely
  believe that most of this hype exists for financial reasons, and I can’t take
  anyone who plays into shit in this manner seriously.</p>

<p>Posts telling you to get on the AI train before it’s too late are trying to get
  you using their products so they can make money off you. Companies bragging
  about how they are ReVoLuTiOnIzInG something with AI are usually doing it to
  check a box for VCs. The guests on these news shows are often investors or
  company reps with a direct or indirect financial interest in the success of the
  technology. All of it blends together after a while, and it’s <em>exhausting</em>.</p>

<h2 id="haters">Haters</h2>

<p>On the other end of the spectrum are the devs who refuse to use AI tools and /
  or will not put in the effort to learn how to use them <em>productively</em>, then
  dismiss the whole thing as garbage. I am not talking about people with valid
  environmental or ethical concerns here; a lot of those I actually agree with.
  No, I am talking about something else entirely.</p>

<p>I’ve had conversations with other devs in person and online, lurked on various
  threads, read people’s blogs, and I’ve formed a fairly consistent opinion:
  some people just don’t want to use these tools regardless of how good or bad
  they are. In some cases, instead of saying that and moving on, they come up
  with all sorts of negative shit to try and justify it (there are plenty of
  lazy anti-AI tool rants out there, not going to restate them here).</p>

<p>Why? Honestly, I think there are a bunch of reasons, but one stands out:
  programmers typically like to program. For some people, their love for the
  craft fuels their reluctance to use AI code generation tools. One of the joys
  of programming is encountering interesting problems and building your own
  working solutions. There is a real sense of satisfaction there, and it can feel
  like you are being robbed of that if the LLM is doing most of the heavy
  lifting.</p>

<h2 id="how-i-use-ai">How I Use AI</h2>

<p>I’ve been using AI in various ways for fun since the OpenAI beta, and more
  recently I have been using the technology daily at work. When I first got into
  the beta, my reaction was basically <em>hey, neat toy</em> and I used it to answer
  simple questions and generate some funny stories. Coding with it initially
  sucked.</p>

<p>The landscape has changed a lot since then – tons of AI coding tools out there,
  more competing LLMs, and a handful of services that make integrating with LLMs
  pretty painless.</p>

<p>Ok, so how am I actually using this stuff?</p>

<h3 id="searching-online">Searching Online</h3>

<p>First and foremost, Google search is unusable for me at this point (and their
  AI-generated answers at the top are a joke lol). If I use a search engine at
  all, it’s DuckDuckGo, but a lot of the time I am taking advantage of the
  fact that I can just ask ChatGPT and it will respond with an answer <em>and</em>
  links I can click into. The quality of the responses has gotten noticeably
  better, so it’s hard for me <em>not</em> to use it.</p>

<h3 id="non-coding-work">Non-Coding Work</h3>

<p>I have my primary LLM tool hooked up to various MCP servers, which I use to
  write and iterate on things like ERDs, tickets, and other non-code-y tasks.
  I encounter a lot more of this sort of work now at this stage in my career,
  and I am not going to lie: I still hate it.</p>

<p>Previously, ERDs took me longer than they should have because I <em>loathe</em>
  writing them. With an AI tool wired into the MCP server for our knowledge
  base, I can just have a conversation with the LLM, point it to relevant code,
  docs, and tickets, and “write” the document section by section. Similarly, I
  hate writing tickets … but AI helps here too! I still have to read and
  correct the output, but the back-and-forth makes the process suck a lot less.</p>

<h3 id="un-sexy-boring-tasks">Un-Sexy, Boring Tasks</h3>

<p>One of the biggest killers of motivation for me is work that is easy, quick,
  and / or completely uninteresting. Historically, I would put these tasks off,
  feel annoyed about doing them, move slower than I should, and then get
  stressed out because they piled up. Meanwhile I would gravitate to the
  interesting stuff, letting the mundane mountain grow.</p>

<p>AI tools have helped me <em>a lot</em> here. This category of work is basically
  perfect for an AI agent, and the agent is often faster than I would be even
  on my best day. On a recent project involving a migration between two repos,
  the entire thing was 90% boring grunt work, moving and renaming files. I
  generated an ERD and a set of tickets (using the conversational flow I
  mentioned above), then handed each one to a coding agent and let it run.</p>

<p>The whole project took a fraction of the time it would have taken manually.
  I found myself reviewing code and making only minor changes (and since it was
  not a greenfield effort, there was not much for the AI to screw up anyway).
  The agents also handled linter issues, test breakages, and other cleanup.
  This all allowed me to shift my focus to other things as needed without being
  so stressed about it … honestly felt like a win.</p>

<h3 id="writing-generally">Writing, Generally</h3>

<p>I am not much of a writer. I mostly write the way I talk, which people either
  love or hate. For this blog I try to clean it up a <em>little</em>, so I have given
  ChatGPT a set of instructions (after a lot of trial and error) to help keep
  things in my voice while making the writing readable.</p>

<p>I take it section by section and usually feed the tool a pile of run-on
  sentences, 5000 swear words, and a dozen tangents. What comes back is something
  properly punctuated, with about 85 percent fewer swear words and most of the
  tangents removed. Hate on it if you want, but the biggest thing that has kept
  me from blogging for years is that I hate the way I write. The AI assistance
  makes me hate it slightly less.</p>

<h2 id="what-i-dont-like">What I Don’t Like</h2>

<p>There is a bunch that AI tooling is great at. There is also a lot it’s still
  ass at, and for everything else I’ve just decided I don’t want to use it at
  this point.</p>

<h3 id="using-it-for-complex-work">Using It For Complex Work</h3>

<p>AI does not handle complexity well, and the problem gets worse the longer your
  session runs and the more context you shove through it.</p>

<p>I had a project that was legitimately complicated and required a lot of context
  about code, business expectations, and interactions between different
  systems. I said <em>fuck it, let’s try to vibe this</em>, shared an ERD, multiple
  tickets, various docs, and some tribal knowledge into the session, and hoped
  for the best. The result was a huge mess and me wanting to throw my laptop.
  And of course I blew through the context window almost immediately.</p>

<p>I did not abandon AI entirely for the remainder of the project, but I had to be
  way more surgical than I planned, and the initial thrashing was time wasted.</p>

<h3 id="spiral-debugging">Spiral Debugging</h3>

<p>Sometimes you point an LLM at a test failure and it fixes it the right way,
  no problem. Other times, it tries to mock out the universe and rewrite half
  the test suite so that <code class="language-plaintext highlighter-rouge">1 == 3</code> passes. Similarly, sometimes it can debug an
  issue, other times it just throws shit at the wall hoping something will
  stick.</p>

<p>I am at the point where I can tell pretty quickly when I am going to have to
  step in and tell the AI to sit down and shut up, but it still irritates me to
  no end. In the past I tried thrashing with <em>no, look at &lt;x&gt;</em> only for the tool
  to agree with me and then immediately do something else wrong. Big lesson:
  learn to cut your losses quickly.</p>

<h3 id="vibe-coding-in-personal-projects">Vibe Coding In Personal Projects</h3>

<p>I don’t use AI coding tools in my personal projects, at least not yet. Even
  though I use them daily at work and get real productivity out of them, that
  is not the point of my personal projects. When I am building something on the
  side, I want to have fun and usually learn something new, not crank out tasks
  faster.</p>

<p>I’m not ruling out using AI for personal stuff in the future, but right now I
  have my programming life split into two boxes: my personal box where I code by
  hand, and my professional box where I code by hand <em>and</em> vibe. So far, I have
  been happier keeping that separation.</p>

<h2 id="closing-thoughts">Closing Thoughts</h2>

<p>AI tools are useful means to some ends. I don’t believe they are going to steal
  my job, no matter how often we hear that line, and I don’t think they are so
  utterly useless that you should ignore them. I don’t <em>love</em> any of these tools
  so much as I simply use them because they are usually <em>good enough</em>. I use
  OpenAI’s and Anthropic’s tools a lot, but I am by no means a fanboy of either.</p>

<p>My general advice is this: don’t be so starry-eyed that you forget your
  responsibility to think, and don’t be so negative that you dismiss an entire
  category of tools. In my experience, there are clear productivity gains once
  you learn your way around. On the other hand, you will also learn when it’s
  time to shut down the session and blow the dust off your text editor ;)</p>

<p>There is a lot more I could say, but we will leave it here for now. Thanks for
  stopping by!</p>]]></content><author><name></name></author><category term="tech" /><category term="ai" /><category term="coding" /><category term="vibe-coding" /><category term="rant" /><summary type="html"><![CDATA[Introduction]]></summary></entry><entry><title type="html">Zig dev shell with Nix flakes and mitchellh/zig-overlay</title><link href="/guides/2025/08/24/zig-nix-dev-shell.html" rel="alternate" type="text/html" title="Zig dev shell with Nix flakes and mitchellh/zig-overlay" /><published>2025-08-24T00:00:00-07:00</published><updated>2025-08-24T00:00:00-07:00</updated><id>/guides/2025/08/24/zig-nix-dev-shell</id><content type="html" xml:base="/guides/2025/08/24/zig-nix-dev-shell.html"><![CDATA[<h2 id="introduction">Introduction</h2>

<p><strong>Note:</strong> If you’re already comfortable with flakes and overlays, this post
  may be boring to you. This is more for my own memory than anything else. I do
  recommend reading the posts I’ve linked out to if you are unfamiliar with
  anything below.</p>

<p>I’ve used <a href="https://nix.dev">Nix</a> for a while – on my Mac with
  <a href="https://github.com/nix-darwin/nix-darwin">nix-darwin</a> and
  <a href="https://github.com/nix-community/home-manager">home-manager</a>, dev
  environments with <a href="https://devenv.sh">devenv.sh</a>, and even for this blog – but
  I’m no expert.
  Today I finally grokked
  <a href="https://wiki.nixos.org/wiki/Overlays">overlays</a> after reading
  <a href="https://nixcademy.com/posts/mastering-nixpkgs-overlays-techniques-and-best-practice">this</a>
  awesome blog post, and wrote a minimal Nix
  <a href="https://wiki.nixos.org/wiki/Flakes">flake</a> for Zig.</p>

<p>Mitchell Hashimoto maintains a <a href="https://github.com/mitchellh/zig-overlay">Zig
  overlay</a> that I’d been using via
  <code class="language-plaintext highlighter-rouge">nix shell 'github:mitchellh/zig-overlay#master'</code> or in devenv. This time I
  wanted to use it in a flake and share the result.</p>

<h2 id="the-flake">The Flake</h2>

<p>I’m on a MacBook with Apple silicon, but I also use a Fedora laptop, so I
  wanted the flake to work on both. I avoided <code class="language-plaintext highlighter-rouge">flake-utils</code> on purpose – partly to
  learn, partly to see what’s really going on without convenience helpers. Here’s
  the flake with comments:</p>

<div class="language-nix highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># flake.nix</span>
<span class="p">{</span>
  <span class="nv">description</span> <span class="o">=</span> <span class="s2">"A very basic flake"</span><span class="p">;</span>

  <span class="nv">inputs</span> <span class="o">=</span> <span class="p">{</span>
    <span class="nv">nixpkgs</span><span class="o">.</span><span class="nv">url</span> <span class="o">=</span> <span class="s2">"github:nixos/nixpkgs?ref=nixos-unstable"</span><span class="p">;</span>
    <span class="nv">zig</span> <span class="o">=</span> <span class="p">{</span>
      <span class="nv">url</span> <span class="o">=</span> <span class="s2">"github:mitchellh/zig-overlay"</span><span class="p">;</span>
      <span class="nv">inputs</span> <span class="o">=</span> <span class="p">{</span>
        <span class="nv">nixpkgs</span><span class="o">.</span><span class="nv">follows</span> <span class="o">=</span> <span class="s2">"nixpkgs"</span><span class="p">;</span>
      <span class="p">};</span>
    <span class="p">};</span>
  <span class="p">};</span>

  <span class="nv">outputs</span> <span class="o">=</span>
    <span class="p">{</span>
      <span class="nv">self</span><span class="p">,</span>
      <span class="nv">zig</span><span class="p">,</span>
      <span class="nv">nixpkgs</span><span class="p">,</span>
    <span class="p">}:</span>
    <span class="kd">let</span>
      <span class="nv">systems</span> <span class="o">=</span> <span class="p">[</span>
        <span class="s2">"aarch64-darwin"</span>
        <span class="s2">"x86_64-linux"</span>
      <span class="p">];</span>
      <span class="c"># see https://nixos.org/manual/nixpkgs/stable/#function-library-lib.attrsets.genAttrs</span>
      <span class="c"># we're going to use this function below to define dev shells for all</span>
      <span class="c"># systems. the flake-utils package has an `eachSystem` function that</span>
      <span class="c"># accomplishes something similar.</span>
      <span class="nv">forAllSystems</span> <span class="o">=</span> <span class="nv">nixpkgs</span><span class="o">.</span><span class="nv">lib</span><span class="o">.</span><span class="nv">genAttrs</span> <span class="nv">systems</span><span class="p">;</span>
    <span class="kn">in</span>
    <span class="p">{</span>
      <span class="nv">devShells</span> <span class="o">=</span> <span class="nv">forAllSystems</span> <span class="p">(</span>
        <span class="nv">system</span><span class="p">:</span>
        <span class="kd">let</span>
          <span class="nv">pkgs</span> <span class="o">=</span> <span class="kr">import</span> <span class="nv">nixpkgs</span> <span class="p">{</span>
            <span class="kn">inherit</span> <span class="nv">system</span><span class="p">;</span>
            <span class="c"># overlay is going to make pkgs.zigpkgs available,</span>
            <span class="c"># which allows us to install whatever version of Zig we want</span>
            <span class="c"># including nightly (which I’m using below).</span>
            <span class="nv">overlays</span> <span class="o">=</span> <span class="p">[</span> <span class="nv">zig</span><span class="o">.</span><span class="nv">overlays</span><span class="o">.</span><span class="nv">default</span> <span class="p">];</span>
          <span class="p">};</span>
        <span class="kn">in</span>
        <span class="p">{</span>
          <span class="nv">default</span> <span class="o">=</span> <span class="nv">pkgs</span><span class="o">.</span><span class="nv">mkShell</span> <span class="p">{</span>
            <span class="nv">nativeBuildInputs</span> <span class="o">=</span> <span class="kn">with</span> <span class="nv">pkgs</span><span class="p">;</span> <span class="p">[</span>
              <span class="c"># Going to be hooking into libgit2 for this particular project.</span>
              <span class="nv">libgit2</span>
              <span class="c"># install the nightly build</span>
              <span class="nv">zigpkgs</span><span class="o">.</span><span class="nv">master</span>
            <span class="p">];</span>
          <span class="p">};</span>
        <span class="p">}</span>
      <span class="p">);</span>
    <span class="p">};</span>
<span class="p">}</span>
</code></pre></div></div>

<p>Now you should be able to do something like the following:</p>

<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code>~/workspace/zig/git-lore/ <span class="o">&gt;</span> nix develop <span class="nt">--command</span> <span class="nv">$SHELL</span>
~/workspace/zig/git-lore/ <span class="o">&gt;</span> zig version
0.16.0-dev.23+47a2f2dda
~/workspace/zig/git-lore/ <span class="o">&gt;</span>
</code></pre></div></div>

<h2 id="closing">Closing</h2>

<p>That’s it! Nothing groundbreaking, but it was fun to get set up. I’ve got a few
  other Nix-y posts in mind that might be more interesting. Let me know if
  there’s anything you’d like me to dive into.</p>

<p>Flake without the comments or <code class="language-plaintext highlighter-rouge">libgit2</code> dependency provided below for your
  convenience.</p>

<div class="language-nix highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="p">{</span>
  <span class="nv">description</span> <span class="o">=</span> <span class="s2">"A very basic flake"</span><span class="p">;</span>

  <span class="nv">inputs</span> <span class="o">=</span> <span class="p">{</span>
    <span class="nv">nixpkgs</span><span class="o">.</span><span class="nv">url</span> <span class="o">=</span> <span class="s2">"github:nixos/nixpkgs?ref=nixos-unstable"</span><span class="p">;</span>
    <span class="nv">zig</span> <span class="o">=</span> <span class="p">{</span>
      <span class="nv">url</span> <span class="o">=</span> <span class="s2">"github:mitchellh/zig-overlay"</span><span class="p">;</span>
      <span class="nv">inputs</span> <span class="o">=</span> <span class="p">{</span>
        <span class="nv">nixpkgs</span><span class="o">.</span><span class="nv">follows</span> <span class="o">=</span> <span class="s2">"nixpkgs"</span><span class="p">;</span>
      <span class="p">};</span>
    <span class="p">};</span>
  <span class="p">};</span>

  <span class="nv">outputs</span> <span class="o">=</span>
    <span class="p">{</span>
      <span class="nv">self</span><span class="p">,</span>
      <span class="nv">zig</span><span class="p">,</span>
      <span class="nv">nixpkgs</span><span class="p">,</span>
    <span class="p">}:</span>
    <span class="kd">let</span>
      <span class="nv">systems</span> <span class="o">=</span> <span class="p">[</span>
        <span class="s2">"aarch64-darwin"</span>
        <span class="s2">"x86_64-linux"</span>
      <span class="p">];</span>
      <span class="nv">forAllSystems</span> <span class="o">=</span> <span class="nv">nixpkgs</span><span class="o">.</span><span class="nv">lib</span><span class="o">.</span><span class="nv">genAttrs</span> <span class="nv">systems</span><span class="p">;</span>
    <span class="kn">in</span>
    <span class="p">{</span>
      <span class="nv">devShells</span> <span class="o">=</span> <span class="nv">forAllSystems</span> <span class="p">(</span>
        <span class="nv">system</span><span class="p">:</span>
        <span class="kd">let</span>
          <span class="nv">pkgs</span> <span class="o">=</span> <span class="kr">import</span> <span class="nv">nixpkgs</span> <span class="p">{</span>
            <span class="kn">inherit</span> <span class="nv">system</span><span class="p">;</span>
            <span class="nv">overlays</span> <span class="o">=</span> <span class="p">[</span> <span class="nv">zig</span><span class="o">.</span><span class="nv">overlays</span><span class="o">.</span><span class="nv">default</span> <span class="p">];</span>
          <span class="p">};</span>
        <span class="kn">in</span>
        <span class="p">{</span>
          <span class="nv">default</span> <span class="o">=</span> <span class="nv">pkgs</span><span class="o">.</span><span class="nv">mkShell</span> <span class="p">{</span>
            <span class="nv">nativeBuildInputs</span> <span class="o">=</span> <span class="kn">with</span> <span class="nv">pkgs</span><span class="p">;</span> <span class="p">[</span>
              <span class="nv">zigpkgs</span><span class="o">.</span><span class="nv">master</span>
            <span class="p">];</span>
          <span class="p">};</span>
        <span class="p">}</span>
      <span class="p">);</span>
    <span class="p">};</span>
<span class="p">}</span>
</code></pre></div></div>]]></content><author><name></name></author><category term="guides" /><category term="nix" /><category term="zig" /><summary type="html"><![CDATA[Introduction]]></summary></entry><entry><title type="html">Setting Up Plausible Analytics on Jekyll Blog w/ Minima Theme</title><link href="/guides/2024/12/13/plausible-analytics-jekyll-minima-theme.html" rel="alternate" type="text/html" title="Setting Up Plausible Analytics on Jekyll Blog w/ Minima Theme" /><published>2024-12-13T17:46:00-08:00</published><updated>2024-12-13T17:46:00-08:00</updated><id>/guides/2024/12/13/plausible-analytics-jekyll-minima-theme</id><content type="html" xml:base="/guides/2024/12/13/plausible-analytics-jekyll-minima-theme.html"><![CDATA[<h2 id="introduction">Introduction</h2>

<p>Click <a href="#getting-everything-setup">here</a> to just get to the point.</p>

<p>I want to know if anyone is actually visiting this site. I’m not selling
  anything or trying to turn my blog into some alternative revenue stream
  (how silly of me, I know). I just want to know if I’m getting visitors,
  and maybe a couple of other things related to the content I put up. To
  accomplish this, I need some sort of analytics solution.</p>

<p>This site is built using <a href="https://jekyllrb.com">Jekyll</a> and its default theme
  <a href="https://github.com/jekyll/minima">Minima</a>. There are various plugins and
  themes that can hook into 3rd-party analytics, but installing a dependency
  or swapping themes just to get a script tag included on my site’s pages seemed
  way too over the top. It would also just be another thing to break and give me
  headaches later on.</p>

<p>In this post, I’ll walk through a straightforward approach to setting up
  analytics on your Jekyll blog using the default Minima theme using
  <a href="https://plausible.io">Plausible</a>.</p>

<h2 id="why-plausible">Why Plausible</h2>

<p>Disclaimer: I don’t have any relationship with Plausible other than being a
  user of their product at the time of this writing.</p>

<p>The need for a third-party analytics tool comes from the fact that this site
  is hosted using GitHub Pages. I don’t have access to any traffic data like
  I would if I were hosting everything myself.</p>

<p>Conventional wisdom says to slap some BigBrother Analytics onto your site
  and call it a day. I don’t like that approach. The internet is full of
  posts about problems with those tools, so I’ll spare you that rant. I just
  want to answer a few basic questions about whether anyone is actually
  reading this site, and maybe if there are some types of posts generating
  more views than others – no need to hand over any data to adtech in the
  process.</p>

<p>I decided to try out Plausible because I’ve heard and read a lot of good
  things about their “less creepy” approach to analytics. It seems to support
  my use case without feeding visitor data into the adtech meat grinder, so
  it felt worth giving them a shot.</p>

<h2 id="dependencies">Dependencies</h2>

<p>My gem setup is pretty barebones as of this writing:</p>

<ul>
  <li>github-pages v232</li>
  <li>minima v2.5.1</li>
</ul>

<h2 id="getting-everything-setup">Getting Everything Setup</h2>

<p>I’m not going to go into getting the site setup on GitHub pages here, GitHub
  has guides for that. This assumes you’ve already gone through those.</p>

<h3 id="tldr">tldr;</h3>

<ol>
  <li>Register your site with <a href="https://plausible.io">Plausible</a></li>
  <li>Follow the wizard to obtain the script tag for later</li>
  <li>Copy the <code class="language-plaintext highlighter-rouge">_includes/head.html</code> file from the Minima theme to
<code class="language-plaintext highlighter-rouge">_includes/head.html</code> in your Jekyll site directory</li>
  <li>Add the Plausible script tag to the copied file</li>
  <li>Deploy</li>
  <li>Follow the instructions in Plausible to check your site</li>
</ol>

<p>That’s it. I’ll go into details on points 3 &amp; 4 since those are the most
  involved.</p>

<h3 id="copying--configuring-_configheadhtml">Copying &amp; Configuring <code class="language-plaintext highlighter-rouge">_config/head.html</code></h3>

<p>v3 of Minima will support a <code class="language-plaintext highlighter-rouge">_includes/custom-head.html</code> file, but that
  hasn’t been released yet. For v2.5.x, the way to customize the head section
  is to copy the <code class="language-plaintext highlighter-rouge">_includes/head.html</code> file from the theme. This process is
  described in the
  <a href="https://github.com/jekyll/minima/tree/2.5-stable?tab=readme-ov-file#customization">customization</a>
  instructions for the <code class="language-plaintext highlighter-rouge">2.5-stable</code> branch. You can find the file
  <a href="https://github.com/jekyll/minima/blob/2.5-stable/_includes/head.html">here</a>.</p>

<p>That file looks something like this:</p>

<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;head&gt;
  &lt;meta charset="utf-8"&gt;
  &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
  <span class="cp">{%-</span><span class="w"> </span><span class="nt">seo</span><span class="w"> </span><span class="cp">-%}</span>
  &lt;link rel="stylesheet" href="<span class="cp">{{</span><span class="w"> </span><span class="s2">"/assets/main.css"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">relative_url</span><span class="w"> </span><span class="cp">}}</span>"&gt;
  <span class="cp">{%-</span><span class="w"> </span><span class="nt">feed_meta</span><span class="w"> </span><span class="cp">-%}</span>
  <span class="cp">{%-</span><span class="w"> </span><span class="nt">if</span><span class="w"> </span><span class="nv">jekyll</span><span class="p">.</span><span class="nv">environment</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'production'</span><span class="w"> </span><span class="ow">and</span><span class="w"> </span><span class="nv">site</span><span class="p">.</span><span class="nv">google_analytics</span><span class="w"> </span><span class="cp">-%}</span>
    <span class="cp">{%-</span><span class="w"> </span><span class="nt">include</span><span class="w"> </span>google-analytics.html<span class="w"> </span><span class="cp">-%}</span>
  <span class="cp">{%-</span><span class="w"> </span><span class="nt">endif</span><span class="w"> </span><span class="cp">-%}</span>
&lt;/head&gt;
</code></pre></div></div>

<p>You’ll notice that by default it includes some Google Analytics stuff. Since
  we’re not using that, remove it and replace it with your Plausible script
  tag. Your modified file should look like this:</p>

<div class="language-liquid highlighter-rouge"><div class="highlight"><pre class="highlight"><code>&lt;head&gt;
  &lt;meta charset="utf-8"&gt;
  &lt;meta http-equiv="X-UA-Compatible" content="IE=edge"&gt;
  &lt;meta name="viewport" content="width=device-width, initial-scale=1"&gt;
  <span class="cp">{%-</span><span class="w"> </span><span class="nt">seo</span><span class="w"> </span><span class="cp">-%}</span>
  &lt;link rel="stylesheet" href="<span class="cp">{{</span><span class="w"> </span><span class="s2">"/assets/main.css"</span><span class="w"> </span><span class="p">|</span><span class="w"> </span><span class="nf">relative_url</span><span class="w"> </span><span class="cp">}}</span>"&gt;
  <span class="cp">{%-</span><span class="w"> </span><span class="nt">feed_meta</span><span class="w"> </span><span class="cp">-%}</span>
  <span class="cp">{%-</span><span class="w"> </span><span class="nt">if</span><span class="w"> </span><span class="nv">jekyll</span><span class="p">.</span><span class="nv">environment</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="s1">'production'</span><span class="w"> </span><span class="cp">-%}</span>
    &lt;script defer data-domain="blog.antfeedr.com" src="https://plausible.io/js/script.js"&gt;&lt;/script&gt;
  <span class="cp">{%-</span><span class="w"> </span><span class="nt">endif</span><span class="w"> </span><span class="cp">-%}</span>
&lt;/head&gt;
</code></pre></div></div>

<h2 id="closing-remarks">Closing Remarks</h2>

<p>That’s it! When Minima v3 is released, the only upgrade step you’ll need to
  take, other than updating the gem for the theme, is to switch your setup to
  use <code class="language-plaintext highlighter-rouge">_includes/custom-head.html</code> instead of <code class="language-plaintext highlighter-rouge">_includes/head.html</code>. No need
  to use any extra Jekyll plugins or special themes.</p>

<p>✌️</p>]]></content><author><name></name></author><category term="guides" /><category term="analytics" /><category term="github-pages" /><category term="jekyll" /><category term="plausible" /><category term="tech" /><summary type="html"><![CDATA[Introduction]]></summary></entry><entry><title type="html">Exploring US Healthcare Through Books</title><link href="/books/healthcare/2024/12/12/healthcare-reading-list.html" rel="alternate" type="text/html" title="Exploring US Healthcare Through Books" /><published>2024-12-12T12:45:00-08:00</published><updated>2024-12-12T12:45:00-08:00</updated><id>/books/healthcare/2024/12/12/healthcare-reading-list</id><content type="html" xml:base="/books/healthcare/2024/12/12/healthcare-reading-list.html"><![CDATA[<h2 id="introduction">Introduction</h2>

<p>In a previous
<a href="/tech/healthtech/2024/12/05/thoughts-after-8-years-in-healthtech.html">post</a>, I
  talked about my time in healthtech. Over the years, that experience has
  also led me to read a lot of books about the U.S. healthcare system.</p>

<p>In this post, I want to share a few recommendations for anyone looking to
  expand their bookshelf.</p>

<p>I considered just posting a simple list, but that felt lazy. Instead, I’ve
  added some thoughts on why each book stood out to me. Feel free to skip
  through if you just want the titles – I’ve put them at the top of each
  section for your convenience (one of my pet peeves on recommendation blogs
  is needing to read someone’s entire life story before getting to the actual
  point, so I’ve tried to avoid doing something like that here).</p>

<p>Note: These books are not listed in any particular order.</p>

<h2 id="americas-bitter-pill">America’s Bitter Pill</h2>

<p><strong>Full Title:</strong> America’s Bitter Pill: Money, Politics, Backroom Deals, and
  the Fight to Fix Our Broken Healthcare System</p>

<p><strong>Author:</strong> Steven Brill</p>

<h3 id="discussion">Discussion</h3>

<p>This book digs into the Affordable Care Act (ACA) – or “Obamacare” – and
  examines how it was crafted, implemented, and how it has played out since.
  Steven Brill, a lawyer and journalist, does a great job breaking down the
  backroom deals, political struggles, and lobbying efforts that shaped the
  law.</p>

<p>One thing I found fascinating was how some of the same entities railing
  against the ACA were involved in writing it (including the parts they now
  complain about). Brill also dives into the broader impact of the law on the
  industry and, ultimately, on people like you and me.</p>

<h2 id="the-price-we-pay">The Price We Pay</h2>

<p><strong>Full Title:</strong> The Price We Pay: What Broke American Health Care – and How
  to Fix It</p>

<p><strong>Author:</strong> Marty Makary, MD</p>

<h3 id="discussion-1">Discussion</h3>

<p>This book takes a hard look at what’s wrong with American healthcare and why
  costs are so out of control. Dr. Marty Makary, a surgeon and public health
  researcher, focuses on issues like price-gouging, opaque billing, and
  unnecessary procedures. He doesn’t just criticize – he also explores how
  these practices hurt patients and what can be done to fix them.</p>

<p>What stood out to me were the real-life stories woven throughout the book.
  It’s not just about policy; it’s about people and the impact these issues
  have on their lives. Makary also highlights efforts to improve
  transparency and return healthcare to its core mission: helping patients.</p>

<h2 id="the-american-health-care-paradox">The American Health Care Paradox</h2>

<p><strong>Full Title:</strong> The American Health Care Paradox: Why Spending More Is
  Getting Us Less</p>

<p><strong>Authors:</strong> Elizabeth H. Bradley and Lauren A. Taylor</p>

<h3 id="discussion-2">Discussion</h3>

<p>This book tackles a big question: why does the U.S. spend more on healthcare
  than most other countries but still see worse outcomes? Bradley and Taylor
  argue that part of the answer lies in how little we invest in social
  services like housing, education, and nutrition, which are critical to
  overall health.</p>

<p>One key point they make is how the U.S. separates healthcare and social
  services, while other countries integrate the two. They use examples from
  places like Sweden and Denmark to show how combining these efforts can
  lead to better results and lower costs.</p>

<h2 id="an-american-sickness">An American Sickness</h2>

<p><strong>Full Title:</strong> An American Sickness: How Healthcare Became Big Business and
  How You Can Take It Back</p>

<p><strong>Author:</strong> Elisabeth Rosenthal</p>

<h3 id="discussion-3">Discussion</h3>

<p>Shout out to Jack for recommending this book to me years ago!</p>

<p>This book dives into how U.S. healthcare evolved into a profit-driven
  industry. Elisabeth Rosenthal, a physician and journalist, explains how
  financial incentives have shaped every part of the system – from hospitals
  to insurance companies to pharmaceutical firms – often at the expense of
  patients.</p>

<p>What sets this book apart is how Rosenthal combines real-world examples with
  practical advice. She doesn’t just lay out the problems; she also offers
  strategies for navigating the system as a consumer and ideas for creating a
  more patient-focused approach.</p>

<h2 id="the-healing-of-america">The Healing of America</h2>

<p><strong>Full Title:</strong> The Healing of America: A Global Quest for Better, Cheaper,
  and Fairer Health Care</p>

<p><strong>Author:</strong> T. R. Reid</p>

<h3 id="discussion-4">Discussion</h3>

<p>This book explores how other countries manage healthcare and what the U.S.
  might learn from them. T. R. Reid travels to countries like France, Germany,
  Japan, the U.K., and Canada to understand their systems and compare them to
  ours. He also discusses systems in other nations he studied but didn’t
  visit as part of the research for this book.</p>

<p>Reid does a great job breaking down the strengths and weaknesses of each
  approach. While the book highlights areas where the U.S. could improve, it
  focuses on practical comparisons rather than ideology. It’s a thoughtful
  look at what works elsewhere and how those ideas might apply here.</p>

<h2 id="closing-thoughts">Closing Thoughts</h2>

<p>There are plenty of other books out there, but these five are the ones that
  have stuck with me. There’s a lot about our healthcare system that’s
  fundamentally broken, but many of us struggle to pinpoint exactly what those
  issues are. I often see blame placed in one specific area depending on who I’m
  talking to – like regulation, or the insurance industry – but the reality is
  much more complicated.</p>

<p>The discussions across these books cover a lot of ground and provide a
  broader understanding of the system’s challenges. I think they leave the
  reader better equipped to engage in conversations about healthcare in the US
  and, hopefully, inspire some creative solutions.</p>

<p>Happy reading ✌️</p>]]></content><author><name></name></author><category term="books" /><category term="healthcare" /><summary type="html"><![CDATA[Introduction]]></summary></entry><entry><title type="html">Thoughts After 8+ Years in Healthtech</title><link href="/tech/healthtech/2024/12/05/thoughts-after-8-years-in-healthtech.html" rel="alternate" type="text/html" title="Thoughts After 8+ Years in Healthtech" /><published>2024-12-05T01:32:00-08:00</published><updated>2024-12-05T01:32:00-08:00</updated><id>/tech/healthtech/2024/12/05/thoughts-after-8-years-in-healthtech</id><content type="html" xml:base="/tech/healthtech/2024/12/05/thoughts-after-8-years-in-healthtech.html"><![CDATA[<h2 id="introduction">Introduction</h2>

<p>I’ve spent the better part of eight years building software for various
  healthcare technology companies. Each role came with its own set of
  challenges, as well as the opportunity to work with a different part (or
  parts) of the US healthcare system.</p>

<p>Lately, I’ve been reflecting on my time in healthtech – how it’s shaped my
  career, influenced my approach to building software, and broadened my
  perspective on the roles and responsibilities of those who both envision and
  deliver the solutions in this field. This post attempts to explore some of
  that.</p>

<h2 id="how-did-i-get-here-why-do-i-stay">How Did I Get Here? Why Do I Stay?</h2>

<p>Without getting into my whole life story, how I ended up here is kind of funny.
  As a senior in college, I got a call to interview for a job that I didn’t even
  remember applying for. I was stoked because my goal was to land something
  before graduation and then chill for the rest of senior year. I ended up
  getting the job, and that’s pretty much how it all started. At the time, I had
  zero idea what I was actually getting myself into.</p>

<p>US healthcare is, to say the least, kind of insane. Those of us in healthtech
  get to look at it from a bunch of different angles as we try to build coherent
  solutions for what often feel like incoherent problem spaces. It can be wildly
  frustrating, but at least it’s never boring!</p>

<p>Anyways, for better or worse, I’ve stuck around.</p>

<p>Over the years, there have been opportunities to explore other industries –
  fintech, real estate, you name it. But nothing ever felt compelling enough to
  make the jump (even though some of the offers – looking at you, fintech
  companies – were very tempting).</p>

<p>Ultimately, I think it boils down to three things keeping me around:</p>

<ol>
  <li>
    <p>I want to build things that can positively impact people’s lives.
 Working in healthtech provides me with tons of opportunities to make
 contributions that can help improve patient health outcomes.</p>
  </li>
  <li>
    <p>There is no shortage of unique problems that are interesting, meaningful,
 and lucky for me, solvable with software. This makes it pretty easy to
 find things to stay engaged.</p>
  </li>
  <li>
    <p>There are lots of existing solutions that could be improved, to put it
nicely. This leaves a ton of room to launch competing products that do
things better. Bonus points if it ever involves unseating bigger players ;)</p>
  </li>
</ol>

<p>To be clear, while I find the work exciting and rewarding (and endlessly
  frustrating), I’m not here to defend the healthcare industry. Many of the
  problems we are now tasked with solving stem from the inefficiencies and
  overcomplications created by the industry itself. That’s a topic for another
  day.</p>

<h2 id="some-thoughts--opinions">Some Thoughts / Opinions</h2>

<p>While thinking about what to write for this, one of the hardest parts was
  trying to figure out what was worth including. A bunch of stuff got tossed
  out, but in the end I still ended up settling on five things.</p>

<p>The first three try to convey the ways in which I believe us technologists fit
  into healthcare and what our responsibilities are beyond just shipping code.
  The last two attempt to discuss some examples of the more frustrating things
  you can run into.</p>

<h3 id="be-disruptive-but-minimize-disruption">Be Disruptive, But Minimize Disruption</h3>

<p>I couldn’t help it with the corny section title, sorry.</p>

<p>Tech people love to “disrupt” and “revolutionize” things – at least that’s
  what a lot of places claim to be doing most of the time. But in healthcare,
  “moving fast and breaking things” runs the risk of causing bigger problems
  than users just being mildly inconvenienced by our iterations.</p>

<p>Breaking scheduling for a surgeon isn’t the same as breaking a feature in a
  social media app. Iterating rapidly on your UX might be fine for an
  e-commerce site, but it’s far from ideal when a nurse is trying to update
  patient information and the application keeps changing on them.</p>

<p>For physicians, software issues – whether a bug, bad UI, or poor performance –
  make an already difficult job even harder. Slow or inefficient software can
  delay them during patient visits, in turn affecting every other patient they
  need to see that day.</p>

<p>Of course, no one is going to build perfect software – that’s not the goal.
  Instead, I am arguing that as solution builders, we have a duty to minimize
  our potential to harm our users’ ability to perform their roles in healthcare.</p>

<h3 id="respect-patient-information-like-its-your-own">Respect Patient Information Like It’s Your Own</h3>

<p>Working on healthcare tech solutions usually means dealing with patient data
  at some point. My approach to dealing with it is simple: treat patient data
  like it’s your own. Don’t do anything with it that you wouldn’t want someone
  to do with your own data, even if it might technically be fine under HIPAA.</p>

<p>This mindset is not only respectful to patients but also reduces the likelihood
  of HIPAA violations. Ask yourself (HIPAA aside):</p>

<ul>
  <li>Do I want my name and address in someone’s slideshow?</li>
  <li>Would I want my social security number in a screenshot on some Trello card?</li>
  <li>How would I feel if my personal information was hardcoded into a unit test and
pushed to GitHub?</li>
  <li>Would I be okay with screenshots of my medical history being shared in random
threads?</li>
</ul>

<p>There is also the risk that all this information ends up in a data breach.
  The danger is always there, but sprinkling PHI around needlessly and / or not
  properly storing it increases the odds that something ends up going wrong.
  A data breach would obviously be catastrophic for your business, but it’s
  usually the patients that end up with the shortest end of the stick.</p>

<p>Imagine you’re a patient, and some tech company you’ve never heard of
  experiences a data breach including names, addresses, social security numbers,
  and more. One of your providers happens to be a customer of theirs. Suddenly,
  you’re facing identity theft, scam calls, and other fallout – all while
  you could also be trying to deal with your health issues. Feels bad.</p>

<h3 id="not-everything-needs-tech">Not Everything Needs Tech</h3>

<p>Tech people are always gonna try and tech, I know. However, not every challenge
  needs a line of code to solve it. This probably applies to most industries,
  but it is especially true in healthcare, where many of the hardest problems
  are inherently human. Similarly, trying to remove people from the equation
  (e.g., automation) isn’t always the best solution, and it could even end up
  leaving you worse off.</p>

<p>One example that stands out to me is the growing number of solutions focused on
  minimizing, if not eliminating, face-to-face interactions between providers
  and patients. I’m not saying telehealth is bad – it’s not. There are tons of
  things you used to have to visit a doctor’s office for that can now be handled
  over the phone. That’s awesome! My concern is with solutions that aim to
  replace all in-person interactions between patients and providers.</p>

<p>As it turns out, many of these places are missing the mark due to something
  pretty obvious: patients generally prefer direct interactions with their
  provider when it comes to something as important as their health. Providers,
  likewise, value the opportunity to work directly with their patients.</p>

<p>My current company has remained cognizant of this for our physical therapy
  business, and it’s proven successful. We’re fortunate to receive a lot of
  positive feedback from both patients and physical therapists, a good amount of
  which has nothing to do with the software solutions we’ve built.</p>

<p>PTs enjoy working with patients 1:1 for an entire session instead of
  juggling multiple patients as they often do in a clinic setting. Similarly,
  patients appreciate having a provider dedicated to them for the full session
  rather than being handed a list of exercises and left on their own.</p>

<p>Our success lies in how we use technology to facilitate and improve the
  in-person physical therapy experience, not replace it. By focusing on enabling
  meaningful interactions rather than removing them, we’ve built a model that
  works to the benefit of both providers and patients.</p>

<h3 id="healthcare-runs-on-faxes">Healthcare Runs on Faxes</h3>

<p>It’s 2024, and you’d think we’d be done with the laborious paper-pushing fax
  workflows of the past. In many industries, that’s true … but not in
  healthcare! Even organizations using tech solutions daily still rely on fax.</p>

<p>The obvious question is why? We know modern tech solutions can replace paper
  and fax workflows in theory, so why hasn’t it happened everywhere? The answer
  is complicated.</p>

<p>Let’s say you’ve convinced part of a healthcare organization to adopt your
  shiny new software product that beautifully captures their key workflows.
  Everything looks great until someone points out that the old process also
  involved sending faxes to various internal and external recipients – billing,
  insurance, others – depending on the circumstances. Your software didn’t
  account for this, and apparently, there is no other option. Faxing is
  non-negotiable.</p>

<p>So, what do you do? You scream into the void, then discover that to both your
  horror and relief, there are services that provide APIs for faxing. You can
  even set up a number to receive faxes and have them sent directly to your
  application. Begrudgingly, you add functionality to your app for sending and
  receiving faxes, helping at least one team move their fax machine “to the
  cloud”.</p>

<p>The takeaway here is that healthcare professionals aren’t stuck sending faxes
  because they enjoy it. The problem is that, no matter how great your solution
  is for some individual organization, they still need to exchange information
  with countless others who might literally only use their fax machine as their
  main form of sending and receiving information. Whether it’s due to leadership
  not prioritizing tech adoption or straight-up reluctance – “this works fine
  for me, I don’t need your fancy application!” – fax machines remain the
  lowest common denominator.</p>

<h3 id="pay-to-play">Pay to Play</h3>

<p>Healthcare tech is unfortunately one of those industries where if you really
  want to jump in the game, you have to have the money to do it. It’s a real
  shame because as I have mentioned before, there are tons of problems that are
  meaningful, interesting, and solvable with software. There are also a ton of
  opportunities to disrupt large industry players that have grown complacent and
  are now contributing to more of the inefficiencies and waste that plague our
  healthcare system. Sadly, though, there are just too many things making the
  barrier to entry way too high for a lot of potential newcomers.</p>

<p>Why is it so expensive? Some argue it’s the regulations, others might argue
  it’s price gouging. It’s probably a bit of both. The regulations do require
  you to do certain things which ultimately cost money. At the same time, the
  price points for some third parties can be outrageous, oftentimes for no clear
  reason. A general rule of thumb is to add one or two more zeroes to what a
  reasonable person would expect to pay.</p>

<p>On the other hand, there are also a handful of industry giants that gatekeep
  things you might want or even need access to in order for your business to
  function. They tend to charge you for them too because, well, they can.</p>

<p>For example: there are organizations out there that legitimately will not even
  consider buying into a software solution if it doesn’t have a plugin for
  whatever big name EHR system they use (I’m trying not to name drop because I
  don’t want to get myself in trouble). From their perspective it makes sense:
  keeping everything unified under a single system allows the organization to
  standardize and focus on becoming efficient within that system. Introducing
  another system just causes friction. You can do what they are asking, but
  first you have to pay the toll: Big EHR wants wants their cut for the
  <em>privilege</em> of working your product into their system. So … how bad do you
  want the customer?</p>

<p>Big EHR loves this arrangement – they get more money, you build and maintain
  things that are pretty much additional service offerings for their own system,
  and oh they get a cut of your revenue if you ever end up charging money for
  your app within their marketplace.</p>

<p>There are a ton of other things, but I’m sure you get the point. It’s a sad
  state of things, but who knows? Anything can happen!</p>

<h2 id="what-now">What Now?</h2>

<p>I don’t really ever write anything, but hopefully there were at least some
  interesting things up in there. Maybe at some point I’ll go into some of the
  crazy stuff, we’ll see.</p>

<p>I am likely to remain in healthtech for the foreseeable future, regardless of
  how frustrating it gets. As some of my friends and I like to joke: once
  you’re in here, you’re never getting out. At the end of the day, it’s fun to
  work on things that will hopefully end up making some aspects of this crazy
  system a little better.</p>]]></content><author><name></name></author><category term="tech" /><category term="healthtech" /><summary type="html"><![CDATA[Introduction]]></summary></entry></feed>