Senior PM (Societe Generale, CFA) shipping eval-first AI products end to end — from grounded RAG to multi-agent systems on Google ADK, Gemini, and BigQuery, with a cross-model judge that verifies every claim before it ships.
AI that can't cite its source is a liability. I build with provenance first, then put an eval suite around it so quality is a number, not a vibe.
LLMs only where judgment is genuinely required; fixed code and fixed order everywhere else. The cheapest, most reliable parts of a system have no model at all.
I write code, ship prototypes, and stand up multi-agent pipelines. Engineers respect PMs who understand what they're asking for.
A multi-agent system on Google's Agent Development Kit that mines real enterprise-AI pain from five live public sources, scores it deterministically, and has a cross-family judge verify every claim before it writes a PRD — gated on evals, with the receipts in BigQuery.
ProblemTeams decide what to build from anecdotes — so the loudest pain wins, not the most buildable one.
InsightA pain you can't act on is a backlog, not a signal. Score it frequency × intensity × addressability² in deterministic Python — a multiplicative veto, so one near-zero pillar kills the score instead of being averaged away. Addressability carries the highest exponent because it decides whether a pain belongs on the roadmap at all.
TradeoffA fixed-order ADK graph, not an autonomous LLM coordinator. The pipeline has exactly one correct order, so determinism owns the control flow and every stage persists to BigQuery — a crash resumes only the stage that failed. The model is reserved for judgment, never routing.
ResultA cross-family Claude judge verifies grounding before any PRD is written. I planted two lies in a synthesis — a count inflated from 12 to 80, and a fabricated "users want dark mode" with no signal behind it — and Claude failed both on the first run with the row-level evidence, then the gate forced a rewrite. A same-family control flagged nothing.
Eval-first financial anomaly detection across the Nasdaq-100. Three independent signals — statistical outliers, earnings-quality red flags, and narrative spin — roll into one conviction score, and an LLM-as-judge suite gates every explanation before an analyst sees it. The signal isn't the anomaly; it's the gap between the numbers and the story management tells about them.
ProblemAn analyst covering 90+ names can't read every 10-Q line by line — and the filings that matter most are the ones where the numbers turn but the narrative doesn't.
InsightThe signal isn't the anomaly — it's the gap between the numbers and the story management tells about them. When three independent signals agree, a false positive becomes unlikely.
TradeoffGraded explanations on a hard binary PASS/FAIL, not a 1–5 scale — a 4.9/5 average was hiding a 42% fail rate. Failure visibility over a flattering number.
Result32 ALERT-tier filings surfaced from 1,352 scored — each one a cited MD&A passage behind an LLM-as-judge gate that lifted the champion prompt to 4.72/5 with 100% label match.
Each one a rung on the same ladder — every link below is live.
A grounded "Decision Coach" over 700+ verbatim PM regrets from Lenny's Podcast. Precision 33%→90% via prompt iteration; confidence threshold tuned to refuse rather than guess (top-1 relevance 30%→80%).
Résumé + JD → an AI-scored candidate-fit radar, with auth, batch processing, an analytics dashboard, and a feedback loop. Kept deliberately raw — the "before" of the arc.
An open-source AI system that reads your goals + backlog and surfaces what to work on next. The meta-tool that runs this whole portfolio — building the system that builds the products.
Each product taught the next. Read top to bottom: the capability ladder from shipping to systems to self-verifying agents.
Learned to ship → to measure → to build systems → to make them agentic and self-verifying — in public.
The capabilities a senior AI PM is expected to own — and where each shipped product demonstrates them.
| Product | Grounding / RAG | Evals | Agentic | Telemetry | Shipped live |
|---|---|---|---|---|---|
| Pain Signal Intelligence | |||||
| RedInk | |||||
| PM Confessional | |||||
| Strategic Fit Canvas | |||||
| Product Management OS |
A few from the feed — each one a real decision from building these tools, in the open.
An LLM judging its own family shares its blind spots — correlated error. So Pain Signal Intelligence judges Gemini's synthesis with Claude, from a different model family. I planted a fabricated pain to test it; Claude failed it on grounded and forced a rewrite. A same-family control run flagged nothing.
Collectors hit source APIs that already return structured data, and scoring is a fixed formula. Neither needs inference. LLMs only where judgment is genuinely required — classify with Flash, synthesize with Pro, judge with Claude — and deterministic Python everywhere correctness has to be provable.
Numerical rubrics smooth over the failures you most need to see. Moving RedInk's eval suite to binary PASS/FAIL (per Hamel Husain's method) surfaced a routing bug — the model pointing analysts to the wrong filing artifact — and cut the failure rate 41% in one iteration, with no prompt change.
PM Confessional's search took 11 seconds. Dropped it to under 0.1s by skipping the expensive rerank when internal confidence is already high, falling back to Gemini Flash-Lite when it isn't, and caching embeddings. The fix was judgment about when to spend the call, not a faster model.
The principles that shape every product decision I make.
Features are solutions in search of problems. I spend more time understanding why users behave the way they do than cataloguing what they ask for. The best product insights live one question deeper — "why does that matter to you?" is where the real brief is.
For AI products especially, "it feels better" isn't shippable. I put an eval harness around the thing — precision, TPR/TNR, an LLM-as-judge with a golden set, a cross-family judge for the calls that matter — so I can tell whether a prompt change helped, regressed, or just moved the demo. Metrics inform; judgment decides; but I refuse to fly blind.
An LLM is the most expensive, least predictable component in any system — so I reach for it last, not first. Fixed formulas, fixed order, and plain code own the parts that have to be provable; the model is reserved for genuine judgment. Scoring a pain as frequency × intensity × addressability² in Python — not asking a model to "rate it" — is exactly this call.
I'm looking for senior AI PM roles where grounding, evals, and shipping matter. If that's the bar you're hiring for, let's talk.