Tools for Online Speech logo
by Jacob O'Bryant

My home-grown product analytics dashboard

With Yakread's onboarding flow taken care of, last week I overhauled my internal reporting dashboard. I'm very happy with it. Not necessarily with the numbers it contains—they're OK—but at least the dashboard is structured nicely. There are five sections:

Recent signups

Self-explanatory. (And yes, this is not at the moment what you would call a "large business"—you can help fix that by signing up). It's nice to know if I have a traffic spike. I also have a self-hosted instance of Plausible which sends these nifty email alerts whenever the number of people on your site at one time crosses a certain threshold.

Business health

Look upon my DAUs, ye mighty, and despair

I count a user as active whenever they click on an article (i.e. one of the links in the daily emails, or one of the items in the web app's feed). I break the metrics out into separate tables for organic users and paid users (i.e. users I got via advertising) so that I can keep an eye on how the business would be doing in the absence of ad spend. Otherwise whenever you run some ads, your numbers go up and you're like "well I don't know if they would still be going up without the ads, or..."

Using 7-day averages (and colors) makes it easy to spot trends. For example, in the screenshot above you can see that my revenue and daily active users are... decreasing, which is unfortunate. On the organic side, that's actually because I got a shout-out in The Hustle, which brought in a bunch of new subscribers, and it's normal after spikes like that to have a little regression-to-the-mean.

What I'm more surprised about is that revenue for paid users went down too. I... don't have a good hypothesis for why that happened. The correlation 

Oh, actually maybe that's because I switched up the onboarding flow. I used to show a bunch of newsletter ads to people right after they signed up, as suggestions for stuff to subscribe to. Now there's a completely different (better) onboarding flow which doesn't do the here-are-a-bunch-of-ads thing right away, so that might explain why revenue went down for both organic and paid users. Ideally it's just a short-term decrease.

Just a hypothesis though. Either way I'm not terribly worried about it because I'm mainly focused on user activation and retention (next two sections); I'll worry about monetization more once those are squared away.


I have one primary funnel: onboarding.

This corresponds to the onboarding flow that I discussed last week. For example, last week (which is actually this week right now since I'm writing this on Friday, but it'll be last week when you read this), there were:

  • 567 unique visitors to yakread dot com
  • 58 of those people put their email address in the signup form
  • 49 of those people opened the sign-up email and clicked the link, which takes them to the website
  • 47 of those people picked a username for their email address (this is an easy step because I prefill the username with the one from the email address you signed up with, e.g. =>
  • 18 of those people subscribed to at least one newsletter with their new address, 15 of those subscribed to at least three, etc

The idea here is that it's not enough for someone to sign up. Plenty of people sign up to stuff and never use it. For someone to even have a chance of getting value out of Yakread, they have to sign up for some newsletters. So the funnel here measures that process.

I am pleased that the "sub-newsletter 1" step seems to have improved in the last week, perhaps thanks to the new onboarding flow which was designed specifically to get people subscribing to stuff ASAP. If the true value of that number really has jumped up and it wasn't just random noise, then the business viability of Yakread went up a lot last week. I'll continue to experiment with ways to get that "sub-newsletter 1" conversion rate to go up.

I also feel like the 10% signup conversion rate is a little low—IIRC The Sample had at least a 15% conversion rate. They're different products of course, but my gut says there's probably room for improvement. I did just make some tweaks to the landing page, though another factor is "where is the traffic coming from and what have they been told about Yakread so far."


This chart shows "n-day retention" for various segments and cohorts, i.e. "what percentage of users in this segment were active on a particular day?" The segments are broken up into quarterly cohorts. Pay no attention to the weird "01 Jan 2021" and "01 Jul 2022" cohorts; I didn't even launch the app till fall of last year, so not sure what's going on there. (Probably related to me getting half-way through migrating a bunch of accounts over from Findka Essays, which I never got around to finishing.)

Anyway, for example, of all the people who signed up in between January and March (inclusive) this year and subscribed to at least one newsletter, 18% of them used Yakread on the 5th day after they signed up.

The idea here is that you need retention to "flatten out." To have a sustainable, profitable business, you need to have a core of users who continue using your app for a long time. (Unless you're a mobile game developer and you like doing ad arbitrage.) If retention for every cohort goes to zero, you're gonna have a bad time. Ask me how I, uh, know that... (cough The Sample cough cough).

Yakread's retention isn't great, but there's a ray of hope in the segments for people who have signed up for newsletters. Those people have much higher retention than the "everyone who signed up" segment, which is why the onboarding funnel focuses on getting people to subscribe to newsletters. Honestly, retention for the first few weeks looks... not bad I think? It does go down more in the subsequent days (the entire chart shows retention up to 60 days), but the first few feeks being flat-ish gives me a lot of hope. That gives me something to work with—I can work on improving Yakread's features with confidence that I'm not just bailing out a sinking boat with a teaspoon.

Breaking retention out into various segments, by the way, helps to identify what user behaviours are associated with high retention. After you find a segment that has high retention, you can make an onboarding funnel that tries to get people into that segment. I have a few other segments not shown in the screenshot, like "people who installed the web app/PWA to their phone's home screen" (which is another thing that the new onboarding flow prompts people to do). That segment only has 10 people in it, but I'm interested to see how it does after the new onboarding flow has been in place for longer.

Traffic sources

This is the part where I see how well my ads have been performing.

Each segment here corresponds to users who came from a particular newsletter that I've placed ads in. (To protect the innocent I've renamed the newsletters in this screenshot to "foo" and "bar"). So e.g. you can see that from the first newsletter, I've had 26 signups in March, and 6 of those have "activated" (signed up for at least one newsletter, using their address). You can also see how much revenue I've made per user, which will be more important later when I focus on monetization. Right now I just run ads so that I have a way to measure and optimize funnels + retention, so I'm OK with losing money. I do have have a fixed ad budget which I won't exceed until later on when I've optimized monetization as well and the ads are actually profitable/break-even.

Outside of the dashboard, I have a text note (in Google Keep) where I keep track of all the ads I run and how much I spent. After they run, I go back and type in what the cost-per-signup and cost-per-activated-user were. If the numbers are good enough, I'll book multiple ads in the same newsletter (or at least, I've started to, today). Someone with a lot more experience in this space than I told me once that he found he can book ads in the same newsletter two months apart and the results stay constant, so that's the cadence I'm planning to use.

I've built this all with custom code; I have in the past tried out analytics tools like Google Analytics and Mixpanel, but they felt like overkill and/or hard to make them show exactly the stuff I want to see. I like storing all my event data in my own database, and while I wouldn't have minded not writing my own dashboard from scratch, now that I've already done it I'm happy with the result.

This is version 2.0 of the Yakread dashboard actually; version 1.0 turned out to be insufficiently happiness-inducing. I'm feeling good about 2.0 though. I think it has all the essentials I need so I can focus on talking to users (more on that next week), developing the product, and booking ads. I can do some limited exploration easily by playing with different segments, and for anything more complex I can always bust out some custom queries on the raw event data. But I'm hoping I won't need to spend too much time doing that.

I have actually written the dashboard to be inspecific to Yakread: I have a bunch of Yakread-specific code which gets a list of events, and then I feed those events (along with configuration for e.g. segments, funnel steps etc.) to the generic dashboard code. What I think would be really dandy is if my dashboard code existed as someone else's SaaS. I'd love to have a single API endpoint where I can upload a CSV containing my events and specify some high-level configuration, and then let someone else own the "take these events and turn them into a dashboard" bit. If anyone else wants to take that on, hit me up. You can have my dashboard code, as long as you can tolerate Clojure.

Published 28 Mar 2023

I write an occasional newsletter
about my work and ideas.

RSS feed · Archive

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.