<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Andrew Oduola: Blog</title>
    <link>https://andrewoduola.online/blog</link>
    <description>Things I learned building backends, mostly the hard way.</description>
    <language>en</language>
    <atom:link href="https://andrewoduola.online/feed.xml" rel="self" type="application/rss+xml"/>
    <lastBuildDate>Tue, 11 Aug 2026 21:00:27 GMT</lastBuildDate>
    <item>
      <title>Understanding the Request–Response Model</title>
      <link>https://andrewoduola.online/blog/understanding-the-request-response-model</link>
      <guid isPermaLink="true">https://andrewoduola.online/blog/understanding-the-request-response-model</guid>
      <description>The Request–Response model is the foundation of how clients and servers communicate across the web. In this article, we’ll break down how requests and responses work, what happens between them, where the model is used, and when it may not be the best approach.</description>
      <pubDate>Tue, 11 Aug 2026 21:00:27 GMT</pubDate>
      <author>andrewoduola@gmail.com (Andrew Oduola)</author>
      <category>Web Development</category>
    </item>
    <item>
      <title>Why I stopped putting a TTL on cached API responses</title>
      <link>https://andrewoduola.online/blog/why-i-stopped-putting-a-ttl-on-cached-api-responses</link>
      <guid isPermaLink="true">https://andrewoduola.online/blog/why-i-stopped-putting-a-ttl-on-cached-api-responses</guid>
      <description>A five minute cache means five minutes of wrong answers. Versioned keys gave me a better trade, and then taught me a lesson about counters.</description>
      <pubDate>Tue, 11 Aug 2026 20:26:50 GMT</pubDate>
      <author>andrewoduola@gmail.com (Andrew Oduola)</author>
      <category>Django</category>
    </item>
  </channel>
</rss>
