<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://pritsheth.com/feed.xml" rel="self" type="application/atom+xml" /><link href="https://pritsheth.com/" rel="alternate" type="text/html" /><updated>2026-05-15T22:47:48+00:00</updated><id>https://pritsheth.com/feed.xml</id><title type="html">Prit Sheth</title><subtitle>Senior Software Engineer at Meta. I build at the intersection of Ads, ML, and distributed systems. Previously Stellar, Robinhood, Dropbox, Quantstamp (YC W18), and Barclays.</subtitle><author><name>Prit Sheth</name><email>pritsheth9@gmail.com</email></author><entry><title type="html">Welcome — and what I’ll be writing about here</title><link href="https://pritsheth.com/blog/welcome/" rel="alternate" type="text/html" title="Welcome — and what I’ll be writing about here" /><published>2026-05-14T00:00:00+00:00</published><updated>2026-05-14T00:00:00+00:00</updated><id>https://pritsheth.com/blog/welcome</id><content type="html" xml:base="https://pritsheth.com/blog/welcome/"><![CDATA[<p>This is the first post on the new site. Quick note on what to expect here, then we’ll get to the actual writing.</p>

<h2 id="what-ill-be-writing-about">What I’ll be writing about</h2>

<p>Three topics, mostly:</p>

<ol>
  <li><strong>Ads infrastructure &amp; ML systems</strong> — what I work on day-to-day at Meta. Things like ranking, delivery control, feature stores, and the surprisingly hard problem of <em>not</em> showing the same ad too many times.</li>
  <li><strong>LLM tooling for engineers</strong> — I’ve been building an internal Ads-debug agent using RAG + tool use. Lots to share about what works and what doesn’t.</li>
  <li><strong>War stories from FinTech &amp; crypto</strong> — I spent years at Barclays, Robinhood, and Stellar before Meta. There are some good ones.</li>
</ol>

<h2 id="what-i-wont-be-writing-about">What I won’t be writing about</h2>

<ul>
  <li>Hot takes on tech twitter</li>
  <li>“How I 10x’d my productivity” lifehacks</li>
  <li>Anything that requires you to subscribe to a newsletter to finish reading</li>
</ul>

<h2 id="how-this-is-built">How this is built</h2>

<p>This site is static — Jekyll, GitHub Pages, no analytics, no tracking. The source is open if you want to copy any of it.</p>

<p>Notes (algorithms + system design) live at <a href="/notes"><code class="language-plaintext highlighter-rouge">/notes</code></a>. Resume + recommendations on <a href="/">the homepage</a>.</p>

<p>More soon.</p>]]></content><author><name>Prit Sheth</name><email>pritsheth9@gmail.com</email></author><category term="meta" /><category term="intro" /><summary type="html"><![CDATA[The first post. What this blog will (and won't) cover.]]></summary></entry><entry><title type="html">Building an LLM agent for Ads debugging at Meta</title><link href="https://pritsheth.com/blog/llm-ads-debug-agent/" rel="alternate" type="text/html" title="Building an LLM agent for Ads debugging at Meta" /><published>2026-05-10T00:00:00+00:00</published><updated>2026-05-10T00:00:00+00:00</updated><id>https://pritsheth.com/blog/llm-ads-debug-agent</id><content type="html" xml:base="https://pritsheth.com/blog/llm-ads-debug-agent/"><![CDATA[<p>Some of the most painful work at any Ads org is <em>figuring out why a specific ad didn’t get delivered</em>. Logs are everywhere. Metrics live in five different systems. The team you need to ask is asleep in another timezone.</p>

<p>This is the kind of problem LLMs are obviously good at, but the path from “obviously good” to “actually useful in production” is longer than people think.</p>

<h2 id="the-shape-of-the-problem">The shape of the problem</h2>

<p>When an advertiser complains “my ad isn’t being delivered,” the engineer on call has to walk a graph:</p>

<ul>
  <li>Was the campaign budget exhausted?</li>
  <li>Did the targeting filter everyone out?</li>
  <li>Did the ranker score it too low?</li>
  <li>Did frequency capping kick in?</li>
  <li>Is there an outage in a downstream system?</li>
</ul>

<p>Each branch has its own logs, dashboards, and ownership. Investigation can take hours.</p>

<h2 id="what-we-built">What we built</h2>

<p>Sketch it as three pieces:</p>

<ol>
  <li><strong>Retrieval</strong> over a curated index of logs, metrics, and runbooks. Cheap, narrow, and effective. We <em>don’t</em> try to retrieve over all of Meta — just the relevant slice for an Ads-delivery question.</li>
  <li><strong>Tools</strong> — wrappers around the same internal CLIs an on-call engineer would use. The model decides which to call and chains them together.</li>
  <li><strong>A reasoning loop</strong> that’s allowed to think across multiple tool calls before answering.</li>
</ol>

<h2 id="lessons-that-surprised-me">Lessons that surprised me</h2>

<ul>
  <li><em>Tool descriptions matter more than prompt engineering.</em> If a tool’s description is fuzzy, the model picks the wrong one. Spending half a day rewriting tool descriptions did more than two weeks of prompt tweaks.</li>
  <li><em>Letting the model say “I don’t know”</em> dramatically improved trust. Engineers stopped second-guessing every answer.</li>
  <li><em>Don’t let it act on production.</em> Read-only tools only. The agent suggests, the on-call decides.</li>
</ul>

<p>More posts to come on the retrieval index design and the eval setup.</p>]]></content><author><name>Prit Sheth</name><email>pritsheth9@gmail.com</email></author><category term="llm" /><category term="ads" /><category term="rag" /><category term="tool-use" /><summary type="html"><![CDATA[What worked, what didn't, and where retrieval-augmented agents actually earn their keep.]]></summary></entry></feed>