PodSearch

Under the Radar

306: Overcast "Wrapped"

 

00:00:00   Welcome to Under the Radar, a show about independent iOS app development. I'm Marco Arment.

00:00:05   And I'm David Smith. Under the Radar is usually not longer than 30 minutes, so let's get started.

00:00:10   So you know how you can tell that this is usually not longer than 30 minutes? Well, if you're an Overcast listener,

00:00:15   and you happen to subscribe to Overcast Premium, then you can look at my new history and stats features.

00:00:24   So these are a couple of new features I'm launching for Premium probably today or tomorrow, currently in beta.

00:00:32   And they let you, by very popular demand, and I'll get to that in a moment, browse back and see, like, you know,

00:00:39   what are my top-listened podcasts by time for this month or this year? And then separately, so that's the stats feature.

00:00:47   And then separately I have a history feature, which is based on the same engine, which is basically short-term, detailed, undoable history.

00:00:56   So the history feature is only the last 48 hours, and it's like every listening session or kind of user-modifying action you've taken on an episode.

00:01:07   So if you listen for a while and you want to undo and revert back to the previous timestamp, you can do that from the history view.

00:01:13   If you accidentally delete a podcast or a playlist, you can do that. You can undo that from the history view.

00:01:18   Or if you mark the wrong thing, played, that kind of stuff.

00:01:21   These two features, these have both been a long time coming.

00:01:25   Every, and it's always November, every November or early December, I believe the first app to do these yearly wrap-up summary top charts things,

00:01:38   I believe it was Spotify, the first one that popularized it, with Spotify wrapped.

00:01:43   And this is, they say like, here's the top artists you listen to this year, or whatever, top five, and here's, you listen for this many hours or whatever,

00:01:51   maybe sometimes just the top list. The design changes every year, but the idea is they give you a top list of here that you are wrapping up your year,

00:02:00   and yes, I'm very aware, the year still has like 12% of itself left. The idea that you're wrapping up the year in mid-November, okay.

00:02:14   But set that aside. The idea is they give you this top chart that you can look at yourself for your own satisfaction, and you can also oftentimes share it to social media.

00:02:26   There is a reason why the format of these is usually a 16 by 9 graphic, or rather a 9 by 16 graphic, because that is the shape of a vertical phone social network.

00:02:41   So, Instagram stories, Snapchat, that's, you know, the whole idea is they want you to go share this on social media to promote their app.

00:02:50   That's the whole thing. So, Spotify did Spotify wrap starting a few years back.

00:02:55   Everyone loved it. Everyone shares it like crazy. Apple in recent years started doing it with Apple Music. I believe they started it last year, or maybe the year before.

00:03:04   Apple Music now does their like year-end wrap-up thing. Again, you can like, you can look at it, you can share it.

00:03:09   I believe in the podcast space, it's not that common, I think Pocket Casts, I know they're doing it now, I think they did it last year, but I'm not sure.

00:03:17   But anyway, what happens is, every single time Spotify wrapped launches, I get a thousand requests from people saying, "When's Overcast going to add this?"

00:03:27   The question is not, "Would you like to add this, or should you add this, or will you add this?" It's, "When will you?"

00:03:32   Like, the presumption, this is so important, it must be added. And to be fair, like, it's a cool feature, I get it.

00:03:40   Alright, so, anyway, so I knew this feature, you know, this has been highly demand for a few years now, and so in late 2022, I submitted an update to Overcast that started recording the data needed.

00:03:53   Because before, I couldn't even launch, like, I couldn't launch this feature in a random November because I didn't have the data before.

00:03:59   So, in late 2022, I started collecting the data so that I would have full data for 2023, figuring at the end of 2023, I'll be able to launch this feature and it'll be great.

00:04:09   Well, that was, like, the middle of the rewrite, and it just didn't happen. Like, it was not going to happen.

00:04:16   Because I'll get to some of the challenges in this feature in a minute, but it just wasn't going to happen.

00:04:21   And then, finally now, 2024 comes around, and I'm like, "Alright, this fall, I have to launch this feature. I have now, I will have two years of data for it, so I'll have plenty of data to do the 2023 and 2024 graphics."

00:04:34   If people want, for some reason, if people want the 2023 one, I have the data, okay. And then I'm like, "Alright, well, every year, it seems like the release gets earlier."

