Key App Metrics with BigQuery Part 1: DAU/MAU
By: Matt Kim
Tags: Engineering, Apps, Product Management, Bigquery, Analytics

For Part 1 of our tutorial, let’s answer our first hypothesis: Our app has not found product/market fit. To do that I’ll use BigQuery to extract metrics from our event logs in Firebase. Note that I’ve already connected BigQuery to our Firebase project, which I don’t cover in this tutorial.

Calculating the DAU/MAU

In order to calculate the DAU/MAU, we use a rolling 30-day window to calculate the respective MAU value for a given DAU value. For example:

To calculate the DAU/MAU for Feb 29 2020: - First, calculate the DAU for Feb 29, 2020

- Second, calculate the MAU for Jan 31 2020 to Feb 29, 2020

- Finally, apply the math DAU/MAU

The below query calculates the daily DAU/MAU values for 30 days pivoting on a start date. In our case NDAYS=30 and STARTDATE=2020–03-01.



-- Replace the fields PROJECT and DATABASE

-- As well as the table name: 'events_202001*' -- Special mention to Felipe Hoffa for inspiring and cleaning up this query-- Replace the fields PROJECT and DATABASE-- As well as the table name: 'events_202001*' DECLARE STARTDATE DATE DEFAULT '2020-03-01';

DECLARE NDAYS INT64 DEFAULT 30; WITH data AS (

SELECT * FROM (

SELECT *, PARSE_DATE('%Y%m%d', '2020'||_TABLE_SUFFIX) day, user_pseudo_id user_id

FROM `PROJECT.DATABASE.events_2020*`

) WHERE day <= STARTDATE

), daysN AS (

SELECT * FROM data

WHERE day >= DATE_ADD(STARTDATE, INTERVAL -NDAYS DAY)

), days60 AS (

SELECT * FROM data

WHERE day >= DATE_ADD(STARTDATE, INTERVAL -60 DAY)

), stopdays AS (

SELECT DISTINCT day stopday FROM data

WHERE day >= DATE_ADD(STARTDATE, INTERVAL -NDAYS DAY)

), maus AS (

SELECT stopday, COUNT(DISTINCT(user_pseudo_id)) mau

FROM days60 JOIN stopdays

ON day BETWEEN DATE_ADD(stopday, INTERVAL -NDAYS DAY) AND stopday

GROUP BY stopday

)

SELECT day, dau, mau, 100*dau/mau daumau

FROM (

SELECT day, COUNT(DISTINCT user_pseudo_id) dau

, (SELECT mau FROM maus WHERE a.day=maus.stopday) mau

FROM daysN a

GROUP BY day

)

ORDER BY dayResults

After averaging the days values into a single monthly metric we can plot it on a line graph, as shown below.

The result reveals a uniform distribution across the 9 months we have data. It also tells us that despite the volume of users growing over time, the app is not increasing in daily engagement. This makes sense because nothing fundamentally changed within the app during this period.

Take away

I’ve also not seen a 10% DAU/MAU product, through sheer effort, become 40% DAU/MAU. — Andrew Chen

Getting from a DAU/MAU of 9% to 40% will be an immense challenge. The next step from here is to develop strategies to increase daily retention rates. For our app we could consider these:

Top of the funnel (quick win): If we brand our app storefront to target plant-based journal seekers, we can increase our daily engagement by being more targeted. At the moment there may be some ambiguity in our messaging as voiced by some users. This is a quick win but a short-term fix.

(quick win): If we brand our app storefront to target plant-based journal seekers, we can increase our daily engagement by being more targeted. At the moment there may be some ambiguity in our messaging as voiced by some users. This is a quick win but a short-term fix. Leverage power users (incremental improvements): Get feedback from our power users and A/B test new features optimizing daily engagement. This is what Andrew had warned us against. My instincts tell me incremental improvements will lead us down a dead end.

(incremental improvements): Get feedback from our power users and A/B test new features optimizing daily engagement. This is what Andrew had warned us against. My instincts tell me incremental improvements will lead us down a dead end. Product pivot (big effort): Getting from 9% to 40% will likely require a product pivot. If we do the work to understand our power user cohort we may uncover a hidden use-case that leads to a successful pivot. The alternative is to appeal to the masses by becoming a calorie tracking app, and that doesn’t align with our mission.

Closing Thoughts

The data suggests that our original hypothesis was correct. The 2000 monthly-active user metric is more vanity than substance. That said the DAU/MAU value of 9% while not strong is our new baseline. We can aim to improve it from here.

In the next part of this series, I’ll cover the Power User Curve. For an early-stage app like ours, figuring out who our power users are will help us navigate to product/market fit 🤞. If we’re successful this should also result in a lift to our daily engagement metric.