<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Kshitiz Shrestha</title><description>Kshitiz Shrestha, Senior Software Engineer &amp; Team Manager based in Hetauda, Nepal. Writing about backend systems, cloud architecture, and shipping production software.</description><link>https://erkshitiz.com.np</link><item><title>What I learned building a RAG pipeline in Go</title><link>https://erkshitiz.com.np/blog/building-a-rag-pipeline</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/building-a-rag-pipeline</guid><description>A weekend project to search internal docs with plain-language questions taught me that chunking and data hygiene matter more than which model you pick.</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate></item><item><title>What actually changed after six months of writing Go</title><link>https://erkshitiz.com.np/blog/php-to-go-six-months-later</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/php-to-go-six-months-later</guid><description>A follow-up to the original PHP-to-Go post: what held up, what surprised me, and what I would tell myself starting over.</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Rate limiting a public API: token bucket vs sliding window</title><link>https://erkshitiz.com.np/blog/rate-limiting-token-bucket-vs-sliding-window</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/rate-limiting-token-bucket-vs-sliding-window</guid><description>Two common rate-limiting algorithms, what they actually do differently, and which one fits a bursty public API.</description><pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Zero-downtime deploys on a single VPS</title><link>https://erkshitiz.com.np/blog/zero-downtime-deploys-single-vps</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/zero-downtime-deploys-single-vps</guid><description>No Kubernetes, no load balancer, just nginx and a build step. Here is what it actually takes to avoid downtime on deploy.</description><pubDate>Fri, 04 Sep 2026 00:00:00 GMT</pubDate></item><item><title>Feature flags without a vendor: a minimal in-house approach</title><link>https://erkshitiz.com.np/blog/feature-flags-without-a-vendor</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/feature-flags-without-a-vendor</guid><description>You don&apos;t need LaunchDarkly to ship behind a flag. A config table and a small helper function gets you most of the way there.</description><pubDate>Fri, 28 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Writing idempotent API endpoints (and why it matters for retries)</title><link>https://erkshitiz.com.np/blog/idempotent-api-endpoints</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/idempotent-api-endpoints</guid><description>Clients retry on timeouts whether you plan for it or not. Idempotency keys are how you stop that from double-charging someone.</description><pubDate>Fri, 21 Aug 2026 00:00:00 GMT</pubDate></item><item><title>What actually breaks when you scale a Postgres-backed API</title><link>https://erkshitiz.com.np/blog/scaling-postgres-backed-api</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/scaling-postgres-backed-api</guid><description>Connection pool exhaustion, missing indexes, and N+1 queries: the three things that actually bite you first.</description><pubDate>Fri, 14 Aug 2026 00:00:00 GMT</pubDate></item><item><title>API versioning strategies that don&apos;t turn into a mess</title><link>https://erkshitiz.com.np/blog/api-versioning-strategies</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/api-versioning-strategies</guid><description>URL versioning, header versioning, or none at all: what actually holds up once an API has real external consumers.</description><pubDate>Fri, 07 Aug 2026 00:00:00 GMT</pubDate></item><item><title>Structuring a Go project past the &quot;just main.go&quot; stage</title><link>https://erkshitiz.com.np/blog/go-project-structure</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/go-project-structure</guid><description>A single main.go works fine until it doesn&apos;t. Here&apos;s how I organize Go services once they outgrow one file.</description><pubDate>Fri, 31 Jul 2026 00:00:00 GMT</pubDate></item><item><title>What actually changes when you move from PHP to Go</title><link>https://erkshitiz.com.np/blog/php-to-go</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/php-to-go</guid><description>The parts of the PHP and Laravel mental model that transfer to Go, and the parts that do not.</description><pubDate>Fri, 24 Jul 2026 00:00:00 GMT</pubDate></item><item><title>AWS Lambda vs GCP Cloud Run: picking the right serverless model</title><link>https://erkshitiz.com.np/blog/aws-lambda-vs-gcp-cloud-run</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/aws-lambda-vs-gcp-cloud-run</guid><description>Notes from running the same workload on both, and the tradeoffs that actually mattered once real traffic hit.</description><pubDate>Fri, 17 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Debugging a goroutine leak in production</title><link>https://erkshitiz.com.np/blog/go-goroutine-leak</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/go-goroutine-leak</guid><description>A slow memory climb in a Go service turned out to be goroutines parked on a channel that never closed. Here is how we tracked it down.</description><pubDate>Fri, 10 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Hello, World</title><link>https://erkshitiz.com.np/blog/hello-world</link><guid isPermaLink="true">https://erkshitiz.com.np/blog/hello-world</guid><description>Why I am starting this blog, and what I plan to write about: backend systems, cloud architecture, and the stuff that breaks in production.</description><pubDate>Fri, 03 Jul 2026 00:00:00 GMT</pubDate></item></channel></rss>