00:04:43   Because it is kind of like a jumping the gun effect. You know, kind of like, if you've noticed, I'm sure you have because you exist, if you've noticed, Black Friday sales somehow have been going on for about three weeks.

00:04:59   You know, they started, like, in late October, a month before Black Friday.

00:05:05   It's like the end of Halloween. Oh, it's Black Friday.

00:05:08   Yeah, exactly. Exactly. Because what happens is there's an incentive for people who are selling things to, "Hey, everyone's doing this, so let's jump on it, release everything now, because we'll get all the attention, everyone's looking for it right now."

00:05:20   And when you do that, maybe you boost a number somewhere. And so the incentive then in the future is, "Hey, can we boost that number a little bit earlier, get that boost even sooner? Why don't we make the whole year Black Friday?"

00:05:33   So anyway, so similarly to that, once you see one of these graphics from one of these services on social media, then everyone bothers everyone else who makes the other apps and services saying, "Hey, where's mine? I want mine!"

00:05:46   So there is an incentive to, like, jump the gun and be ready whenever everyone else does it. You gotta be ready.

00:05:51   So I knew that, like, I basically had to have this feature ready by November 1st.

00:05:56   Because I knew, like, this is probably, like, who knows when Spotify is going to release theirs? And that's the one that really is, like, the big dog that really triggers, like, you know, the whole wave of them.

00:06:06   And so sure enough, I don't think Spotify has launched theirs yet. Apple launched theirs for Apple Podcasts, which I think is new, yesterday.

00:06:14   And so I've had this feature ready to go, about to release it. I've been making tweaks here and there, really up until yesterday, like, making little, you know, small tweaks to, like, the layout of the graphic and everything.

00:06:25   But for the most part, you know, it's been solid, it's been ready. And so I submitted it yesterday. It should be in the App Store today or tomorrow.

00:06:34   And so this year, for the first time, I'm finally getting this top chart, your top podcast of the year, wrapping up your year in mid-November, finally doing that.

00:06:44   But the way I've done it also is this is just a feature you can call up at any time and show the graphic and your stats for any time interval.

00:06:54   Day, week, month, year, or actually not week, day, month, and year, you can bring that up at any time.

00:07:01   So if you want to jump the gun and ride the wave with everyone else with their Spotify and Apple Podcasts things, and if you want to post your thing now, even though the year still has some time left that you can listen to more podcasts, go for it.

00:07:12   Or at some later date in the year, or even next year, you can go and generate your 2024 image whenever you want with updated stats.

00:07:19   So that way, whatever you listen to in late November and all of December isn't just, you know, disappeared into the ether.

00:07:26   So this feature is getting out there now, and it's been a long time coming, and by very popular demand, so I'm very happy to finally get it out there.

00:07:33   I think features like this are really interesting in a couple of ways.

00:07:37   I think the first one is the most obvious of it is challenging to build a feature that requires you to have made a choice a year ago.

00:07:45   Sometimes it's great, like the nature of being small, agile developers like a lot of indies are, is you see something that is really cool or topical or interesting, and you can just jump on it and do it right away.

00:07:58   Great. That doesn't work for a situation like this where you must have been collecting the data over a long period.

00:08:05   So it's just one of those, you just have to sort of accept that you couldn't have done it last year, but hopefully if you decided to do it, you put in the infrastructure to do it now.

00:08:14   But I think perhaps most importantly, what I think about with features like this, is there like this perfect combination of like the win-win from a user's perspective and from a developer's perspective,

00:08:25   where like word of mouth advertising is so vital, I think, to the long-term viability of most products, because if you only exist on paid marketing, you're kind of chasing your tail inevitably in that scenario.

00:08:41   And it can work and it can be viable, but it's just difficult. And if you need sort of this, ideally you'll have this baseline of word of mouth advertising, where people are using your product on a regular basis and then telling other people about it because they like it so much.

00:08:57   And so in this case, like these kinds of features and any kind of sharing generally, that you create a scenario where you're doing some activity inside of your app that a user may want to share with someone else.

00:09:08   I would give them the infrastructure to do that in an aesthetic, nice, clear way. They're getting the benefit of being able to share this cool thing that they're excited about.

