<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Hasan Misbah, Blog</title>
    <link>https://misbah.co/blog</link>
    <description>Notes on revenue-critical code, plugin modernization, founder engineering, and products that last.</description>
    <language>en</language>
    <lastBuildDate>Mon, 13 Jul 2026 00:00:00 GMT</lastBuildDate>
    <atom:link href="https://misbah.co/rss.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Cost cutting is motion, not a strategy</title>
      <link>https://misbah.co/blog/cost-cutting-is-motion-not-a-strategy</link>
      <guid isPermaLink="true">https://misbah.co/blog/cost-cutting-is-motion-not-a-strategy</guid>
      <description>Cutting costs moves the numbers, not the company. The long game goes to people who stay to hold context and balance operators with entrepreneurs.</description>
      <pubDate>Mon, 13 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Store money as integer cents, never a float</title>
      <link>https://misbah.co/blog/store-money-as-integer-cents-never-a-float</link>
      <guid isPermaLink="true">https://misbah.co/blog/store-money-as-integer-cents-never-a-float</guid>
      <description>An opinionated rule for money code: store amounts as integer minor units, never a binary float, and never divide a total to get its parts.</description>
      <pubDate>Sat, 11 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The refund path is where I read a codebase&apos;s soul</title>
      <link>https://misbah.co/blog/the-refund-path-is-where-i-read-a-codebases-soul</link>
      <guid isPermaLink="true">https://misbah.co/blog/the-refund-path-is-where-i-read-a-codebases-soul</guid>
      <description>Checkout code is easy. Refunds, proration, and failed webhooks are where I can tell if a payments codebase was built by someone senior.</description>
      <pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>You don&apos;t rewrite a plugin with a big install base</title>
      <link>https://misbah.co/blog/you-dont-rewrite-a-plugin-with-a-big-install-base</link>
      <guid isPermaLink="true">https://misbah.co/blog/you-dont-rewrite-a-plugin-with-a-big-install-base</guid>
      <description>How I evolve a WordPress plugin with a large install base without breaking users mid-update: a strangler-fig approach with real PHP and version gates.</description>
      <pubDate>Wed, 01 Jul 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>The first hire who touches your billing should be boring</title>
      <link>https://misbah.co/blog/the-first-hire-who-touches-your-billing-should-be-boring</link>
      <guid isPermaLink="true">https://misbah.co/blog/the-first-hire-who-touches-your-billing-should-be-boring</guid>
      <description>The engineer who owns revenue early should reach for idempotency, audit logs, and reconciliation by reflex. How to screen for it and reject the rest.</description>
      <pubDate>Wed, 24 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Boring code is a feature you ship to your future self</title>
      <link>https://misbah.co/blog/boring-code-is-a-feature-you-ship-to-your-future-self</link>
      <guid isPermaLink="true">https://misbah.co/blog/boring-code-is-a-feature-you-ship-to-your-future-self</guid>
      <description>Boring code wins on systems that have to last. Why the durable choice looks unimpressive, how to defend it in review, and when to delete clever code.</description>
      <pubDate>Wed, 17 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Six payments edge cases that bite at 2am</title>
      <link>https://misbah.co/blog/six-payments-edge-cases-that-bite-at-2am</link>
      <guid isPermaLink="true">https://misbah.co/blog/six-payments-edge-cases-that-bite-at-2am</guid>
      <description>Partial refunds, duplicate webhooks, currency rounding, retries, chargebacks, and clock skew: the payments edge cases that page you, with the fix for each.</description>
      <pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Shipping a feature into a five-year-old plugin</title>
      <link>https://misbah.co/blog/shipping-a-feature-into-a-five-year-old-plugin</link>
      <guid isPermaLink="true">https://misbah.co/blog/shipping-a-feature-into-a-five-year-old-plugin</guid>
      <description>Real tactics for shipping into an old WordPress plugin: feature flags, backward-compatible DB migrations, and staged rollouts across a live install base.</description>
      <pubDate>Wed, 03 Jun 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Three questions I ask before I write billing code</title>
      <link>https://misbah.co/blog/three-questions-before-i-write-billing-code</link>
      <guid isPermaLink="true">https://misbah.co/blog/three-questions-before-i-write-billing-code</guid>
      <description>Three questions to answer before you build billing: what is the source of truth, what happens when this runs twice, and how do we reconstruct it later.</description>
      <pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Subscriptions are licensing that bills on time</title>
      <link>https://misbah.co/blog/subscriptions-are-licensing-that-bills-on-time</link>
      <guid isPermaLink="true">https://misbah.co/blog/subscriptions-are-licensing-that-bills-on-time</guid>
      <description>A subscription is a state machine bolted to a billing clock. Dunning, grace periods, and proration are where it leaks money. Here is how I model each.</description>
      <pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Backward-compatible migrations on a big install base</title>
      <link>https://misbah.co/blog/backward-compatible-migrations-on-an-install-base</link>
      <guid isPermaLink="true">https://misbah.co/blog/backward-compatible-migrations-on-an-install-base</guid>
      <description>The migration rules I hold on a live WordPress install base: additive columns only, no destructive deploys, version gates, and a rollback plan.</description>
      <pubDate>Wed, 13 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Build vs buy for billing: when Stripe is enough</title>
      <link>https://misbah.co/blog/build-vs-buy-for-billing</link>
      <guid isPermaLink="true">https://misbah.co/blog/build-vs-buy-for-billing</guid>
      <description>For most early products a hosted processor like Stripe is enough. It stops at four: global tax, usage-based pricing, marketplaces, and provider limits.</description>
      <pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Why I run uptime checks at the edge, not one server</title>
      <link>https://misbah.co/blog/why-i-run-uptime-checks-at-the-edge</link>
      <guid isPermaLink="true">https://misbah.co/blog/why-i-run-uptime-checks-at-the-edge</guid>
      <description>A single VPS in one region tells you about its own path, not your users&apos;. Here is how I built edge uptime checks on Cloudflare Workers and why.</description>
      <pubDate>Wed, 29 Apr 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Supporting a plugin across WordPress versions you don&apos;t own</title>
      <link>https://misbah.co/blog/supporting-a-plugin-across-wordpress-versions</link>
      <guid isPermaLink="true">https://misbah.co/blog/supporting-a-plugin-across-wordpress-versions</guid>
      <description>A compatibility strategy for WordPress and PHP versions you don&apos;t control: function_exists and capability checks, graceful degradation, a support matrix.</description>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
    </item>
    <item>
      <title>Auth mistakes in early products, and how to fix each</title>
      <link>https://misbah.co/blog/authentication-mistakes-in-early-products</link>
      <guid isPermaLink="true">https://misbah.co/blog/authentication-mistakes-in-early-products</guid>
      <description>The same auth bugs show up in early products: session fixation, weak hashing, no rate limiting, tokens in the wrong place. Here is the fix for each.</description>
      <pubDate>Wed, 15 Apr 2026 00:00:00 GMT</pubDate>
    </item>
  </channel>
</rss>