PodSearch

Under the Radar

255: The Discontinuity Principle

 

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 never longer than 30 minutes, so let's get started.

00:00:09 ◼   ► So there's a funny pattern that if you really, really, really paid attention to Marco and

00:00:16 ◼   ► my work, that if you really looked, every other Thursday is a slightly more important

00:00:24 ◼   ► work day than the other days of the week. And this is because, so usually Marco and

00:00:31 ◼   ► I record on Wednesday, and while we have a good discussion on the show and hopefully

00:00:36 ◼   ► this is useful and helpful, typically what ends up happening is we just sort of have

00:00:41 ◼   ► a conversation generally for a little while thereafter. And we often are talking about

00:00:46 ◼   ► work stuff, I mean sometimes it's personal stuff, but also just we have a nice conversation

00:00:50 ◼   ► and very often I feel like that conversation leads to one of us being able to make a decision

00:00:56 ◼   ► about something work related, to start something, to stop something. We can be a sounding board

00:01:01 ◼   ► to each other. We're both in a situation where we've been doing the same kind of work for

00:01:05 ◼   ► such a long time that we can hopefully give each other good advice. And we had a very

00:01:11 ◼   ► recent and public example of this the Thursday after our last episode went up, where you

00:01:17 ◼   ► made a pretty big announcement about Overcast.

00:01:20 ◼   ► Yeah, I posted on the site and on Twitter that I'm going to discontinue the website

00:01:27 ◼   ► player, or at least most of the functionality of the website player, sometime next year.

00:01:33 ◼   ► I came to this because, as listeners know, I have had a heck of a year just trying to

00:01:40 ◼   ► keep up with server stuff and trying to optimize it, trying to prevent scaling problems, trying

00:01:46 ◼   ► to deal with the scale I already have, and largely getting very little progress in that

00:01:54 ◼   ► area. I've been underwater with server stuff and it's really getting me down mentally

00:02:00 ◼   ► and stress-wise, but also it just sucks for the app because I haven't had a lot of time

00:02:05 ◼   ► to focus on actual features for the app and improvements to actually make it better for

00:02:10 ◼   ► the customers. So that's a bad place to be. The reason why I decided I've got to kill

00:02:18 ◼   ► the website is because – and by the way, I actually might not need to do it, but I

00:02:26 ◼   ► wanted to leave the option there to do it. Because if I can kill the website, or at least

00:02:33 ◼   ► the functionality that I cite, which is basically user data functionality. So what I intend

00:02:37 ◼   ► to keep, no matter what, is the site for hosting share links for episodes, having a little

00:02:43 ◼   ► web player there. Certainly file upload functionality will still be possible. I don't know exactly

00:02:48 ◼   ► how yet, but that will still be possible to answer a frequently asked question. But I

00:02:55 ◼   ► don't want to have to have the servers and the website need to know about your user data.

00:03:02 ◼   ► Because that way, so basically I don't want the web player to know your list of subscriptions

00:03:09 ◼   ► and your progress within each episode or whether episodes are marked, deleted, or played, or

00:03:13 ◼   ► new. So basically the user data part of what I store, I would love to get to a place where

00:03:19 ◼   ► that is hosted on CloudKit. And while there are ways for servers to interact with CloudKit

00:03:26 ◼   ► data, I have used them before. They are terrible and unreliable, and I don't want to build

00:03:32 ◼   ► any features that rely on that. So if I'm going to leave the door open to use CloudKit,

00:03:39 ◼   ► the website player has to lose all user specific functionality and the ability to sync your

00:03:47 ◼   ► progress and things like that. And so most of the website player's functionality will

00:03:52 ◼   ► still function in the sense that you can still go to the website and type a podcast into

00:03:57 ◼   ► a search box and find it and hit play on something, but that progress won't sync back to your

00:04:02 ◼   ► account or anything and it won't know what you're subscribed to. That's the thing that

00:04:05 ◼   ► I'm trying to leave the door open to do. Now, in the grand scheme of things, I haven't used

