Podcast Search

Under the Radar

250: From Left Field to the Home Stretch

Select a time to play from there. The line being spoken is highlighted as the audio plays.

0:00:00Welcome to Under the Radar, a show about independent iOS app development.

0:00:04I'm Marco Arment.

0:00:05And I'm David Smith.

0:00:06Under the Radar is usually not longer than 30 minutes, so let's get started.

0:00:09We are in the home stretch about to hit the release of iOS 16 and the iPhone 14 series,

0:00:17which is probably happening a week from now, next Wednesday.

0:00:22So this is like the busiest.

0:00:26I was explaining to my son at breakfast this morning why my Minecraft time today is going

0:00:30to be a little bit reduced than normal, because we basically have two busy seasons as iOS

0:00:36developers, early June and mid-September, which is now early September this year.

0:00:42And this is the other one, explaining why, explaining what OS stood for.

0:00:48That was a fun one.

0:00:50So this is the home stretch, and this is one of the first times in a few years that I'm

0:00:56actually feeling it myself, because for the last few years I've been so mired in technical

0:01:04debt and honestly motivation issues a lot of those times that I wasn't able to even

0:01:11come close to having iOSX features shipping on the day that iOSX ships.

0:01:18I wasn't even anywhere near that, and it would usually take me six months before I

0:01:22would actually have something for the new OS that was ready.

0:01:26And this year I was assuming I was going to be in that same bucket, I guess.

0:01:33That's the term, right?

0:01:35And what happened instead was, I believe after last week's show, you remarked to me that

0:01:43I should probably just do the lock screen widgets, because since I already had other

0:01:48widgets set up, it would take me a very short time.

0:01:52I believe you said like a day.

0:01:54And it ended up taking me to get the initial lock screen widgets going 45 minutes.

0:02:00And that included redrawing my icon to be a certain style that would work well in those

0:02:06icons.

0:02:07That's good to hear.

0:02:08Thank you.

0:02:09Yeah, you were right about that, turns out.

0:02:10You are sometimes right about things.

0:02:12It rarely happens, but I'll take it when it happens.

0:02:16I think your hit rate's pretty good.

0:02:18But anyway, so that turned out easy.

0:02:21And then some of my users were requesting, "Hey, can we customize what they do?"

0:02:25Or, "Can we..."

0:02:27A few people requested that I have lock screen widgets that launch particular playlists.

0:02:34And that seems like an obviously great idea, because I already have SF symbols configured

0:02:40per playlist, and those render really nicely in those little circles.

0:02:44So, seems like a great idea.

0:02:46Of course, why don't I do that?

0:02:48That requires a configuration intent.

0:02:50Oh, no.

0:02:52That requires touching intent handling code.

0:02:55And then I saw, oh, there's a new app intents framework with iOS 16.

0:03:00And that is awesome, because all the previous ways to do intents are terrible, and have

0:03:06caused me so much time loss and headaches, bang on my head against the walls, fighting

0:03:11the tools, which is always the worst feeling.

0:03:14And the problem is I can't use those pre-iOS 16, and I can't use those for widget

0:03:20configuration yet, as far as I can tell.

0:03:22So, I started diving into my old intent handling code, which was largely Objective-C

0:03:28based, or it was like a mixed Objective-C and Swift environment for that.

0:03:32And it had to deal with the auto-generation and all these bugs and Xcode that are around that.

0:03:37And so, what started out as very simple, just lock screen widgets that would launch

0:03:42Overcast, or that would just show basically what my single, my small widget currently

0:03:48shows, which is whatever is the most recent or newest episode that came in or was played,

0:03:54just show that and tapping on it resumes it or plays it.

0:03:56That's it.

0:03:58That was part of the 45-minute initial implementation.

0:04:00It was super easy and quick, and I'm super happy I did it.

0:04:03But then trying to get configuration so I could do custom playlist circles, that took

0:04:08me like three days, and it's still not done.

0:04:10Because once that all happened, everything was breaking in my build, and all sorts of

0:04:14things were breaking.

0:04:15And then I thought, oh, why don't I take this opportunity, while this stuff is breaking,

0:04:19to also modernize the watch targets, because I had the old two-extension system.

0:04:24I could move it into a single extension with the new architecture, with SwiftUI

0:04:28lifecycle. Let me try that.