00:09:19   Like this is unique to them in a way that is even more compelling than I think of like in Overcast, you can share an episode of a podcast or a clip or things like that.

00:09:29   And that's sort of interesting, but it's also not unique to you. Anyone can share that thing, whereas these stats are truly unique to you. And so there's a certain even more compellingness to them.

00:09:40   But then on the plus side, in addition to a user being happy because they just got this ability to share something that's unique to them, you get the benefit of being able to put some kind of branding or some way for it to reflect back onto you and get your name of your application out there in the world.

00:09:58   And it's this lovely kind of win-win in that regard, that it's a feature that benefits the user, but also has this knock-on marketing effect.

00:10:06   And I think particularly it's interesting, and this makes me think, so in Pedometer++, I just did a very similar thing where I've added sharing cards for daily steps and workouts, and I'm working on doing sort of broader trends.

00:10:19   So year-in-review, month-in-review, those kinds of things for similar reasons, where it's useful as a feature to kind of be able to, in addition to just doing this Spotify wrapped version, which we're having a one big hit of this, where in mid-November or beginning of December, you can give people an opportunity to share.

00:10:40   If you instead build it as something that has perennial value, that is potentially regularly interesting, you potentially expand the surface area of when someone might look at this information, share this information, and those kinds of things.

00:10:54   And so I think compelling the way that you built it, it isn't a screen that will only pop up once in mid-November and then never show up again.

00:11:03   If anyone is curious about what they've been listening to in the last month, they can go and look at that, and maybe that's less compelling as a sharing card, just because it's not as topical, but it certainly is still interesting, and you never know.

00:11:16   It's the kind of thing that it's not, these kind of sharing events are not going to be massive in terms of the draw that they pull to you, most likely, but I think they're the kind of thing that snowballs over time, and you only really benefit from.

00:11:31   It's a nice thing for people to want to talk about your product, and giving them any reason to do that is a useful thing.

00:11:39   And in this case, it's like, what have they been listening to in the Predominers++ cases, how much have they been walking, what kind of workouts have they been doing, those kinds of things.

00:11:48   It fills that void where otherwise, I'm always struck by how much of modern life is mediated by people just taking screenshots of things and sending it on, and if you can make a cleaner, nicer, prettier version of that, you're saving the user some trouble, and making your app look better as a result is additionally a wonderful benefit.

00:12:12   Yeah, exactly, and that's part of the reason people were asking for this, because they like the ability to show their friends and family, whatever, hey look, here's the stuff I like, isn't that cool.

00:12:25   And sometimes it's just interesting to see, it's interesting to see your own metrics, even if you don't want to share them at all.

00:12:29   It's good to see, if you would have asked me what are my top listened podcasts, I might have had a different answer than what the actual data shows how I actually spend my time listening.

00:12:41   And there's all sorts of ways to build useful features on top of this, I've been playing, I've been experimenting for years with auto-prioritization options for playlists, and this is one thing I could base that on.

00:12:52   A big challenge of doing this kind of feature, as you mentioned, is you have to have the data, and you have to be collecting the data, and it was easy for Spotify to have that data because Spotify pays royalties for the music they play based on how much people play them.

00:13:09   So they have to, Spotify was already having to track that data for listening time for the basics of their business model.

00:13:17   A podcast app doesn't need to have that data, I don't need to track when you listen, how often you listen, how much time you spent listening, I don't need that information for other reasons.

00:13:25   So it was difficult for me at first to even just convince myself to store anything like that.

00:13:33   And the way I ended up storing it, privacy concerns were certainly foremost in my mind.

00:13:39   You might think, it's just a podcast, who cares?

00:13:42   But suppose you're going through something in your family and you're listening to podcasts about divorce, or something sensitive.

00:13:52   Or suppose maybe you listen to podcasts that have political topics that might be sensitive in your community or your household, or you're queer and you're listening to something and your family doesn't know you're queer.

00:14:05   There's all sorts of reasons why, the podcast you listen to could actually be sensitive personal data that you don't want to be shared or to be visible.

00:14:16   So when building this feature, I had to really make sure that there's ways to delete these records.

00:14:22   So if you see in your stats list that there's something that you would rather not be there, you can just delete it.

00:14:28   And that data's gone.

00:14:30   And also, even just the way I built the history and the stats together, the history with the detailed overview, that is just 48 hour retention.

