Experiments, surveys and native replay — the AI-first way

An experiment platform tells you that a variant is ahead. A survey tool tells you what people typed. A mobile replay tool lets you watch a phone screen. Each of those is useful, and each leaves the same job to you: read the numbers, decide what they mean, and go and find the session that proves it. That last step is where most analysis stops, because it is slow.

This round of InsightClickIQ adds the four capabilities teams most often asked for — feature flags with A/B tests, in-product surveys, native session replay, and analytics for the AI agents they ship — and builds each one to the rule the rest of the product follows. The engine computes the numbers. The model writes only from those numbers, in a shape the product can check. And every claim links to something you can open: a results table, a replay at a second, a dashboard. Below is what that looks like on the demo projects, with the figures the product actually returned.

One pattern behind experiments, surveys, native replay and agent analytics For each capability the engine computes the numbers first, the model writes only from those numbers, and every claim links to evidence: the experiment results, the replay behind a survey theme, the frame player at a highlight, the agent dashboard. CAPABILITYTHE ENGINE COMPUTESTHE MODEL WRITESYOU CLICK THROUGH TO Experiment checkout-redesign Intervals, p, P(beat), SRM p 0.022 · P(beat) 0.989 Readout: ship new why + risks; rules agree Results table and chart ship refused on an SRM Survey checkout NPS NPS −31 from 61 answers counts from answer numbers Themes from 50 answers coupon: 20 answers (40%) Watch → the replay 18 of 20 with a recording Native replay iOS, iLearnRight Event timeline, 60 events 28 masked frames Summary, 8 highlights quiz loop: 5× in 68 s Jump → the frame player ?t= links and comments Agent analytics Insurance 360 Error rate and p95 per agent yesterday vs the 14 days before Signal + recommendation renewal-assistant: 27% failed Dashboard, weekly report per agent, model and tool Without a model, each middle column has a rules path that returns the same shape, marked Rules. Figures are from the demo projects.
The same three columns for every new capability. The model never computes a number and never invents a link: counts, intervals and session lists come from the engine, and the model’s verdict or theme is checked against them before it is shown.

Experiments: a verdict you can argue with

A flag in InsightClickIQ is boolean or multivariate, switched on or off, narrowed by targeting rules (person traits, country, device, platform, app version) and rolled out to a share of the people who match. The bucket is a hash of the flag key and the person, so the browser, the iOS app, the Android app and your server all give the same person the same answer. An experiment is a flag with a goal event. The SDKs send a $flag_exposure event the first time a person reads the flag in a session, and that event is what the results count.

The Northwind demo store runs checkout-redesign: a one-page checkout against the current one, 50/50, goal Order completed, secondary metric Checkout started, at least 500 people per arm. After 14.1 days and 8,001 exposed people, the results were:

VariantExposedConvertedRate (95% interval)Uplift (95% interval)pP(beat control)
control3,97643710.99% (10.1–12.0%)baseline——
new4,02550912.65% (11.7–13.7%)+15.1% (+2.2% to +27.9%)0.02298.9%

None of those numbers came from the model. The rate intervals are Wilson intervals; the uplift interval is the unpooled difference interval divided by the control rate; the p-value is a two-sided pooled z-test; the probability of beating control comes from Beta posteriors with 20,000 Monte-Carlo draws and a fixed seed, so it does not change between page loads. A chi-square test compares the exposed counts with the 50/50 weights: p = 0.584, no sample-ratio mismatch.

Only then does the model get involved. It receives those numbers and nothing else, and answers with a verdict (ship, keep running or stop), a variant, a headline, reasons and risks. On this test it wrote: “Checkout redesign lifts order completion rate by 15.1% (CI: 2.2%–27.9%), with 98.9% probability of beating control.” Its first risk is the one a careful analyst would raise: “The uplift confidence interval is wide (2.2%–27.9%), so the true effect could be closer to the lower bound in production.”

clickiq.example.com/flags/checkout-redesign
The checkout-redesign experiment tab: a readout card saying Ship new with four reasons and two risks, a results table with control at 10.99% and new at 12.65%, +15.1%, p 0.022 and 98.9% probability of beating control, a cumulative conversion chart over 14 days, and Checkout started as a secondary metric at 30.0% vs 31.0%
Read the small print under the readout. “Written from the numbers on this page only; the rules say ‘ship’.” The rules verdict is always computed. If the model ever recommended shipping on a sample-ratio mismatch, or without naming a variant, its answer would be replaced.

