A scanner that watches everything sees nothing - #19786
Open
fivestarspicy wants to merge 4 commits into
Open
Conversation
Generated-By: PostHog Desktop Task-Id: 7ffd555e-6c2e-4a27-ad1b-1fcbe3d33e55
Generated-By: PostHog Desktop Task-Id: 7ffd555e-6c2e-4a27-ad1b-1fcbe3d33e55
Refined language for clarity and consistency throughout the document, including adjustments to phrasing and grammatical corrections.
Generated-By: PostHog Desktop Task-Id: 7ffd555e-6c2e-4a27-ad1b-1fcbe3d33e55
fivestarspicy
marked this pull request as ready for review
August 27, 2026 21:16
andyvan-ph
self-requested a review
August 28, 2026 07:42
SaraMiteva
reviewed
Aug 28, 2026
|
|
||
| That number may be a little absurd, but it is not the interesting part. The count does not represent 251,351 unique recordings, and it is nowhere close to all those sessions. Each observation is one scanner applied to one recording. It is a thin slice selected because it matched a question we asked. | ||
|
|
||
| Nobody was going to watch the vast majority of those millions of recordings anyway. That is the problem [Natalia wrote about](/blog/nobody-watches-session-replays). Session replay contains useful evidence. Then the evidence sits in a giant list while everyone goes back to their dashboards. |
Contributor
There was a problem hiding this comment.
Suggested change
| Nobody was going to watch the vast majority of those millions of recordings anyway. That is the problem [Natalia wrote about](/blog/nobody-watches-session-replays). Session replay contains useful evidence. Then the evidence sits in a giant list while everyone goes back to their dashboards. | |
| [Nobody was going to watch](/blog/nobody-watches-session-replays) the vast majority of those millions of recordings anyway. Session replay contains useful evidence. Then the evidence sits in a giant list while everyone goes back to their dashboards. |
Comment on lines
+25
to
+27
| Replay Vision fixes the watching part. It does not fix the thinking part. | ||
|
|
||
| We learned this the annoying (but expected) way. Some scanners pointed us to bugs we could then verify in the linked recordings. Some showed us exactly where a flow became confusing. Others produced plausible descriptions of sessions that nobody wanted to read. The model was not the main difference. The scanner either had a real job or it did not. |
Contributor
There was a problem hiding this comment.
Suggested change
| Replay Vision fixes the watching part. It does not fix the thinking part. | |
| We learned this the annoying (but expected) way. Some scanners pointed us to bugs we could then verify in the linked recordings. Some showed us exactly where a flow became confusing. Others produced plausible descriptions of sessions that nobody wanted to read. The model was not the main difference. The scanner either had a real job or it did not. | |
| Replay Vision fixes the watching part but not the thinking part. We learned this the annoying (but expected) way. Some scanners pointed us to bugs we could then verify in the linked recordings, while others showed us exactly where a flow became confusing. Some even produced plausible session descriptions that nobody wanted to read. | |
| In fact, the model wasn't the main difference. The scanner either had a real job or it did not. |
Comment on lines
+48
to
+50
| Different surfaces with the same shape: a filtered set of recordings, one visible question, and a defined answer. | ||
|
|
||
| The recording query and the prompt do different work. The query decides which sessions deserve inspection. The prompt decides what judgment to make inside each one. A high-intent event, relevant URL, useful cohort, or minimum duration usually improves quality more than another paragraph of instructions. |
Contributor
There was a problem hiding this comment.
Suggested change
| Different surfaces with the same shape: a filtered set of recordings, one visible question, and a defined answer. | |
| The recording query and the prompt do different work. The query decides which sessions deserve inspection. The prompt decides what judgment to make inside each one. A high-intent event, relevant URL, useful cohort, or minimum duration usually improves quality more than another paragraph of instructions. | |
| Same shape on every surface: a filtered set of recordings, one visible question, and a defined answer. The recording query and the prompt do different work: | |
| - The query decides which sessions deserve inspection. | |
| - The prompt decides what judgment to make inside each one. | |
| A high-intent event, relevant URL, useful cohort, or minimum duration usually improves quality more than another paragraph of instructions. |
|
|
||
| We still run them because they work. Dead clicks, broken renders, and setup loops are easier to catch when something watches the footage. But some of our most valuable scanners look for product opportunities instead. | ||
|
|
||
| One watches first sessions from high-fit signups and writes the trip report we would never produce consistently by hand. What did the person evaluate? How far did they get? What slowed them down? Another reconstructs how people investigate Error Tracking issues. It records the entry point, data consulted, impact assessment, queries, actions, and outcome. |
Contributor
There was a problem hiding this comment.
Suggested change
| One watches first sessions from high-fit signups and writes the trip report we would never produce consistently by hand. What did the person evaluate? How far did they get? What slowed them down? Another reconstructs how people investigate Error Tracking issues. It records the entry point, data consulted, impact assessment, queries, actions, and outcome. | |
| One watches the first sessions from high-fit signups and writes the trip report we would never produce consistently by hand: | |
| - What did the person evaluate? | |
| - How far did they get? | |
| - What slowed them down? | |
| Another reconstructs how people investigate Error Tracking issues. It records the entry point, data consulted, impact assessment, queries, actions, and outcome. |
|
|
||
| That creates a new behavioral event shape: an evidence-backed judgment about what happened inside one recording. Define the judgment once, then apply it to every matching recording. You can query it, chart it, break it down, or alert on it alongside the rest of your product data. | ||
|
|
||
| An event can say someone abandoned signup. An observation can show the contradictory copy they read before leaving. An event can say someone clicked summarize. An observation can show a populated trace that the product incorrectly summarized as empty. An event can say setup completed. An observation can show that the person got there only after painfully hunting, scrolling, and backtracking. |
Contributor
There was a problem hiding this comment.
Suggested change
| An event can say someone abandoned signup. An observation can show the contradictory copy they read before leaving. An event can say someone clicked summarize. An observation can show a populated trace that the product incorrectly summarized as empty. An event can say setup completed. An observation can show that the person got there only after painfully hunting, scrolling, and backtracking. | |
| - An event can say someone abandoned signup. An observation can show the contradictory copy they read before leaving. | |
| - An event can say someone clicked **summarize.** An observation can show a populated trace that the product incorrectly summarized as empty. | |
| - An event can say setup completed. An observation can show that the person got there only after painfully hunting, scrolling, and backtracking. |
|
|
||
| These examples are our starting points. Calibration gets final say. | ||
|
|
||
| Use Gemini 3.5 Flash Lite for high-volume jobs where you care about the distribution, not one observation. Our broken-render classifier is the obvious example. It tags recordings as `nothing_broken`, `media_failed`, `clipped_layout`, or `horizontal_overflow`. One wrong tag nudges a trend instead of opening a ticket. |
Contributor
There was a problem hiding this comment.
Suggested change
| Use Gemini 3.5 Flash Lite for high-volume jobs where you care about the distribution, not one observation. Our broken-render classifier is the obvious example. It tags recordings as `nothing_broken`, `media_failed`, `clipped_layout`, or `horizontal_overflow`. One wrong tag nudges a trend instead of opening a ticket. | |
| Use **Gemini 3.5 Flash Lite** for high-volume jobs where you care about the distribution, not one observation. Our broken-render classifier is the obvious example. It tags recordings as `nothing_broken`, `media_failed`, `clipped_layout`, or `horizontal_overflow`. One wrong tag nudges a trend instead of opening a ticket. |
|
|
||
| Use Gemini 3.5 Flash Lite for high-volume jobs where you care about the distribution, not one observation. Our broken-render classifier is the obvious example. It tags recordings as `nothing_broken`, `media_failed`, `clipped_layout`, or `horizontal_overflow`. One wrong tag nudges a trend instead of opening a ticket. | ||
|
|
||
| Use Gemini 3 Flash when the job combines a fixed rubric with some judgment. An experiment classifier typically fits well here. It can tag each post-exposure recording as `smooth`, `hesitation`, `confusion`, `error_or_dead_end`, or `inconclusive`. The scanner judges one recording, and the Digest or Scout compares the pattern across variants. |
Contributor
There was a problem hiding this comment.
Suggested change
| Use Gemini 3 Flash when the job combines a fixed rubric with some judgment. An experiment classifier typically fits well here. It can tag each post-exposure recording as `smooth`, `hesitation`, `confusion`, `error_or_dead_end`, or `inconclusive`. The scanner judges one recording, and the Digest or Scout compares the pattern across variants. | |
| Use **Gemini 3 Flash** when the job combines a fixed rubric with some judgment. An experiment classifier typically fits well here. It can tag each post-exposure recording as `smooth`, `hesitation`, `confusion`, `error_or_dead_end`, or `inconclusive`. The scanner judges one recording, and the Digest or Scout compares the pattern across variants. |
|
|
||
| Use Gemini 3 Flash when the job combines a fixed rubric with some judgment. An experiment classifier typically fits well here. It can tag each post-exposure recording as `smooth`, `hesitation`, `confusion`, `error_or_dead_end`, or `inconclusive`. The scanner judges one recording, and the Digest or Scout compares the pattern across variants. | ||
|
|
||
| Use Gemini 3.7 Flash when a person may act on a single observation. Our ghost-bug scanner must verify both halves of a contradiction before it says yes. A high-ICP onboarding scanner reconstructs one signup journey that a product team may inspect immediately. In both cases, a plausible wrong answer wastes someone's time. Calibration will tell you whether the more expensive model earns its keep. |
Contributor
There was a problem hiding this comment.
Suggested change
| Use Gemini 3.7 Flash when a person may act on a single observation. Our ghost-bug scanner must verify both halves of a contradiction before it says yes. A high-ICP onboarding scanner reconstructs one signup journey that a product team may inspect immediately. In both cases, a plausible wrong answer wastes someone's time. Calibration will tell you whether the more expensive model earns its keep. | |
| Use **Gemini 3.7 Flash** when a person may act on a single observation. Our ghost-bug scanner must verify both halves of a contradiction before it says yes. A high-ICP onboarding scanner reconstructs one signup journey that a product team may inspect immediately. In both cases, a plausible wrong answer wastes someone's time. Calibration will tell you whether the more expensive model earns its keep. |
| @@ -0,0 +1,387 @@ | |||
| --- | |||
| title: "A scanner that watches everything sees nothing" | |||
Contributor
There was a problem hiding this comment.
Suggested change
| title: "A scanner that watches everything sees nothing" | |
| title: "Watching PostHog watch itself: A scanner that watches everything sees nothing" |
|
|
||
| <!-- data current through 2026-08-25 10:29 PT. re-pull before publishing. --> | ||
|
|
||
| In the last few weeks, our own [Replay Vision](/replay-vision) scanners have produced 251,351 succeeded observations across the millions of sessions we have of people using PostHog. |
Contributor
There was a problem hiding this comment.
Suggested change
| In the last few weeks, our own [Replay Vision](/replay-vision) scanners have produced 251,351 succeeded observations across the millions of sessions we have of people using PostHog. | |
| A month ago we launched [Replay Vision](https://github.com/replay-vision), our AI layer over Session Replay. It watches session recordings in batches and writes up what it found, so nobody has to sit through them. You give it work by setting up a scanner: a recording query that picks which sessions to watch, and a prompt that says what to look for. | |
| In the last few weeks, our own [scanners](/docs/replay-vision/scanner-types) have produced 251,351 successful observations across the millions of sessions we have of people using PostHog. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Changes
Authorship note: brain-written by Cory. AI helped edit, structure, and tighten parts of the draft.
Before publishing
Checklist
Created with PostHog Desktop