00:04:12 ◼   ► CloudKit yet, and I have a lot of testing to do and a lot of evaluation to do. And so,

00:04:17 ◼   ► it actually might turn out that I don't go down that path and that I do something else

00:04:22 ◼   ► instead. But I wanted to leave the door open to go down that path. And I thought, you know,

00:04:31 ◼   ► I have analytics on how many people use the website while logged in every day. So it doesn't

00:04:39 ◼   ► count share link follows and stuff like that. Just people who use the website while logged

00:04:43 ◼   ► in. And it's a really small percentage. It's something like .2% of active users. It's very,

00:04:48 ◼   ► very small. And it ends up being, in absolute numbers, a good amount of people, but in relative

00:04:55 ◼   ► numbers, it's quite small. And so, I don't want my architecture decisions on the website

00:05:02 ◼   ► to be bound by trying to keep this one feature alive for such a small percentage of the user

00:05:09 ◼   ► base. So, therefore, I posted it. I said, "You know what? I'm just going to discontinue

00:05:15 ◼   ► this sometime next year. I don't know when yet. Here's why." And that's that.

00:05:19 ◼   ► And again, I don't know if I'm actually going to follow through with actually doing it because

00:05:25 ◼   ► if I can, in the meantime, figure out server stuff in a way that is far more efficient

00:05:31 ◼   ► and far less needy of my time, then maybe I could keep it. But frankly, I don't see

00:05:37 ◼   ► that happening. I think it's more likely that I will proceed with this plan and I will move

00:05:41 ◼   ► to CloudKit for user data, which will mean my servers will no longer access it. And people

00:05:45 ◼   ► have also written in to say, "Hey, if you don't want to make the website player,

00:05:48 ◼   ► hey, why don't you open up an API or hire someone else to do it?" And the issue is

00:05:53 ◼   ► not maintaining the website player. I mean, that's an issue. But I've said my website

00:05:58 ◼   ► player is terrible. And that's partly because I don't put any time into it and partly

00:06:02 ◼   ► because I don't have the skills to make a good one anymore. But also because it's

00:06:07 ◼   ► not that I need the help on the web end. It's that if I proceed with this plan, my servers

00:06:13 ◼   ► won't have user data anymore. They won't have access to it. User data would be entirely

00:06:18 ◼   ► in CloudKit and my servers would be only doing the public side of the data, so things like

00:06:23 ◼   ► feed crawling, keeping the database of feeds and episodes and doing notifications for new

00:06:28 ◼   ► episodes, stuff like that. And so that's the architecture plan I have in mind right

00:06:33 ◼   ► now. So that's why the user-specific functionality of the website might have to go soon.

00:06:41 ◼   ► Yeah. And I mean, I think it's, hey, I'm so excited. I remember we were having a

00:06:46 ◼   ► conversation about this and I think I got very excited about you doing this because

00:06:52 ◼   ► of the doors it opens up for your future and the simplifications that it creates for you

00:06:58 ◼   ► as you continue to try and make Overcast better and more featureful or more, just all of the

00:07:06 ◼   ► things that make Overcast better seem to be being held back by the fact that you currently

00:07:12 ◼   ► have this big, it's like the amount of data that you are shuffling around and managing

00:07:18 ◼   ► right now is very difficult. It's just, even just from the perspective of the amount

00:07:25 ◼   ► of it, that there are so many podcasts, so many users, you're multiplying the number

00:07:30 ◼   ► of podcasts and the number of users together to end up with this terrible n-squared amount

00:07:35 ◼   ► of data that you have to deal with. And it's like, that's terrible. You can see over

00:07:41 ◼   ► time how having to manage and maintain that, the reality is it feels very much like it's

00:07:50 ◼   ► not a one-person-sized job in practical terms. We've had many discussions, I'm sure,

00:08:00 ◼   ► over the years about, "Why are we just one person?" Rather than, "You could hire

00:08:04 ◼   ► five people and it could turn it into a whole thing." That's so transformatively different

00:08:08 ◼   ► and isn't really, I think, what either of you or I would want.