0:04:30That took three days, and it's still not done.

0:04:33So now I took on too much, too late in the cycle, so I can ship my lock screen widgets

0:04:40in a simpler state on day one.

0:04:43But I tried to do more, and it blew up my face.

0:04:46But this is, and this is probably against your recommendation of when to add new features

0:04:54and when to stop adding new features in the beta cycle.

0:04:57Yes, no, this is definitely something that I have struggled with a lot in terms of deciding

0:05:05when in the cycle is okay to sort of add new features, whereas is there a point at which

0:05:10you have to stop.

0:05:11And so I have a little tradition for myself where usually it's about two or three weeks

0:05:15out of when I expect the event to is going to be, I'll make a little sign-up that says

0:05:20no more new features, and I put it up in my office right under my monitor.

0:05:24And at that point on, I try and hold myself to not adding any more new features.

0:05:28I can do bug fixes, I can do performance enhancements, and then things.

0:05:31And if I'm completely honest, I will still add a few features here and there.

0:05:34But it feels like I can change a little bit my mentality around what I'm going to tackle.

0:05:40Like I don't tackle any, like your second one, or if like modernizing the watch target,

0:05:44it's like, like, nope, that is absolutely not going to make it in.

0:05:47Yeah, that was a terrible idea.

0:05:49It's like, you know, like this year, I think I did this a week and a half ago was sort

0:05:53of my line, and since then I've added a few features, if I'm being completely honest,

0:05:57but they all tend to be these things where they're very atomic, like if they happen,

0:06:03they happen, if they don't, they don't.

0:06:05They tend to be things that I need to be able to implement in less than a few hours.

0:06:09They tend to be just sort of like enhancements and tweaks, and you know, ooh, I've had a

0:06:13few options for this or that.

0:06:14And it's like, I did a couple of those this cycle, but I definitely, like, it's an approach

0:06:19that I strongly recommend as you get closer to just sort of like really dive in.

0:06:25And I think the main reason I think it's important is what's always been fascinating

0:06:29to me.

0:06:30So like this week, like the last three days, all I've done is performance testing and

0:06:35bug fixing.

0:06:36And it's kind of funny, like every day I finish work, like usually for me it's around

0:06:39five o'clock, I'll wrap up work, and I'll be like, wow, man, I had a great day, I fixed

0:06:44all these bugs.

0:06:45I mean, it's like Widgetsmith is basically ready to go.

0:06:47Like it's perfect.

0:06:48I can't find any more bugs.

0:06:50And I think they have that slightly smug feeling all evening in the morning, and then I'll

0:06:54sit down and start testing again, and I always find more bugs.

0:06:57And it's one of those funny feelings of it's like, but there were no bugs yesterday.

0:07:02Like how are there new bugs?

0:07:03But if I didn't give myself this space and this time to be able to really try these things

0:07:09out and think of, you know, like try it on different devices, try it in different configurations,

0:07:13go in and it's like I had one thing that was slightly terrifying this week was I installed

0:07:17version one of Widgetsmith from two years ago and did a bunch of configuration and then

0:07:22installed the latest version to make sure that I'm doing kind of like data migration

0:07:25and compatibility correctly.

0:07:27But I got to say, like running, you know, a two year old version of your app is just

0:07:30the strangest feeling where you're like, oh, this is so creaky, all these weird issues

0:07:34and things and all these things, essentially all of the learnings that you've had over

0:07:38the past two years, like unmanifested in front of you.

0:07:41And it was like, how did this app, how was this app ever popular?

0:07:43How did anyone ever like this?

0:07:44This app was awful and terrible.

0:07:46So that was a fun experience.

0:07:48But I do believe to think that as you get closer, the closer you get, the more you need

0:07:52to just not touch it and make, you know, sort of understand that version, you know, like

0:07:57the point one release afterwards is going to be there.

0:08:01You'll have an opportunity to add these things.

0:08:03But yeah, the week before the Apple event is not the time.

0:08:07I'm just I'm hoping to get like a couple of good things out there by then.

0:08:12It's going to be.

0:08:13I really like right now it's like my project file is basically like, you know, on the floor

0:08:18in pieces.

0:08:20It's like I can I can build it, but a lot of things don't work yet.

0:08:27The watch app is a disaster.

0:08:29I have no time to test.

