<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>Rahiyan Safin | Writing</title><description>I build scalable, event-driven enterprise platforms with Java, Spring Boot, C#/.NET, and cloud technologies. They are designed to remain dependable under real operating load.</description><link>https://rahiyansafin.vercel.app</link><item><title>Travel Review Platform: Moderation, Fraud, and the Recency Problem</title><description>Running a travel review platform at scale — review eligibility, fraud detection, ranking that resists gaming, and the moderation workflow that makes it trustworthy.</description><link>https://rahiyansafin.vercel.app/writing/travel-review-platform/</link><guid>https://rahiyansafin.vercel.app/writing/travel-review-platform/</guid><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/travel-review-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>CockroachDB from First Principles: The Database That Refuses to Die</title><description>Why a global SQL database is really a problem of agreement and time, how Google solved it with TrueTime, GPS, and atomic clocks, and how CockroachDB reaches a practical design on ordinary infrastructure.</description><link>https://rahiyansafin.vercel.app/writing/cockroachdb-architecture-spanner-hlc/</link><guid>https://rahiyansafin.vercel.app/writing/cockroachdb-architecture-spanner-hlc/</guid><pubDate>Tue, 16 Jun 2026 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/cockroachdb-architecture-spanner-hlc.webp" type="image/webp" width="1200" height="630" /></item><item><title>How Async and Await Work in C#</title><description>A story-led explanation of Tasks, compiler-generated state machines, continuations, threads, I/O completion, exceptions, cancellation, contexts, and practical async design in .NET.</description><link>https://rahiyansafin.vercel.app/writing/how-async-await-work-in-csharp/</link><guid>https://rahiyansafin.vercel.app/writing/how-async-await-work-in-csharp/</guid><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/how-async-await-work-in-csharp.webp" type="image/webp" width="1200" height="630" /></item><item><title>How the ASP.NET Core Runtime Handles a Request</title><description>A plain-English walkthrough of how an ASP.NET Core application starts, builds its middleware pipeline, accepts traffic through Kestrel, selects an endpoint, and returns a response.</description><link>https://rahiyansafin.vercel.app/writing/how-aspnet-core-runtime-handles-a-request/</link><guid>https://rahiyansafin.vercel.app/writing/how-aspnet-core-runtime-handles-a-request/</guid><pubDate>Tue, 24 Mar 2026 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/how-aspnet-core-runtime-handles-a-request.webp" type="image/webp" width="1200" height="630" /></item><item><title>Replacing Self-Managed Kafka with Azure Event Hubs</title><description>An end-to-end migration article covering compatibility, partition mapping, dual running, cutover, rollback, and the operational model after Kafka.</description><link>https://rahiyansafin.vercel.app/writing/kafka-to-azure-event-hubs/</link><guid>https://rahiyansafin.vercel.app/writing/kafka-to-azure-event-hubs/</guid><pubDate>Tue, 17 Feb 2026 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/kafka-to-azure-event-hubs.webp" type="image/webp" width="1200" height="630" /></item><item><title>From CockroachDB to Kafka: Change Data Capture with a C# Consumer</title><description>A story-led, end-to-end guide to CockroachDB changefeeds, Kafka records, and a practical C# consumer, including offsets, ordering, duplicates, recovery, and production design.</description><link>https://rahiyansafin.vercel.app/writing/cockroachdb-cdc-kafka-csharp/</link><guid>https://rahiyansafin.vercel.app/writing/cockroachdb-cdc-kafka-csharp/</guid><pubDate>Tue, 20 Jan 2026 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/cockroachdb-cdc-kafka-csharp.webp" type="image/webp" width="1200" height="630" /></item><item><title>Read Replicas: The Right Answer, the Wrong Moment, and How to Keep Users From Seeing It</title><description>Asynchronous replication separates primary commit, standby receipt, durable flush, and replay. Read-your-writes depends on replay; failover loss depends on what reached the promoted standby.</description><link>https://rahiyansafin.vercel.app/writing/replica-lag-read-your-writes/</link><guid>https://rahiyansafin.vercel.app/writing/replica-lag-read-your-writes/</guid><pubDate>Fri, 26 Dec 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/replica-lag-read-your-writes.webp" type="image/webp" width="1200" height="630" /></item><item><title>OFFSET Pagination: The Query That Gets Slower the Deeper You Scroll</title><description>OFFSET makes the executor process and discard rows before the page, so deep pages grow linearly even with an index. Keyset pagination bounds that work, and a unique tiebreaker makes the cursor unambiguous.</description><link>https://rahiyansafin.vercel.app/writing/offset-pagination-cost/</link><guid>https://rahiyansafin.vercel.app/writing/offset-pagination-cost/</guid><pubDate>Sat, 20 Dec 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/offset-pagination-cost.webp" type="image/webp" width="1200" height="630" /></item><item><title>Batching: Turning a Thousand Round Trips Into One</title><description>How to remove database round trips without confusing batching, transactions, preparation, concurrency, and bulk-loading behavior in Npgsql and PostgreSQL.</description><link>https://rahiyansafin.vercel.app/writing/batching-round-trips/</link><guid>https://rahiyansafin.vercel.app/writing/batching-round-trips/</guid><pubDate>Sat, 13 Dec 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/batching-round-trips.webp" type="image/webp" width="1200" height="630" /></item><item><title>The N+1 in EF Core: Where It Comes From, How to See It, and How to Make It a Test Failure</title><description>The N+1 is not a slow query, it is a correct query repeated thousands of times, and because it works in development with ten rows the only reliable defence is a query count assertion in the test suite.</description><link>https://rahiyansafin.vercel.app/writing/ef-core-n-plus-one/</link><guid>https://rahiyansafin.vercel.app/writing/ef-core-n-plus-one/</guid><pubDate>Sun, 07 Dec 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/ef-core-n-plus-one.webp" type="image/webp" width="1200" height="630" /></item><item><title>Soft Deletes: Why a Unique Constraint Cannot Span a Column You Can Change</title><description>A soft-deleted row still holds its unique value, so the second registration of the same email fails on a constraint nobody expected to fire. The fix is a partial index, and the decision about whether to use one is upstream of that.</description><link>https://rahiyansafin.vercel.app/writing/soft-deletes-unique-constraints/</link><guid>https://rahiyansafin.vercel.app/writing/soft-deletes-unique-constraints/</guid><pubDate>Sun, 30 Nov 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/soft-deletes-unique-constraints.webp" type="image/webp" width="1200" height="630" /></item><item><title>JSONB: Winning the Schema Argument by Deferring It</title><description>A JSONB column lets you add an attribute without a migration, which is a real win. The mistake is treating that freedom as a licence to put everything in it, and the mature answer is a hybrid.</description><link>https://rahiyansafin.vercel.app/writing/jsonb-deferred-schema/</link><guid>https://rahiyansafin.vercel.app/writing/jsonb-deferred-schema/</guid><pubDate>Mon, 24 Nov 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/jsonb-deferred-schema.webp" type="image/webp" width="1200" height="630" /></item><item><title>Connection Pool Sizing: Little&apos;s Law, max_connections, and the Multiplication Nobody Budgeted</title><description>How many database connections you actually need is arithmetic, not intuition, and the real risk is that your pod count multiplies a per-instance default into more connections than Postgres has.</description><link>https://rahiyansafin.vercel.app/writing/connection-pool-sizing/</link><guid>https://rahiyansafin.vercel.app/writing/connection-pool-sizing/</guid><pubDate>Mon, 17 Nov 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/connection-pool-sizing.webp" type="image/webp" width="1200" height="630" /></item><item><title>Foreign Keys: The Index You Forgot and the Lock You Didn&apos;t Ask For</title><description>How PostgreSQL foreign keys use child-side access paths and parent-row locks, how to audit composite indexes, and how validation differs from enforcement.</description><link>https://rahiyansafin.vercel.app/writing/foreign-keys-missing-index/</link><guid>https://rahiyansafin.vercel.app/writing/foreign-keys-missing-index/</guid><pubDate>Tue, 11 Nov 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/foreign-keys-missing-index.webp" type="image/webp" width="1200" height="630" /></item><item><title>ADD COLUMN: The Lock Queue Behind a Metadata-Only Migration</title><description>Why a five millisecond metadata change stalled a site for forty minutes, how a queued ACCESS EXCLUSIVE lock blocks every query behind it, and why lock_timeout is the setting that makes a migration safe.</description><link>https://rahiyansafin.vercel.app/writing/add-column-lock-queue/</link><guid>https://rahiyansafin.vercel.app/writing/add-column-lock-queue/</guid><pubDate>Tue, 04 Nov 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/add-column-lock-queue.webp" type="image/webp" width="1200" height="630" /></item><item><title>Deadlocks: Two Transactions, Two Orders, and a Permanent Stop</title><description>A deadlock needs a cycle in the wait-for graph, which is why consistent lock ordering removes an entire class of incident, and why the database picking a victim is the good outcome.</description><link>https://rahiyansafin.vercel.app/writing/deadlocks-lock-ordering/</link><guid>https://rahiyansafin.vercel.app/writing/deadlocks-lock-ordering/</guid><pubDate>Wed, 29 Oct 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/deadlocks-lock-ordering.webp" type="image/webp" width="1200" height="630" /></item><item><title>Isolation Levels: The Table That Does Not Describe Your Database</title><description>Why the ANSI isolation table describes symptoms rather than mechanisms, what MVCC changed, and how snapshot isolation still lets two correct transactions corrupt each other.</description><link>https://rahiyansafin.vercel.app/writing/isolation-levels-and-write-skew/</link><guid>https://rahiyansafin.vercel.app/writing/isolation-levels-and-write-skew/</guid><pubDate>Wed, 22 Oct 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/isolation-levels-and-write-skew.webp" type="image/webp" width="1200" height="630" /></item><item><title>fsync: The Flush Between a Commit and Stable Storage</title><description>How PostgreSQL separates writes, WAL flushes, synchronous commit, hardware truthfulness, and group commit—and where each durability promise can fail.</description><link>https://rahiyansafin.vercel.app/writing/fsync-durability-group-commit/</link><guid>https://rahiyansafin.vercel.app/writing/fsync-durability-group-commit/</guid><pubDate>Thu, 16 Oct 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/fsync-durability-group-commit.webp" type="image/webp" width="1200" height="630" /></item><item><title>LSM Compaction: The Background Job That Becomes a Foreground Outage</title><description>Why an LSM engine saturates a disk with no user traffic, how write stalls turn a background merge into a latency incident, and why the disk needs headroom a capacity graph will never show.</description><link>https://rahiyansafin.vercel.app/writing/lsm-compaction-write-stalls/</link><guid>https://rahiyansafin.vercel.app/writing/lsm-compaction-write-stalls/</guid><pubDate>Thu, 09 Oct 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/lsm-compaction-write-stalls.webp" type="image/webp" width="1200" height="630" /></item><item><title>The RUM Conjecture: Read, Update, and Memory Amplification</title><description>The RUM conjecture frames an access method as a trade among read overhead, update overhead, and memory or storage overhead—not as a theorem about range scans.</description><link>https://rahiyansafin.vercel.app/writing/rum-conjecture-storage-tradeoffs/</link><guid>https://rahiyansafin.vercel.app/writing/rum-conjecture-storage-tradeoffs/</guid><pubDate>Fri, 03 Oct 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/rum-conjecture-storage-tradeoffs.webp" type="image/webp" width="1200" height="630" /></item><item><title>Covering Indexes: Turning One Random Read Per Row Into Zero</title><description>Why a matching index still costs one random read per row, how INCLUDE columns turn that into an index-only scan, and why a stale visibility map quietly puts the heap read back.</description><link>https://rahiyansafin.vercel.app/writing/covering-indexes-index-only-scans/</link><guid>https://rahiyansafin.vercel.app/writing/covering-indexes-index-only-scans/</guid><pubDate>Fri, 26 Sep 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/covering-indexes-index-only-scans.webp" type="image/webp" width="1200" height="630" /></item><item><title>Unused Indexes: The Planner Is Reading Statistics You Forgot to Refresh</title><description>Sargability, stale statistics, the leftmost prefix rule, correlated columns, and the cost settings that make a planner reject an index it should have chosen.</description><link>https://rahiyansafin.vercel.app/writing/unused-index-planner-rejection/</link><guid>https://rahiyansafin.vercel.app/writing/unused-index-planner-rejection/</guid><pubDate>Sat, 20 Sep 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/unused-index-planner-rejection.webp" type="image/webp" width="1200" height="630" /></item><item><title>UUID Primary Keys: Locality, Page Splits, and the Cost You Must Measure</title><description>Random UUIDs spread B-tree inserts across leaf pages; time-ordered UUIDs improve locality. The effect differs sharply between InnoDB&apos;s clustered table and PostgreSQL&apos;s heap.</description><link>https://rahiyansafin.vercel.app/writing/uuid-primary-key-fragmentation/</link><guid>https://rahiyansafin.vercel.app/writing/uuid-primary-key-fragmentation/</guid><pubDate>Sat, 13 Sep 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/uuid-primary-key-fragmentation.webp" type="image/webp" width="1200" height="630" /></item><item><title>LFU Cache in O(1): Two Maps, Frequency Buckets, and a Minimum That Resets</title><description>A key-to-node map, frequency buckets, and a minFreq pointer that advances on promotion and resets on insertion, plus concurrency and aging limits of exact LFU.</description><link>https://rahiyansafin.vercel.app/writing/lfu-cache-o1/</link><guid>https://rahiyansafin.vercel.app/writing/lfu-cache-o1/</guid><pubDate>Sun, 07 Sep 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/lfu-cache-o1.webp" type="image/webp" width="1200" height="630" /></item><item><title>Dynamic Pricing for Travel: The Model Is the Easy Part</title><description>Revenue management for travel — demand forecasting, price fences, the difference between dynamic and surge, and why published prices must be honoured.</description><link>https://rahiyansafin.vercel.app/writing/dynamic-pricing-travel/</link><guid>https://rahiyansafin.vercel.app/writing/dynamic-pricing-travel/</guid><pubDate>Sun, 31 Aug 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/dynamic-pricing-travel.webp" type="image/webp" width="1200" height="630" /></item><item><title>Seat Selection and Reservation: A Graph Problem Wearing an Airline Uniform</title><description>Aircraft seat maps as a constraint problem — legality, preference, family adjacency, and the concurrent reservation race that a seat map is uniquely bad at.</description><link>https://rahiyansafin.vercel.app/writing/seat-selection-reservation/</link><guid>https://rahiyansafin.vercel.app/writing/seat-selection-reservation/</guid><pubDate>Mon, 25 Aug 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/seat-selection-reservation.webp" type="image/webp" width="1200" height="630" /></item><item><title>Price Alert System: Notifying People About Prices You Cannot Promise</title><description>Price alert infrastructure — polling strategies, trigger thresholds, alert fatigue, and the honesty problem when the price moves after you alert.</description><link>https://rahiyansafin.vercel.app/writing/price-alert-system/</link><guid>https://rahiyansafin.vercel.app/writing/price-alert-system/</guid><pubDate>Mon, 18 Aug 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/price-alert-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Vacation Rental Marketplace: The Calendar Is the Product</title><description>Short-term rental platforms at scale — the 365-night calendar, host reliability, dynamic pricing integration, and local regulation as a first-class constraint.</description><link>https://rahiyansafin.vercel.app/writing/vacation-rental-marketplace/</link><guid>https://rahiyansafin.vercel.app/writing/vacation-rental-marketplace/</guid><pubDate>Tue, 12 Aug 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/vacation-rental-marketplace.webp" type="image/webp" width="1200" height="630" /></item><item><title>Accommodation Marketplace: Two Sides of a Transaction That Never Meet</title><description>Running a two-sided accommodation marketplace — supply onboarding, ranking that serves both sides, payments in a regulated flow, and the disputes problem.</description><link>https://rahiyansafin.vercel.app/writing/accommodation-marketplace/</link><guid>https://rahiyansafin.vercel.app/writing/accommodation-marketplace/</guid><pubDate>Tue, 05 Aug 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/accommodation-marketplace.webp" type="image/webp" width="1200" height="630" /></item><item><title>Practical DRY Beyond Code Reuse</title><description>Using DRY to keep business knowledge authoritative across rules, contracts, data, operations, and documentation without forcing unrelated code into one abstraction.</description><link>https://rahiyansafin.vercel.app/writing/practical-dry-beyond-code-reuse/</link><guid>https://rahiyansafin.vercel.app/writing/practical-dry-beyond-code-reuse/</guid><pubDate>Wed, 30 Jul 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/practical-dry-beyond-code-reuse.webp" type="image/webp" width="1200" height="630" /></item><item><title>Hotel Booking System: Inventory That Is a Physical Room, Not a Database Row</title><description>Hotel booking as an overbooking-and-allocation problem — room types, allotments, cancellation policy state, and the race between hold, book, and confirm.</description><link>https://rahiyansafin.vercel.app/writing/hotel-booking-system/</link><guid>https://rahiyansafin.vercel.app/writing/hotel-booking-system/</guid><pubDate>Wed, 23 Jul 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/hotel-booking-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Flight Search System: Caching by Degradation, Not by Answer</title><description>Flight search at scale — GDS and aggregator fan-out, result caches that age gracefully, and the itinerary-combinatorics problem that makes searching hard.</description><link>https://rahiyansafin.vercel.app/writing/flight-search-system/</link><guid>https://rahiyansafin.vercel.app/writing/flight-search-system/</guid><pubDate>Thu, 17 Jul 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/flight-search-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Waze-Style Navigation at Scale: Routing Engines, Map Matching, and the Traffic Model</title><description>Building navigation at map scale — road-graph routing, map matching from GPS traces, live traffic estimation, and incremental rerouting.</description><link>https://rahiyansafin.vercel.app/writing/waze-navigation/</link><guid>https://rahiyansafin.vercel.app/writing/waze-navigation/</guid><pubDate>Thu, 10 Jul 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/waze-navigation.webp" type="image/webp" width="1200" height="630" /></item><item><title>Logistics Package Tracking: The Event Stream Behind a Progress Bar</title><description>Package tracking as a scan-event pipeline — status models, exception handling, the ETA problem, and why carrier webhooks are the hard part.</description><link>https://rahiyansafin.vercel.app/writing/logistics-package-tracking/</link><guid>https://rahiyansafin.vercel.app/writing/logistics-package-tracking/</guid><pubDate>Fri, 04 Jul 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/logistics-package-tracking.webp" type="image/webp" width="1200" height="630" /></item><item><title>Last-Mile Delivery System: The Problem That Is 80% Small Talk and 20% Optimisation</title><description>Last-mile delivery route design, density-based territory planning, failed delivery recovery, and the operational details that dominate the economics.</description><link>https://rahiyansafin.vercel.app/writing/last-mile-delivery-system/</link><guid>https://rahiyansafin.vercel.app/writing/last-mile-delivery-system/</guid><pubDate>Fri, 27 Jun 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/last-mile-delivery-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Driver Dispatch System: Assigning Work When the Vehicle Is Not the Constraint</title><description>Freight dispatch with capacity, hours-of-service, and multi-depot realities — the parts of dispatch that a load board does not solve.</description><link>https://rahiyansafin.vercel.app/writing/driver-dispatch-system/</link><guid>https://rahiyansafin.vercel.app/writing/driver-dispatch-system/</guid><pubDate>Sat, 21 Jun 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/driver-dispatch-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Travel Itinerary Planner: Constraint Search Where the User Is the Optimiser</title><description>Multi-day itineraries as constraint satisfaction, with travel time, opening hours, reservations, and the user&apos;s own trade-offs made explicit.</description><link>https://rahiyansafin.vercel.app/writing/travel-itinerary-planner/</link><guid>https://rahiyansafin.vercel.app/writing/travel-itinerary-planner/</guid><pubDate>Sat, 14 Jun 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/travel-itinerary-planner.webp" type="image/webp" width="1200" height="630" /></item><item><title>Ride Matching Algorithm: Batching, Detours, and the Trade-off Every Marketplace Rediscovers</title><description>How ride matching actually works — spatial partitioning, ETA matrices, batch windows, and why lowest-detour and shortest-wait pull in opposite directions.</description><link>https://rahiyansafin.vercel.app/writing/ride-matching-algorithm/</link><guid>https://rahiyansafin.vercel.app/writing/ride-matching-algorithm/</guid><pubDate>Sun, 08 Jun 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/ride-matching-algorithm.webp" type="image/webp" width="1200" height="630" /></item><item><title>Travel Recommendation Engine: Why the Obvious Approach Fails and What Actually Works</title><description>Candidate generation, two-stage ranking, exploration, and the feedback loops that turn a travel recommender into a filter bubble.</description><link>https://rahiyansafin.vercel.app/writing/travel-recommendation-engine/</link><guid>https://rahiyansafin.vercel.app/writing/travel-recommendation-engine/</guid><pubDate>Sun, 01 Jun 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/travel-recommendation-engine.webp" type="image/webp" width="1200" height="630" /></item><item><title>Route Optimization Engine: The Problem That Looks Like a Shortest Path and Is Not</title><description>Vehicle routing with capacity and time windows, large neighbourhood search, and why an optimal solution computed offline is worthless by morning.</description><link>https://rahiyansafin.vercel.app/writing/route-optimization-engine/</link><guid>https://rahiyansafin.vercel.app/writing/route-optimization-engine/</guid><pubDate>Mon, 26 May 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/route-optimization-engine.webp" type="image/webp" width="1200" height="630" /></item><item><title>EV Charging Platforms: The Meter Is the Product and the Connector Is the Weakness</title><description>OCPP, the five-system transaction, demand charges on connected capacity, idle bays, and why public charging reliability is a hardware problem wearing a software costume.</description><link>https://rahiyansafin.vercel.app/writing/ev-charging-network/</link><guid>https://rahiyansafin.vercel.app/writing/ev-charging-network/</guid><pubDate>Mon, 19 May 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/ev-charging-network.webp" type="image/webp" width="1200" height="630" /></item><item><title>Micromobility Platforms: The Ride Is a Distributed Transaction</title><description>The unlock and ride lifecycle, when a ride actually starts, curb economics, battery swap logistics, and why the payment authorisation is the hardest part of a scooter.</description><link>https://rahiyansafin.vercel.app/writing/bike-scooter-sharing-platform/</link><guid>https://rahiyansafin.vercel.app/writing/bike-scooter-sharing-platform/</guid><pubDate>Tue, 13 May 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/bike-scooter-sharing-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>Stream Processing System: Kafka and Flink, and the Watermark You Will Misconfigure</title><description>Event time versus processing time, checkpointing and exactly-once state, backpressure, and choosing heap or disk-backed state with an explicit recovery budget.</description><link>https://rahiyansafin.vercel.app/writing/stream-processing-kafka-flink/</link><guid>https://rahiyansafin.vercel.app/writing/stream-processing-kafka-flink/</guid><pubDate>Tue, 06 May 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/stream-processing-kafka-flink.webp" type="image/webp" width="1200" height="630" /></item><item><title>Fleet Management Systems: The Platform Is Telematics, the Product Is Exceptions</title><description>Hours-of-service compliance, driver behaviour scoring as an employment decision, fuel leakage, and why a fleet system&apos;s real value sits in the five percent of cases that are not normal.</description><link>https://rahiyansafin.vercel.app/writing/fleet-management-system/</link><guid>https://rahiyansafin.vercel.app/writing/fleet-management-system/</guid><pubDate>Wed, 30 Apr 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/fleet-management-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Long Polling in .NET</title><description>Designing a cursor-based long-poll endpoint in ASP.NET Core with bounded waits, replay, replica coordination, overload control, and failure testing.</description><link>https://rahiyansafin.vercel.app/writing/long-polling-in-dotnet/</link><guid>https://rahiyansafin.vercel.app/writing/long-polling-in-dotnet/</guid><pubDate>Wed, 23 Apr 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/long-polling-in-dotnet.webp" type="image/webp" width="1200" height="630" /></item><item><title>Batch Processing System: Spark on Kubernetes, and Why Your Jobs Are Slow</title><description>Scheduling, shuffle, data skew, dynamic allocation, and the operational patterns that decide whether a 4-hour batch job is a cost centre or an outage risk.</description><link>https://rahiyansafin.vercel.app/writing/batch-processing-system/</link><guid>https://rahiyansafin.vercel.app/writing/batch-processing-system/</guid><pubDate>Thu, 17 Apr 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/batch-processing-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Smart Home Platforms: The Test Is Whether It Works With the Internet Unplugged</title><description>Local-first hubs, Matter and Thread, the state machine behind automations, and why a smart home that stops working during an outage is a remote control with extra features.</description><link>https://rahiyansafin.vercel.app/writing/smart-home-platform/</link><guid>https://rahiyansafin.vercel.app/writing/smart-home-platform/</guid><pubDate>Thu, 10 Apr 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/smart-home-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>File Uploads with Swagger and Minimal APIs</title><description>Designing a .NET upload boundary that is honest about buffering, quotas, untrusted metadata, scanning, durable storage, retries, and OpenAPI.</description><link>https://rahiyansafin.vercel.app/writing/file-uploads-minimal-apis/</link><guid>https://rahiyansafin.vercel.app/writing/file-uploads-minimal-apis/</guid><pubDate>Fri, 04 Apr 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/file-uploads-minimal-apis.webp" type="image/webp" width="1200" height="630" /></item><item><title>ETL Pipeline: The Extract That Fails Silently Is Worse Than the One That Crashes</title><description>Incremental extraction, idempotent loads, late-arriving data, backfills, and the data quality checks that decide whether anyone trusts the warehouse.</description><link>https://rahiyansafin.vercel.app/writing/etl-pipeline/</link><guid>https://rahiyansafin.vercel.app/writing/etl-pipeline/</guid><pubDate>Fri, 28 Mar 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/etl-pipeline.webp" type="image/webp" width="1200" height="630" /></item><item><title>Connected Vehicle Platforms: A Client That Lives Longer Than Your Backend</title><description>The fifteen year fleet problem, what a CAN bus will actually let you log, command safety on an intermittently connected car, and why a connected vehicle has four data subjects and not one.</description><link>https://rahiyansafin.vercel.app/writing/connected-vehicle-platform/</link><guid>https://rahiyansafin.vercel.app/writing/connected-vehicle-platform/</guid><pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/connected-vehicle-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>IoT Analytics Platforms: Hot, Warm, Cold, and the Query That Breaks All Three</title><description>Tiered storage for device telemetry, the wide-versus-narrow table decision that changes everything, and why rolling data up is cheaper than querying it raw.</description><link>https://rahiyansafin.vercel.app/writing/iot-analytics-platform/</link><guid>https://rahiyansafin.vercel.app/writing/iot-analytics-platform/</guid><pubDate>Sat, 15 Mar 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/iot-analytics-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>Base Controllers and Shared .NET Concerns</title><description>A boundary-first way to decide whether shared API behavior belongs in a base controller, middleware, filters, authorization, or explicit application services.</description><link>https://rahiyansafin.vercel.app/writing/base-controller-shared-concerns/</link><guid>https://rahiyansafin.vercel.app/writing/base-controller-shared-concerns/</guid><pubDate>Sun, 09 Mar 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/base-controller-shared-concerns.webp" type="image/webp" width="1200" height="630" /></item><item><title>Smart City Platforms: Designing for a Federation, Not a Product</title><description>Why the hard problem in city data is departmental ownership rather than throughput, and what to do about coordinate systems, spatial joins, privacy, and data quality you can defend.</description><link>https://rahiyansafin.vercel.app/writing/smart-city-platform/</link><guid>https://rahiyansafin.vercel.app/writing/smart-city-platform/</guid><pubDate>Sun, 02 Mar 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/smart-city-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>Data Mesh Architecture: Four Principles and the Organisation Chart Hiding Inside Them</title><description>Domain ownership, data as a product, the federated plane, and why data mesh is a reorganisation with an API in front of it.</description><link>https://rahiyansafin.vercel.app/writing/data-mesh-architecture/</link><guid>https://rahiyansafin.vercel.app/writing/data-mesh-architecture/</guid><pubDate>Mon, 24 Feb 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/data-mesh-architecture.webp" type="image/webp" width="1200" height="630" /></item><item><title>Industrial IoT Platforms: Where the Cloud Stops and the Plant Starts</title><description>The IT and OT boundary, the edge, OPC-UA versus Modbus, historians, digital twins, and why a control loop must never depend on a network it does not own.</description><link>https://rahiyansafin.vercel.app/writing/industrial-iot-platform/</link><guid>https://rahiyansafin.vercel.app/writing/industrial-iot-platform/</guid><pubDate>Mon, 17 Feb 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/industrial-iot-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>Parallel Programming in .NET</title><description>Choosing and operating bounded parallelism in .NET across CPU work, asynchronous I/O, channels, dependency limits, cancellation, and production measurement.</description><link>https://rahiyansafin.vercel.app/writing/parallel-programming-in-dotnet/</link><guid>https://rahiyansafin.vercel.app/writing/parallel-programming-in-dotnet/</guid><pubDate>Tue, 11 Feb 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/parallel-programming-in-dotnet.webp" type="image/webp" width="1200" height="630" /></item><item><title>IoT Device Management: Registry, Configuration, and Firmware at Fleet Scale</title><description>Desired state versus reported state, bulk configuration, staged firmware rollouts, and why a two million device fleet is a control plane problem before it is a console problem.</description><link>https://rahiyansafin.vercel.app/writing/iot-device-management-system/</link><guid>https://rahiyansafin.vercel.app/writing/iot-device-management-system/</guid><pubDate>Tue, 04 Feb 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/iot-device-management-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Secure Password Hashing in .NET</title><description>Choosing and operating password hashing in .NET with ASP.NET Core Identity, Argon2id or PBKDF2, versioned envelopes, peppers, upgrades, and capacity controls.</description><link>https://rahiyansafin.vercel.app/writing/secure-password-hashing-in-dotnet/</link><guid>https://rahiyansafin.vercel.app/writing/secure-password-hashing-in-dotnet/</guid><pubDate>Wed, 29 Jan 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/secure-password-hashing-in-dotnet.webp" type="image/webp" width="1200" height="630" /></item><item><title>Metadata Management: The Catalogue That Nobody Updates Until the Day They Need It</title><description>Schema registries, compatibility modes, ownership as data, and why a metadata system without enforced write paths becomes a documentation site.</description><link>https://rahiyansafin.vercel.app/writing/metadata-management-system/</link><guid>https://rahiyansafin.vercel.app/writing/metadata-management-system/</guid><pubDate>Wed, 22 Jan 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/metadata-management-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Solving Time Zone Challenges with EF Core</title><description>Modeling instants, local dates, wall-clock schedules, offsets, and time-zone identifiers explicitly across .NET, EF Core, databases, and APIs.</description><link>https://rahiyansafin.vercel.app/writing/time-zones-with-ef-core/</link><guid>https://rahiyansafin.vercel.app/writing/time-zones-with-ef-core/</guid><pubDate>Thu, 16 Jan 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/time-zones-with-ef-core.webp" type="image/webp" width="1200" height="630" /></item><item><title>IoT Data Ingestion: The Platform Between a Device and Kafka</title><description>Connection counts, QoS, session state, provisioning, and the MQTT to Kafka bridge, written for fleets large enough that the hard problem is connections rather than throughput.</description><link>https://rahiyansafin.vercel.app/writing/iot-data-ingestion-platform/</link><guid>https://rahiyansafin.vercel.app/writing/iot-data-ingestion-platform/</guid><pubDate>Thu, 09 Jan 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/iot-data-ingestion-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>Sensor Data Pipelines: What Happens Between the Device and the Alert</title><description>How a high-frequency sensor stream is partitioned, windowed, and turned into an alarm, including the state-size problem that decides whether a stream processor survives contact with real data.</description><link>https://rahiyansafin.vercel.app/writing/sensor-data-processing-pipeline/</link><guid>https://rahiyansafin.vercel.app/writing/sensor-data-processing-pipeline/</guid><pubDate>Fri, 03 Jan 2025 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/sensor-data-processing-pipeline.webp" type="image/webp" width="1200" height="630" /></item><item><title>Distributed Tracing: You Cannot Sample 100% and You Cannot Store 100%</title><description>Spans, context propagation, head versus tail sampling, and the cardinality decisions that determine whether your tracing bill is a line item or an incident.</description><link>https://rahiyansafin.vercel.app/writing/distributed-tracing-system/</link><guid>https://rahiyansafin.vercel.app/writing/distributed-tracing-system/</guid><pubDate>Sat, 07 Dec 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/distributed-tracing-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>How a Time-Series Database Stores Data: A Prometheus-Style Design</title><description>A concrete Prometheus-style storage path—head data, WAL, encoded chunks, label indexes, blocks, compaction, and cardinality—plus where other time-series engines differ.</description><link>https://rahiyansafin.vercel.app/writing/how-a-time-series-database-stores-data/</link><guid>https://rahiyansafin.vercel.app/writing/how-a-time-series-database-stores-data/</guid><pubDate>Fri, 15 Nov 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/how-a-time-series-database-stores-data.webp" type="image/webp" width="1200" height="630" /></item><item><title>Chaos Engineering Platform: Breaking Things on Purpose Is a Measurement Problem</title><description>Steady-state hypotheses, blast radius controls, abort conditions, and the discipline that separates experiments from outages with extra steps.</description><link>https://rahiyansafin.vercel.app/writing/chaos-engineering-platform/</link><guid>https://rahiyansafin.vercel.app/writing/chaos-engineering-platform/</guid><pubDate>Thu, 24 Oct 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/chaos-engineering-platform.webp" type="image/webp" width="1200" height="630" /></item><item><title>RabbitMQ Between Microservices</title><description>Designing RabbitMQ service boundaries with owned queues, publisher confirms, transactional outbox and inbox records, bounded retries, backpressure, and recovery tests.</description><link>https://rahiyansafin.vercel.app/writing/rabbitmq-between-microservices/</link><guid>https://rahiyansafin.vercel.app/writing/rabbitmq-between-microservices/</guid><pubDate>Wed, 02 Oct 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/rabbitmq-between-microservices.webp" type="image/webp" width="1200" height="630" /></item><item><title>Canary Deployment: The Percentage of Your Users Who Find the Bug First</title><description>Weighted routing, metric gates that actually mean something, analysis windows versus sample size, and why most canary systems fail at the metric check.</description><link>https://rahiyansafin.vercel.app/writing/canary-deployment-system/</link><guid>https://rahiyansafin.vercel.app/writing/canary-deployment-system/</guid><pubDate>Tue, 10 Sep 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/canary-deployment-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Real-Time GPS Tracking: From Device Ping to Live Map</title><description>How a fleet of GPS devices turns location pings into a live map, without losing positions, overwriting history, or melting the database.</description><link>https://rahiyansafin.vercel.app/writing/real-time-gps-tracking/</link><guid>https://rahiyansafin.vercel.app/writing/real-time-gps-tracking/</guid><pubDate>Mon, 19 Aug 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/real-time-gps-tracking.webp" type="image/webp" width="1200" height="630" /></item><item><title>Monitoring and Alerting: Why Your Alerts Are Noisy and Your Outages Are Not Caught</title><description>Prometheus pull semantics, cardinality, recording rules, alert routing with inhibition, and the difference between a metric that explains an incident and one that pages someone.</description><link>https://rahiyansafin.vercel.app/writing/monitoring-alerting-system/</link><guid>https://rahiyansafin.vercel.app/writing/monitoring-alerting-system/</guid><pubDate>Sun, 28 Jul 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/monitoring-alerting-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Distributed Job Scheduler: A Cron Table That Ten Thousand Services Write To</title><description>Leader-elected scheduling, a timing wheel, DAG dependencies, and the exactly-once claim that is actually at-least-once plus idempotency.</description><link>https://rahiyansafin.vercel.app/writing/distributed-job-scheduler/</link><guid>https://rahiyansafin.vercel.app/writing/distributed-job-scheduler/</guid><pubDate>Sat, 06 Jul 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/distributed-job-scheduler.webp" type="image/webp" width="1200" height="630" /></item><item><title>Blue-Green Deployment: The Deployment Where Your Rollback Plan Is a DNS TTL</title><description>Two identical environments, database migrations that break the contract, and the failure modes that turn a supposedly-safe switchover into an outage.</description><link>https://rahiyansafin.vercel.app/writing/blue-green-deployment/</link><guid>https://rahiyansafin.vercel.app/writing/blue-green-deployment/</guid><pubDate>Fri, 14 Jun 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/blue-green-deployment.webp" type="image/webp" width="1200" height="630" /></item><item><title>Health Checks and Heartbeats: Three Different Questions That Look Identical</title><description>Liveness, readiness, and heartbeat are not the same test, and conflating them is how a slow dependency restarts your entire fleet.</description><link>https://rahiyansafin.vercel.app/writing/health-check-heartbeat-system/</link><guid>https://rahiyansafin.vercel.app/writing/health-check-heartbeat-system/</guid><pubDate>Thu, 23 May 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/health-check-heartbeat-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Multi-Tenant SaaS Architecture: Isolation Tiers and the One You Should Start On</title><description>Shared schema, database-per-tenant, schema-per-tenant, and the row-level security middle ground — with the noisy-neighbour maths that picks the tier.</description><link>https://rahiyansafin.vercel.app/writing/multi-tenant-saas-architecture/</link><guid>https://rahiyansafin.vercel.app/writing/multi-tenant-saas-architecture/</guid><pubDate>Wed, 01 May 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/multi-tenant-saas-architecture.webp" type="image/webp" width="1200" height="630" /></item><item><title>Service Mesh: Every Request Now Goes Through a Proxy, So What Did You Buy</title><description>xDS control plane, sidecar versus ambient, mTLS with SPIFFE identity, and the honest reasons a mesh is worth it — and the ones that are not.</description><link>https://rahiyansafin.vercel.app/writing/service-mesh/</link><guid>https://rahiyansafin.vercel.app/writing/service-mesh/</guid><pubDate>Tue, 09 Apr 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/service-mesh.webp" type="image/webp" width="1200" height="630" /></item><item><title>Container Orchestration: The Scheduler Is Easy, the Controller Is the Product</title><description>Two-phase scheduling, level-triggered reconciliation, the pod lifecycle, and why a Kubernetes-style control loop is the reusable idea underneath every orchestrator.</description><link>https://rahiyansafin.vercel.app/writing/container-orchestration/</link><guid>https://rahiyansafin.vercel.app/writing/container-orchestration/</guid><pubDate>Mon, 18 Mar 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/container-orchestration.webp" type="image/webp" width="1200" height="630" /></item><item><title>Secrets Management: The Design Where Decryption Should Be the Rare Event</title><description>Envelope encryption, HSM-backed roots, dynamic database credentials, and why the hard part of secrets management is revocation, not storage.</description><link>https://rahiyansafin.vercel.app/writing/secrets-management-system/</link><guid>https://rahiyansafin.vercel.app/writing/secrets-management-system/</guid><pubDate>Sun, 25 Feb 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/secrets-management-system.webp" type="image/webp" width="1200" height="630" /></item><item><title>Distributed Lock Service: Why a Lock Is Not Enough and the Token That Fixes It</title><description>Fencing tokens, Redlock&apos;s pause problem, ZooKeeper&apos;s sequential ephemeral nodes, and the honest limits of TTL-based mutual exclusion.</description><link>https://rahiyansafin.vercel.app/writing/distributed-lock-service/</link><guid>https://rahiyansafin.vercel.app/writing/distributed-lock-service/</guid><pubDate>Sat, 03 Feb 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/distributed-lock-service.webp" type="image/webp" width="1200" height="630" /></item><item><title>Distributed Configuration Management: The Part Where Everyone Builds a ZooKeeper</title><description>Raft, linearizable reads, watch fan-out, and MVCC — how etcd and Consul actually keep fifty thousand services watching config without falling over.</description><link>https://rahiyansafin.vercel.app/writing/distributed-configuration-management/</link><guid>https://rahiyansafin.vercel.app/writing/distributed-configuration-management/</guid><pubDate>Fri, 12 Jan 2024 00:00:00 GMT</pubDate><media:content url="https://rahiyansafin.vercel.app/images/writing/distributed-configuration-management.webp" type="image/webp" width="1200" height="630" /></item></channel></rss>