That last point is what makes the readout safe to put in front of a product manager. The rules are short and published: a sample-ratio mismatch stops the test; any arm under its minimum keeps it running; a probability of beating control of at least 0.95 with p below 0.05 and a positive uplift ships, unless a secondary metric got significantly worse; 28 days with nothing significant stops it. The model adds the words and the judgement about risk. It cannot overrule the arithmetic.

Surveys: what people said, next to what happened to them

The demo store runs a two-question survey on /checkout*, two seconds after the page opens: “How likely are you to recommend Northwind Outfitters to a friend?” and “What almost stopped you from buying today?”. It was shown to 70 visitors and answered by 61 (87.1%); 5 dismissed it. The Net Promoter Score is −31: 16 promoters, 10 passives, 35 detractors. By device it is −24 on mobile and −35 on desktop.

A score tells you that something is wrong. The 50 open-text answers say what, and reading 50 answers is exactly the job a model does well. InsightClickIQ sends the latest answers (up to 300) in one call, numbered, after removing email addresses and phone numbers and cutting each answer to 500 characters. The model returns themes as lists of answer numbers. The product then counts the answers, picks the quotes and attaches the sessions from those numbers, so a count in a theme is never a number the model wrote.

ThemeAnswersShareSentimentSessions with a replay
Broken coupon button2040%negative18 of 20
Smooth, positive experience1326%positive13 of 13
Slow checkout loading1020%negative9 of 10
Surprise shipping costs510%negative5 of 5
Forced account creation24%negative2 of 2

The first theme is the same problem the rest of the product had already found from behaviour alone: the dead “Apply coupon” button on /cart. Here it arrives in customers’ own words — “The Apply coupon button didn’t do anything, I clicked it like five times.” — and each quote has a Watch link to the replay of the session that wrote it. That is the difference worth having: you can check a theme in thirty seconds by watching two of its sessions, instead of trusting a word cloud.

clickiq.example.com/surveys/checkout-nps
Survey results: 70 shown, 61 responded (87.1%), 7.1% dismissed; an NPS gauge at minus 31 with 16 promoters, 10 passives and 35 detractors; a narrative from 50 open-text answers with 68% negative sentiment; the theme Broken coupon button with 20 answers (40%) and three quotes each with a Watch link
The quotes are links. Every “Watch” opens the replay of the session that gave the answer, and “20 sessions behind this theme” lists them all. Across the 50 answers, sentiment is 68% negative.

Answers are ordinary events (Survey shown, Survey responded, Survey dismissed) on the session that gave them, so every other part of the product already understands them: promoters per week is a trend, NPS by country is a table, and “detractors who reached checkout” is a segment. Nowhere else does the open text reach the model: the session summariser shows it as [open-text answer], and the agent tool returns counts and themes, never the raw answers.

Native replay: the same summary, on a phone

Native replay in the iOS, Android and React Native SDKs records screenshots, not video: one on a screen change, one 0.3 seconds after a tap, and at most one a second while the screen is changing. An unchanged screen sends nothing. Text inputs, password fields, web views and any view the app marks private are painted black on the device before the image is encoded (on React Native, the server paints the measured regions before anything is stored), and the server refuses a frame that is neither masked nor carries the regions to mask.

Because the AI summary reads the event timeline rather than the pixels, native sessions get the same treatment as web ones without a new model or a new prompt. On the iLearnRight demo, an iOS session of 68 seconds produced 60 events and 28 frames. Its summary reads: “After each quiz submission they were sent back to LessonList, looping through the exact same flow — Fractions → Start quiz → select ‘3/4’ — five times in 68 seconds. The quiz appears to be stuck in a loop, never advancing or confirming a result.” It marks eight highlights; each Jump seeks the frame player.

clickiq.example.com/sessions/049fb6
An iOS session replay in a phone frame showing the Lessons screen at 0:15 of 1:08, frame 6 of 28, with the search field blacked out; the timeline beside it; and an AI summary describing a quiz loop with eight highlights
Look at the black bar under “Lessons”. That is the search field, masked on the phone before the frame was encoded. The note under the player says so for every native session. The red highlights in the summary are the loop the model found from the timeline.