00:08:12 ◼   ► Or be good at.

00:08:13 ◼   ► Yeah, or be good at. It's like, I don't think I'd be a great CEO. I don't think

00:08:16 ◼   ► I'd be a great C-anything. I'm not really a chief. That's not really who I am. I'm

00:08:23 ◼   ► just a lone developer.

00:08:27 ◼   ► You're a loner, Dottie. A rebel.

00:08:29 ◼   ► Yeah. And so I think about what you're doing with Overcast. It is such a different problem

00:08:36 ◼   ► if the Overcast app is essentially responsible for itself. And instead of having to try and

00:08:43 ◼   ► manage this giant n times n problem, you end up with, instead, each app and each person

00:08:51 ◼   ► has their own data and it's just n. They have their data. And the way in which you

00:08:56 ◼   ► move that between devices is certainly complicated. And even that, I imagine the vast majority

00:09:02 ◼   ► of your users use Overcast on a single device. So even having something that is optimizing

00:09:10 ◼   ► even more so for that case is a good thing. But yeah, it's just like what you were talking

00:09:16 ◼   ► about. It's like, yes, you need to do this. You need to unconnect this part of what you're

00:09:21 ◼   ► doing. And I think, especially when I think about how the web player, it carries with

00:09:26 ◼   ► it, it's the symptom, not the, it's the actual, as you're saying, it's the user

00:09:31 ◼   ► data, not the web player necessarily. But even the web player, I think about how the

00:09:36 ◼   ► web player is essentially exactly the same as it was when Overcast shipped, whatever

00:09:41 ◼   ► it was years ago. It is clearly not a part of the app that you have any incentive or

00:09:46 ◼   ► desire to improve, make better, have a rich experience there. And you really honestly,

00:09:52 ◼   ► there's no incentive. There's no ads on the website. There's no, you can't sign

00:09:56 ◼   ► up for your subscription on the website. There's no reason for you to make it better because

00:10:01 ◼   ► it's not actually really a part of your business in that way. It's this sort of knock

00:10:05 ◼   ► on effect.

00:10:06 ◼   ► Well, I mean, I would push back on that because I can say the same thing about the Watch app.

00:10:09 ◼   ► There's no ads or premium subscription in the Watch app, but I make it because it's

00:10:14 ◼   ► an accessory to the main app. And that's how I view the website. The website is an

00:10:18 ◼   ► accessory to the app. It's simple as that. But it's just a far worse and less popular

00:10:23 ◼   ► and less used accessory than the Watch app.

00:10:25 ◼   ► Maybe. Yeah. But I think that's, and that difference there is it's like you could

00:10:30 ◼   ► imagine, I could imagine more of a connection between the Watch app and the main app in

00:10:36 ◼   ► terms of that becoming a thing that you have incentives to maintain in a way that I don't

00:10:41 ◼   ► see with the web player. But I think mostly the reality is, is I just want you to get

00:10:44 ◼   ► out of the user data business and have that be someone else's problem, like someone

00:10:48 ◼   ► else's giant database that they're managing and maintaining where, you know, there are

00:10:53 ◼   ► people whose job it is to be responsible for that scale in a way that is, you know, isn't

00:10:58 ◼   ► the kind of thing that's waking you up in the middle of the night or, you know, suddenly

00:11:01 ◼   ► having some database issue and then suddenly, you know, three days of your life are ruined

00:11:05 ◼   ► as a result. Like that is no good. And that is definitely a business I'd love to see

00:11:10 ◼   ► you get out of.

00:11:11 ◼   ► Yeah. Or at least, you know, change. Because like, you know, in this scenario, I'm still

00:11:15 ◼   ► running servers and I'm still crawling every podcast feed. I'm still dealing with people's,

00:11:20 ◼   ► you know, weird feed issues and stuff like that and, you know, availability and queues

00:11:24 ◼   ► and things like that. But when my servers are hosting almost entirely or entirely public

00:11:30 ◼   ► data, then that becomes like infinitely cashable and being able to be served through CDNs that

