First 48-hour plan: run focused SQL analyses to narrow where the 8% DAU drop happened (who, what, when) and whether it’s structural or transient.1) Overall trend check (confirm and scope)sql
SELECT date, COUNT(DISTINCT user_id) AS dau
FROM users_daily_metrics
WHERE date BETWEEN '2025-11-01' AND '2025-11-21'
GROUP BY date
ORDER BY date;
Why: verifies drop timing, magnitude, and whether it's a one-day blip or sustained.2) Platform and country segmentation (find affected cohorts)sql
SELECT date, platform, country, COUNT(DISTINCT user_id) AS dau
FROM users_daily_metrics
WHERE date BETWEEN '2025-11-14' AND '2025-11-21'
GROUP BY date, platform, country
ORDER BY date, platform, country;
Why: isolates where drop concentrated (e.g., iOS vs Android, specific country) to direct engineering/marketing.3) Week-over-week percent change by segmentsql
WITH week AS (
SELECT platform, country,
SUM(CASE WHEN date BETWEEN '2025-11-07' AND '2025-11-13' THEN dau_flag::int ELSE 0 END) AS prev_week_dau,
SUM(CASE WHEN date BETWEEN '2025-11-14' AND '2025-11-20' THEN dau_flag::int ELSE 0 END) AS this_week_dau
FROM users_daily_metrics
GROUP BY platform, country
)
SELECT platform, country,
prev_week_dau, this_week_dau,
ROUND(100.0*(this_week_dau - prev_week_dau)/NULLIF(prev_week_dau,0),2) AS pct_change
FROM week
ORDER BY pct_change;
Why: highlights segments with largest declines for prioritization.4) New vs returning users (acquisition vs engagement)sql
-- assuming first_seen table or derive first date per user
WITH first_seen AS (
SELECT user_id, MIN(date) AS first_date FROM users_daily_metrics GROUP BY user_id
)
SELECT d.date,
SUM(CASE WHEN f.first_date = d.date THEN 1 ELSE 0 END) AS new_users,
SUM(CASE WHEN f.first_date < d.date THEN 1 ELSE 0 END) AS returning_users
FROM users_daily_metrics d
JOIN first_seen f ON d.user_id = f.user_id
WHERE d.date BETWEEN '2025-11-14' AND '2025-11-20'
GROUP BY d.date;
Why: tells whether drop is loss of new installs or churn among existing users.5) Cohort retention shift (7-day retention for recent cohorts)sql
-- cohort by signup date
WITH cohorts AS (
SELECT user_id, MIN(date) AS signup_date FROM users_daily_metrics GROUP BY user_id
), activity AS (
SELECT c.signup_date, a.date, COUNT(DISTINCT a.user_id) AS active
FROM users_daily_metrics a
JOIN cohorts c ON a.user_id = c.user_id
WHERE a.date BETWEEN c.signup_date AND c.signup_date + INTERVAL '13 days'
GROUP BY c.signup_date, a.date
)
SELECT signup_date,
SUM(CASE WHEN date = signup_date + INTERVAL '7 days' THEN active ELSE 0 END) AS day7_active,
-- optionally compute pct of cohort size
FROM activity
GROUP BY signup_date
ORDER BY signup_date DESC;
Why: detects if recent cohorts are retaining worse — indicates onboarding/regression issues.6) Recent releases & correlated datesQuery product/release tracking (pseudo)sql
SELECT release_id, deploy_date, components, notes FROM releases
WHERE deploy_date BETWEEN '2025-11-01' AND '2025-11-21';
Why: correlate deploys/feature flags with drop; if aligned, prioritize rollback/hotfix.7) Error/Crash signal join (if metrics available)sql
SELECT date, platform, SUM(crash_count) AS crashes
FROM crash_metrics
WHERE date BETWEEN '2025-11-14' AND '2025-11-20'
GROUP BY date, platform;
Why: spikes suggest quality regressions causing churn.8) Quick user-level check for large account losssql
SELECT date, COUNT(DISTINCT user_id) AS dau, COUNT(*) FILTER (WHERE is_premium) AS premium_dau
FROM users_daily_metrics
WHERE date BETWEEN '2025-11-14' AND '2025-11-20'
GROUP BY date;
Why: ensure not driven by a few high-value accounts dropping.Actionable next steps after analyses:- If platform/country-specific → escalate to platform engineers/partner teams.- If retention drop for new cohorts → audit onboarding flows, AB tests, and recent UI changes.- If correlated with release/crash → rollback or patch and monitor.- If acquisition drop → check ad channels, tracking tags, and attribution pipeline.These queries prioritize speed and targeted investigation to guide cross-functional triage in the first 48 hours.