I have seen six-figure decisions ride on an event that never fired. The dashboard said no lift, but revenue reports told a completely different story. When event tracking systems fail, the integrity of your data becomes the primary obstacle to success.

When missing event data shows up in an experiment, I do not start by looking at p-values. I start by asking who disappeared, when they disappeared, and whether that loss is tied to specific user behavior. By performing a thorough performance analysis on the gaps in my telemetry, I am able to determine how these failures influence business outcomes and avoid making a bad call based on incomplete information.

Key Takeaways

  • Missing events are rarely random: Data loss is often tied to user behavior or technical flaws, which creates systematic bias that invalidates standard experiment readouts.
  • Establish a failure map: Before analyzing results, verify the entire data pipeline—assignment, exposure, outcome, and storage—to identify exactly where the telemetry is breaking.
  • Diagnosis before estimation: When data is missing, avoid jumping to imputation; instead, determine if the loss is random, trait-linked, or behavior-linked to choose the correct rescue strategy.
  • Use bounds to guide decisions: If you cannot trust a precise lift, calculate best-case and worst-case scenarios. If your decision flips depending on these bounds, the test must be rerun or discounted.

Why missing events are worse than a small sample

A small sample gives me uncertainty. Missing events can give me the wrong answer.

That is the first distinction I care about in A/B testing. If I only need more traffic, I can wait. If the measurement system is dropping outcomes, waiting often will not help because the bias grows with the sample.

This happens all the time in experimentation. A client-side purchase event fails on slow connections. A mobile app SDK might fail to send the event if the user backgrounds the app too quickly. Consent settings or specific user properties block a script for one browser more than another. An API call might time out, or an ETL job might skip late-arriving rows. None of that is random in the way most test readouts assume.

Decision making gets worse when the missingness lines up with user behavior. High-intent users often move faster. Privacy-sensitive users behave differently. Frustrated users bounce before a client event fires. That is where behavioral science matters. People do not disappear from your analytics for no reason; they disappear because of flaws in your data collection.

In conversion rate optimization, this can flip the story. A checkout variant may reduce page errors and increase completed orders, while the front-end purchase event fires less often because the DOM changed. The readout looks flat or negative. The bank account says it won.

For founders and product leaders, this is not a reporting annoyance. It is a growth strategy problem. In product-led growth, if your activation event is incomplete, you can kill onboarding work that was helping. In startup growth, that means slower learning, worse roadmap calls, and money spent scaling the wrong thing.

I build a failure map before I trust the readout

Before I rescue an analysis, I map the path from assignment to warehouse. I want four checkpoints in order:

  1. The user was assigned to a variant.
  2. The user was exposed to that variant.
  3. The target event happened.
  4. The event arrived in storage and joined back to the user.

If step one is broken, I don't trust the experiment at all. If step three is broken but I have a server-side source of truth, I may still be able to save it.

I compare event logs, not only final rates. I want exposure counts, event counts, join rates, and null values by variant, device, browser, country, app version, and new versus returning users. By verifying timestamps, I ensure the chronological accuracy of each step. If missingness differs by one of those slices, or if the underlying schema has shifted, I have found a clue.

I also compare client events with backend facts to identify any data discrepancy. Orders in billing. Subscriptions in Stripe. Accounts created in auth. Feature usage written on the server. When those disagree, the dashboard loses the argument.

This is why I like automated recomputation for data integrity. Stored summary stats can hide the hole. Raw inputs make the hole visible.

For event setup, I stick to the basic rule in GrowthBook's note on tracking events after exposure: measure outcomes after the user sees the treatment. You'd be surprised how often teams analyze pre-exposure noise and call it a product effect.

If event loss differs by variant, I stop treating the readout as a clean experiment result.

That's the moment I switch from "analyze lift" to "diagnose measurement."

I pick the rescue method based on why data is missing

Not all missing data deserves the same fix. I only trust a method if the assumption matches the failure mode.

Here's the shorthand I use:

Missingness patternWhat it usually meansWhat I do
Missing completely at randomRows vanished for reasons unrelated to user traits or outcomes, which is rareUse complete cases, then run a sensitivity check
Missing at randomLoss depends on observed traits, such as browser or app versionReweight or impute with pre-treatment covariates
Missing not at randomLoss depends on the outcome or behavior itselfUse bounds, alternate source-of-truth metrics, or rerun

The first case is the friendliest, and I almost never get it in real product data.

The second case can be workable. If I know that event loss is higher on one browser family, and I have clean pre-treatment covariates and consistent event properties to filter by, I can reweight the sample or impute outcomes. That is acceptable when the covariates explain both the missingness and the outcome well enough. If they do not, imputation turns into theater.

The third case is where most teams get hurt. If users who hit a slow checkout are also less likely to fire a client event, the missingness is tied to conversion itself. A model will not rescue that honestly. In these scenarios, I often look toward process mining to visualize the actual behavioral paths and identify exactly where the data ingestion pipeline is losing critical signals.

When bounds beat imputation

When I do not trust the assumption, I stop trying to estimate a precise point lift. I build bounds.

I run a best-case and worst-case scenario for the missing outcomes. Give every ambiguous conversion to control, then to treatment. If the decision stays the same under both cases, I can move with confidence. If it flips, I pause or rerun.

