<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Alan Njogu</title>
    <link>/</link>
    <description>Recent content on Alan Njogu</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-us</language>
    <lastBuildDate>Mon, 10 Feb 2025 00:00:00 +0000</lastBuildDate><atom:link href="/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>let there be jitterbug - part 1</title>
      <link>/posts/let-there-be-jitterbug-pt-1/</link>
      <pubDate>Thu, 28 May 2026 11:00:12 +0300</pubDate>

      <guid>/posts/let-there-be-jitterbug-pt-1/</guid>
      <description>&lt;h2 id=&#34;the-why&#34;&gt;the why:&lt;/h2&gt;
&lt;p&gt;I am a software engineer, mainly working on the backend, and I&amp;rsquo;ve been accustomed to writing APIs and Developer CLI tools for a while.
Don&amp;rsquo;t get me wrong, I love working in the backend mines, it&amp;rsquo;s fun, it&amp;rsquo;s engaging, I excel in this part of building scalable backends. But, it does get less engaging when all you do is build CRUD apps (just kidding, APIs are not just CRUD apps, a lot goes into building scalable APIs and backend systems) for the better part of your day.&lt;/p&gt;</description>
      <content>&lt;h2 id=&#34;the-why&#34;&gt;the why:&lt;/h2&gt;
&lt;p&gt;I am a software engineer, mainly working on the backend, and I&amp;rsquo;ve been accustomed to writing APIs and Developer CLI tools for a while.
Don&amp;rsquo;t get me wrong, I love working in the backend mines, it&amp;rsquo;s fun, it&amp;rsquo;s engaging, I excel in this part of building scalable backends. But, it does get less engaging when all you do is build CRUD apps (just kidding, APIs are not just CRUD apps, a lot goes into building scalable APIs and backend systems) for the better part of your day.&lt;/p&gt;
&lt;p&gt;I write a lot of Go, and I wanted to dig a little bit deeper into what CLIs can actually do, beyond just wrapping external APIs.
That&amp;rsquo;s how I stumbled into interacting with the Linux Kernel through eBPF &lt;sup&gt;&lt;a href=&#34;https://ebpf.io/what-is-ebpf/&#34;&gt;[?]&lt;/a&gt;&lt;/sup&gt;. A genuinely impressive piece of technology. The more I read about it, the more I wanted to build something real with it.&lt;/p&gt;
&lt;h2 id=&#34;the-what&#34;&gt;the what:&lt;/h2&gt;
&lt;p&gt;As a beginner project into this new tech, I am working on a network chaos engineering tool.
I want to build a simple CLI tool that might help an engineer understand how their products behave when the network isn’t.
You experiment on a running system to build confidence it will effectively tolerate failures (network failures).&lt;/p&gt;
&lt;h2 id=&#34;the-how&#34;&gt;the how:&lt;/h2&gt;
&lt;p&gt;This CLI tool will leverage eBPF (extended Berkeley Packet Filter) &lt;sup&gt;&lt;a href=&#34;https://docs.cilium.io/en/latest/reference-guides/bpf/index.html&#34;&gt;[?]&lt;/a&gt;&lt;/sup&gt; and Linux Traffic Control (TC) &lt;sup&gt;&lt;a href=&#34;https://tldp.org/HOWTO/Traffic-Control-HOWTO/intro.html&#34;&gt;[?]&lt;/a&gt;&lt;/sup&gt; to inject realistic network conditions directly into the local development loop.
The Go CLI binary will compile and load an eBPF program (written in C) into the kernel&amp;rsquo;s network interface.&lt;/p&gt;

&lt;img src=&#34;/images/face.png&#34;  alt=&#34;damn&#34;  class=&#34;left&#34;   width=&#34;300&#34;   /&gt;