00:11:36 ◼   ► will take a lot of the load off of me and stuff like that. And so what I've been doing

00:11:40 ◼   ► over the last, you know, six months or a year or whatever is trying to move towards a hybrid

00:11:45 ◼   ► model where I have user data being served by my servers and then basically telling the

00:11:51 ◼   ► app, "Hey, go to this CDN URL to get the public's half of this data." So, you know,

00:11:57 ◼   ► the server will tell you, "Here's all your progress and deleted statuses of everything."

00:12:00 ◼   ► And then over there, the CDN will tell you the list of episodes and their giant HTML

00:12:04 ◼   ► bodies and things like that. So that's what I've been trying to move to, to try to get

00:12:08 ◼   ► near this ideal while still having servers hold the user data. But ultimately, that has

00:12:13 ◼   ► proven to be fairly complex and I've gone through a lot of different pieces like what

00:12:18 ◼   ► storage backend, what CDN, what serving mechanism, how do you invalidate the caches, how do you

00:12:24 ◼   ► make sure the CDN's up to date. And a lot of that has either failed or has proven to

00:12:32 ◼   ► be unreliable or has proven to be not that much of a gain after all. And so I've actually

00:12:39 ◼   ► spent the last couple of weeks doing a lot of optimization work just because like it

00:12:44 ◼   ► frustrates me because I've worked on bigger things like Instapaper, I think, had more

00:12:52 ◼   ► active users than Overcast did, I think. I don't remember exactly, but I think it had

00:12:57 ◼   ► more. Tumblr, of course, obviously had way more active users. And so when I look at the

00:13:03 ◼   ► number of active users Overcast has and I look at modern server resource levels and

00:13:07 ◼   ► things like that, like I know that I should be able to host this more easily than I am

00:13:14 ◼   ► hosting this. It shouldn't be this big of a deal. This is not that massive of a scale

00:13:18 ◼   ► that I'm operating on. It shouldn't be a huge challenge to host this information.

00:13:24 ◼   ► And so I've been doing optimization things just to see like, you know, is there any more

00:13:28 ◼   ► low-hanging fruit that I can just try to keep going on the path I was already on to try

00:13:33 ◼   ► to fix it and improve it and make it more sustainable and less needy? And I have found

00:13:38 ◼   ► some big gains, but I'm still not out of the woods yet. And so my current plan is to give

00:13:47 ◼   ► this a few more weeks of trying to find more gains and trying to keep what I already have

00:13:55 ◼   ► and stay on the path I was already on and, you know, seeing if I can do that. And if

00:14:00 ◼   ► I can, then maybe I'll change my mind and keep the website for a while or indefinitely.

00:14:06 ◼   ► If it continues to go the way it has gone for the last six months, then I'll proceed

00:14:12 ◼   ► with my CloudKit plan. And in the meantime, I intend to issue some overcast updates that

00:14:18 ◼   ► will start testing CloudKit out in my actual user base, without actually, you know, kind

00:14:22 ◼   ► of similar to how when Apple launched APFS, they said afterwards that like, oh, in the

00:14:28 ◼   ► last couple of system updates, they had actually been running tests on everyone's computers

00:14:32 ◼   ► without telling us. So I intend to actually, you know, send out some overcast releases

00:14:39 ◼   ► that have some CloudKit testing built in to test things like, you know, what percentage

00:14:44 ◼   ► of my user base out there is operating without being sent into an Apple ID, for instance,

00:14:49 ◼   ► because if you run your phone without an Apple ID, as far as I know, you can't use CloudKit

00:14:53 ◼   ► private data at all, because it wouldn't know where to store it. So, you know, if it turns

00:14:58 ◼   ► out that's like, you know, 5% of the user base, that's too much, and then I can't use

00:15:02 ◼   ► CloudKit, you know. Or, you know, if I like run some CloudKit test queries in the field

00:15:07 ◼   ► and report how often they fail, and if they end up failing a lot, or having weird throttling

00:15:12 ◼   ► issues, you know, then, again, then I probably can't use CloudKit. But it is promising in