00:14:39   And then at the end of that 48 hours, things are rolled off the end into an archive table that just lists user ID, podcast ID, total time listened.

00:14:49   So it's not episode specific, it's more cumulative, it's very little data per day, and again, that's all very easily deleteable from the UI if you want to.

00:14:59   So there were lots of privacy concerns and I was like, alright, let me store reasonably as little as I can to achieve this very highly demanded feature.

00:15:09   Let me only store total times past the 48 hour window and stuff like that.

00:15:14   And I hope I've achieved a good balance here with that.

00:15:18   And I guess feedback will tell.

00:15:20   And then getting to the data too, trying to decide what data to store to build a feature like this.

00:15:27   Again, you have to decide that a year in advance.

00:15:29   So that's why I went only with the total times.

00:15:32   And I'm measuring two times.

00:15:34   Wall clock time, like how much actual wall clock time has passed playing this podcast.

00:15:39   So if you play a one hour podcast at 2x, that'll be 30 minutes of wall time.

00:15:45   Then there's also media time, which I call episode length.

00:15:48   So that's like if you play a one hour podcast at 2x, you'll get one hour of episode time.

00:15:53   And you can switch between those two stats, but I'm mainly doing listening time by default everywhere.

00:15:58   Because that's kind of the more precise and easily defined one.

00:16:02   Because media time has problems like, well if you skip forward 30 seconds.

00:16:06   I actually count that.

00:16:08   Because you listen to the episode quote, but if you skip forward 10 minutes, I don't count that.

00:16:14   And there's all sorts of these weird little gotchas.

00:16:17   This was a surprisingly difficult feature to develop.

00:16:21   You would think it would be really easy, and it's really not.

00:16:24   Because you're dealing with, how do you define time listened?

00:16:27   All those challenges, all those little decisions of like, does this count, does this count?

00:16:31   What happens if you pause it and it goes back a few seconds?

00:16:33   Do you get a few extra seconds of duration?

00:16:35   There's so many, do you count when it's paused?

00:16:38   What if it's paused for a brief time?

00:16:40   There are so many little implementation questions.

00:16:44   And that's why this is more intended to be a high level overview, not extremely to the second accuracy.

00:16:52   Because it's just very difficult to define what that means.

00:16:55   So I made a couple of decisions here and there that kind of smooth over some bumps.

00:16:59   Like, alright, well if it goes back one second, you can count that in episode time.

00:17:03   But don't count the pause, there's all sorts of little tricks like that.

00:17:06   And then once you have the times, well now you're dealing with calendar dates.

00:17:12   Alright, so you have to figure out, well I can't just say when the server thought this was.

00:17:17   I have to know when the user, like the user calendar, that's what I'm defining for the date.

00:17:22   Like, did you listen on this day or yesterday?

00:17:24   Well that's dependent on your local calendar, not my servers that are in a data center in Texas.

00:17:29   So there's all those decisions to define.

00:17:33   Then, when you're presenting it, like you have to look at the user's calendar, look at date boundaries.

00:17:37   Like, okay, well when in this user's local time, what timestamp is the beginning and end of the day?

00:17:45   Unfortunately, the calendar API in Foundation is very, very good.

00:17:51   They give you all sorts of calendar based APIs to do things like, given this date, what was the start of the day?

00:17:59   Like, what was midnight this day?

00:18:00   You can do that.

00:18:01   You can say, what's the next instance of a Wednesday?

00:18:04   Like, you can do all that with the calendar and date components APIs.

00:18:08   They're very, very good.

00:18:09   Anyway, so you have to do all that for the UI.

00:18:11   Even just like, defining what counts as a new session for the history viewer.

00:18:18   Like, if you play a podcast for a little bit, and then you pause it and you go make a sandwich.

00:18:24   You come back ten minutes later and you hit play again.

00:18:26   Is that a new session?

00:18:28   And the whole idea of defining what makes a new session, that's a whole can of worms.

00:18:35   Like, this, if the app is force quit by the swipe up thing, and then you bring it back, should that continue the session you were in?

00:18:44   By the way, make sure you save the session when you were force quit.

00:18:48   By the way, if you don't know, when the user force quits your app, you actually can do some work before your app is terminated.

00:18:55   You will get an application that will terminate notification.

