<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Islom&apos;s Engineering journal</title><description>Technical notes organized by domain - architecture decisions, debugging stories, experiments, and lessons from production.</description><link>https://islomcodes.uz/</link><language>en-us</language><item><title>Idempotency Keys in Distributed APIs</title><link>https://islomcodes.uz/articles/idempotency-keys/</link><guid isPermaLink="true">https://islomcodes.uz/articles/idempotency-keys/</guid><description>How we eliminated duplicate charges and side effects using idempotency keys — design, implementation, and the edge cases that almost broke production.</description><pubDate>Sat, 15 Nov 2025 00:00:00 GMT</pubDate><category>api-design</category><category>reliability</category><category>patterns</category><category>.NET</category><category>Redis</category><category>PostgreSQL</category></item><item><title>Circuit Breakers for Downstream Dependencies</title><link>https://islomcodes.uz/articles/circuit-breaker-downstream/</link><guid isPermaLink="true">https://islomcodes.uz/articles/circuit-breaker-downstream/</guid><description>Polly integration, failure thresholds, and the half-open state that prevented a cascade outage.</description><pubDate>Wed, 08 Oct 2025 00:00:00 GMT</pubDate><category>resilience</category><category>circuit-breaker</category><category>polly</category><category>.NET</category><category>Redis</category></item><item><title>Zero-Downtime Deployments on Kubernetes</title><link>https://islomcodes.uz/articles/zero-downtime-deployments/</link><guid isPermaLink="true">https://islomcodes.uz/articles/zero-downtime-deployments/</guid><description>Rolling updates aren&apos;t enough when you have long-lived connections. Notes from implementing blue-green deployments with connection draining.</description><pubDate>Thu, 02 Oct 2025 00:00:00 GMT</pubDate><category>deployments</category><category>kubernetes</category><category>reliability</category><category>Kubernetes</category><category>Docker</category><category>Nginx</category></item><item><title>Minimal API Performance: Source Generators vs Reflection</title><link>https://islomcodes.uz/articles/minimal-api-performance/</link><guid isPermaLink="true">https://islomcodes.uz/articles/minimal-api-performance/</guid><description>Benchmarking .NET Minimal APIs with source-generated JSON serialization — 3x throughput improvement with less allocation.</description><pubDate>Thu, 18 Sep 2025 00:00:00 GMT</pubDate><category>performance</category><category>dotnet</category><category>benchmarks</category><category>.NET</category><category>C#</category></item><item><title>Finding the Missing Index with EXPLAIN ANALYZE</title><link>https://islomcodes.uz/articles/missing-index-explain/</link><guid isPermaLink="true">https://islomcodes.uz/articles/missing-index-explain/</guid><description>A 4-second query that looked innocent in staging — sequential scan on 40M rows in production.</description><pubDate>Fri, 05 Sep 2025 00:00:00 GMT</pubDate><category>postgresql</category><category>indexes</category><category>query-planning</category><category>PostgreSQL</category></item><item><title>HPA with Custom Metrics: Scaling Beyond CPU</title><link>https://islomcodes.uz/articles/hpa-custom-metrics/</link><guid isPermaLink="true">https://islomcodes.uz/articles/hpa-custom-metrics/</guid><description>CPU-based HPA failed us during traffic spikes. Switching to request-rate metrics from Prometheus fixed autoscaling lag.</description><pubDate>Fri, 22 Aug 2025 00:00:00 GMT</pubDate><category>autoscaling</category><category>observability</category><category>kubernetes</category><category>Kubernetes</category><category>Prometheus</category></item><item><title>Graceful Shutdown in ASP.NET Core Services</title><link>https://islomcodes.uz/articles/graceful-shutdown/</link><guid isPermaLink="true">https://islomcodes.uz/articles/graceful-shutdown/</guid><description>SIGTERM handling, draining in-flight requests, and the 30-second window Kubernetes gives you.</description><pubDate>Fri, 01 Aug 2025 00:00:00 GMT</pubDate><category>reliability</category><category>aspnetcore</category><category>kubernetes</category><category>.NET</category><category>Kubernetes</category></item><item><title>Saga Pattern for Order Fulfillment</title><link>https://islomcodes.uz/articles/saga-order-fulfillment/</link><guid isPermaLink="true">https://islomcodes.uz/articles/saga-order-fulfillment/</guid><description>Choreography vs orchestration — why we picked orchestrated sagas with compensating transactions.</description><pubDate>Fri, 25 Jul 2025 00:00:00 GMT</pubDate><category>saga</category><category>distributed-transactions</category><category>orders</category><category>.NET</category><category>PostgreSQL</category><category>Redis</category></item><item><title>PostgreSQL Connection Pooling at Scale</title><link>https://islomcodes.uz/articles/connection-pooling/</link><guid isPermaLink="true">https://islomcodes.uz/articles/connection-pooling/</guid><description>PgBouncer vs built-in pooling — benchmarks, configuration, and why we run both in production.</description><pubDate>Thu, 10 Jul 2025 00:00:00 GMT</pubDate><category>database</category><category>pooling</category><category>performance</category><category>PostgreSQL</category><category>Docker</category></item><item><title>API Key Rotation Without Downtime</title><link>https://islomcodes.uz/articles/api-key-rotation/</link><guid isPermaLink="true">https://islomcodes.uz/articles/api-key-rotation/</guid><description>Dual-key validation window, gradual client migration, and the revocation list we keep in Redis.</description><pubDate>Thu, 12 Jun 2025 00:00:00 GMT</pubDate><category>security</category><category>api-keys</category><category>rotation</category><category>Redis</category><category>.NET</category></item><item><title>Debugging a Cache Stampede at 3 AM</title><link>https://islomcodes.uz/articles/cache-stampede/</link><guid isPermaLink="true">https://islomcodes.uz/articles/cache-stampede/</guid><description>Hot key expiration caused a thundering herd that took down Redis and cascaded to PostgreSQL. Postmortem and fix.</description><pubDate>Thu, 05 Jun 2025 00:00:00 GMT</pubDate><category>caching</category><category>incident</category><category>redis</category><category>Redis</category><category>.NET</category><category>PostgreSQL</category></item><item><title>Event Sourcing: When It Helped, When It Hurt</title><link>https://islomcodes.uz/articles/event-sourcing-notes/</link><guid isPermaLink="true">https://islomcodes.uz/articles/event-sourcing-notes/</guid><description>Six months with event sourcing on an order management system — audit trail wins, operational complexity costs.</description><pubDate>Tue, 20 May 2025 00:00:00 GMT</pubDate><category>event-sourcing</category><category>architecture</category><category>cqrs</category><category>PostgreSQL</category><category>.NET</category></item><item><title>Channel-Based Background Workers in .NET</title><link>https://islomcodes.uz/articles/channel-background-workers/</link><guid isPermaLink="true">https://islomcodes.uz/articles/channel-background-workers/</guid><description>Replacing Task.Run fire-and-forget with System.Threading.Channels — backpressure, clean shutdown, metrics.</description><pubDate>Wed, 14 May 2025 00:00:00 GMT</pubDate><category>channels</category><category>background-services</category><category>concurrency</category><category>.NET</category><category>C#</category></item><item><title>Profiling .NET in Production Without Killing Performance</title><link>https://islomcodes.uz/articles/profiling-dotnet/</link><guid isPermaLink="true">https://islomcodes.uz/articles/profiling-dotnet/</guid><description>dotnet-trace, EventPipe, and continuous profiling with minimal overhead — our observability stack for latency investigation.</description><pubDate>Sat, 12 Apr 2025 00:00:00 GMT</pubDate><category>profiling</category><category>observability</category><category>dotnet</category><category>.NET</category><category>Linux</category></item><item><title>Multi-Stage Dockerfiles for .NET Services</title><link>https://islomcodes.uz/articles/multi-stage-dotnet-images/</link><guid isPermaLink="true">https://islomcodes.uz/articles/multi-stage-dotnet-images/</guid><description>Cutting image size from 1.2 GB to 210 MB and why chiseled images matter for pull time on Kubernetes.</description><pubDate>Tue, 08 Apr 2025 00:00:00 GMT</pubDate><category>docker</category><category>dotnet</category><category>images</category><category>Docker</category><category>.NET</category></item><item><title>IAM Least Privilege for CI Deploy Roles</title><link>https://islomcodes.uz/articles/iam-ci-least-privilege/</link><guid isPermaLink="true">https://islomcodes.uz/articles/iam-ci-least-privilege/</guid><description>Scoped OIDC roles for GitHub Actions — no long-lived AWS keys in repository secrets.</description><pubDate>Wed, 02 Apr 2025 00:00:00 GMT</pubDate><category>security</category><category>aws</category><category>iam</category><category>ci-cd</category><category>AWS</category><category>GitHub Actions</category></item><item><title>TLS Termination: Load Balancer vs Sidecar vs In-App</title><link>https://islomcodes.uz/articles/tls-termination-patterns/</link><guid isPermaLink="true">https://islomcodes.uz/articles/tls-termination-patterns/</guid><description>Three patterns we evaluated for mTLS between services — latency, ops burden, and cert rotation.</description><pubDate>Sat, 22 Mar 2025 00:00:00 GMT</pubDate><category>tls</category><category>mTLS</category><category>architecture</category><category>Kubernetes</category><category>Nginx</category></item><item><title>Rate Limiting Design for Birga Gateway</title><link>https://islomcodes.uz/articles/rate-limiting-design/</link><guid isPermaLink="true">https://islomcodes.uz/articles/rate-limiting-design/</guid><description>Token bucket vs sliding window vs fixed window — benchmarks and the hybrid approach we shipped.</description><pubDate>Sat, 01 Mar 2025 00:00:00 GMT</pubDate><category>rate-limiting</category><category>gateway</category><category>api</category><category>Redis</category><category>.NET</category><category>Kubernetes</category></item><item><title>Setting CPU and Memory Limits That Match Reality</title><link>https://islomcodes.uz/articles/resource-limits-rightsizing/</link><guid isPermaLink="true">https://islomcodes.uz/articles/resource-limits-rightsizing/</guid><description>Limits too low cause OOMKill loops. Too high waste money. How we right-sized from production metrics.</description><pubDate>Fri, 28 Feb 2025 00:00:00 GMT</pubDate><category>kubernetes</category><category>resources</category><category>limits</category><category>Kubernetes</category></item><item><title>Sizing a Payment Gateway for Peak Traffic</title><link>https://islomcodes.uz/articles/payment-gateway-capacity/</link><guid isPermaLink="true">https://islomcodes.uz/articles/payment-gateway-capacity/</guid><description>Back-of-envelope math for throughput, connection pools, and the assumptions that broke during Black Friday.</description><pubDate>Fri, 14 Feb 2025 00:00:00 GMT</pubDate><category>capacity-planning</category><category>gateway</category><category>trade-offs</category><category>Kubernetes</category><category>PostgreSQL</category><category>Redis</category></item><item><title>GitHub Actions Pipeline for Static Sites and Services</title><link>https://islomcodes.uz/articles/github-actions-deploy-pipeline/</link><guid isPermaLink="true">https://islomcodes.uz/articles/github-actions-deploy-pipeline/</guid><description>Build, test, and deploy — the workflow we use for this journal and our internal docs.</description><pubDate>Fri, 10 Jan 2025 00:00:00 GMT</pubDate><category>ci-cd</category><category>github-actions</category><category>automation</category><category>GitHub Actions</category><category>Docker</category></item><item><title>Debugging High Load with strace and perf</title><link>https://islomcodes.uz/articles/debugging-syscall-latency/</link><guid isPermaLink="true">https://islomcodes.uz/articles/debugging-syscall-latency/</guid><description>P99 latency spiked but CPU was idle — tracing syscalls found we were blocked on fsync, not compute.</description><pubDate>Thu, 05 Dec 2024 00:00:00 GMT</pubDate><category>linux</category><category>debugging</category><category>performance</category><category>Linux</category><category>PostgreSQL</category></item><item><title>Docker Compose for a Production-Like Local Stack</title><link>https://islomcodes.uz/articles/compose-local-stack/</link><guid isPermaLink="true">https://islomcodes.uz/articles/compose-local-stack/</guid><description>Postgres, Redis, Kafka, and the gateway — one command for new engineers to get a working environment.</description><pubDate>Fri, 22 Nov 2024 00:00:00 GMT</pubDate><category>docker-compose</category><category>local-dev</category><category>dx</category><category>Docker</category><category>PostgreSQL</category><category>Redis</category></item><item><title>When DNS Failover Did the Opposite of Failover</title><link>https://islomcodes.uz/articles/dns-failover-incident/</link><guid isPermaLink="true">https://islomcodes.uz/articles/dns-failover-incident/</guid><description>TTL misconfiguration routed 40% of traffic to a decommissioned region for 18 minutes.</description><pubDate>Thu, 17 Oct 2024 00:00:00 GMT</pubDate><category>dns</category><category>incident</category><category>failover</category><category>AWS</category><category>Linux</category></item><item><title>Read-Heavy vs Write-Heavy: A Design Checklist</title><link>https://islomcodes.uz/articles/read-heavy-vs-write-heavy/</link><guid isPermaLink="true">https://islomcodes.uz/articles/read-heavy-vs-write-heavy/</guid><description>Questions I ask before choosing caching, replication, or sharding — a reusable checklist from five system designs.</description><pubDate>Tue, 03 Sep 2024 00:00:00 GMT</pubDate><category>trade-offs</category><category>checklist</category><category>design</category><category>PostgreSQL</category><category>Redis</category></item><item><title>JWT vs Session Tokens for Internal APIs</title><link>https://islomcodes.uz/articles/jwt-vs-session-tokens/</link><guid isPermaLink="true">https://islomcodes.uz/articles/jwt-vs-session-tokens/</guid><description>Why we use opaque session tokens at the gateway and JWT only for service-to-service calls.</description><pubDate>Wed, 14 Aug 2024 00:00:00 GMT</pubDate><category>security</category><category>auth</category><category>jwt</category><category>.NET</category><category>Redis</category></item><item><title>Migrating from Text Logs to Structured JSON</title><link>https://islomcodes.uz/articles/structured-logging-migration/</link><guid isPermaLink="true">https://islomcodes.uz/articles/structured-logging-migration/</guid><description>Six services, three log formats, one observability stack — how we standardized on Serilog + OpenTelemetry.</description><pubDate>Thu, 18 Jul 2024 00:00:00 GMT</pubDate><category>observability</category><category>logging</category><category>migration</category><category>.NET</category><category>Kubernetes</category></item><item><title>Spot Instances for Non-Critical Workloads</title><link>https://islomcodes.uz/articles/spot-instance-experiment/</link><guid isPermaLink="true">https://islomcodes.uz/articles/spot-instance-experiment/</guid><description>40% cost reduction on batch jobs — interruption handling, checkpointing, and what we never run on spot.</description><pubDate>Thu, 20 Jun 2024 00:00:00 GMT</pubDate><category>cost</category><category>aws</category><category>spot</category><category>AWS</category><category>Kubernetes</category></item><item><title>File Descriptor Limits Under Connection Spikes</title><link>https://islomcodes.uz/articles/file-descriptor-limits/</link><guid isPermaLink="true">https://islomcodes.uz/articles/file-descriptor-limits/</guid><description>Too many open sockets crashed the gateway with &apos;too many open files&apos; — ulimits, kernel tuning, and Kubernetes limits.</description><pubDate>Thu, 30 May 2024 00:00:00 GMT</pubDate><category>linux</category><category>networking</category><category>limits</category><category>Linux</category><category>Kubernetes</category></item><item><title>Distributed Locks with Redis Redlock</title><link>https://islomcodes.uz/articles/distributed-locks-redlock/</link><guid isPermaLink="true">https://islomcodes.uz/articles/distributed-locks-redlock/</guid><description>When single-instance Redis locks fail, Redlock trade-offs, and why we still prefer database advisory locks for money.</description><pubDate>Fri, 12 Apr 2024 00:00:00 GMT</pubDate><category>redis</category><category>locking</category><category>distributed-systems</category><category>Redis</category><category>.NET</category></item><item><title>Establishing a k6 Load Test Baseline</title><link>https://islomcodes.uz/articles/k6-load-test-baseline/</link><guid isPermaLink="true">https://islomcodes.uz/articles/k6-load-test-baseline/</guid><description>Smoke, load, stress, and soak scenarios — the four scripts we run before every major release.</description><pubDate>Fri, 15 Mar 2024 00:00:00 GMT</pubDate><category>load-testing</category><category>k6</category><category>benchmarks</category><category>Go</category><category>Kubernetes</category></item></channel></rss>