Two different jobs, one tool
Autocapture and explicit events are not competing approaches - they answer different questions. Autocapture is exploratory: it captures DOM interactions broadly so you can retroactively ask "did people click this?" without having instrumented it in advance. Explicit events are deliberate: a developer fires posthog.capture('subscription_upgraded', {...}) with the properties a specific analysis or report actually needs.
The architecture decision, as a framework
| Signal | Use autocapture | Use an explicit event |
|---|---|---|
| Business meaning | Interaction is exploratory, meaning not yet defined | Interaction maps to a specific business outcome (upgrade, churn signal, activation) |
| Properties needed | DOM context is enough (element, page, text) | Needs custom properties (plan tier, amount, feature flag variant) |
| Reliability requirement | Directional exploration is fine | Feeds a dashboard, report, or alert someone relies on |
| Stability over time | UI element may change without notice | Event name and schema stay stable even if the UI changes |
Why the mixed approach beats either extreme
All-autocapture setups produce a lot of events that are hard to query meaningfully six months later, because they describe DOM structure, not product meaning - and DOM structure changes with every redesign, silently breaking historical comparisons. All-explicit setups require instrumenting every interaction in advance, which slows shipping and misses the things nobody thought to track. The right taxonomy uses autocapture for breadth and exploration, and explicit events for anything a metric, dashboard, or migration depends on.
Where this decision has to happen
This is exactly the design work we do before instrumentation ships on a new implementation, and it is also the first thing we audit on an existing PostHog instance with a taxonomy nobody trusts. It connects directly to cost control (autocapture volume drives event usage) and to migration engineering (a source platform's explicit-event schema needs a deliberate mapping, not a blanket recreation in PostHog).