00:15:18 ◼   ► the sense that by, I've talked to some people, especially like I talked to the developers

00:15:25 ◼   ► of NetNewswire, because they use CloudKit a lot, they were very helpful, I talked to

00:15:29 ◼   ► some other people, talked to you, talked to people who use CloudKit, and it seems like

00:15:34 ◼   ► the usage model I'm looking at is probably a good fit for it. And so, I think I will

00:15:40 ◼   ► move to that direction. And if I succeed in this, then that's, first of all, unfortunately,

00:15:46 ◼   ► it's going to be a lot of work to get there, and that's, again, even more time that I'm

00:15:50 ◼   ► not building features for my users, which I'm painfully aware of, and that's one reason

00:15:54 ◼   ► why I kind of hope I can make the current situation work for a longer time, so I could

00:15:59 ◼   ► maybe have a winter where I focus on user features. But also, if I can get to that place

00:16:04 ◼   ► where user data is all in CloudKit, and my server's only doing public data, that also

00:16:09 ◼   ► means I no longer have this like nuclear waste burden of user data, that like I don't have

00:16:15 ◼   ► the responsibility for things like having everyone's passwords and emails, which I've

00:16:20 ◼   ► tried to get out of over the years, and I still have a bunch because people still use

00:16:23 ◼   ► them. You know, getting out of that business, I think, could be really interesting, but

00:16:28 ◼   ► it's also a little scary because that is destroying value. And while it's value I'm not currently

00:16:36 ◼   ► really using or monetizing, that is value. And there are features in the app that are

00:16:41 ◼   ► based on things like number of stars people have given episodes recently, so there's things

00:16:49 ◼   ► like that that I would have to reconsider or rework or find some other way to do it.

00:16:54 ◼   ► So it's kind of a messy proposition, but if I can do it, and when I can finally do it,

00:17:00 ◼   ► and those are two big qualifiers, I think I would be at a point where it would be really

00:17:05 ◼   ► nice. But those qualifiers are so big that I might never get there.

00:17:10 ◼   ► Dr. Justin Marchegiani I think—because I think it's a way—just

00:17:13 ◼   ► something to keep in mind is I think, A, you know, you've already taken whatever hit you

00:17:18 ◼   ► would have taken by saying you're going to do it. And as far as I can tell, it didn't

00:17:22 ◼   ► seem like it was this catastrophic, like bad PR situation. And it's like, it's one less

00:17:27 ◼   ► thing for you to maintain. It's one less thing that you have to manage and think about. And

00:17:33 ◼   ► it's—it reminds me so much of so many of my apps where I—it's like, it doesn't hurt

00:17:38 ◼   ► anything for me to just leave this app, this old app that I don't really maintain anymore

00:17:41 ◼   ► in the App Store. Like, it's not really a problem, but it's some problem. And it has

00:17:48 ◼   ► some issues and causes some issues and some load and some anything. And there is something

00:17:53 ◼   ► really nice about having that be a nothing rather than it being a something. So just,

00:17:58 ◼   ► you know, it's an experience I've had that is relevant.

00:18:01 ◼   ► You make a good point, as usual.

00:18:25 ◼   ► You can find top talent fast with Indeed's suite of powerful hiring tools like Indeed

00:18:32 ◼   ► and Indeed.com.

00:18:33 ◼   ► And if you hate waiting, Indeed's US data shows over 80% of Indeed employers find quality

00:18:37 ◼   ► candidates whose resume on Indeed matches their job description the moment they sponsor

00:18:41 ◼   ► a job. And screenings and assessments really are great. So you can do things like select

00:18:47 ◼   ► for the skills that matter with Indeed assessments. You can pick from over 100 skills tests, add

00:18:52 ◼   ► them to your job post. That way you can find candidates with the right skills fast. And

00:18:56 ◼   ► these assessments help take the stress out of the interview process. Candidates get to

00:19:00 ◼   ► show their skills before the interview. So you can dive deeper into talking about what's

00:19:04 ◼   ► important to you.