00:18:58   And you can't async anything, you can't dispatch anything, but whatever you can do synchronously, you can do in that block.

00:19:07   So if you want to like, quickly serialize something to a file or to user defaults, as long as you call synchronize, you can do all that.

00:19:15   When the user swipes up, you have a brief window of time and one run through the run loop to do whatever you need to do to like, save whatever your state is.

00:19:24   So anyway, a little tip out there.

00:19:26   Anyway, so all of the work that went into this, all the session deciding, time measurement, date considerations, calendar considerations, like, it was, and then all the privacy considerations, and then the UI design of the whole thing.

00:19:39   Oh my god, it was, this was a massive feature.

00:19:42   But it was, I think it's worth it, because not only will this, as you mentioned, like this will pay off for years to come, and I won't have to do that much every year.

00:19:51   Like, you know, maybe I'll update the design of the sharing images every year, just to freshen them up a little bit.

00:19:57   But otherwise, like this feature is basically going to be done for the foreseeable future.

00:20:02   So that's great.

00:20:03   And I was able to build the history undo feature, which I've been wanting to do that forever.

00:20:10   For years I've been wanting to do a history with undo.

00:20:13   And this finally gave me the kind of underpinnings and motivation to do that.

00:20:19   And so I'm very, very happy with that.

00:20:21   Even like the history thing, one of the things I added just last week that I think is incredibly useful, and I've been wanting to do this forever, is you can undo deletions of not only episodes, but of playlists, or entire podcast subscriptions.

00:20:38   So if you accidentally swipe the wrong thing and delete a playlist that you put a lot of time into making that playlist, and all the settings are really custom, now you can undo that.

00:20:49   That's an incredible gain, I think, for usability and for protection.

00:20:55   And I've been wanting to do that forever.

00:20:56   And I literally just like, I serialized the model and stuff it into the undo table, and it stays in the 48 hour table.

00:21:02   And again, all the back and forth with the rewrite and the work and learning Swift and all this stuff and switching everything to Blackbird.

00:21:12   All of these new things were made either possible or much faster to do and much easier and more reliable by all the rewrite changes.

00:21:22   So this is the rewrite paying off.

00:21:24   Not only do you have the app as way faster than it was before, but finally I'm seeing benefits of having done the massive rewrite, and that makes me very, very happy.

00:21:33   So overall, I'm very, very happy with these two features.

00:21:36   They seem minor, but it took a lot of work to get here, and I think they will have pretty high utility over time.

00:21:44   So something that you just said, though, that I'm curious about is the degree to which the thought process you went through to make these part of Overcast Premium.

00:21:52   Because I think they both strike me as compelling features, which is awesome for something that's in premium.

00:21:59   You want to make your premium offering something that people are going to want, so you want it to be compelling.

00:22:04   But I imagine especially on the Overcast wrapped side of things, there's a tension between it being super compelling, so you want to make something that people will want,

00:22:16   and then also something that will increase the shareability of what you're making.

00:22:22   And so it seems in some ways like those two things are in tension.

00:22:25   So I can see the desire to be like, "Well, this is a reason to get Overcast Premium. This is a reason to do this."

00:22:30   And you're doing this extra work that it's good to get paid for and compensated for accordingly.

00:22:37   And you would imagine in some ways, by doing it this way, you'll get more signups now towards the end of the year of people who see someone else sharing it.

00:22:46   They want to do it themselves, and they want to do it.

00:22:49   But on the other side, you have the other force of, well, if everyone has it, then you'll have that many more people sharing images talking about how much they like Overcast.

00:22:59   And so it seems like that tension is a really… I imagine something that you had to really wrestle with for where to put the line between free and paid in this case.

00:23:09   Oh, yeah, definitely. It was a tough call. And who knows if I made the right call? Maybe I'll tweak it over time.

00:23:14   But I'm also at the same time finally raising my price on Premium.

00:23:19   It has been $10 a year US for its entire life, so that's eight years so far of Overcast Premium existing.

00:23:26   So for eight years it's been $10. I'm falling way behind both inflation and the market.

00:23:31   And so I'm raising it to $15 with this update, $15 a year.

00:23:36   And that's mainly because with the App Store, you can raise a subscription price by $5 per year, or equivalent, once a year, and everybody will still be opted in by default.