&lt;p&gt;&lt;em&gt;man I haven&amp;rsquo;t written any C code in the longest&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Anyway, the eBPF program will dynamically inject random packet drops, simulate high-jitter delays, and artificial TCP connection drops that exactly mimic a user&amp;rsquo;s network status in different conditions (congested-wifi, deep-rural, cellular-5g e.t.c). This will force the backend systems to prove they can survive real-world network infrastructure before deploying to production.&lt;/p&gt;
&lt;p&gt;More coming soon!&lt;/p&gt;
</content>
    </item>
    
    <item>
      <title>Flow State</title>
      <link>/posts/flow-state/</link>
      <pubDate>Thu, 20 Feb 2025 09:08:28 +0300</pubDate>

      <guid>/posts/flow-state/</guid>
      <description>&lt;h1 id=&#34;flow-state-where-every-developer-should-strive-to-be&#34;&gt;Flow State: Where Every Developer Should Strive to Be&lt;/h1&gt;
&lt;p&gt;In the fast-paced world of software development, there’s a sweet spot where productivity peaks, creativity flows effortlessly, and work feels almost like play. That sweet spot is called the Flow State — a psychological concept that developers (and honestly, anyone) should strive to reach. But what exactly is it, and why does it matter so much for programming? Let’s dive in.&lt;/p&gt;</description>
      <content>&lt;h1 id=&#34;flow-state-where-every-developer-should-strive-to-be&#34;&gt;Flow State: Where Every Developer Should Strive to Be&lt;/h1&gt;
