00:00:09 ◼ ► We are in the home stretch about to hit the release of iOS 16 and the iPhone 14 series,
00:00:26 ◼ ► I was explaining to my son at breakfast this morning why my Minecraft time today is going
00:00:30 ◼ ► to be a little bit reduced than normal, because we basically have two busy seasons as iOS
00:00:50 ◼ ► So this is the home stretch, and this is one of the first times in a few years that I'm
00:00:56 ◼ ► actually feeling it myself, because for the last few years I've been so mired in technical
00:01:35 ◼ ► And what happened instead was, I believe after last week's show, you remarked to me that
00:02:00 ◼ ► And that included redrawing my icon to be a certain style that would work well in those
00:02:27 ◼ ► A few people requested that I have lock screen widgets that launch particular playlists.
00:02:34 ◼ ► And that seems like an obviously great idea, because I already have SF symbols configured
00:03:00 ◼ ► And that is awesome, because all the previous ways to do intents are terrible, and have
00:03:32 ◼ ► And it had to deal with the auto-generation and all these bugs and Xcode that are around that.
00:03:48 ◼ ► shows, which is whatever is the most recent or newest episode that came in or was played,
00:04:15 ◼ ► And then I thought, oh, why don't I take this opportunity, while this stuff is breaking,
00:04:46 ◼ ► But this is, and this is probably against your recommendation of when to add new features
00:04:57 ◼ ► Yes, no, this is definitely something that I have struggled with a lot in terms of deciding
00:05:05 ◼ ► when in the cycle is okay to sort of add new features, whereas is there a point at which
00:05:11 ◼ ► And so I have a little tradition for myself where usually it's about two or three weeks
00:05:34 ◼ ► But it feels like I can change a little bit my mentality around what I'm going to tackle.
00:05:40 ◼ ► Like I don't tackle any, like your second one, or if like modernizing the watch target,
00:06:09 ◼ ► They tend to be just sort of like enhancements and tweaks, and you know, ooh, I've had a
00:06:14 ◼ ► And it's like, I did a couple of those this cycle, but I definitely, like, it's an approach
00:06:39 ◼ ► five o'clock, I'll wrap up work, and I'll be like, wow, man, I had a great day, I fixed
00:06:50 ◼ ► And I think they have that slightly smug feeling all evening in the morning, and then I'll
00:07:03 ◼ ► But if I didn't give myself this space and this time to be able to really try these things
00:07:09 ◼ ► out and think of, you know, like try it on different devices, try it in different configurations,
00:07:13 ◼ ► go in and it's like I had one thing that was slightly terrifying this week was I installed
00:07:17 ◼ ► version one of Widgetsmith from two years ago and did a bunch of configuration and then
00:07:48 ◼ ► But I do believe to think that as you get closer, the closer you get, the more you need
00:07:52 ◼ ► to just not touch it and make, you know, sort of understand that version, you know, like
00:08:13 ◼ ► I really like right now it's like my project file is basically like, you know, on the floor
00:08:30 ◼ ► Like I should probably just like, you know, use a previous commit branch off of that and
00:08:53 ◼ ► And it's like the thing the hardest part of this is the reality that the things you are
00:09:02 ◼ ► moving the app forward and are like it's not like you're doing things that aren't helpful.
00:09:19 ◼ ► have to keep in mind is like you want to be ready to, you know, submit the app, you know,
00:09:23 ◼ ► with even if your basic implementation of your lock screen stuff, like on day one, like,
00:09:32 ◼ ► But like, if you're in a weird state or kind of you're not sure or you haven't had time
00:09:48 ◼ ► shipping something good and solid if it isn't as sort of expansive as you would like it
00:09:56 ◼ ► And I want to be like, I want to be in a good place with the lock screen, which is in particular,
00:10:04 ◼ ► Because I want to be in a good place for that because this fall in particular, we are largely
00:10:22 ◼ ► like low luminance state just like the recent Apple watches have been able to, you know,
00:10:33 ◼ ► ends up happening, as the rumors have foretold, then there's going to be a lot of power users
00:10:38 ◼ ► who get iPhone 14 pros on day one and really expect all of the nerdy apps like mine, all
00:10:57 ◼ ► And so that's like, that's the kind of thing that gets me to get off my butt and and stop
00:11:06 ◼ ► And so that's why like, I feel pressure, you know, from that end, and I imagine you must
00:11:15 ◼ ► at this point, that like you like anything that touches widgets, it's a really big deal
00:11:29 ◼ ► was 14 when widgets were first introduced, I had no expectations really, like I thought
00:11:34 ◼ ► it would, you know, I didn't I had no expectations that widgetsmith was going to be, you know,
00:11:45 ◼ ► iPhone and obviously turned out that that was, you know, that was the biggest understatement
00:12:03 ◼ ► because I know what is possible, like, I know that it is possible for a feature like this
00:12:08 ◼ ► to really kind of just like, hit in the culture in a way that is just kind of mind bending,
00:12:15 ◼ ► and you can have, you know, very wide adoption, lots of interest, and it can be this whole
00:12:22 ◼ ► like, it's I don't necessarily expect that to happen twice. Like, that was a very unique
00:12:31 ◼ ► came together for the iOS 14 launch for it to be as special as it was. And so this year,
00:12:39 ◼ ► it in all my ducks in a row be as prepared as I can. But on the one hand, I'm expecting,
00:12:45 ◼ ► like it to be kind of just, you know, normal, like, I like everything ready, it launches,
00:12:54 ◼ ► in a few of kind of like the techie article, you know, sort of news, news places, and that's
00:13:12 ◼ ► widgetsmith it, I was very close to not having photo support in it. And if I hadn't had
00:13:19 ◼ ► any photo support in it at all, I don't think it would have been as successful as it was.
00:13:26 ◼ ► that was the key feature. And so like, coming into this, you know, this fall, it's like,
00:13:30 ◼ ► is there anything that I'm missing? Is there some aspect or some type of widget or some,
00:13:37 ◼ ► important that I'm not there for, you know, it's like some and some other app does, and
00:13:41 ◼ ► then I completely miss out miss an opportunity. And it's just like, Oh, huh, that's, you
00:13:47 ◼ ► know, good for them. But kind of sad for me, like, I don't know, like, it's just impossible
00:14:00 ◼ ► be huge, and the most likely reality I think of it just kind of being normal. And like,
00:14:10 ◼ ► it's definitely kind of amped up my level of preparation and the level of kind of polish
00:14:15 ◼ ► that I feel like I need to have ready on day one this year, just because like, the stakes
00:14:25 ◼ ► But ultimately, like the, you know, that feeling of like, what if I miss the big thing? Or
00:14:29 ◼ ► what if someone else beats me to the big thing? That that's a feeling that I think we all
00:14:34 ◼ ► have around this time of year, you know, when when, you know, we know that, like, something
00:14:38 ◼ ► is about to change, you know, when new iPhones ship, many times there is some kind of new
00:14:48 ◼ ► there first to take advantage of it and capitalize on it. And that can that can make big shifts
00:14:52 ◼ ► and changes in like, what apps are dominant in certain categories or what apps, what apps,
00:14:58 ◼ ► what app categories even can exist. But ultimately, I think the reason why you are prepared for,
00:15:05 ◼ ► you know, all this stuff is like, is you are, you are one of the people who is most prepared
00:15:14 ◼ ► one of the benefits of being a developer of many apps in the past, is that you have tons
00:15:37 ◼ ► shipping stuff, like getting stuff done quickly and getting it out there. And so you are probably
00:15:43 ◼ ► the most able to quickly capitalize on something like that. That being said, being number one
00:15:50 ◼ ► in any kind of area is very stressful, because when you're number one, all you, you know,
00:15:56 ◼ ► you have a lot of pressure on you to just to not lose that spot. And most of it is probably
00:16:00 ◼ ► self-imposed, but that's still real pressure. And so that I can imagine being like, you
00:16:05 ◼ ► know, a big deal for you, you know, internally. However, I do think that you are best poised
00:16:12 ◼ ► to actually take advantage of it. Like, suppose there is some, you know, some kind of new
00:16:29 ◼ ► pretty sure what's probably going to happen here. But suppose some, you know, something
00:16:38 ◼ ► if I'm a baseball or no. Do things ever come out of left field? Don't they go into left
00:16:45 ◼ ► Okay. Well, I don't know. That doesn't make sense to me. Because I think, you know, you
00:16:48 ◼ ► see the ball going into left field. Anyway. So assuming that there's some kind of sports
00:16:57 ◼ ► and no one's expecting, you are very likely to be the person who is able to take advantage
00:17:03 ◼ ► of that first, or at least tying with everyone else who gets there on the same day, you know?
00:17:08 ◼ ► So I wouldn't worry too much about that. And what I've seen too, from my own experience
00:17:17 ◼ ► very patient in certain ways. Now, if there's some major new OS feature like widgets before,
00:17:30 ◼ ► Yeah. So when widgets came out in 14, I didn't have them on day one. I didn't have them until
00:17:35 ◼ ► like four or five months later, something like that. It was a while. Because I was really
00:17:40 ◼ ► in a bad state back then with the app. But at that time, I, it took a few months before
00:17:54 ◼ ► that to be there on day one when they're nerds and they get their new phone. But if you're
00:17:58 ◼ ► not there on day one with something big, you know, it takes a little while before it actually
00:18:20 ◼ ► you know, Google Docs is famous for having terribly slow adoption of anything. You know,
00:18:25 ◼ ► like the big company apps, they oftentimes won't adopt anything at all. Like, you know,
00:18:35 ◼ ► yet. Like, you launch them in any of the iPad multi-tasking modes and they take up the whole
00:18:40 ◼ ► screen because they just didn't bother implementing that. Like, there's so much, you know, lag
00:18:48 ◼ ► the apps that have very nerdy power user audiences like my app. And, you know, if you look at
00:18:58 ◼ ► is so, you know, on top of updating that because that's an audience that demands power user
00:19:12 ◼ ► We are brought to you this episode by Sourcegraph. So you've hired a brilliant developer. That's
00:19:16 ◼ ► awesome. Now you have to get them onboarded. If your company is growing, onboarding new
00:19:20 ◼ ► developers will be a common occurrence but it's a big undertaking each time. One of the
00:19:27 ◼ ► is working on. This can be tricky if the code bases your developers are working in are huge.
00:19:32 ◼ ► Thankfully, Sourcegraph makes it easy to move quickly even in those big code bases. Developers
00:19:37 ◼ ► know the knowledge is most useful when it's findable. Centralization is helpful but given
00:19:42 ◼ ► the fact that most companies store knowledge in multiple locations, how do you make knowledge
00:19:46 ◼ ► accessible to those who need it? Sourcegraph is a code intelligence platform that gives
00:19:51 ◼ ► developers what they need to drive their own learning over time and in different situations.
00:19:56 ◼ ► Without Sourcegraph, teams need to rely on asking colleagues or reviewing added documentation.
00:20:01 ◼ ► This is cumbersome and time consuming. But with Sourcegraph, every developer can search
00:20:05 ◼ ► across millions of repositories to find specific code, saving time for themselves and everyone
00:20:19 ◼ ► to make developers' lives easier. Today, they work with leading companies across every industry
00:20:24 ◼ ► including three out of five of the top tech companies plus PayPal, Uber, Plaid, GE, Reddit
00:20:37 ◼ ► to find out why some of the biggest tech companies in the world use Sourcegraph and to see what
00:20:44 ◼ ► heard about them from us. Once again, about.sourcegraph.com. Our thanks to Sourcegraph for their support
00:20:51 ◼ ► So I think the place that it might be interesting just to wrap up this discussion is just to
00:21:09 ◼ ► that I've tried to really focus on and pay attention to this year is performance testing
00:21:13 ◼ ► and making sure that my apps are solid on this. And I shared some of my tips and tricks
00:21:18 ◼ ► for this last week and I got a lot of interesting questions about it. And it seemed like a good
00:21:26 ◼ ► And so the first thing I think that is interesting is to understand that when I talk about performance
00:21:30 ◼ ► testing, it's like you're trying to make sure that your app, that no action takes more time
00:21:36 ◼ ► than you would hope it or that the user would expect it to and sort of in some ways takes
00:21:44 ◼ ► the process of doing that. But what's difficult and challenging about that is obviously it
00:21:48 ◼ ► was one thing when we were, you and I would remember in the early days of the iPhone where
00:21:52 ◼ ► it's like there were like two iPhones, three iPhones and like that was it. If you tried
00:22:03 ◼ ► test suite. Whereas now, I support devices back to at least the 6S, I think, generation
00:22:10 ◼ ► of iPhones, maybe even slightly, I think it's as far back as I go. And that's a lot of phones
00:22:28 ◼ ► have some resonance for people, was just sort of instead of trying to have an expansive
00:22:32 ◼ ► view of performance testing, that my app needs to be amazing and run perfectly and I'm going
00:22:41 ◼ ► stats for my app and kind of look at the processor generations. So I don't particularly care
00:22:47 ◼ ► too much about different screen sizes. There's a little bit of that can be a little complicated
00:22:56 ◼ ► performance characteristic to the standard size phones. But in general, even if you just
00:23:00 ◼ ► look at processor generation, and I'll plot what percentage of my users are running each
00:23:05 ◼ ► generation and what I tend to do is make a graph that shows kind of the cumulative coverage.
00:23:15 ◼ ► and then the next group is the iPhone 12 generation, and I add the number of people running 12
00:23:24 ◼ ► with an increasing percentage. And it tells you kind of how many people are running this
00:23:29 ◼ ► device or faster. And you almost inevitably you end up with this kind of like asymptotic
00:23:34 ◼ ► curve where you end up with a point of diminishing returns. And for me, that's right around the
00:23:51 ◼ ► And so for me, I don't really worry too much about people sort of on the long tail of that
00:23:56 ◼ ► beyond that. And the reason for that, I think this was the part that I think was most interesting
00:24:02 ◼ ► to be great for everyone?" And it's like, yes, that's great in the ideal sense and sort
00:24:08 ◼ ► of the conceptual version. But the real reality is, what's tricky with performance work is
00:24:15 ◼ ► usually what you'll do is you'll run a couple of tests, you'll use your application, you'll
00:24:19 ◼ ► run through instruments, all these types of places, and you'll find the slowdowns, you'll
00:24:22 ◼ ► find the points where it's being slow. And then you have to address that. And sometimes
00:24:28 ◼ ► it's just as easy as, "Oh, I'm doing something that I don't need to." You know, there's some
00:24:31 ◼ ► wasted work, there's a very inefficient solution, and you can kind of get free performance wins.
00:24:50 ◼ ► the way you've structured your code, in order to make it faster, by introducing things like
00:24:54 ◼ ► caching or using a more sophisticated or complicated algorithm or any number of things that you
00:25:10 ◼ ► that you are comfortable with. And anything below that is just you're not going to worry
00:25:20 ◼ ► have to jump through all kinds of hoops and I'll do all kinds of complicated things with
00:25:23 ◼ ► caching and very low level work in order to make that happen. And as a result, I'm going
00:25:29 ◼ ► to introduce more bugs. And so for me, I tend to take the approach that instead, I'm just
00:25:32 ◼ ► going to focus on performance of my app at a very, like find a level that's comfortable,
00:25:38 ◼ ► find a level that I can feel good about testing on. And just once it's good enough from there,
00:25:52 ◼ ► iPhone XR, which is I guess the XS generation. And so it's, you know, representative of 86%
00:25:58 ◼ ► of my users. And as long as it's good enough on there, it's been good enough for me. And
00:26:11 ◼ ► devices where it's just really hard to get good performance without jumping through some
00:26:17 ◼ ► Yeah, I should do something like that. It's a little harder for me to do performance evaluation
00:26:24 ◼ ► overall because I have a huge variety of like sets of podcast data that people can have
00:26:39 ◼ ► report from somebody saying, hey, you know, it's been slow on my phone recently. And they'll
00:26:55 ◼ ► than, you know, I have on my phone, like maybe two gigs of podcasts, which I consider to
00:27:00 ◼ ► be a lot. And that's, I'm not exaggerating that that's actually the numbers that I, that
00:27:11 ◼ ► well, this is a different situation than what I'm usually testing on myself. And it's really
00:27:24 ◼ ► large account whenever I need one. And I can test with, you know, a huge backlog of podcasts
00:27:33 ◼ ► I admit I don't use them very often because it's just really slow no matter what, no matter
00:27:37 ◼ ► what I run it on when the data sets get really, really big. But I don't know, I should do
00:27:57 ◼ ► true that that would benefit the typical situation. And I think that subtlety is often lost in
00:28:03 ◼ ► these discussions that, you know, if you had someone who is subscribed to 10,000 podcasts,
00:28:11 ◼ ► and your sync system was designed and structured in such a way that it worked really well for
00:28:15 ◼ ► them, it may not work as optimally for someone who has a typical amount, which is I don't
00:28:26 ◼ ► not get too wrapped up in your own mind about chasing down the extremes, which potentially
00:28:43 ◼ ► that's unfortunate, but they're representing like 0.01% of your user base, and it's way
00:28:48 ◼ ► better to make sure that like, your initial sync speed and sync speed, if you only have
00:28:53 ◼ ► 50 shows, it's like, absolutely, you know, sort of super, super, super snappy, amazing.
00:28:58 ◼ ► And that's the experience that almost everyone's going to have. And so doing something that
00:29:02 ◼ ► doesn't scale to, you know, 10,000, but works great at 10,000, you know, actually is a good
00:29:08 ◼ ► Yeah. All right. Well, thanks for that. That makes me feel a little better whenever I get