This approach is not glamorous. It is useful.

Applied AI can help here, but only in a narrow way. I use it to flag schema drift, classify broken events, or detect anomaly clusters in logs. I do not use it to invent outcomes I failed to measure.

If you do not have user-level data, clean exposure logs, or good pre-treatment covariates, skip the fancy fix. Rerunning the test is often cheaper than defending a bad estimate.

I turn uncertainty into a revenue call

I do not ask, "Can I publish a result?" I ask, "What is the cost of being wrong?"

That is the frame that matters for founders. Missing event data is an analytics problem on the surface, but the real issue is capital allocation. Do you roll out? Do you pause? Do you spend engineering time fixing instrumentation first? This balancing act is a core component of data acceleration, as the speed at which you learn and iterate is what fuels long-term growth.

I convert the uncertainty into a revenue range. Not a fake precise number, but a range. If the lower bound still clears my rollout threshold, I may ship. If the upper and lower bounds straddle a major decision, I hold.

This matters most when the experiment touches pricing, checkout, or activation. A damaged readout on a vanity click metric is annoying, but a damaged readout on paid conversion is expensive. Sometimes, data loss occurs because a specific event upload threshold is hit on older devices, preventing the client from sending logs during high-traffic sessions. In these cases, soft metrics often break while server-side events remain intact.

In product-led growth, I often swap to a harder metric when the soft one breaks. If onboarding completion is missing, I may use workspace creation, first project published, or seven-day retained usage, assuming those are measured on the server and tied to value.

When one test is messy but the broader pattern is stable, I zoom out. Looking across a program can be better than overreacting to one damaged readout. That is where identifying patterns across multiple A/B experiments can help.

The tradeoff is simple. Is a rerun cheaper than a wrong rollout? If yes, rerun. If no, use the strongest source of truth you have and narrow the decision to what the data can support.

I try to make data loss fail loudly, not silently

The cleanest rescue is prevention.

For money events, I want a server-side source of truth. Client events are still useful, but I do not want revenue hanging on a browser script. I also want immutable exposure logs, versioned event contracts, and daily discrepancy checks between variants.

Silent failure is the real enemy. If treatment has a lower event-arrival rate than control, I want an alert that day, not after the readout meeting. I often start my troubleshooting by identifying if an instrumentation limit is causing silent data loss or dropped events. For desktop-based products, I occasionally look into Event Tracing for Windows as a low-level diagnostic tool to capture what the user sees versus what the server receives.

I also keep one synthetic user path for critical funnels. Assign variant, view page, start checkout, complete purchase, verify warehouse arrival. This catches more broken instrumentation than most postmortems.

If you are cleaning an old experiment archive, do not patch holes with spreadsheet guesses. Use disciplined imputation strategies for incomplete test records, prioritize backfilling data only when the source is reliable, or exclude tests that cannot be defended.

A short takeaway if you are under time pressure:

  • Reconcile one revenue event across product logs, billing, and the warehouse.
  • Check missingness by variant and by platform before the next readout.
  • If the decision changes under reasonable bounds, don't ship the result.

That alone will prevent a costly mistake for most startup growth teams.

Frequently Asked Questions

How can I tell if my missing event data is biased?

You can identify bias by segmenting your missingness across different dimensions like browser type, device, country, or user cohort. If the rate of missing events differs significantly between your control and treatment variants, the missingness is likely tied to the experiment itself and will skew your results.

Should I ever use AI to fill in missing experiment data?

You should only use AI to help flag schema drift, detect anomaly clusters, or classify broken events. You should never use it to invent or predict missing conversion outcomes, as this creates a false sense of certainty that can lead to poor business decisions.

What should I do if a critical experiment has missing data?

If the missing data impacts a high-stakes decision like pricing or checkout, first attempt to validate the result using a server-side source of truth, such as billing or authentication logs. If you cannot reconcile the discrepancy, use a bounds-based analysis to see if the outcome remains consistent; if it does not, you must rerun the test.

Why are client-side events more prone to failure than server-side events?

Client-side events are subject to browser privacy settings, ad blockers, poor network connections, and app backgrounding, all of which cause the event to never fire. Server-side tracking is significantly more robust because it captures data directly from your backend infrastructure, making it the preferred source of truth for critical revenue metrics.

The decision rule I use

When facing missing event data, I avoid forcing a sense of false certainty. Instead, I determine whether the missingness is random, behavior-linked, or variant-linked, and then I select the smallest honest claim the data can support.

If the result survives rigorous bounds, alternate source-of-truth checks, and segment-level diagnostics, I move forward with the decision. If it fails these checks, I choose to rerun the test or narrow the scope of the decision.

That is how I keep experimentation useful under pressure. Clear decisions beat polished analysis when the measurement process is broken.

Related reading: underpowered A/B tests, experimentation governance, and how holdout tests prove incremental revenue. I built GrowthLayer to make experimentation repeatable across a program; for more field notes, subscribe to Lean Experiments.

Share this article
LinkedIn (opens in new tab) X / Twitter (opens in new tab)
Atticus Li

Experimentation and growth leader. CXL-certified CRO practitioner, Mindworx-certified behavioral economist (1 of ~1,000 worldwide). 200+ A/B tests across energy, SaaS, fintech, e-commerce, and marketplace verticals.