<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"><channel><title>Stateless</title><link>https://stateless.co/</link><description>A publication about the machinery under everyday software: the contracts between services, the queries behind a page, and the failures that only show up in production.</description><language>en-gb</language><item><title>409 vs 422: When to Use Which Status Code for a Rejected Request</title><link>https://stateless.co/409-vs-422-status-code/</link><guid isPermaLink="true">https://stateless.co/409-vs-422-status-code/</guid><description>As a developer, you&#x27;ve likely hit a code review where two hardworking colleagues spar over which HTTP status code to return for a rejected request. Is it 409 (Conflict) or 422…</description><category>APIs &amp; Protocols</category></item><item><title>413 Request Entity Too Large: The Four Limits You Have to Raise</title><link>https://stateless.co/413-request-entity-too-large/</link><guid isPermaLink="true">https://stateless.co/413-request-entity-too-large/</guid><description>If your file uploads keep failing with a 413 Request Entity Too Large error, it&#x27;s time to troubleshoot the limits at each hop between the client and your application. The 413 status means…</description><category>Infrastructure</category></item><item><title>The Smallest Feature Flag Service You Can Build Yourself</title><link>https://stateless.co/build-your-own-feature-flag-service/</link><guid isPermaLink="true">https://stateless.co/build-your-own-feature-flag-service/</guid><description>You would rightly think that a feature flag system is mainly a dashboard. a vendor or standards definition stating which part is foundational But the key architecture boundary lies…</description><category>Engineering Practice</category></item><item><title>CORS Preflight Requests Matter - The Browser Blocks Prods BUT NOT Your Local</title><link>https://stateless.co/cors-preflight-fails-in-production/</link><guid isPermaLink="true">https://stateless.co/cors-preflight-fails-in-production/</guid><description>The quick test looks great: your browser client sends the request, the dev server responds, and your UI updates happily. Delighted, you release into production. Minutes later, users are…</description><category>Web Platform</category></item><item><title>Exponential Backoff, Full Jitter or Decorrelated: Choosing a Retry Scheme</title><link>https://stateless.co/exponential-backoff-full-jitter-vs-decorrelated/</link><guid isPermaLink="true">https://stateless.co/exponential-backoff-full-jitter-vs-decorrelated/</guid><description>Without jitter, client retries on rate-limit hit or concurrency overload are synchronized. Each client backs off the same amount, but is rate-limited on the same retry. Not until jitter…</description><category>Infrastructure</category></item><item><title>The Native &lt;dialog&gt; Element Replaced Your Modal Library — Here Is What It Still Will Not Do</title><link>https://stateless.co/html-dialog-element-limitations/</link><guid isPermaLink="true">https://stateless.co/html-dialog-element-limitations/</guid><description>The &lt;dialog&gt; element includes a lot of modal behavior out of the box.</description><category>Web Platform</category></item><item><title>Idempotency-Key Implementation in REST APIs: Stopping Double Charges Without Missing the Second Request</title><link>https://stateless.co/idempotency-key-rest-api/</link><guid isPermaLink="true">https://stateless.co/idempotency-key-rest-api/</guid><description>Implementing idempotency keys in a REST API requires more than just deduplicating on key - it demands storing enough detail to reject mismatched retries and safely handle concurrent…</description><category>APIs &amp; Protocols</category></item><item><title>Keyset Pagination Skipping Rows: How to Avoid Row Skipping and Duplicates When Data Moves</title><link>https://stateless.co/keyset-pagination-skipping-rows/</link><guid isPermaLink="true">https://stateless.co/keyset-pagination-skipping-rows/</guid><description>Offset pagination is a common approach to fetching rows in chunks for an interactive feed. But it has a hidden problem: the page boundaries are not anchored to any actual rows, so when the…</description><category>Data &amp; Databases</category></item><item><title>Passkeys in an Ordinary Web App: What You Still Need a Password For</title><link>https://stateless.co/passkeys-account-recovery-fallback/</link><guid isPermaLink="true">https://stateless.co/passkeys-account-recovery-fallback/</guid><description>The origin of account-management rules for passkey-based auth typically originates with Google’s 2026 autofill and discoverable-credential guidance, and ends with the NHI&#x27;s updated guidance…</description><category>Security &amp; Identity</category></item><item><title>PgBouncer Prepared Statement Already Exists: Escaping the Pooling Prepared-Statement Collision</title><link>https://stateless.co/pgbouncer-prepared-statement-already-exists/</link><guid isPermaLink="true">https://stateless.co/pgbouncer-prepared-statement-already-exists/</guid><description>Database applications that combine a connection pooler with a client library that auto-tracks prepared statements discover quickly that the two reuse strategies do not mix. Without matching…</description><category>Data &amp; Databases</category></item><item><title>Rate-Limit Headers: Telling a Client to Slow Down in a Way It Understands</title><link>https://stateless.co/ratelimit-headers-api/</link><guid isPermaLink="true">https://stateless.co/ratelimit-headers-api/</guid><description>Designing a client-readable rate-limiting policy for a public API requires sending the right headers at the right time. While the standard HTTP status code is 429 Too Many Requests, RFC…</description><category>APIs &amp; Protocols</category></item><item><title>Refresh Token Rotation and Reuse Detection: What the Attack Looks Like in Logs</title><link>https://stateless.co/refresh-token-reuse-detection/</link><guid isPermaLink="true">https://stateless.co/refresh-token-reuse-detection/</guid><description>You logged in and got a refresh token. You used it, and you got a new one. But now, after the interval between valid refresh-rotation windows, you try to use that first token again, as a…</description><category>Security &amp; Identity</category></item><item><title>RFC 9457 Problem Details: Retiring Your Home-Grown Error JSON</title><link>https://stateless.co/rfc-9457-problem-details/</link><guid isPermaLink="true">https://stateless.co/rfc-9457-problem-details/</guid><description>When creating an error JSON, most engineers start by copying a format from a previous project. Over time, this casual practice leads to a proliferation of custom error shapes in every…</description><category>APIs &amp; Protocols</category></item><item><title>Server-Sent Events vs WebSockets: Choosing a Transport by Failure Mode</title><link>https://stateless.co/server-sent-events-vs-websockets/</link><guid isPermaLink="true">https://stateless.co/server-sent-events-vs-websockets/</guid><description>If you are developing a live-event dashboard or feed, choosing the right transport protocol for pushing updates to the browser can make or break the user experience. Many developers start…</description><category>Engineering Practice</category></item><item><title>SQL NOT IN Returns No Rows for Subquery with One NULL</title><link>https://stateless.co/sql-not-in-returns-no-rows-null/</link><guid isPermaLink="true">https://stateless.co/sql-not-in-returns-no-rows-null/</guid><description>SQL&#x27;s NOT IN operator can silently return no rows if its subquery has as much as one null. That&#x27;s because the NOT IN predicate behaves like a chain of &lt;&gt; comparisons, all of which…</description><category>Data &amp; Databases</category></item><item><title>Stale-While-Revalidate: What Happens During the Cache Revalidation Window</title><link>https://stateless.co/stale-while-revalidate-explained/</link><guid isPermaLink="true">https://stateless.co/stale-while-revalidate-explained/</guid><description>When the defined freshness of a cached web resource runs out, a cache can still serve the stale object to the client while silently revalidating it in the background. RFC 5861, which…</description><category>Infrastructure</category></item><item><title>The Structured Logging Fields That Shorten an Incident</title><link>https://stateless.co/structured-logging-fields/</link><guid isPermaLink="true">https://stateless.co/structured-logging-fields/</guid><description>When a cloud-native application goes down, the production log is where on-call engineers turn to answer three crucial questions: which specific request failed, in which specific deployment…</description><category>Engineering Practice</category></item><item><title>Why Time-Ordered UUIDv7 Helps Your Indexes — and What It Costs</title><link>https://stateless.co/uuidv7-primary-key/</link><guid isPermaLink="true">https://stateless.co/uuidv7-primary-key/</guid><description>Newly specified UUIDv7 changes the front of the identifier from random pattern to time sequence, which changes how keys cluster in indexes. For database administrators weighing primary key…</description><category>Data &amp; Databases</category></item><item><title>Vary Against Your CDN: How Content Negotiation Quietly Destroys the Hit Rate</title><link>https://stateless.co/vary-header-cdn-cache-hit-ratio/</link><guid isPermaLink="true">https://stateless.co/vary-header-cdn-cache-hit-ratio/</guid><description>A primary CDN vendor doc or RFC that explicitly quantifies how many cache entries a given Vary line creates, to allow comparison across different usage of Vary by a CDN engineer.</description><category>Web Platform</category></item><item><title>HMAC Webhook Signatures: The Four Mistakes That Pass Code Review</title><link>https://stateless.co/verify-hmac-webhook-signature/</link><guid isPermaLink="true">https://stateless.co/verify-hmac-webhook-signature/</guid><description>Webhooks pass event data between client and server with clear security guarantees.</description><category>Security &amp; Identity</category></item></channel></rss>