<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Backend on Muhammad Hassan Raza</title><link>https://mhassan.dev/categories/backend/</link><description>Recent content in Backend on Muhammad Hassan Raza</description><generator>Hugo</generator><language>en-US</language><lastBuildDate>Fri, 25 Sep 2026 10:00:00 +0500</lastBuildDate><atom:link href="https://mhassan.dev/categories/backend/index.xml" rel="self" type="application/rss+xml"/><item><title>I Shipped a Race Condition That Oversold Stock (And Other War Stories)</title><link>https://mhassan.dev/blog/war-stories-from-production/</link><pubDate>Wed, 08 Apr 2026 10:00:00 +0500</pubDate><guid>https://mhassan.dev/blog/war-stories-from-production/</guid><description>Two cashiers selling the last item, a chain that returned nothing, and a lock that only worked when both requests hit the same process. Bugs I shipped, and the unexciting fixes that held.</description></item><item><title>Polaris Performance Log: The Django Mistakes I Made First</title><link>https://mhassan.dev/blog/optimizing-django-performance/</link><pubDate>Mon, 10 Feb 2025 10:00:00 +0500</pubDate><guid>https://mhassan.dev/blog/optimizing-django-performance/</guid><description>Refunds that queried once per line item, stock updated one row at a time, and signals that recalculated ledgers nobody asked about. What I changed in Polaris, and what I&amp;#39;d tell myself earlier.</description></item></channel></rss>