0:08:30Like I should probably just like, you know, use a previous commit branch off of that and

0:08:34just, you know, ship that as well.

0:08:36Like, I don't you know, I want to try to get this nice.

0:08:39And that's that's the problem.

0:08:40It's so easy to be like, oh, just one more thing.

0:08:43Oh, one more thing.

0:08:45And yeah.

0:08:46And then then I'll be for, you know, your project files on the floor in pieces.

0:08:50And it takes you a week to put it back together.

0:08:52Yeah.

0:08:53And it's like the thing the hardest part of this is the reality that the things you are

0:08:58doing are like good things and appropriate things and are moving your right, you know,

0:09:02moving the app forward and are like it's not like you're doing things that aren't helpful.

0:09:06Like this is the end result of this would be great and be awesome.

0:09:09And like, it's definitely a good place to be, but it's just like, by finding the right

0:09:15time to do that kind of work versus insect really, you know, like the real thing you

0:09:19have to keep in mind is like you want to be ready to, you know, submit the app, you know,

0:09:23with even if your basic implementation of your lock screen stuff, like on day one, like,

0:09:28ideally, that's just sort of what you do.

0:09:29And you know, like that will happen.

0:09:32But like, if you're in a weird state or kind of you're not sure or you haven't had time

0:09:36to thoroughly test or make sure that it's actually what you want it to be, you know,

0:09:40it's like, then that's an awkward place to be because it's like waiting on the sort of

0:09:45best possible features rather than and then shipping nothing is definitely worse than

0:09:48shipping something good and solid if it isn't as sort of expansive as you would like it

0:09:54to be.

0:09:55Yeah, exactly.

0:09:56And I want to be like, I want to be in a good place with the lock screen, which is in particular,

0:10:00and if I can get widget configurability, that would be great by then.

0:10:04Because I want to be in a good place for that because this fall in particular, we are largely

0:10:10expecting the iPhone 14, at least Pro series to have some kind of always on screen and

0:10:17that's and it would be most likely able to show these lock screen widgets in a certain

0:10:22like low luminance state just like the recent Apple watches have been able to, you know,

0:10:26with their always on screens.

0:10:28And so this is probably like, it's fairly pressing that, you know, if that's if that

0:10:33ends up happening, as the rumors have foretold, then there's going to be a lot of power users

0:10:38who get iPhone 14 pros on day one and really expect all of the nerdy apps like mine, all

0:10:48like the power user nerdy kind of apps to be there on day one with really cool lock

0:10:53screen widgets so that they can use their this cool new feature of this cool new phone

0:10:56they just bought.

0:10:57And so that's like, that's the kind of thing that gets me to get off my butt and and stop

0:11:03procrastinating and actually ship things quickly.

0:11:06And so that's why like, I feel pressure, you know, from that end, and I imagine you must

0:11:11feel immense pressure because widgets are such a massive proportion of your business

0:11:15at this point, that like you like anything that touches widgets, it's a really big deal

0:11:21to you.

0:11:22Yeah, I mean, this, I would say this fall is a weird feeling because coming into, I

0:11:29was 14 when widgets were first introduced, I had no expectations really, like I thought

0:11:34it would, you know, I didn't I had no expectations that widgetsmith was going to be, you know,

0:11:38successful, popular, interesting, like, I thought it was just like, Oh, this is a fun

0:11:41little extension of this app that I made for the Apple Watch that I can now put on the

0:11:45iPhone and obviously turned out that that was, you know, that was the biggest understatement

0:11:49of the century, like, it's like, no, widgets were very important, and widgetsmith was,

0:11:54you know, like, very popular, and that took me totally by surprise.

0:11:58And so coming into iOS 16, it's this weird tension of, there's a part of me that like,

0:12:03because I know what is possible, like, I know that it is possible for a feature like this

0:12:08to really kind of just like, hit in the culture in a way that is just kind of mind bending,

0:12:15and you can have, you know, very wide adoption, lots of interest, and it can be this whole

0:12:18thing, like, I know that's possible. But at the same time, I also don't want to be

0:12:22like, it's I don't necessarily expect that to happen twice. Like, that was a very unique

0:12:27and, you know, sort of special situation and a combination of a lot of a lot of things

0:12:31came together for the iOS 14 launch for it to be as special as it was. And so this year,

