<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Milan Niroula</title><description>Research notes and article write-ups by Milan Niroula, a software engineer reading about AI, software engineering, design, how big tech solves problems at scale, and the inner life.</description><link>https://mimi146.github.io/blog/</link><language>en</language><item><title>Context engineering for AI agents that edit a codebase</title><link>https://mimi146.github.io/blog/posts/context-engineering-for-ai-agents/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/context-engineering-for-ai-agents/</guid><description>How to choose the goals, files, tool results, and notes a coding agent sees, and how stale or untrusted context makes it fail.</description><pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate><category>ai</category><category>agents</category><category>software engineering</category></item><item><title>Spanner: TrueTime, commit wait and external consistency, explained</title><link>https://mimi146.github.io/blog/posts/spanner-truetime-external-consistency/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/spanner-truetime-external-consistency/</guid><description>How Google Spanner orders transactions worldwide: TrueTime intervals, commit wait, Paxos groups, two-phase commit over Paxos, safe time and lock-free reads.</description><pubDate>Sun, 08 Nov 2026 00:00:00 GMT</pubDate><category>distributed systems</category><category>databases</category><category>spanner</category><category>consistency</category><category>papers</category></item><item><title>Raft: how a few servers agree on one log, explained</title><link>https://mimi146.github.io/blog/posts/raft-understandable-consensus/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/raft-understandable-consensus/</guid><description>How Raft keeps a replicated log consistent: terms, randomized elections, log matching, the Figure 8 commit rule, joint consensus, snapshots, linearizable reads.</description><pubDate>Sun, 01 Nov 2026 00:00:00 GMT</pubDate><category>distributed systems</category><category>consensus</category><category>raft</category><category>consistency</category><category>papers</category></item><item><title>10 backend design patterns senior engineers use, in Java 21 and Spring Boot</title><link>https://mimi146.github.io/blog/posts/10-backend-design-patterns-in-java/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/10-backend-design-patterns-in-java/</guid><description>Repository, Factory, Singleton, Strategy, Observer, Builder, Adapter, Decorator, CQRS and Circuit Breaker in tested Java 21 and Spring Boot code, with pitfalls.</description><pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate><category>design patterns</category><category>java</category><category>spring boot</category><category>backend</category><category>resilience4j</category><category>cqrs</category></item><item><title>Dynamo: Amazon’s always-writeable key-value store, explained</title><link>https://mimi146.github.io/blog/posts/dynamo-amazons-highly-available-key-value-store/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/dynamo-amazons-highly-available-key-value-store/</guid><description>How Amazon&apos;s 2007 Dynamo kept carts writable: consistent hashing, sloppy quorums, hinted handoff, vector clocks, Merkle anti-entropy, and gossip (SOSP &apos;07).</description><pubDate>Mon, 26 Oct 2026 00:00:00 GMT</pubDate><category>distributed systems</category><category>amazon</category><category>key-value store</category><category>consistency</category><category>papers</category></item><item><title>TAO: Facebook’s social graph store — objects, associations, and refill</title><link>https://mimi146.github.io/blog/posts/tao-facebooks-social-graph-store/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/tao-facebooks-social-graph-store/</guid><description>How Facebook&apos;s TAO served a billion graph reads/sec: objects &amp; associations, leader/follower caches, refill messages, and master/slave regions (ATC &apos;13).</description><pubDate>Sun, 18 Oct 2026 00:00:00 GMT</pubDate><category>distributed systems</category><category>facebook</category><category>graph store</category><category>caching</category><category>consistency</category><category>papers</category></item><item><title>Caching in Spring Boot with Redis and RedisTemplate</title><link>https://mimi146.github.io/blog/posts/caching-spring-boot-redis-redistemplate/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/caching-spring-boot-redis-redistemplate/</guid><description>How to integrate Redis as a caching layer in a Spring Boot application using RedisTemplate to reduce database load and response times, step by step with code.</description><pubDate>Wed, 14 Oct 2026 00:00:00 GMT</pubDate><category>spring boot</category><category>redis</category><category>caching</category><category>java</category></item><item><title>Scaling Memcache at Facebook: leases, Gutter, and commit-log invalidation</title><link>https://mimi146.github.io/blog/posts/scaling-memcache-at-facebook/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/scaling-memcache-at-facebook/</guid><description>How Facebook scaled memcached to billions of requests per second: leases against thundering herds, Gutter pools, mcsqueal invalidation, and remote markers.</description><pubDate>Tue, 13 Oct 2026 00:00:00 GMT</pubDate><category>distributed systems</category><category>caching</category><category>memcached</category><category>consistency</category><category>papers</category></item><item><title>Scaling Slack’s job queue: Kafka in front of Redis</title><link>https://mimi146.github.io/blog/posts/scaling-slacks-job-queue/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/scaling-slacks-job-queue/</guid><description>Slack put Kafka in front of Redis so enqueue stays up when workers stall: durable buffering, Kafkagate, JQRelay rate limits, and incremental migration.</description><pubDate>Sun, 04 Oct 2026 00:00:00 GMT</pubDate><category>distributed systems</category><category>messaging</category><category>kafka</category><category>redis</category><category>job queues</category></item><item><title>How Discord stores trillions of messages: from MongoDB to Cassandra to ScyllaDB</title><link>https://mimi146.github.io/blog/posts/how-discord-stores-trillions-of-messages/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/how-discord-stores-trillions-of-messages/</guid><description>How Discord moved chat history from MongoDB to Cassandra to ScyllaDB: time-bucketed partitions, tombstone traps, hot partitions, and Rust request coalescing.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><category>distributed systems</category><category>databases</category><category>data modeling</category><category>systems at scale</category></item><item><title>Idempotency keys: how payment APIs make retries safe</title><link>https://mimi146.github.io/blog/posts/idempotency-keys-safe-retries/</link><guid isPermaLink="true">https://mimi146.github.io/blog/posts/idempotency-keys-safe-retries/</guid><description>Notes on how APIs like Stripe use idempotency keys so clients can retry failed requests without charging a customer twice, plus a minimal implementation.</description><pubDate>Sat, 03 Oct 2026 00:00:00 GMT</pubDate><category>software engineering</category><category>distributed systems</category><category>api design</category><category>systems at scale</category></item></channel></rss>