Skip to content
Metricsjar

Article · Updated August 2026

Instrument product analytics without tracking everything

Editorial cover: a dense field of possible events reduced to four deliberate signals

You do not need to track every click to understand whether a product works. You need a small event system that defines who entered, whether they reached the product’s value, whether value became payment and whether they returned.

Start with four event families:

  1. entry;
  2. first value;
  3. commercial outcome;
  4. meaningful return.

Then add diagnostic events only when a recurring decision cannot be answered without them.

Minimum measurement plan with four event families, entities and jobs

Begin with decisions, not the interface

Write a table before installing an SDK:

Recurring decisionEligible entityRequired eventObservation window
Is acquisition bringing usable accounts?New accountaccount_created plus source contextWeekly cohort
Do new accounts reach first value?New eligible accountfirst_value_completedWithin a defined number of hours or days
Does value become payment?Eligible account/customertrial_started and authoritative paid stateMature trial cohort
Do customers keep using the value?Activated accountRepeated first-value or core-use eventWeek or month boundary

If an event does not support one of the decisions, leave it out of version one.

Define the four event families

Entry

Entry defines cohort eligibility. Choose the point at which the person or account can reasonably begin the journey.

Examples:

Do not silently switch between a device, user, account and workspace. Name the entity in the event specification.

First value

First value represents the product promise being delivered, not the tutorial ending.

Examples:

Prefer the completed outcome over the button tap that begins it. report_generated is more defensible than generate_clicked when the report can fail.

Commercial

Commercial events connect the product account to the billing or subscription source.

Examples:

Treat the billing source as authoritative. Product-side button events can diagnose the flow but should not declare a successful transaction.

Return

Return means the customer repeated the meaningful behaviour after a defined boundary. It is not any app open.

For a weekly reporting product, an account generating another report in a later week may be retained. For a yearly tax product, weekly use would be the wrong expectation. Define the cadence from the job.

Write an event contract

Every event needs more than a name.

FieldExampleWhy it matters
Namesource_connectedStable shared reference
TriggerConnection test succeeds and usable data is availablePrevents click/success ambiguity
EntityAccountDefines uniqueness and joins
Required propertiessource_type, connection_id, app_versionSupports known diagnostics
ExclusionsSandbox, internal accounts, reconnectsProtects the denominator
OwnerProduct engineeringSomeone must maintain the meaning
Version/change notev2 from 12 Aug 2026Explains discontinuity

Write the trigger in plain language before writing code. If two engineers would implement it differently, the contract is incomplete.

Design identity before funnels

Identity determines whether events form a journey.

Use a hierarchy:

  1. anonymous identifier for activity before signup;
  2. stable user identifier after authentication;
  3. account or workspace identifier for business outcomes;
  4. billing customer identifier for commercial joins.

Join anonymous history to an authenticated identity only when the product architecture and privacy rules permit it. Handle merges, invited members, account switching and deleted users deliberately.

An activation rate by device and a paid rate by account cannot be combined without a defensible bridge.

Choose capture deliberately

Autocapture can help explore a new interface, while explicit custom events provide stable business semantics. The useful split is:

Capture typeGood useRisk
Autocaptured interactionTemporary exploration, UI debugging, candidate-event discoveryNoisy, coupled to markup and easy to misread
Explicit product eventStable first-value or workflow milestoneRequires engineering and contract ownership
Server-side eventAuthoritative completion or state changeCan miss client context unless joined
Billing/store eventPayment, entitlement, renewal and refund truthEntity and timing differ from product events

PostHog’s own guidance recommends starting with a specific product or feature, tracking its use with autocapture or custom events, visualizing what is useful and expanding only after gaps become clear (PostHog).

For a critical event, prefer the system that knows the outcome. Capture report_generated on the server after success rather than only generate_clicked in the browser.

Keep properties small

Add a property when a known recurring question requires it.

Useful property classes:

Avoid sending free-form personal data, tokens, secrets, full URLs with sensitive query strings or unbounded payloads. Review the vendor’s privacy controls, retention, data location and deletion process before collection.

A minimum plan for a founder-reporting product

The following is a fictional example.

EventTriggerEntityRequired propertiesDecision
account_createdAccount persistedAccountacquisition source, platformCohort entry
source_connection_startedValid connection flow beginsAccountsource typeDiagnose setup intent
source_connectedUsable source data confirmedAccountsource type, duration, resultSetup completion
dashboard_renderedFirst complete dashboard displayedAccountconnected sources, freshnessFirst value
trial_startedSubscription source confirms trialCustomer/accountproduct, offer, storeCommercial entry
payment_succeededBilling source confirms paymentCustomer/accountproduct, currency, transactionPaid conversion
dashboard_rendered in later weekSame event after week boundaryAccount + weekproject countRetained value

Only seven named events are required, and two reuse the same core outcome across time. Add an intermediate event if the funnel shows a material loss between connection start and successful first value.

Validate the instrumentation

Before using a rate:

  1. trigger each event in a clean test account;
  2. verify it fires once at the specified outcome;
  3. inspect the entity and required properties;
  4. test retries, refreshes and back navigation;
  5. test anonymous-to-account identity;
  6. compare billing events with the authoritative transaction source;
  7. exclude internal and sandbox traffic;
  8. document the production release time.

Then run data-quality checks:

CheckExample failure
UniquenessOne completion fires three times after a retry
CompletenessMobile clients omit the event on one app version
Validitysource_type contains new unrecognized values
OrderPaid event precedes trial start because timestamps use different clocks
IdentityEvents split across anonymous and account IDs
FreshnessWebhook delivery is delayed or stopped

A dashboard should show source freshness or instrumentation health beside the decision metric.

Know when to add another event

Add an event when:

Do not add an event solely because a generator can produce tracking code. Automation can implement a plan; it cannot choose the product’s first value for you.

Know when to use replay or error monitoring

Product events, replay and error monitoring answer different questions.

Use the funnel to locate the affected step, replay to observe selected cases and errors to confirm technical failure. The comparison in session replays or funnels explains the sequence.

Frequently asked questions

How many product events should a small SaaS track?

There is no universal number. Begin with entry, first value, commercial and return events, plus only the intermediate events required by recurring diagnostics.

Should I use autocapture?

Use it deliberately for exploration and low-level interaction context. Use explicit outcome events for stable business metrics. Do not let captured clicks silently become your semantic model.

Should events be client-side or server-side?

Capture the event where the outcome is known. Client-side is useful for exposure and interaction. Server or source events are usually stronger for completed work and payment state.

How should I name events?

Use a consistent object-and-outcome convention such as source_connected or report_generated. Avoid names tied to button copy or page layout. Publish the trigger definition with the name.

Does fewer tracking mean less insight?

Not when the selected events answer the decisions. A small trustworthy schema can support more action than a large undocumented stream.

Sources

Keep reading