0:12:36it's just the strange feeling of like, I want to be as ready as I can, I want to have

0:12:39it in all my ducks in a row be as prepared as I can. But on the one hand, I'm expecting,

0:12:45like it to be kind of just, you know, normal, like, I like everything ready, it launches,

0:12:51it has some, you know, has a little bit of traction here and there, it gets written up

0:12:54in a few of kind of like the techie article, you know, sort of news, news places, and that's

0:12:58great. And like, that's my sort of baseline expectation. But just like in the back of

0:13:02my mind, it's like, you also have the, you know, boy, I hope I'm not a like missing

0:13:08something that is going to turn out to be the key thing that, you know, with with with

0:13:12widgetsmith it, I was very close to not having photo support in it. And if I hadn't had

0:13:19any photo support in it at all, I don't think it would have been as successful as it was.

0:13:23And it's like, that was a pretty, you know, it's like, I wouldn't have predicted that

0:13:26that was the key feature. And so like, coming into this, you know, this fall, it's like,

0:13:30is there anything that I'm missing? Is there some aspect or some type of widget or some,

0:13:34you know, sort of approach to this that is going to end up turning me out to be really

0:13:37important that I'm not there for, you know, it's like some and some other app does, and

0:13:41then I completely miss out miss an opportunity. And it's just like, Oh, huh, that's, you

0:13:47know, good for them. But kind of sad for me, like, I don't know, like, it's just impossible

0:13:52to know. But it's like, I'm going into this year with this weird conflicted feeling

0:13:56of like, you know, on the one hand bracing for it potentially the potential for it to

0:14:00be huge, and the most likely reality I think of it just kind of being normal. And like,

0:14:06normal is great. I love normal. But it's, it's a very strange bit of tension. And

0:14:10it's definitely kind of amped up my level of preparation and the level of kind of polish

0:14:15that I feel like I need to have ready on day one this year, just because like, the stakes

0:14:20feel higher than than usual.

0:14:22Jared Ranere I think that's, that's a reasonable concern.

0:14:25But ultimately, like the, you know, that feeling of like, what if I miss the big thing? Or

0:14:29what if someone else beats me to the big thing? That that's a feeling that I think we all

0:14:34have around this time of year, you know, when when, you know, we know that, like, something

0:14:38is about to change, you know, when new iPhones ship, many times there is some kind of new

0:14:43ability that they provide. And then there is kind of this like race to see who gets

0:14:48there first to take advantage of it and capitalize on it. And that can that can make big shifts

0:14:52and changes in like, what apps are dominant in certain categories or what apps, what apps,

0:14:58what app categories even can exist. But ultimately, I think the reason why you are prepared for,

0:15:05you know, all this stuff is like, is you are, you are one of the people who is most prepared

0:15:09in the business to to tackle this, because you have all this experience, like, this is

0:15:14one of the benefits of being a developer of many apps in the past, is that you have tons

0:15:20of experience with a very wide variety of different API's past and present dealing

0:15:27with different hardware capabilities, and you know, different styles of API's, like,

0:15:33you have such a big, you know, experience behind you, and you have tons of experience

0:15:37shipping stuff, like getting stuff done quickly and getting it out there. And so you are probably

0:15:43the most able to quickly capitalize on something like that. That being said, being number one

0:15:50in any kind of area is very stressful, because when you're number one, all you, you know,

0:15:56you have a lot of pressure on you to just to not lose that spot. And most of it is probably

0:16:00self-imposed, but that's still real pressure. And so that I can imagine being like, you

0:16:05know, a big deal for you, you know, internally. However, I do think that you are best poised

0:16:12to actually take advantage of it. Like, suppose there is some, you know, some kind of new

0:16:16widget ability that for some reason we did not predict. Now, that's probably not going

0:16:21to happen. I think we know, like, from the watch always on screen, they have like the,

0:16:24you know, the the low lumens, whatever they call it, mode for widgets, like, we can be

0:16:29pretty sure what's probably going to happen here. But suppose some, you know, something

0:16:34comes out of left field, right? Is that the right metaphor? I don't know. I don't know

0:16:38if I'm a baseball or no. Do things ever come out of left field? Don't they go into left

0:16:42field and then get thrown back? Anyway.

0:16:43I think things are coming out of left field. Yeah.

