Product Metrics That Actually Help You Make Decisions

How to define and interpret engagement metrics in the context of product decisions.

DAU, WAU, MAU. Many product teams track these measures, but their usefulness depends on how “active” is defined and what decision the metric supports. That gap is what this post covers.

The Three Core Engagement Metrics

DAU — Daily Active Users

Count of unique users who performed at least one meaningful action on a given day. "Meaningful" is the word that matters — opening the app is not the same as completing a purchase. You define what counts.

DAU query
SELECT
  DATE(event_time) AS date,
  COUNT(DISTINCT user_id) AS dau
FROM events
WHERE event_name != 'app_open'  -- define "active" strictly
GROUP BY DATE(event_time)
ORDER BY date;

WAU — Weekly Active Users

Unique users active at least once in a rolling 7-day window. Better than DAU for products not used daily — productivity tools, e-commerce, anything with natural weekly rhythms.

WAU query
SELECT
  COUNT(DISTINCT user_id) AS wau
FROM events
WHERE event_time >= CURRENT_DATE - INTERVAL '6 days'
  AND event_time < CURRENT_DATE + INTERVAL '1 day';

MAU — Monthly Active Users

Unique users active at least once in a 30-day window. MAU is often used as a top-line engagement measure, but it can hide frequency: two products can have identical MAU while one has users active 25 days/month and the other just 1 day/month.

Stickiness — The Metric That Actually Tells You Something

Stickiness = DAU / MAU. It answers: of everyone who used the product this month, how many come back daily?

Stickiness query
WITH dau AS (
  SELECT DATE(event_time) AS date, COUNT(DISTINCT user_id) AS dau
  FROM events GROUP BY 1
),
mau AS (
  SELECT DATE_TRUNC('month', event_time) AS month,
         COUNT(DISTINCT user_id) AS mau
  FROM events GROUP BY 1
)
SELECT
  d.date,
  d.dau,
  m.mau,
  ROUND(d.dau::DECIMAL / m.mau, 3) AS stickiness
FROM dau d
JOIN mau m ON DATE_TRUNC('month', d.date) = m.month
ORDER BY d.date;

Illustrative frequency patterns by product type—not universal benchmarks:

  • Social / messaging (WhatsApp, Twitter) — higher daily frequency may be expected, but evaluate against the product's own baseline
  • E-commerce — lower daily stickiness can be expected because many users do not shop every day
  • Productivity tools — usage frequency depends on the job cadence and target user
  • Games — compare cohorts and genres before interpreting daily frequency

A common mistake is comparing stickiness across product categories. A food delivery app with 15% stickiness is not worse than a messaging app with 60% — they serve different use case frequencies.

Growth Accounting — Connecting Activity to Product Decisions

Instead of just tracking MAU, decompose what changed and why.

Growth accounting query
SELECT
  this_month.user_id,
  CASE
    WHEN last_month.user_id IS NULL and first_seen.user_id IS NOT NULL
      THEN 'resurrected'
    WHEN last_month.user_id IS NULL
      THEN 'new'
    WHEN this_month.user_id IS NULL
      THEN 'churned'
    ELSE 'retained'
  END AS user_status
FROM active_this_month this_month
FULL OUTER JOIN active_last_month last_month
  ON this_month.user_id = last_month.user_id;

MAU growth = new + resurrected - churned. That decomposition tells you where to focus, not just that the number moved.