00:19:06 ◼   ► So join more than 3 million businesses worldwide that use Indeed to hire great talent fast.

00:19:13 ◼   ► Indeed knows when you're growing your own business, you have to make every dollar count.

00:19:17 ◼   ► That's why with Indeed you only pay for quality applications that match your must-have job

00:19:21 ◼   ► requirements. Need to hire? You need Indeed. Visit Indeed.com/under-the-radar to start hiring

00:19:29 ◼   ► now. That's I-N-D-E-E-D dot com slash under the radar. Indeed dot com slash under the

00:19:36 ◼   ► radar. Terms and conditions apply. Our thanks to Indeed for the support of this show and

00:19:40 ◼   ► all of Relay FM.

00:19:42 ◼   ► So something that I feel like I always try and do in the show, maybe just in general,

00:19:48 ◼   ► is to try and find like the broad, like the broad lesson that applies from a specific

00:19:55 ◼   ► situation and try and make that kind of something that's useful generally, not just specifically.

00:20:00 ◼   ► If you happen to have an iOS podcast client that has a server component written in PHP

00:20:06 ◼   ► that was written several years ago that has a website component that you want to try and

00:20:10 ◼   ► get out of and move to CloudKit, like very specific, probably not as useful. But I think

00:20:14 ◼   ► there is something in this sort of discussion that has been rattling around in my head that

00:20:18 ◼   ► I think is useful to talk about. And I think it relates to what I was just saying where

00:20:22 ◼   ► in my mind I've been talking, thinking of it as almost like the principle of discontinuity,

00:20:27 ◼   ► where so often in life and in business and technology, there is these situations where

00:20:35 ◼   ► there is this sort of discontinuous, this discontinuous change in effort, outcome, result,

00:20:42 ◼   ► whatever it is between two things that ostensibly are relatively close to each other. And it's

00:20:48 ◼   ► like the easiest and probably the best place to explain this concept with is the difference

00:20:51 ◼   ► between something being free and something having any price at all. And it's one of

00:20:57 ◼   ► those just most incredibly remarkable things in development where whatever price it is,

00:21:04 ◼   ► if we could price our apps at a penny per download, it would still be dramatically more,

00:21:13 ◼   ► you get like 10 times the downloads if you make it free than if you made it a penny,

00:21:18 ◼   ► than if you make it 99 cents. And that's just one of those things that I think is absolutely

00:21:22 ◼   ► true. I just think it's been proven time and time again that there is this discontinuity

00:21:26 ◼   ► there, that if you imagined the demand curve for your app, the amount of downloads you

00:21:31 ◼   ► get at every price, if you charged $1,000 per download of Overcast, you get pretty few

00:21:37 ◼   ► downloads probably. If you charge $10, if you charge $1, but if you make it free, suddenly

00:21:41 ◼   ► it jumps up and there's this discontinuity. And I feel like that behavior, that effect

00:21:47 ◼   ► happens in so many different things. And it makes me think about, for example, do you

00:21:53 ◼   ► support multiple platforms? Well, if you do, suddenly your life just got massively more

00:22:00 ◼   ► complicated than if you didn't. As soon as you support the iPhone and the Apple Watch,

00:22:06 ◼   ► or the iPhone and the iPad, or the iPhone and the iPad and the Apple Watch and the Mac,

00:22:10 ◼   ► it doesn't just get slightly more complicated. It's not like, "Oh, it goes from one to two

00:22:16 ◼   ► to three to four." No, it goes from one to seven to 46 to 702,000. That's what's happening

00:22:25 ◼   ► as you add anything. And that discontinuity in this case is one of these things where

00:22:30 ◼   ► I was saying, there is something so transformative that I've seen time and time again, that doing

00:22:35 ◼   ► any of something is so different than doing nothing of something. That in this case, discontinuing

00:22:42 ◼   ► the website player is actually dramatically different than just leaving it there and having

00:22:47 ◼   ► any amount of your attention, any amount of your responsibility, any amount of something.

00:22:52 ◼   ► And those differences can add up. Like fair enough, maybe the website player isn't the

