<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Md. Musfiqur Rahaman - Engineering writing</title><description>Long-form engineering notes on distributed systems, multi-tenant architecture, delivery guarantees, AI pipelines and release automation.</description><link>https://musfiqdehan.com</link><language>en-us</language><copyright>© 2026 Md. Musfiqur Rahaman</copyright><image><url>https://musfiqdehan.com/og/blog.png</url><title>Md. Musfiqur Rahaman</title><link>https://musfiqdehan.com/</link></image><item><title>Never Stop the Old Container First</title><link>https://musfiqdehan.com/blog/zero-downtime-blue-green-traefik</link><guid isPermaLink="true">https://musfiqdehan.com/blog/zero-downtime-blue-green-traefik</guid><description>A routine deploy costs about a minute of failed requests, because &quot;update&quot; quietly means stop-then-start. Here is the pipeline that ships to a single server without a customer ever seeing an error - no Kubernetes, no second load balancer, and a rollback that is the same path as the deploy.</description><pubDate>Thu, 30 Jul 2026 00:00:00 GMT</pubDate><category>Docker</category><category>Traefik</category><category>GitHub Actions</category><category>CI/CD</category><category>Zero Downtime</category><category>Deployment</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>Selling With the Wi-Fi Down: An Offline-First POS in Tauri 2.0</title><link>https://musfiqdehan.com/blog/offline-first-pos-tauri-sync-outbox</link><guid isPermaLink="true">https://musfiqdehan.com/blog/offline-first-pos-tauri-sync-outbox</guid><description>A till that stops working when the internet does is a till that loses money. Here is the contract that lets a desktop point of sale keep selling through an outage and reconcile exactly once when the connection returns - without ever charging a customer twice or losing a sale from the books.</description><pubDate>Wed, 29 Jul 2026 00:00:00 GMT</pubDate><category>Tauri</category><category>React</category><category>SQLite</category><category>Django</category><category>Offline-First</category><category>Idempotency</category><category>PostgreSQL</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>Decomposing a Monolith Without a Rewrite</title><link>https://musfiqdehan.com/blog/decomposing-a-monolith-without-a-rewrite</link><guid isPermaLink="true">https://musfiqdehan.com/blog/decomposing-a-monolith-without-a-rewrite</guid><description>Splitting a large codebase is usually sold as a rewrite and delivered as a disaster. Here is how to do it piece by piece while the product keeps shipping to customers - plus an honest account of what independent deployment actually costs you in return.</description><pubDate>Wed, 08 Jul 2026 00:00:00 GMT</pubDate><category>Architecture</category><category>Microservices</category><category>Django</category><category>Refactoring</category><category>Leadership</category><category>Docker</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>Leases Over Locks: A Crash-Safe Work Queue in PostgreSQL</title><link>https://musfiqdehan.com/blog/lease-based-url-frontier-postgres</link><guid isPermaLink="true">https://musfiqdehan.com/blog/lease-based-url-frontier-postgres</guid><description>How to get a crash-safe job queue out of the database you already run, instead of adding another service to operate, monitor and be woken up by. Workers claim jobs on a timed lease, so a machine dying halfway through costs minutes of delay rather than lost work.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><category>PostgreSQL</category><category>Distributed Systems</category><category>Queues</category><category>Python</category><category>Concurrency</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>Four Stages of Deduplication: Spend Your Compute Where It Matters</title><link>https://musfiqdehan.com/blog/four-stage-deduplication-pipeline</link><guid isPermaLink="true">https://musfiqdehan.com/blog/four-stage-deduplication-pipeline</guid><description>The expensive way to find duplicates is to compare everything using AI. Ordering the checks cheapest-first removes roughly nine in ten duplicates with a simple lookup and saves the costly comparison for the small remainder - the same quality of result, at a fraction of the running cost.</description><pubDate>Wed, 27 May 2026 00:00:00 GMT</pubDate><category>Deduplication</category><category>SimHash</category><category>Embeddings</category><category>pgvector</category><category>Multilingual NLP</category><category>PostgreSQL</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>At-Least-Once Is a Promise You Have to Keep</title><link>https://musfiqdehan.com/blog/at-least-once-redis-streams</link><guid isPermaLink="true">https://musfiqdehan.com/blog/at-least-once-redis-streams</guid><description>Retries are what stop a system losing work - and what make it do the same work twice. This is how to get the reliability without the duplicates: handlers safe to re-run, retries that back off, a dead-letter queue you can actually triage, and recovery for messages a crashed worker left behind.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate><category>Redis</category><category>Streams</category><category>Reliability</category><category>Python</category><category>Idempotency</category><category>Queues</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>Schema-per-Tenant Django: Isolation You Cannot Forget to Apply</title><link>https://musfiqdehan.com/blog/schema-per-tenant-django-multi-tenancy</link><guid isPermaLink="true">https://musfiqdehan.com/blog/schema-per-tenant-django-multi-tenancy</guid><description>Sharing one database between customers is one forgotten filter away from showing one client another client&apos;s data. Giving each customer their own separate space moves that safety from something developers must remember into something the database enforces - and here is exactly what it costs.</description><pubDate>Tue, 14 Apr 2026 00:00:00 GMT</pubDate><category>Django</category><category>PostgreSQL</category><category>Multi-Tenancy</category><category>SaaS</category><category>RBAC</category><category>Architecture</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>Holding 10k Daily Users Before You Buy a Bigger Server</title><link>https://musfiqdehan.com/blog/holding-10k-dau-before-you-scale-up</link><guid isPermaLink="true">https://musfiqdehan.com/blog/holding-10k-dau-before-you-scale-up</guid><description>A platform went from a few hundred to 10,000+ daily users without a bigger server. Four fixes did all the work - and buying hardware first would have hidden every one of them while the monthly bill kept growing.</description><pubDate>Thu, 19 Mar 2026 00:00:00 GMT</pubDate><category>PostgreSQL</category><category>PgBouncer</category><category>Django</category><category>Performance</category><category>Redis</category><category>Deployment</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>One API, Three Clients: A Dashboard, a Phone and a Turnstile</title><link>https://musfiqdehan.com/blog/one-api-three-clients</link><guid isPermaLink="true">https://musfiqdehan.com/blog/one-api-three-clients</guid><description>What changes when one backend must serve a web dashboard, a phone app, and a fingerprint terminal that cannot be updated, cannot be trusted about time and is usually offline. The most awkward client turned out to be the best specification the API ever got.</description><pubDate>Tue, 24 Feb 2026 00:00:00 GMT</pubDate><category>API Design</category><category>Django</category><category>React Native</category><category>IoT</category><category>Offline Sync</category><category>WebSocket</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>Let the Agent Propose, Not Write</title><link>https://musfiqdehan.com/blog/let-the-agent-propose-not-write</link><guid isPermaLink="true">https://musfiqdehan.com/blog/let-the-agent-propose-not-write</guid><description>The single boundary that separates an AI feature you can safely point at real customer data from a demo you cannot: the model proposes, the application decides. Plus validated output, provider failover and cost tracking treated as engineering problems rather than prompting problems.</description><pubDate>Thu, 29 Jan 2026 00:00:00 GMT</pubDate><category>LLM</category><category>Agents</category><category>Gemini</category><category>LangChain</category><category>Reliability</category><category>Architecture</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item><item><title>A Release Should Be One Git Tag</title><link>https://musfiqdehan.com/blog/tag-driven-python-releases</link><guid isPermaLink="true">https://musfiqdehan.com/blog/tag-driven-python-releases</guid><description>Every manual step in a release is a step somebody skips at 11pm - and the skipped step is the one customers find. How a forty-minute checklist became one command, with version numbers, release notes, builds and publishing all produced by automation.</description><pubDate>Thu, 11 Dec 2025 00:00:00 GMT</pubDate><category>Python</category><category>Poetry</category><category>GitHub Actions</category><category>CI/CD</category><category>Open Source</category><category>Versioning</category><author>musfiqdehan@gmail.com (Md. Musfiqur Rahaman)</author></item></channel></rss>