<?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>Forem: Dani Sam</title>
    <description>The latest articles on Forem by Dani Sam (@voidhyr).</description>
    <link>https://forem.com/voidhyr</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%2F3887746%2F8ac56a52-a779-4482-a707-e5775b0e0dde.jpeg</url>
      <title>Forem: Dani Sam</title>
      <link>https://forem.com/voidhyr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/voidhyr"/>
    <language>en</language>
    <item>
      <title>My load balancer worked. That's what made me uncomfortable.</title>
      <dc:creator>Dani Sam</dc:creator>
      <pubDate>Mon, 20 Apr 2026 15:57:07 +0000</pubDate>
      <link>https://forem.com/voidhyr/my-load-balancer-worked-thats-what-made-me-uncomfortable-17gm</link>
      <guid>https://forem.com/voidhyr/my-load-balancer-worked-thats-what-made-me-uncomfortable-17gm</guid>
      <description>&lt;p&gt;I didn't expect a load balancer to make me uncomfortable.&lt;/p&gt;

&lt;p&gt;But here we are.&lt;/p&gt;

&lt;p&gt;I built one in Go for my MSc case study. Round-robin distribution, health checks, mutex for concurrency, timeout handling. It worked. Requests going in, responses coming out, servers behaving exactly as they should.&lt;/p&gt;

&lt;p&gt;I should have felt good about it.&lt;/p&gt;

&lt;p&gt;Instead I felt uneasy.&lt;/p&gt;

&lt;p&gt;I kept staring at &lt;code&gt;http.Get()&lt;/code&gt; thinking — I have no idea what's actually happening here. I know what it does. But I don't know what it's doing. TCP handshakes, socket creation, buffer management, kernel calls — Go handles all of it quietly, without ever asking if I understand any of it.&lt;/p&gt;

&lt;p&gt;For a while I told myself that's fine. That's the point of abstractions.&lt;/p&gt;

&lt;p&gt;But then I thought about what kind of engineer I actually want to be.&lt;/p&gt;

&lt;p&gt;Not just someone who can make things work. But someone who knows what's happening at the wire level. Someone who understands the ground beneath the tools they're standing on.&lt;/p&gt;

&lt;p&gt;And I realized — I wasn't that person yet.&lt;/p&gt;

&lt;p&gt;So I'm going back to the foundation. Learning C properly. Raw sockets, memory management, system calls — the actual ground floor of how networked systems work. This week I wrote my first TCP echo server in C with no libraries. Just &lt;code&gt;socket()&lt;/code&gt;, &lt;code&gt;bind()&lt;/code&gt;, &lt;code&gt;listen()&lt;/code&gt;, &lt;code&gt;accept()&lt;/code&gt; — and &lt;code&gt;strace&lt;/code&gt; to watch every syscall it made. It was slower. It was harder. It felt completely different from Go.&lt;/p&gt;

&lt;p&gt;It felt like understanding.&lt;/p&gt;

&lt;p&gt;This isn't about Go being wrong for the job. Go is excellent at what it does. It's about me not being okay with borrowed understanding anymore.&lt;/p&gt;

&lt;p&gt;There's a difference between standing on the ground and standing on someone else's abstraction of it. Both get the job done. Only one of them is actually yours.&lt;/p&gt;

&lt;p&gt;I'd rather build slower on solid ground.&lt;/p&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%2Fydvtkximoven2191kewy.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%2Fydvtkximoven2191kewy.png" alt="Load balancer terminal output showing round-robin forwarding and health checks" width="771" height="696"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The load balancer in action — round-robin distribution across three servers, health check catching a server going down and back up.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;If you want to see the code: &lt;a href="https://github.com/voidhyr/go-load-balancer" rel="noopener noreferrer"&gt;go-load-balancer on GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>go</category>
      <category>programming</category>
      <category>beginners</category>
      <category>career</category>
    </item>
    <item>
      <title>The Architects and the Tenants: Your Place in the AI-Driven Future of Code</title>
      <dc:creator>Dani Sam</dc:creator>
      <pubDate>Sun, 19 Apr 2026 19:51:34 +0000</pubDate>
      <link>https://forem.com/voidhyr/the-architects-and-the-tenants-your-place-in-the-ai-driven-future-of-code-37lp</link>
      <guid>https://forem.com/voidhyr/the-architects-and-the-tenants-your-place-in-the-ai-driven-future-of-code-37lp</guid>
      <description>&lt;p&gt;&lt;em&gt;Photo by &lt;a href="https://unsplash.com/@rn2917" rel="noopener noreferrer"&gt;reyna&lt;/a&gt; on Unsplash&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;AI can write code now. Pretty good code, honestly.&lt;/p&gt;

&lt;p&gt;And that should make you think — not panic, just think. Because if AI can generate the same Python script, the same REST API, the same web app that you spent weeks learning to build — what exactly are you bringing to the table?&lt;/p&gt;

&lt;p&gt;Most of us started at the surface. High-level languages, frameworks, tutorials. That's fine. That's how everyone starts. But a lot of people never leave the surface. They get comfortable there. And now AI lives there too, and it's faster than all of us.&lt;/p&gt;

&lt;p&gt;Below that surface though — something different is happening.&lt;/p&gt;

&lt;p&gt;Memory. Networking. Hardware. The kernel. The wire. This layer doesn't care about your framework or your prompt. It only speaks one language — understanding. Not usage. Not generation. Actual, hard-won understanding of why things work the way they do.&lt;/p&gt;

&lt;p&gt;Why does this packet drop halfway through a handshake. Why does this process eat memory at 3am. Why does this protocol fall apart under real load. AI can guess at these. The engineer who truly understands systems doesn't guess.&lt;/p&gt;

&lt;p&gt;I think about it this way. There are architects and there are tenants.&lt;/p&gt;

&lt;p&gt;Tenants use what's available. They ship features, use tools, move fast. Nothing wrong with that — the world needs tenants. But tenants are also one better model away from being automated.&lt;/p&gt;

&lt;p&gt;Architects build what the tools run on. They go below the abstraction on purpose. They understand the foundation that everyone else is standing on without realizing it. AI doesn't replace architects — it gives them better tools to build with.&lt;/p&gt;

&lt;p&gt;The surface is getting crowded. AI is making it more crowded every month. But the deeper layers — networking internals, systems programming, embedded hardware, protocol design — those are getting quieter. Because going deep is hard and slow and uncomfortable and most people won't do it.&lt;/p&gt;

&lt;p&gt;That's exactly why it matters.&lt;/p&gt;

&lt;p&gt;The future belongs to the people who understand what's happening below the abstraction. Not because they're anti-AI. But because they understand what AI is actually running on.&lt;/p&gt;

&lt;p&gt;Architect or tenant. The choice is still yours to make.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>career</category>
      <category>beginners</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