00:22:56 ◼   ► difference between zero and 5% effect. And 5% of your attention isn't huge necessarily,

00:23:04 ◼   ► but it's still something. But it's something that I've seen over and over again that makes

00:23:08 ◼   ► me very circumspect now about if I take on anything, if I want to start any of these

00:23:16 ◼   ► things where it adds this new aspect, this new dimension. Because so much of our work

00:23:22 ◼   ► is this, it's almost like I imagine it as you have this whole collection of rubber bands

00:23:27 ◼   ► that are just pulling us in different directions. And the number of rubber bands you have pulling

00:23:31 ◼   ► on you is the amount of tension that you feel when you're under. And anytime you add a rubber

00:23:37 ◼   ► band, it just pulls you in that slightly more direction, becomes that much more uncomfortable,

00:23:40 ◼   ► makes that much harder for you to, if you want to turn away from that and focus on something

00:23:44 ◼   ► else, even if you're not working on it, it's still in the back of your mind, just sort

00:23:47 ◼   ► of pulling on you. Or it's like it makes me think of how it becomes really difficult to

00:23:52 ◼   ► make choices down in the future. I mean, in some ways, in this case, it's like it makes

00:23:56 ◼   ► it harder for you now that you made this choice years ago to have a website player, whereas

00:24:01 ◼   ► if you hadn't had a website player in the first place, you just wouldn't be in this

00:24:03 ◼   ► situation and it wouldn't exist. Or I think about how in sort of more recent news where

00:24:09 ◼   ► one of the challenges I think Apple is facing, the way that they do ads in the App Store

00:24:14 ◼   ► is because they started having any ads. And as soon as you have any ads, it's really easy

00:24:19 ◼   ► to have more ads. That in it's like having one ad is so different than having zero. And

00:24:25 ◼   ► like the amount of the decisions that are just made for you by saying we don't do that,

00:24:30 ◼   ► like that is not something we do, is very, very different than trying to decide like

00:24:35 ◼   ► what degree of this thing do we do? How far do we go down this road? Those kinds of subtle

00:24:42 ◼   ► distinctions take a lot of energy and effort and thought in a way that is so much simpler

00:24:47 ◼   ► than saying we just don't do that. I don't collect any data, or I don't do that particular

00:24:51 ◼   ► thing, or we don't do that. And then it goes to zero and it's just kind of magic. So it

00:24:56 ◼   ► was a general principle that I've just seen time and time again that it makes me think

00:24:59 ◼   ► of in this situation. And it's like it's the general lesson of be really careful what

00:25:03 ◼   ► you start because starting anything can be, you know, is very different than not starting

00:25:09 ◼   ► anything I guess.

00:25:10 ◼   ► Wow. That's profound.

00:25:13 ◼   ► Sure, maybe.

00:25:14 ◼   ► Yeah, I think, you know, I've always had trouble dealing with the feedback from feature

00:25:21 ◼   ► removals, but I've always been happier after I did them.

00:25:25 ◼   ► Yes.

00:25:26 ◼   ► There are very few feature removals or changes that I've made that I really regretted afterwards

00:25:33 ◼   ► in the grand scheme of things. And this can apply even to things like when I redesigned

00:25:38 ◼   ► a lot of my player home screen in Overcast, like the list of podcasts, like when I redesigned

00:25:44 ◼   ► that screen last year, I still get feedback from people today who are saying, "I wish

00:25:51 ◼   ► you would change it back." But it's, you know, it's pretty small relative to the user

00:25:57 ◼   ► base and I'm very confident in, you know, certain changes. Honestly, I don't think

00:26:02 ◼   ► I'm done yet. I would love to revisit some of those decisions. But overall, like I'm

00:26:08 ◼   ► happy I made those changes even though it upset some people. And I think, you know,

00:26:12 ◼   ► the web player is similar. It's like if I didn't have it today, you know, a lot of

00:26:17 ◼   ► this kind of like sunk cost fallacy, it's like I would never build this today from scratch

