<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
  <title>Anup Mohan</title>
  <link>https://anupmohan.com</link>
  <description>Notes on AI agent infrastructure, distributed systems, and the things I break along the way.</description>
  <language>en</language>
  <lastBuildDate>Mon, 21 Sep 2026 15:41:21 GMT</lastBuildDate>
  <atom:link href="https://anupmohan.com/rss.xml" rel="self" type="application/rss+xml"/>
  <item>
    <title>RAG vs Context caching</title>
    <link>https://anupmohan.com/blog/rag-vs-context-caching/</link>
    <guid isPermaLink="true">https://anupmohan.com/blog/rag-vs-context-caching/</guid>
    <pubDate>Fri, 04 Sep 2026 09:00:00 GMT</pubDate>
    <description>I ran a small head-to-head between putting a whole governed corpus in context with prompt caching and retrieving from it with a managed RAG service. Caching won on quality and cost. Here&#39;s why, and when it stops winning.</description>
    <category>llm</category><category>agents</category><category>evals</category>
  </item>
  <item>
    <title>Metadata as code</title>
    <link>https://anupmohan.com/blog/metadata-as-code/</link>
    <guid isPermaLink="true">https://anupmohan.com/blog/metadata-as-code/</guid>
    <pubDate>Tue, 01 Sep 2026 09:00:00 GMT</pubDate>
    <description>Every new metadata concept was turning into a new table, a migration and an API change. So we stopped modelling metadata in the database and started treating it like source code.</description>
    <category>metadata</category><category>architecture</category>
  </item>
  <item>
    <title>Metadata served via OKF</title>
    <link>https://anupmohan.com/blog/metadata-served-via-okf/</link>
    <guid isPermaLink="true">https://anupmohan.com/blog/metadata-served-via-okf/</guid>
    <pubDate>Mon, 20 Jul 2026 09:00:00 GMT</pubDate>
    <description>We put a few hundred governed definitions in Postgres because Postgres was already there. Here&#39;s why they ended up as markdown files in git instead, and how that one directory now feeds an API, MCP tools and an agent.</description>
    <category>metadata</category><category>architecture</category><category>agents</category>
  </item>
  <item>
    <title>How I&#39;m using RL to shorten market research surveys</title>
    <link>https://anupmohan.com/blog/linucb-adaptive-survey-routing/</link>
    <guid isPermaLink="true">https://anupmohan.com/blog/linucb-adaptive-survey-routing/</guid>
    <pubDate>Tue, 27 Jan 2026 09:00:00 GMT</pubDate>
    <description>Long surveys tire people out, and tired people give worse answers. I used LinUCB, a contextual bandit, to decide question by question whether to ask or skip. This post covers how it works, how I trained it on historical data without leaking the answer, and why accuracy was the wrong way to score it.</description>
    <category>reinforcement-learning</category><category>evals</category>
  </item>
  <item>
    <title>Why Python?</title>
    <link>https://anupmohan.com/blog/why-python/</link>
    <guid isPermaLink="true">https://anupmohan.com/blog/why-python/</guid>
    <pubDate>Sun, 20 Feb 2022 09:00:00 GMT</pubDate>
    <description>Do you generate repetitive reports, scrape websites or parse log files? Python is a simple, practical language for automating everyday work.</description>
    <category>python</category><category>automation</category>
  </item>
</channel>
</rss>