Native apps also gained the other two things replay usually sits beside. Taps now carry their position, so Heatmaps has an iOS and Android switch, drawn on the newest frame of each screen (on iLearnRight, Retry on the lesson list takes 33 taps, 11 of them rage). And the SDKs measure app start, screen load, frozen frames and ANRs; the Mobile tab of Performance rates them and its insight leads with the worst one: 2 of 12 native sessions had the main thread blocked.

28frames in a 68-second iOS session
5×quiz loop the summary found
33 / 11taps and rage taps on Retry
2 of 12native sessions with an ANR

Agent analytics: watching your own AI the way it watches your checkout

More of the products our customers build now include an AI agent or a copilot, and its quality is part of the product. InsightClickIQ treats each model call, tool call and rating as an event: $ai_generation, $ai_tool_call and $ai_feedback. The Python SDK sends them from a with clickiq.ai.trace(...) block or a LangChain callback handler; browser copilots use clickiq.ai.generation. Prompt and response text is never sent unless both the SDK and the project opt in.

The Insurance 360 demo has two internal agents. In 30 days they made 2,037 generations for 119 people; 53 failed; p95 latency was 4.1 seconds. The same signal loop that sizes frustration and error spikes on the website runs two checks per agent, and both fired:

SignalRuleWhat it said
Error spikeYesterday’s error rate against the 14 days before: at least 20 generations, 5 errors, 5%, and twice the baseline“renewal-assistant: 27% of AI generations failed yesterday (usually 1.8%)” — critical
Latency regressionp95 of the last 3 full days against the 11 before: at least 1.5× and +500 ms“claims-copilot: AI latency regressed — p95 6.3s over the last 3 days (was 3.7s)” — warning

Each signal carries a recommendation written from those numbers (for the error spike: check whether the failures are timeouts, schema errors or provider rate limits), and the AI agents dashboard and weekly report template put the same figures in front of the people who own the agents: error rate by agent, tokens and cost by model, thumbs-down share, the slowest tools.

Where the four meet

The value of putting these in one product is that they point at each other. The survey’s coupon theme links to replays; those replays carry comments pinned to the second the coupon click died, and a share link sends that one session to the developer who will fix it. The fix ships behind a flag; the experiment reads it out; the digest reports the change in orders. In the app, the same learner’s stuck quiz shows up as a loop in a replay summary, a rage cluster on a tap heatmap and an ANR on the Mobile tab.

A week of work, in the order the product supports it
  1. Monday
    Survey themes

    NPS −31 on checkout; the top theme is the coupon button, 20 answers, 18 with a replay.

  2. Monday
    Comment and share

    A comment at 0:16 on one of those replays; a 7-day link with the replay and summary scopes goes to the agency that built the cart.

  3. Wednesday
    Ship behind a flag

    The fix goes out to 50% of visitors; exposures and orders arrive as events.

  4. Two weeks later
    Readout

    Ship, keep running or stop, with intervals, a ratio check and the risks; the rules verdict beside it.

What it does not do

  • Experiments test conversions. The goal is whether a person did an event after their first exposure; revenue per visitor is not an experiment metric. Flags reach a browser on its next fetch (start, identify, reset or reload), not instantly.
  • Native apps render surveys themselves. The SDKs return the live surveys and send the answers; there is no native survey UI yet.
  • Native replay is stills. At most one frame a second, so animations are lost. React Native finds only the inputs you wrap, and Jetpack Compose content needs a registered private region.
  • Agent cost is what you send. InsightClickIQ does not price tokens; the demo’s costs use illustrative rates.
  • Without a model, the words change, not the numbers. Readouts fall back to the rules, survey themes to a keyword lexicon, summaries to a rules summary, each marked as such.

Why build it this way

Each of these capabilities could have been a chat box over a table. We chose the narrower design: the model gets computed numbers or numbered answers, returns a structured verdict or a list of theme members, and the product checks it and attaches the evidence. It is less impressive in a demo and much easier to trust in a review.

The engine does the arithmetic, the model does the reading, and every sentence has a link under it.

Flags and experiments →  ·  Surveys →  ·  Native heatmaps, vitals and replay →  ·  AI agent analytics →  ·  Comments and sharing →

← All posts   Request a demo