0:16:45Okay. Well, I don't know. That doesn't make sense to me. Because I think, you know, you

0:16:48see the ball going into left field. Anyway. So assuming that there's some kind of sports

0:16:54reason why that metaphor makes sense, and assuming that something comes out of nowhere

0:16:57and no one's expecting, you are very likely to be the person who is able to take advantage

0:17:03of that first, or at least tying with everyone else who gets there on the same day, you know?

0:17:08So I wouldn't worry too much about that. And what I've seen too, from my own experience

0:17:13with my app, is that even though I have a nerdy audience, that nerdy audience is also

0:17:17very patient in certain ways. Now, if there's some major new OS feature like widgets before,

0:17:26like when widgets came out in, what was that, was that iOS 13 or 14?

0:17:29I was 14.

0:17:30Yeah. So when widgets came out in 14, I didn't have them on day one. I didn't have them until

0:17:35like four or five months later, something like that. It was a while. Because I was really

0:17:40in a bad state back then with the app. But at that time, I, it took a few months before

0:17:47I started getting one star reviews for not having them. And so, like, people do expect

0:17:54that to be there on day one when they're nerds and they get their new phone. But if you're

0:17:58not there on day one with something big, you know, it takes a little while before it actually

0:18:04really starts affecting your business. So if you're a few weeks late, it's fine. Many

0:18:10people are a few weeks late. It's only big nerdy apps like ours that are actually even

0:18:16there on day one sometimes. Like, you look at, you know, the apps from big companies,

0:18:20you know, Google Docs is famous for having terribly slow adoption of anything. You know,

0:18:25like the big company apps, they oftentimes won't adopt anything at all. Like, you know,

0:18:31and geez, I mean, a lot of these big company apps don't even do like iPad split screen

0:18:35yet. Like, you launch them in any of the iPad multi-tasking modes and they take up the whole

0:18:40screen because they just didn't bother implementing that. Like, there's so much, you know, lag

0:18:44in implementing new features among most of the app landscape that it only really hurts

0:18:48the apps that have very nerdy power user audiences like my app. And, you know, if you look at

0:18:54something like, you know, drafts, like, you know, there's a reason why, you know, Greg

0:18:58is so, you know, on top of updating that because that's an audience that demands power user

0:19:03features, power user speed and everything. Most apps aren't like that. Most apps, you

0:19:07don't need to worry that much about being there on day one with the new features.

0:19:12We are brought to you this episode by Sourcegraph. So you've hired a brilliant developer. That's

0:19:16awesome. Now you have to get them onboarded. If your company is growing, onboarding new

0:19:20developers will be a common occurrence but it's a big undertaking each time. One of the

0:19:24biggest challenges for new hires is to get up to speed with the project their new team

0:19:27is working on. This can be tricky if the code bases your developers are working in are huge.

0:19:32Thankfully, Sourcegraph makes it easy to move quickly even in those big code bases. Developers

0:19:37know the knowledge is most useful when it's findable. Centralization is helpful but given

0:19:42the fact that most companies store knowledge in multiple locations, how do you make knowledge

0:19:46accessible to those who need it? Sourcegraph is a code intelligence platform that gives

0:19:51developers what they need to drive their own learning over time and in different situations.

0:19:56Without Sourcegraph, teams need to rely on asking colleagues or reviewing added documentation.

0:20:01This is cumbersome and time consuming. But with Sourcegraph, every developer can search

0:20:05across millions of repositories to find specific code, saving time for themselves and everyone

0:20:10else. So when the big questions actually do come up that aren't answered by that, you

0:20:15know it's the important stuff that's worthy of the extra time. Sourcegraph was created

0:20:19to make developers' lives easier. Today, they work with leading companies across every industry

0:20:24including three out of five of the top tech companies plus PayPal, Uber, Plaid, GE, Reddit

0:20:30and Atlassian. Visit about.sourcegraph.com to learn more. That's about.sourcegraph.com

0:20:37to find out why some of the biggest tech companies in the world use Sourcegraph and to see what

0:20:41it can do for yours. Or to click the link in the show notes to let them know that you

0:20:44heard about them from us. Once again, about.sourcegraph.com. Our thanks to Sourcegraph for their support

0:20:49of this show and Relay FM.

0:20:51So I think the place that it might be interesting just to wrap up this discussion is just to

