<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
  <title>Blog — Aneesh Pothuru</title>
  <link>https://apothuru.com/</link>
  <atom:link href="https://apothuru.com/blog/feed.xml" rel="self" type="application/rss+xml"/>
  <description>My thoughts on agents, data, physical AI, RL environments, and myself.</description>
  <language>en-us</language>
  <managingEditor>pothuruaneesh23@gmail.com (Aneesh Pothuru)</managingEditor>
  <lastBuildDate>Tue, 14 Jul 2026 12:00:00 GMT</lastBuildDate>
  <item>
    <title>The Loop I Keep Building</title>
    <link>https://apothuru.com/blog/the-loop-i-keep-building/</link>
    <guid isPermaLink="true">https://apothuru.com/blog/the-loop-i-keep-building/</guid>
    <pubDate>Tue, 14 Jul 2026 12:00:00 GMT</pubDate>
    <author>pothuruaneesh23@gmail.com (Aneesh Pothuru)</author>
    <description>Explore, evaluate, ship, measure. The same four-step loop shows up in everything I've built, from a parking-garage capstone to ML research tooling at Waymo. An introduction.</description>
    <content:encoded><![CDATA[<p>Every engineer has a shape they keep drawing. Mine is four boxes: a way
to <strong>explore</strong> the data, a way to <strong>evaluate</strong> what it says, a way to
<strong>ship</strong> the result, and a way to <strong>measure</strong> whether it helped. I’ve
built some version of this at a startup I co-founded, at two big cloud
companies, and now at Waymo. So instead of writing an intro post that
walks through my résumé top to bottom, I figured I’d walk through the
loop and let the jobs fall where they fall.</p>
<h2 id="the-loop">The loop <a class="heading-anchor" href="https://apothuru.com/blog/the-loop-i-keep-building/#the-loop" aria-label="Permalink to “The loop”"><span aria-hidden="true">#</span></a></h2>
<p><figure class="diagram" role="img" aria-label="The loop: four stages cycling clockwise — explore, evaluate, ship, measure — with data as the hub every stage draws from and writes back to."><svg aria-hidden="true" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 420" class="d-loop">
  <!-- ==========================================================================
       The loop I keep building (for the about post).

       Four stages cycling clockwise — explore → evaluate → ship → measure —
       with data as the hub every stage draws from. Same visual language as
       world-model-loop.svg: elbow edges, mono labels, one accent element
       (here, the hub). Painted with the blog's CSS custom properties (plus
       light-palette fallbacks for standalone viewing) so it follows the
       light/dark toggle when inlined by scripts/build-blog.js.
       ======================================================================= -->
  <style>
    .d-loop { font-family: var(--font-mono, "JetBrains Mono", Menlo, monospace); }
    .d-loop .node rect {
      fill: var(--surface, #FFFFFF);
      stroke: var(--rule-2, #D2C6B2);
      stroke-width: 1.25;
    }
    .d-loop .node text {
      fill: var(--ink, #1A1613);
      font-size: 13px;
      text-anchor: middle;
      dominant-baseline: central;
    }
    .d-loop .hub circle {
      fill: var(--surface, #FFFFFF);
      stroke: var(--accent, #C9724C);
      stroke-width: 1.5;
    }
    .d-loop .hub text {
      fill: var(--accent-2, #A9542F);
      font-size: 13px;
      text-anchor: middle;
      dominant-baseline: central;
      letter-spacing: 0.08em;
    }
    .d-loop .edge {
      fill: none;
      stroke: var(--muted, #6B5F4E);
      stroke-width: 1.5;
    }
    .d-loop .spoke {
      fill: none;
      stroke: var(--rule-2, #D2C6B2);
      stroke-width: 1.25;
      stroke-dasharray: 3 5;
    }
    .d-loop .arr { fill: var(--muted, #6B5F4E); }
  </style>

  <defs>
    <marker id="loop-arr" viewBox="0 0 10 10" refX="8" refY="5"
            markerWidth="7" markerHeight="7" orient="auto-start-reverse">
      <path d="M0,0 L10,5 L0,10 z" class="arr"/>
    </marker>
  </defs>

  <!-- dotted spokes: every stage reads from and writes back to data -->
  <path class="spoke" d="M320 168 V80"/>
  <path class="spoke" d="M362 210 H454"/>
  <path class="spoke" d="M320 252 V340"/>
  <path class="spoke" d="M278 210 H186"/>

  <!-- the cycle, clockwise -->
  <path class="edge" d="M395 51 H535 V181"  marker-end="url(#loop-arr)"/>
  <path class="edge" d="M535 233 V369 H401" marker-end="url(#loop-arr)"/>
  <path class="edge" d="M245 369 H105 V239" marker-end="url(#loop-arr)"/>
  <path class="edge" d="M105 187 V51 H239"  marker-end="url(#loop-arr)"/>

  <!-- hub -->
  <g class="hub">
    <circle cx="320" cy="210" r="42"/>
    <text x="320" y="210">data</text>
  </g>

  <!-- stages -->
  <g class="node">
    <rect x="245" y="28" width="150" height="46" rx="6"/>
    <text x="320" y="51">Explore</text>
  </g>
  <g class="node">
    <rect x="460" y="187" width="150" height="46" rx="6"/>
    <text x="535" y="210">Evaluate</text>
  </g>
  <g class="node">
    <rect x="245" y="346" width="150" height="46" rx="6"/>
    <text x="320" y="369">Ship</text>
  </g>
  <g class="node">
    <rect x="30" y="187" width="150" height="46" rx="6"/>
    <text x="105" y="210">Measure</text>
  </g>
</svg></figure></p>
<p>None of the four stages is interesting on its own. The thing I actually
care about is cycle time: how fast a question makes it all the way
around. At Waymo the version of this that matters is research velocity,
the gap between a researcher having a hypothesis and having a training
run that tests it,</p>
<p class="katex-block"><span class="katex-display"><span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML" display="block"><semantics><mrow><mi mathvariant="normal">Δ</mi><mi>t</mi><mtext>  </mtext><mo>=</mo><mtext>  </mtext><msub><mi>t</mi><mtext>training run</mtext></msub><mo>−</mo><msub><mi>t</mi><mtext>hypothesis</mtext></msub><mo separator="true">,</mo></mrow><annotation encoding="application/x-tex">\Delta t \;=\; t_{\text{training run}} - t_{\text{hypothesis}},
</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord">Δ</span><span class="mord mathnormal">t</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mrel">=</span><span class="mspace" style="margin-right:0.2778em;"></span><span class="mspace" style="margin-right:0.2778em;"></span></span><span class="base"><span class="strut" style="height:0.9012em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3175em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">training run</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mspace" style="margin-right:0.2222em;"></span><span class="mbin">−</span><span class="mspace" style="margin-right:0.2222em;"></span></span><span class="base"><span class="strut" style="height:0.9012em;vertical-align:-0.2861em;"></span><span class="mord"><span class="mord mathnormal">t</span><span class="msupsub"><span class="vlist-t vlist-t2"><span class="vlist-r"><span class="vlist" style="height:0.3361em;"><span style="top:-2.55em;margin-left:0em;margin-right:0.05em;"><span class="pstrut" style="height:2.7em;"></span><span class="sizing reset-size6 size3 mtight"><span class="mord mtight"><span class="mord text mtight"><span class="mord mtight">hypothesis</span></span></span></span></span></span><span class="vlist-s">​</span></span><span class="vlist-r"><span class="vlist" style="height:0.2861em;"><span></span></span></span></span></span></span><span class="mpunct">,</span></span></span></span></span></p>
<p>and most of my job is making <span class="katex"><span class="katex-mathml"><math xmlns="http://www.w3.org/1998/Math/MathML"><semantics><mrow><mi mathvariant="normal">Δ</mi><mi>t</mi></mrow><annotation encoding="application/x-tex">\Delta t</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="base"><span class="strut" style="height:0.6833em;"></span><span class="mord">Δ</span><span class="mord mathnormal">t</span></span></span></span> smaller. Everything below is
that same obsession at different companies.</p>
<blockquote>
<p>A platform team’s product isn’t the platform. It’s how fast the
people on top of it can move.</p>
</blockquote>
<h2 id="where-ive-run-it">Where I’ve run it <a class="heading-anchor" href="https://apothuru.com/blog/the-loop-i-keep-building/#where-ive-run-it" aria-label="Permalink to “Where I’ve run it”"><span aria-hidden="true">#</span></a></h2>
<table>
<thead>
<tr>
<th>Years</th>
<th>Place</th>
<th>The loop, that time</th>
</tr>
</thead>
<tbody>
<tr>
<td>2025 —</td>
<td>Waymo</td>
<td>data exploration + eval systems for ML research</td>
</tr>
<tr>
<td>2023 — 2025</td>
<td>Amazon Web Services</td>
<td>identity + multi-tenancy for QuickSight Q Business</td>
</tr>
<tr>
<td>2022 — 2023</td>
<td>Bench AI (co-founder)</td>
<td>automated cloud for ML workloads</td>
</tr>
<tr>
<td>2021 — 2022</td>
<td>VMware</td>
<td>CI/CD + regression automation for vRealize</td>
</tr>
<tr>
<td>2020</td>
<td>Spacepark (capstone)</td>
<td>a parking garage that watched itself</td>
</tr>
</tbody>
</table>
<h3 id="waymo">Waymo <a class="heading-anchor" href="https://apothuru.com/blog/the-loop-i-keep-building/#waymo" aria-label="Permalink to “Waymo”"><span aria-hidden="true">#</span></a></h3>
<p>I work on the exploration and evaluation layer of Waymo’s systems
intelligence platform. It’s the tooling researchers use to find, slice,
and validate every dataset the company has collected, and to trace
where each one came from: semantic search, validations, visualizations,
dataset lineage. The difference it makes is whether a researcher spends
their morning thinking or digging.</p>
<p>Two pieces I’m proud of. The ETL pipelines produce training sets and
validation reports in the same pass, so quality problems show up before
they cost anyone a training run. And we built agents that scan our
services for vulnerabilities and operational gaps, which cut that
discovery work by about 90%. With MCP and agent skills wired into the
platform, a researcher can ask for an artifact in plain language and
the system assembles it.</p>
<p>After every launch we track adoption numbers to see what actually
landed. That part is less fun to build and it changes what you build
next, which is the point.</p>
<h3 id="aws">AWS <a class="heading-anchor" href="https://apothuru.com/blog/the-loop-i-keep-building/#aws" aria-label="Permalink to “AWS”"><span aria-hidden="true">#</span></a></h3>
<p>On QuickSight Q Business I designed the permission framework that lets
admins set custom user and role access, and shipped multi-tenancy on
AWS Identity Center so customer data stays isolated across workloads.
The thing people actually thanked me for was an API reporting service
that saved each team a couple hours in weekly ops reviews. I also wrote
CRUD APIs for 15+ QuickSight asset types. Tedious work, but it’s what
made customer migrations possible, and nobody migrates to a product
they can’t get their data into.</p>
<h3 id="bench-ai">Bench AI <a class="heading-anchor" href="https://apothuru.com/blog/the-loop-i-keep-building/#bench-ai" aria-label="Permalink to “Bench AI”"><span aria-hidden="true">#</span></a></h3>
<p>At 20 I co-founded Bench AI<sup class="footnote-ref"><a href="https://apothuru.com/blog/the-loop-i-keep-building/#fn1" id="fnref1">[1]</a></sup>, an automated cloud for ML workloads,
offered as IaaS and SaaS. As a founder you are every box in the diagram
at once. I built the financial models, raised from institutional
investors, designed the system end to end (data model, ORM, public
API), and set up the CI/CD, Nginx, Docker, and AWS underneath it.
Tuning the Spring Boot backend and shortening Lambda durations cut our
compute costs by 30%. When the money is your own runway, you chase
every percent.</p>
<h3 id="vmware-and-before">VMware and before <a class="heading-anchor" href="https://apothuru.com/blog/the-loop-i-keep-building/#vmware-and-before" aria-label="Permalink to “VMware and before”"><span aria-hidden="true">#</span></a></h3>
<p>At VMware I wrote the UI and API automation that caught regressions
across vRealize Automation’s CI/CD pipeline, and helped the product
expand into Brazil and the UK without dropping availability. Before any
of that, in school, five of us built Spacepark<sup class="footnote-ref"><a href="https://apothuru.com/blog/the-loop-i-keep-building/#fn2" id="fnref2">[2]</a></sup>: portable hardware
plus a mobile app that detected traffic flow in parking garages (object
size, velocity, direction) and streamed it over wifi. First version of
the loop I ever shipped.</p>
<h2 id="the-tools-that-keep-showing-up">The tools that keep showing up <a class="heading-anchor" href="https://apothuru.com/blog/the-loop-i-keep-building/#the-tools-that-keep-showing-up" aria-label="Permalink to “The tools that keep showing up”"><span aria-hidden="true">#</span></a></h2>
<p>The stack changes, the shape doesn’t. Inventory:</p>
<pre class="shiki shiki-themes github-light github-dark" style="--shiki-light:#24292e;--shiki-dark:#e1e4e8;--shiki-light-bg:#fff;--shiki-dark-bg:#24292e" tabindex="0"><code><span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">languages</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">:      [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">java</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">javascript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">typescript</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">python</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">c++</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">infrastructure</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">: [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">aws</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">gcp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">grpc</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">spanner</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">apache beam</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">docker</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">                 nginx</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">spring</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">react</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">django</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">postgres</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">ml</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">:             [</span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">ml platform</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">distributed systems</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">mcp</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">rag</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">,</span></span>
<span class="line"><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">                 post-training</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">agent skills</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">etl</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">, </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">data lineage</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">]</span></span>
<span class="line"><span style="--shiki-light:#22863A;--shiki-dark:#85E89D">degree</span><span style="--shiki-light:#24292E;--shiki-dark:#E1E4E8">:         </span><span style="--shiki-light:#032F62;--shiki-dark:#9ECBFF">cum laude, computer science, san jose state</span></span>
<span class="line"></span></code></pre>
<h2 id="what-i-care-about-now">What I care about now <a class="heading-anchor" href="https://apothuru.com/blog/the-loop-i-keep-building/#what-i-care-about-now" aria-label="Permalink to “What I care about now”"><span aria-hidden="true">#</span></a></h2>
<p>What I’m curious about right now: agents that do real operational work
instead of demos, the data infrastructure underneath ML research,
physical AI (systems that have to act in the world, not just describe
it), and RL environments as products in their own right. That’s what
this blog is for.</p>
<p>If any of that overlaps with what you’re building, say hi:
<a href="mailto:pothuruaneesh23@gmail.com">email</a> ·
<a href="https://github.com/Aneesh-Pothuru" target="_blank" rel="noopener noreferrer">github</a> ·
<a href="https://www.linkedin.com/in/aneesh-pothuru/" target="_blank" rel="noopener noreferrer">linkedin</a>. Or wander the
<a href="https://apothuru.com/portfolio/">portfolio</a>, which has a LiDAR city hiding in it.</p>
<hr class="footnotes-sep">
<section class="footnotes">
<ol class="footnotes-list">
<li id="fn1" class="footnote-item"><p>“Automated cloud” meant: point it at an ML workload and it
provisions, deploys, and scales the infrastructure without the
researcher touching a console. The pitch was that ML people should
spend their time on ML. <a href="https://apothuru.com/blog/the-loop-i-keep-building/#fnref1" class="footnote-backref">↩︎</a></p>
</li>
<li id="fn2" class="footnote-item"><p>The garage held about 15 cars, so the team joke was that we built
“a 15-person parking garage.” The hardware was portable enough to demo
out of a backpack. <a href="https://apothuru.com/blog/the-loop-i-keep-building/#fnref2" class="footnote-backref">↩︎</a></p>
</li>
</ol>
</section>
]]></content:encoded>
    <category>engineering</category>
    <category>data</category>
    <category>agents</category>
  </item>
</channel>
</rss>
