<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Biyabot notes from the build</title>
    <link>https://biya.com.ng/blog</link>
    <description>Engineering write-ups from the team building chat-native payments in Nigeria.</description>
    <language>en</language>
    <atom:link href="https://biya.com.ng/blog/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Our default value was not a valid value</title>
      <link>https://biya.com.ng/blog/engineering/our-default-value-was-not-a-valid-value</link>
      <guid isPermaLink="true">https://biya.com.ng/blog/engineering/our-default-value-was-not-a-valid-value</guid>
      <description>A field defaulted to null. The list of allowed values did not include null. Every new merchant signup failed at the last step.</description>
      <pubDate>Sun, 29 Mar 2026 00:00:00 GMT</pubDate>
      <author>Fadoski</author>
    </item>
    <item>
      <title>The request never arrived, and the error message blamed the database</title>
      <link>https://biya.com.ng/blog/engineering/the-error-message-was-pointing-at-the-wrong-layer</link>
      <guid isPermaLink="true">https://biya.com.ng/blog/engineering/the-error-message-was-pointing-at-the-wrong-layer</guid>
      <description>Staff could not submit a payment request. The error pointed at MongoDB. The request had never reached MongoDB, or the backend, or the network.</description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <author>Fadoski</author>
    </item>
    <item>
      <title>Payments in a chat window: the four constraints that shape everything we build</title>
      <link>https://biya.com.ng/blog/engineering/payments-in-a-chat-window</link>
      <guid isPermaLink="true">https://biya.com.ng/blog/engineering/payments-in-a-chat-window</guid>
      <description>No app to download means no client state, no session, and no screen you control. Here is what that actually costs, and the three-outcome rule that took us longest to learn.</description>
      <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
      <author>Fadoski</author>
    </item>
    <item>
      <title>Our failover worked perfectly. That is how we missed a 100% failure rate.</title>
      <link>https://biya.com.ng/blog/engineering/failover-hid-a-total-outage</link>
      <guid isPermaLink="true">https://biya.com.ng/blog/engineering/failover-hid-a-total-outage</guid>
      <description>A provider rejected every data purchase we sent it for weeks. Every customer was served. Nothing alerted. The fix was one log line.</description>
      <pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate>
      <author>Fadoski</author>
    </item>
    <item>
      <title>One service talks to every provider. Our products get one kind of answer.</title>
      <link>https://biya.com.ng/blog/engineering/one-service-talks-to-every-provider</link>
      <guid isPermaLink="true">https://biya.com.ng/blog/engineering/one-service-talks-to-every-provider</guid>
      <description>Our products used to talk to every airtime, data, electricity and TV provider themselves, and each provider has its own login, its own plan names, its own status codes and its own idea of when to tell you the outcome. Now one service does all of that, and the products send it a request in their own words and get back a uniform answer.</description>
      <pubDate>Sun, 13 Sep 2026 00:00:00 GMT</pubDate>
      <author>Fadoski</author>
    </item>
  </channel>
</rss>