<?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: Quinton Juma</title>
    <description>The latest articles on Forem by Quinton Juma (@qquinton).</description>
    <link>https://forem.com/qquinton</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%2F3728121%2F9ca56b5d-1cf3-4a82-aca6-f17b9da53080.jpg</url>
      <title>Forem: Quinton Juma</title>
      <link>https://forem.com/qquinton</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/qquinton"/>
    <language>en</language>
    <item>
      <title>The Democratization of Wealth: Why Ziidi Trader is a Long Time Coming</title>
      <dc:creator>Quinton Juma</dc:creator>
      <pubDate>Wed, 11 Mar 2026 07:37:35 +0000</pubDate>
      <link>https://forem.com/qquinton/the-democratization-of-wealth-why-ziidi-trader-is-a-long-time-coming-5di2</link>
      <guid>https://forem.com/qquinton/the-democratization-of-wealth-why-ziidi-trader-is-a-long-time-coming-5di2</guid>
      <description>&lt;p&gt;The launch of Ziidi Trader marks a significant shift in Kenya’s financial landscape. For many, it feels like a long time coming, a moment where the high-stakes world of investing finally meets the accessibility of a mobile phone.&lt;/p&gt;

&lt;p&gt;In today’s fast-paced world, financial tools are no longer a luxury; they are a necessity. For years, professional investing felt like a "members-only" club, reserved for those with deep pockets and traditional brokerage accounts.&lt;/p&gt;

&lt;p&gt;With the full rollout of Ziidi by Safaricom and the Nairobi Securities Exchange (NSE), that barrier is finally coming down.&lt;/p&gt;

&lt;p&gt;While this is a massive leap forward, we must acknowledge that this is new territory for many Kenyans. Moving from traditional saving to digital securities requires a significant shift in mindset and financial literacy.&lt;/p&gt;

&lt;p&gt;It was a long time coming, but the real test lies ahead. We now have to wait and see if the infrastructure can truly accommodate everyone. As millions of new retail investors enter the market, the focus will shift to how the system handles the scale, the risks, and the need for continuous investor education.&lt;/p&gt;

&lt;p&gt;This is more than just an app launch; it’s an experiment in mass financial inclusion. Let's see how it shapes our economy.&lt;/p&gt;

&lt;h1&gt;
  
  
  Ziidi #FinancialInclusion #NSE #Safaricom #Investing #Kenya #Fintech #WealthCreation
&lt;/h1&gt;

</description>
    </item>
    <item>
      <title>Things I Wish I Knew Before My First Go Project</title>
      <dc:creator>Quinton Juma</dc:creator>
      <pubDate>Mon, 09 Mar 2026 09:37:14 +0000</pubDate>
      <link>https://forem.com/qquinton/things-i-wish-i-knew-before-my-first-go-project-hbf</link>
      <guid>https://forem.com/qquinton/things-i-wish-i-knew-before-my-first-go-project-hbf</guid>
      <description>&lt;p&gt;Why I Stopped Using "Flat" Project Structures in Go&lt;/p&gt;

&lt;p&gt;When I first started with Go, I loved how simple it was. I put my main.go, my database logic, and my HTML templates all in the root folder. It worked! Until I had more than five files. Then, it became a scavenger hunt.&lt;/p&gt;

&lt;p&gt;If you are a junior developer, you’ve probably felt that "folder fatigue." Here is how I transitioned to a Standard Go Project Layout and why it changed my productivity.&lt;br&gt;
a. The "Cmd" vs. "Internal" Divide&lt;/p&gt;

&lt;p&gt;In Go, the separation of concerns isn't just a suggestion; the compiler actually helps you enforce it.&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cmd/: This is for your entry points. If you have a web server and a CLI tool, they each get a subfolder here. No logic goes here—only "wiring" things together.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;And then we have:&lt;br&gt;
    internal/: This is the secret sauce. Code inside internal/ cannot be imported by other projects. It’s the perfect place for your private business logic.&lt;/p&gt;

&lt;p&gt;b. The "Dependency Injection" Habit&lt;/p&gt;

&lt;p&gt;I used to initialize my database inside every function that needed it. Don't do this. It makes testing impossible because you can't run your code without a live database.&lt;/p&gt;

&lt;p&gt;Instead, "inject" your dependencies through a constructor:&lt;/p&gt;

&lt;p&gt;type Server struct {&lt;br&gt;
    db *sql.DB&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;func NewServer(db *sql.DB) *Server {&lt;br&gt;
    return &amp;amp;Server{db: db}&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Now, when I write a unit test, I can pass in a mock database instead of the real thing. My tests went from taking 5 seconds to 5 milliseconds.&lt;br&gt;
c. Avoiding the utils Package&lt;/p&gt;

&lt;p&gt;We’ve all created a utils or common package where we dump everything from string formatting to math helpers. In Go, this usually leads to circular dependencies (where Package A imports Package B, which imports Package A), and your code won't compile.&lt;/p&gt;

&lt;p&gt;You can fix this by naming your packages based on what they provide, not what they are. Instead of utils.ValidateEmail(), use auth.ValidateEmail().&lt;/p&gt;

</description>
      <category>architecture</category>
      <category>beginners</category>
      <category>go</category>
      <category>productivity</category>
    </item>
  </channel>
</rss>
