How I work
Instrumented failure is the roadmap.
One person keeps four products moving because the products report their own failures in a form an AI agent can act on. The same discipline runs before launch: an idea has to earn its code, or it never becomes a fifth product. The judgment calls — what to investigate, what to instrument, when to aim the agent, which numbers to trust — stay human.
00
Make the idea earn the code
AudienceValidation requires inspectable demand evidence before code; a score only compresses the dossier.
The unfinished cycle dropped a certificate generator 41/50 → 30/50 and an SOW generator 38/50 → 28/50, pausing a certificate build. Its 200-query map, 20 audits, and five dossiers remain unfinished. Build-authorized winners: 0 · as of 2026-08-03.
Read the AudienceValidation case →
01
Instrument failure on purpose, then point an agent at it
This is the operating model, not a habit. Every failed recipe strip writes a row rich enough to root-cause from SQL: error type, which fetch tier got the page, which parser won, a ten-value AI outcome. Roughly monthly I read the distribution and tell a coding agent: learn from these, make the product better. The next time that class of failure occurs, it succeeds. The failure log is the roadmap. The agent is the mechanism. My job is deciding what gets instrumented and when to aim.
RecipeStripper's attempt-level failure rate read 24% in the May audit window and 19.3% in July's. July's round shipped nine batches straight off the failure panel — and the July 14 audit before it decomposed 477 attempts, found every failure already explained, and shipped nothing. A clean audit is a valid result. The next measurement is on the calendar: August 11.
02
The same loop, wherever ground truth accumulates
TripSapien's version is on its roadmap: whether a traveler kept, removed, or swapped a recommendation is ground truth nobody was reading, and three quarters of it was already being emitted. The staged plan enriches those events, aggregates keep rates per city and category, and only after a month of data feeds a bounded multiplier back into ranking. Deterministic SQL, never an LLM deciding in the loop.
The rule that makes it safe is written down too: a recommendation's outcome may never re-enter the user-signal path, because that would be a feedback loop.
03
When the data fails, show nothing
A failed source leaves a blank cell naming the break. Mismatched timestamps suppress ratios; a visitor total across sites stays unpublished to prevent double counting. Wrong is worse than missing. Filters stay property-specific: Linux traffic that looked bot-shaped on one converts at 8.9% on another.
Figures carry window, as-of date, and source; pending results say so.
04
Write the kill condition before the test runs
Channels should die of evidence, not fatigue. BingWow's growth experiments each shipped with the number that would kill them, written in advance. That's how 47 cold emails to zero backlinks became a closed verdict instead of a lingering hope, and how a title test measured 71 days late got graded a failure against its own bar even though clicks rose 551%. The discipline failed twice on the calendar: two products pre-committed verdict dates that nobody ran. Both were measured late, recorded as late, never back-filled. An unmeasured hypothesis silently promotes itself to a fact.
Features get the same treatment in reverse: YouTube support in RecipeStripper builds when 15 distinct visitors in 30 days hit that error. Deferred, with the trigger written down.
05
Publish the number that got worse
The homepage counter said 4,886 recipes stripped. It was counting page views. I rebased it to 1,743 in public and deleted the endpoint that let anything with a POST inflate it. Same instinct across the portfolio: organic traffic at zero after a link campaign is in the case study, and so is the conversion collapse that turned out to be scraper traffic in the denominator.
Anyone will publish the number that grows. The zeros are the credible part of this site.
06
Correct in place; keep the wrong version on disk
Better measurement overturned TripSapien's 22-city duplicate-content plan. The superseded audit stays struck through with the violated rule, preventing a repeat.
RecipeStripper records why 1,743 differs from the stricter 1,705; a retracted-figure register blocks withdrawn numbers.
07
Measure the yield before you build the pipeline
BingWow's GA4 export killed referrer recovery: 533 Direct and Unassigned sessions yielded only 10 new to the dashboard. But ~84% of Direct landed deep, revealing shared links. The dashboard split Direct 391 → 71 + 320.
An exact partition replaced the estimate. BigQuery now has zero live consumers but stays auditable; the latest re-run found 92% landing deep.
What this does not mean
I am not claiming these products are large, or that every research cycle should end in software. The interesting part is the decisions: where the opportunity actually was, what I got wrong about it, what I chose not to build, and what the corrected bet returned — dated, sourced, and honest about what hasn't landed yet.
Back to the products