<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Backend on Joel Hanson</title>
    <link>https://joelhanson.com/tags/backend/</link>
    <description>Recent content in Backend on Joel Hanson</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en</language>
    <managingEditor>joelhanson025@gmail.com (Joel Hanson)</managingEditor>
    <webMaster>joelhanson025@gmail.com (Joel Hanson)</webMaster>
    <copyright>&amp;copy; Joel Hanson</copyright>
    <lastBuildDate>Sun, 16 Nov 2025 17:00:00 +0530</lastBuildDate><atom:link href="https://joelhanson.com/tags/backend/index.xml" rel="self" type="application/rss+xml" />
    
    <item>
      <title>From Celery to Restate: Rethinking Async Tasks in Django</title>
      <link>https://joelhanson.com/posts/24-from-celery-to-restate-rethinking-async-tasks-in-django/</link>
      <pubDate>Sun, 16 Nov 2025 17:00:00 +0530</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/24-from-celery-to-restate-rethinking-async-tasks-in-django/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;The Celery Question&#xA;    &lt;div id=&#34;the-celery-question&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-celery-question&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;For years, when someone asked &amp;ldquo;How do I handle background tasks in Django?&amp;rdquo;, the answer was almost always &amp;ldquo;Use Celery&amp;rdquo;. And for good reason. Celery is mature, battle-tested, and has solved async task processing for countless Django applications. It has extensive documentation, a large ecosystem of plugins, and most Django developers have at least some experience with it.&lt;/p&gt;</description>
      
    </item>
    
    <item>
      <title>Adding Durable Execution to Flask Applications with Restate</title>
      <link>https://joelhanson.com/posts/23-adding-durable-execution-to-flask-with-restate/</link>
      <pubDate>Sun, 16 Nov 2025 16:00:00 +0530</pubDate>
      <author>joelhanson025@gmail.com (Joel Hanson)</author>
      <guid>https://joelhanson.com/posts/23-adding-durable-execution-to-flask-with-restate/</guid>
      <description>&lt;h2 class=&#34;relative group&#34;&gt;The Challenge of Reliable Background Operations&#xA;    &lt;div id=&#34;the-challenge-of-reliable-background-operations&#34; class=&#34;anchor&#34;&gt;&lt;/div&gt;&#xA;    &#xA;    &lt;span&#xA;        class=&#34;absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none&#34;&gt;&#xA;        &lt;a class=&#34;text-primary-300 dark:text-neutral-700 !no-underline&#34; href=&#34;#the-challenge-of-reliable-background-operations&#34; aria-label=&#34;Anchor&#34;&gt;#&lt;/a&gt;&#xA;    &lt;/span&gt;&#xA;    &#xA;&lt;/h2&gt;&#xA;&lt;p&gt;Building web applications with Flask is straightforward until you need to handle operations that can fail. Database operations timeout, external APIs become unavailable, and network connections drop. These failures are inevitable in production systems, yet handling them gracefully often requires significant engineering effort.&lt;/p&gt;</description>
      
    </item>
    
  </channel>
</rss>
