<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Erfan Kanani — Blog</title>
  <link>https://erfan-kanani.com/blog</link>
  <description>Writing on production ML, GenAI systems, AI agents, MLOps, and the engineering behind enterprise AI.</description>
  <language>en-us</language>
  <lastBuildDate>Tue, 19 May 2026 19:15:34 GMT</lastBuildDate>
  <atom:link href="https://erfan-kanani.com/feed.xml" rel="self" type="application/rss+xml" />
  <item>
    <title>Why we started using Spec Kit before letting agents touch the codebase</title>
    <link>https://erfan-kanani.com/blog/spec-kit</link>
    <guid isPermaLink="true">https://erfan-kanani.com/blog/spec-kit</guid>
    <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
    <description>A practical look at using GitHub Spec Kit in a real project — the problems it solved, how it changed AI-assisted development, and where it is too much process.</description>
    <category>ai</category>
    <category>agents</category>
    <category>software-engineering</category>
    <category>production</category>
    <category>spec-driven-development</category>
  </item>
  <item>
    <title>Deploying queue workers without losing a single message</title>
    <link>https://erfan-kanani.com/blog/zero-downtime-queue-deployments</link>
    <guid isPermaLink="true">https://erfan-kanani.com/blog/zero-downtime-queue-deployments</guid>
    <pubDate>Tue, 19 May 2026 00:00:00 GMT</pubDate>
    <description>A practical approach to zero-downtime deployments for Azure Function workers using Service Bus queue pausing — no blue-green slots, no dropped messages, no complex orchestration.</description>
    <category>azure</category>
    <category>service-bus</category>
    <category>deployment</category>
    <category>devops</category>
    <category>python</category>
  </item>
  <item>
    <title>Templating SQL with Jinja — what actually got better</title>
    <link>https://erfan-kanani.com/blog/jinja-sql</link>
    <guid isPermaLink="true">https://erfan-kanani.com/blog/jinja-sql</guid>
    <pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate>
    <description>A practical case study of templating SQL with Jinja in Python — the conditional clauses, IN-list expansion, reuse, and lint-tradeoff problems it solves in real data services.</description>
    <category>python</category>
    <category>sql</category>
    <category>jinja</category>
    <category>production</category>
    <category>data</category>
  </item>
  <item>
    <title>Why I reached for dependency-injector in production Python</title>
    <link>https://erfan-kanani.com/blog/dependency-injector</link>
    <guid isPermaLink="true">https://erfan-kanani.com/blog/dependency-injector</guid>
    <pubDate>Sun, 17 May 2026 00:00:00 GMT</pubDate>
    <description>A practical case study of the dependency-injector library — the lifecycle, testing, configuration, and provider-swap problems it solves in real Python services.</description>
    <category>python</category>
    <category>dependency-injection</category>
    <category>production</category>
    <category>ai</category>
  </item>
  <item>
    <title>Hello, world — and why I'm writing</title>
    <link>https://erfan-kanani.com/blog/hello-world</link>
    <guid isPermaLink="true">https://erfan-kanani.com/blog/hello-world</guid>
    <pubDate>Fri, 15 May 2026 00:00:00 GMT</pubDate>
    <description>An introduction to the blog — production ML, GenAI systems, and the engineering between the headlines.</description>
    <category>meta</category>
    <category>writing</category>
    <category>genai</category>
  </item>
</channel>
</rss>