0:20:57talk a little bit in more practical terms about some of the kind of things that we do

0:21:00to get ready for this. Whether it ends up being a big deal or a small deal, we'll find

0:21:05out. But definitely there are some things that we can do. And specifically, something

0:21:09that I've tried to really focus on and pay attention to this year is performance testing

0:21:13and making sure that my apps are solid on this. And I shared some of my tips and tricks

0:21:18for this last week and I got a lot of interesting questions about it. And it seemed like a good

0:21:22place to kind of unpack a little bit about what I do here.

0:21:26And so the first thing I think that is interesting is to understand that when I talk about performance

0:21:30testing, it's like you're trying to make sure that your app, that no action takes more time

0:21:36than you would hope it or that the user would expect it to and sort of in some ways takes

0:21:40the least amount of time possible and uses the least amount of memory and resources in

0:21:44the process of doing that. But what's difficult and challenging about that is obviously it

0:21:48was one thing when we were, you and I would remember in the early days of the iPhone where

0:21:52it's like there were like two iPhones, three iPhones and like that was it. If you tried

0:21:58it on all three of those, then you were good and you had a very easy and comprehensive

0:22:03test suite. Whereas now, I support devices back to at least the 6S, I think, generation

0:22:10of iPhones, maybe even slightly, I think it's as far back as I go. And that's a lot of phones

0:22:16and a lot of things between now and then. And so having a reasonable testing strategy

0:22:21for that can be a little complicated. And so it's like the approach I take, and this

0:22:24is something that I think has worked pretty well for me and I think sort of seemed to

0:22:28have some resonance for people, was just sort of instead of trying to have an expansive

0:22:32view of performance testing, that my app needs to be amazing and run perfectly and I'm going

0:22:36to put the effort in to testing it on all devices, what I do is I take a look at my

0:22:41stats for my app and kind of look at the processor generations. So I don't particularly care

0:22:47too much about different screen sizes. There's a little bit of that can be a little complicated

0:22:50that certainly on some of the older devices like the Plus phones had a very different

0:22:56performance characteristic to the standard size phones. But in general, even if you just

0:23:00look at processor generation, and I'll plot what percentage of my users are running each

0:23:05generation and what I tend to do is make a graph that shows kind of the cumulative coverage.

0:23:10So if you imagine the iPhone 13 generation, which in my case is about 17% of my users,

0:23:15and then the next group is the iPhone 12 generation, and I add the number of people running 12

0:23:20and 13 together and in my case, I get 40%. And you kind of keep working your way back

0:23:24with an increasing percentage. And it tells you kind of how many people are running this

0:23:29device or faster. And you almost inevitably you end up with this kind of like asymptotic

0:23:34curve where you end up with a point of diminishing returns. And for me, that's right around the

0:23:39iPhone 10, 10s generation, that if I get if my app is running great on an iPhone 10s,

0:23:45that covers 86% of my customers. For some running great on an iPhone 10, that's 94%.

0:23:51And so for me, I don't really worry too much about people sort of on the long tail of that

0:23:56beyond that. And the reason for that, I think this was the part that I think was most interesting

0:23:59to talk about, is that kind of people are just like, "Well, don't you want your app

0:24:02to be great for everyone?" And it's like, yes, that's great in the ideal sense and sort

0:24:08of the conceptual version. But the real reality is, what's tricky with performance work is

0:24:15usually what you'll do is you'll run a couple of tests, you'll use your application, you'll

0:24:19run through instruments, all these types of places, and you'll find the slowdowns, you'll

0:24:22find the points where it's being slow. And then you have to address that. And sometimes

0:24:28it's just as easy as, "Oh, I'm doing something that I don't need to." You know, there's some

0:24:31wasted work, there's a very inefficient solution, and you can kind of get free performance wins.

0:24:36And obviously, take care of all those, take advantage of easy, free performance wins.

0:24:41But the reality is, is usually, after you've gotten rid of all those, is you end up in

0:24:45the place where you're going to be having to change your application's behavior, or

0:24:50the way you've structured your code, in order to make it faster, by introducing things like

0:24:54caching or using a more sophisticated or complicated algorithm or any number of things that you

0:24:59might need to do to make something faster. And that introduces complexity and risk and