00:26:21 ◼   ► if it didn't already exist. I would never do this. And so I have to decide, well, okay,

00:26:26 ◼   ► well, I did it and I have it. Do I keep it or do I get rid of it? And there actually

00:26:33 ◼   ► is a lot of value to having it to a small number of people. And I'm one of those people

00:26:38 ◼   ► because one of the things the website player does is help me debug problems because I can

00:26:43 ◼   ► quickly look up podcasts and, you know, see what's in my database for them and everything.

00:26:48 ◼   ► And all of that could remain. Like, because none of that depends on user data. None of

00:26:52 ◼   ► that depends on me knowing I am subscribed to podcast XYZ, you know. So I could maintain

00:27:00 ◼   ► much of that value to me. But at the same time, I think like, you know, despite everything

00:27:04 ◼   ► you just said, if it's not that much effort to maintain the player for everyone else,

00:27:10 ◼   ► I should probably still maintain it. So if I don't move user data to CloudKit, I probably

00:27:15 ◼   ► should still maintain the player in some form. Now, that could be limited because, you know,

00:27:20 ◼   ► already it doesn't support playlists. And the only reason the web player has never shown

00:27:23 ◼   ► playlists is because the logic to decide what is in a playlist is very complex. And I already

00:27:29 ◼   ► coded that in Objective-C and I didn't want to also code the exact same logic in PHP and

00:27:33 ◼   ► try to keep them in sync forever because that's quite a thing. And so I decided, all right,

00:27:39 ◼   ► that's going to be a client-side only feature and the web will only show things that the

00:27:42 ◼   ► web can easily show, you know. But if keeping the web player long-term is not difficult,

00:27:50 ◼   ► I think I'll still do it because the utility it does provide, you know, it's kind of like,

00:27:54 ◼   ► you know, the Mac Pro in my lineup. It's like not a lot of people use it, but for the people

00:27:59 ◼   ► who need certain functions, it's kind of the only option, you know. And so, I don't know,

00:28:04 ◼   ► I'm still torn. I'm probably going to waffle on this for months.

00:28:06 ◼   ► Sure. And I think that's fair for it to be difficult. And I think it's a reality of just,

00:28:12 ◼   ► yeah, taking things away or turning things off or feeling like you're throwing away work

00:28:17 ◼   ► you've done is really difficult. And I say that from someone who has had, like the challenge

00:28:23 ◼   ► of being the person who's launched like 60 apps is that I've had to discontinue like 57

00:28:30 ◼   ► of them. Like it is very difficult to do. And it's like there is something that's so hard

00:28:37 ◼   ► to, but at the same time, I also want to keep in the back of my mind that being creative

00:28:41 ◼   ► and starting new things, it's like in some ways, I think it's important to feel comfortable

00:28:47 ◼   ► with ending things because if you're not comfortable with ending things, it's going to be very

00:28:52 ◼   ► uncomfortable to start things. And it's like that tension is something that we just have

00:28:56 ◼   ► to wrestle with and feel comfortable with. In this case, it's like I want you to feel

00:29:01 ◼   ► comfortable with discontinuing the web player because I want you to feel more comfortable

00:29:05 ◼   ► with starting a new feature, starting something that is more actually going to move your app

00:29:12 ◼   ► better and your product better and your mental health and all those things potentially for

00:29:17 ◼   ► forward. And if that comes at the cost of discontinuing other features, like saying

00:29:21 ◼   ► no to that, it's like saying no to something is the same as saying yes to something else.

00:29:24 ◼   ► It's like saying yes to something and saying no to something else. I mean, which way you

00:29:27 ◼   ► want to look at it. And it's like being comfortable with that tension that you eventually, you

00:29:32 ◼   ► have to, you can't have it both ways is just like one of the fundamental realities of life

00:29:37 ◼   ► that is super frustrating, but nevertheless, very true.

00:29:40 ◼   ► Thanks for listening everybody. And we'll talk to you in two weeks.

00:29:44 ◼   ► Bye.

00:29:44 ◼   ► [BLANK_AUDIO]