00:23:48   They'll be notified. They'll get those emails that you get from Hulu constantly and Disney+ and all the other services every time they raise their prices.

00:23:54   They'll be emailed by Apple in advance of the renewal saying, "Hey, the price has gone up. If you want to cancel, here's a link too."

00:24:01   But if they take no action, they'll be opted into the new price. And $5 a year is the most you can raise it by and have that be opted in.

00:24:09   Otherwise, they'll be opted out by default. You really don't want that.

00:24:12   So I'm going to $15. Because my whole idea here is, first of all, let me catch up to the market a little bit and recover some inflation losses.

00:24:19   But also, I want to make Overcast Premium more compelling. It's hard to define where to draw that line. We'll do whole separate episodes on that.

00:24:28   We have, and we will again. But these features seemed like this is really stuff that average users who are just casually listening to podcasts in my app won't really care.

00:24:42   These are power user features. These are enthusiast features. And so this was kind of a no-brainer. And people have been telling me for years that they want me to add more to Premium.

00:24:53   And when I look at what my competitors do, I am giving away a lot more than most of them, I think.

00:24:58   And so I do want to develop more power usery, enthusiast features and put them behind Premium.

00:25:04   I think that's the right call to make because the absence of them won't impact people at all.

00:25:09   So right now, the stats are collected whether you're Premium or not. But if you want to see them and make the pretty graphics, you have to pay Premium.

00:25:17   And then the 48 hour undo in history thing, that is there, but free users only get one hour of it and can't undo.

00:25:27   So it shows people, here's what you can get with Premium. And here is some of the utility of it.

00:25:35   But if you want the full utility, it's almost like a trial feature, like the one hour history thing.

00:25:40   It's almost like a trial feature but it does provide some utility. So it's there to show people, here's an offering, here's a basic version.

00:25:47   If you want to lift this gate, here's how to do it. And I'm basically going to see how that works out.

00:25:52   With Overcast Premium, I have incredible retention over time of subscribers. But I don't get a lot of new subscribers.

00:26:01   So as a business, it is fine, although I've never raised the price in eight years. We'll see how that goes.

00:26:10   But it's hard to get new people in the door. So I'm trying to push that direction, especially as the ad market has cooled over the last few years.

00:26:18   Trying to get more people in the door for Premium. And I think this is a good way to do it.

00:26:22   I have other ideas, too. This is not going to be the only thing I add to Premium. I'm going to be working on more things over the coming months as well.

00:26:30   But I think this is a pretty strong start.

00:26:33   The thing that strikes me, too, about Overcast is it's very difficult to have the highest number of users in the podcast listening ecosystem.

00:26:50   When you have Apple Podcasts and Spotify that exist on the free side, in some ways it is more likely that what you're going to end up with are people who are more likely to go Premium.

00:27:05   That are looking for something more advanced or more specific or more something.

00:27:10   Because there's plenty of good free alternatives that may be directly integrated into, like in the case of Spotify, that may be where they listen to all their music.

00:27:18   Adding a podcast to that makes perfect sense to them.

00:27:22   And so the compellingness of it in that way, I think, works in your favor for making these kind of features that could benefit everyone.

00:27:30   Making them Premium in the sense of hoping that you ultimately end up with a much higher proportion of your user base that are Premium.

00:27:40   And that that's ultimately a much more sustainable place for you to be. In some ways it's probably unlikely for Overcast to ever be this app that has massive free usership and then a very narrow paid usership.

00:27:57   Just because that doesn't line up with the demographics of that user.

00:28:02   That makes perfect sense, but anyway, it's just something I was curious about because it's tricky when you have this kind of a social-y feature that usually you want, "Oh, I want everyone to get the social feature."

00:28:10   But in this case, I think it makes somewhat sense, it's another reason to go ahead and get the upgrade because it's a cool feature, it's fun.

00:28:17   As soon as I saw it in the beta, I was like, "This is exciting." Immediately go look at it, play with the data. It's fun and interesting.

00:28:23   And I think anytime you can have a feature that creates that kind of spark and that little bit of like, "Ooh," like feeling, you're on to a winner. So it's been super fun to see. I hope it goes well.

00:28:33   Thank you very much. Thanks for listening everybody. Talk to you in two weeks.

00:28:37   Bye.