0:25:05possibility of bugs. And so it's important, I think, to set a baseline of performance

0:25:10that you are comfortable with. And anything below that is just you're not going to worry

0:25:14about. Because if I wanted to make my app run perfectly on an iPhone 6S, I'm going to

0:25:20have to jump through all kinds of hoops and I'll do all kinds of complicated things with

0:25:23caching and very low level work in order to make that happen. And as a result, I'm going

0:25:29to introduce more bugs. And so for me, I tend to take the approach that instead, I'm just

0:25:32going to focus on performance of my app at a very, like find a level that's comfortable,

0:25:38find a level that I can feel good about testing on. And just once it's good enough from there,

0:25:44it's good enough, and I don't worry about sort of below that level. And for me, that's

0:25:47been working great. I think, you know, my main testing device all summer has been an

0:25:52iPhone XR, which is I guess the XS generation. And so it's, you know, representative of 86%

0:25:58of my users. And as long as it's good enough on there, it's been good enough for me. And

0:26:01I found that this sort of this approach has been kind of freeing me from feeling like

0:26:06I have to really go, you know, sort of go way down the rabbit hole on some of my older

0:26:11devices where it's just really hard to get good performance without jumping through some

0:26:15really complicated technical hoops.

0:26:17Yeah, I should do something like that. It's a little harder for me to do performance evaluation

0:26:24overall because I have a huge variety of like sets of podcast data that people can have

0:26:34in Overcast basically. Like when I get, you know, I'll occasionally get an email or a

0:26:39report from somebody saying, hey, you know, it's been slow on my phone recently. And they'll

0:26:43usually drop in or, you know, upon reply, I can get them to tell me like, oh, I have

0:26:4740 gigs of podcasts downloaded. Oh, okay. Well, this is a bit of a different situation

0:26:55than, you know, I have on my phone, like maybe two gigs of podcasts, which I consider to

0:27:00be a lot. And that's, I'm not exaggerating that that's actually the numbers that I, that

0:27:05people report like tens of gigs of podcasts among hundreds of subscriptions. I'm like,

0:27:11well, this is a different situation than what I'm usually testing on myself. And it's really

0:27:17hard to, to performance test for the extremes like that.

0:27:21You know, like I have like some, you know, I have like a script that generates a very

0:27:24large account whenever I need one. And I can test with, you know, a huge backlog of podcasts

0:27:29or very high number of subscriptions. You know, I could, I have tests for that. But

0:27:33I admit I don't use them very often because it's just really slow no matter what, no matter

0:27:37what I run it on when the data sets get really, really big. But I don't know, I should do

0:27:42more of that as part of my process of becoming a responsible developer at some point.

0:27:46Maybe. But I think the point you're making there though that I think is good to drive

0:27:49up is this. If you optimized Overcast for the extreme situation, it is not necessarily

0:27:57true that that would benefit the typical situation. And I think that subtlety is often lost in

0:28:03these discussions that, you know, if you had someone who is subscribed to 10,000 podcasts,

0:28:11and your sync system was designed and structured in such a way that it worked really well for

0:28:15them, it may not work as optimally for someone who has a typical amount, which is I don't

0:28:20know, like 50 or 10. And I think this kind of thing is just good to be circumspect and

0:28:26not get too wrapped up in your own mind about chasing down the extremes, which potentially

0:28:33is introducing risks and problems for the typical case. And it's like, in your case,

0:28:39if someone has that many podcasts, and it's like, it's slow for them, it's like, okay,

0:28:43that's unfortunate, but they're representing like 0.01% of your user base, and it's way

0:28:48better to make sure that like, your initial sync speed and sync speed, if you only have

0:28:5350 shows, it's like, absolutely, you know, sort of super, super, super snappy, amazing.

0:28:58And that's the experience that almost everyone's going to have. And so doing something that

0:29:02doesn't scale to, you know, 10,000, but works great at 10,000, you know, actually is a good

0:29:07idea, I think.

0:29:08Yeah. All right. Well, thanks for that. That makes me feel a little better whenever I get

0:29:12those reports. Well, best of luck to you and to everyone out there dealing with these next

0:29:16two weeks, which are probably going to be very, very busy for all of us. Thank you,

0:29:20everybody for listening, and we will talk to you in two weeks. All right, bye.

0:29:24Thank you.

0:29:25[