&lt;p&gt;In the fast-paced world of software development, there’s a sweet spot where productivity peaks, creativity flows effortlessly, and work feels almost like play. That sweet spot is called the Flow State — a psychological concept that developers (and honestly, anyone) should strive to reach. But what exactly is it, and why does it matter so much for programming? Let’s dive in.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;what-is-the-flow-state&#34;&gt;What Is the Flow State?&lt;/h2&gt;
&lt;p&gt;The Flow State is that magical moment when you’re so immersed in a task that time seems to vanish. Coined by psychologist Mihaly Csikszentmihalyi &lt;sup&gt;[&lt;a href=&#34;https://en.wikipedia.org/wiki/Mihaly_Csikszentmihalyi&#34;&gt;?&lt;/a&gt;]&lt;/sup&gt;, it happens when your skills perfectly balance the challenge of what you’re working on. Too much challenge with too little skill? That’s anxiety creeping in. Too little challenge with high skills? Hello, boredom. The Flow State sits right in the middle—a place of deep focus, energy, and peak performance.&lt;/p&gt;
&lt;hr&gt;
&lt;p&gt;The above diagram illustrates the relationship between an individual&amp;rsquo;s skill level and the challenge level of a task, and how these factors influence their psychological state. The diagram is plotted on a graph with two axes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The vertical axis represents &amp;ldquo;Challenge,&amp;rdquo; ranging from low (at the bottom) to high (at the top).&lt;/li&gt;
&lt;li&gt;The horizontal axis represents &amp;ldquo;Skills,&amp;rdquo; ranging from low (on the left) to high (on the right).&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The graph is divided into several zones, each labeled with a different psychological state, depending on the balance or imbalance between challenge and skill:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Flow State (center diagonal band)&lt;/strong&gt;: This is the optimal state where skills and challenges are high and well-matched. It’s a state of complete immersion, focus, and enjoyment in an activity, often described as being &amp;ldquo;in the zone.&amp;rdquo;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Anxiety (top-left)&lt;/strong&gt;: This occurs when the challenge is high, but the individual&amp;rsquo;s skills are low. The person feels overwhelmed or stressed due to the difficulty of the task relative to their abilities.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Fear of Failure (upper-left corner)&lt;/strong&gt;: A more intense version of anxiety, this happens when the challenge is extremely high and skills are very low, leading to significant fear or panic.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Boredom (bottom-right)&lt;/strong&gt;: This occurs when skills are high, but the challenge is low. The task feels too easy, leading to disinterest or lack of engagement.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Loss of Interest (far right)&lt;/strong&gt;: An extension of boredom, this happens when skills are very high and the challenge is very low, causing the individual to lose motivation or engagement entirely.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Apathy (bottom-left)&lt;/strong&gt;: This is the state where both skills and challenges are low. The individual feels indifferent or unmotivated because the task is neither engaging nor demanding.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Doubt (middle-left)&lt;/strong&gt;: This occurs when challenges are moderately high, but skills are still relatively low, leading to uncertainty or hesitation.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Nostalgia (bottom-right, near boredom)&lt;/strong&gt;: This unique addition suggests a reflective or sentimental state that might occur when skills are high but challenges are low, possibly reminiscing about past challenges or experiences.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The goal is simple: aim for that central zone where you’re fully engaged and firing on all cylinders.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;why-flow-matters-for-developers&#34;&gt;Why Flow Matters for Developers&lt;/h2&gt;
&lt;p&gt;For developers, the Flow State isn’t just a buzzword—it’s a superpower. Coding is a unique blend of problem-solving, creativity, and persistence, often requiring hours of uninterrupted focus. When you’re in flow:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Productivity Skyrockets: You’re not just churning out lines of code; you’re solving problems efficiently and elegantly.&lt;/li&gt;
&lt;li&gt;Creativity Unleashes: Those “aha!” moments—new algorithms, cleaner architectures—come naturally.&lt;/li&gt;
&lt;li&gt;Satisfaction Soars: There’s a deep sense of fulfillment when you’re lost in a project you love.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Think back to a time when you were debugging a stubborn bug or crafting a sleek new feature, and the hours just melted away. That’s flow—and it’s where the best work happens.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;how-to-get-into-the-flow-state&#34;&gt;How to Get Into the Flow State&lt;/h2&gt;
&lt;p&gt;The good news? Flow isn’t random. You can cultivate it with the right approach. Here are some practical tips tailored for developers:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Set Clear Goals: Vague tasks like “work on the app” won’t cut it. Try “finish the user authentication module by noon” instead. Clarity fuels focus.&lt;/li&gt;
&lt;li&gt;Kill Distractions: Silence Slack pings, close irrelevant tabs, and put your phone on Do Not Disturb. Flow thrives in uninterrupted space.&lt;/li&gt;
&lt;li&gt;Balance Challenge and Skill: Pick tasks that stretch you but don’t break you. Too easy? Refactor or optimize. Too hard? Break it into smaller chunks or brush up on the basics.&lt;/li&gt;
&lt;li&gt;Block Off Deep Work Time: Reserve 60–90 minutes for pure coding—no meetings, no emails. Protect this time like it’s gold.&lt;/li&gt;
&lt;li&gt;Celebrate Progress: Finishing a function or squashing a bug? Take a second to savor it. Small wins keep the momentum going.&lt;/li&gt;
&lt;/ol&gt;
&lt;hr&gt;
&lt;h2 id=&#34;flow-in-action-a-real-world-example&#34;&gt;Flow in Action: A Real-World Example&lt;/h2&gt;
&lt;p&gt;Take Linus Torvalds, the mastermind behind Linux. He’s famous for losing himself in code for hours, a classic sign of flow. That kind of focus helped him build and sustain one of the most impactful open-source projects ever. You don’t need to be a tech titan to tap into this—flow is within reach for any developer willing to chase it.&lt;/p&gt;
&lt;hr&gt;
&lt;h2 id=&#34;your-flow-challenge&#34;&gt;Your Flow Challenge&lt;/h2&gt;
&lt;p&gt;Next time you fire up your IDE, ask yourself: &lt;em&gt;Am I setting myself up for flow?&lt;/em&gt; Tweak your environment or task until the challenge feels exciting but doable. Notice what pulls you out—Slack notifications? A noisy room?—and minimize it.
The Flow State isn’t reserved for the elite. It’s a mindset and a practice that can elevate your coding from good to great. Strive for it, and watch how it transforms your work—and maybe even how you feel about it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What’s your trick for getting into flow? Drop it in the comments—I’d love to hear!&lt;/strong&gt;&lt;/p&gt;
</content>
    </item>
    
  </channel>
</rss>
