Under the Radar

245: Slope of Enlightenment


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

00:00:04   I'm Mark Auerment.

00:00:05   And I'm David Smith. Under the Radar is usually not longer than 30 minutes, and this one definitely won't be.

00:00:10   So let's get started.

00:00:12   Let's get started. That's right.

00:00:14   You already forgot how to do it. We broke the format one time.

00:00:17   One time. I'm totally ruined. I think it was absolutely worth it last episode.

00:00:22   So if you haven't heard last week's episode, you're absolutely missing out because I think we had a great discussion with Serenity and Andres about the WDC.

00:00:29   And it was just an absolute treat for us to be able to do an interview with the developer center to talk to them and get the first-party impressions and things that they had.

00:00:43   But I think now we can take a step back and have more of our personal impressions and thoughts from coming out of WDC and what we're excited about and interested in and what our summer might look like, I think.

00:00:54   Yeah, because this is the part of the WDC cycle where... Have you seen... I forget what it's called. It's like the Gartner hype curve or something like that.

00:01:03   And it's this thing that's been around forever. It's this graph. Basically it's the graph of the hype cycle of new technologies or new fads in tech.

00:01:14   And the basic idea is it spikes up really high at first as everyone gets all hyped about some new technology or thing, and then it crashes down super low as everyone realizes that that technology cannot solve all the world's problems and isn't as good as we all thought it might be or doesn't pan out the way we thought it would.

00:01:33   And then everyone kind of forgets about it. And then it kind of comes back up and plateaus into a nice level of general usefulness but not taking over the world.

00:01:42   And I think WDC... We follow that same cycle throughout the summer. And honestly, maybe the whole year where WDC keynote happens and they show off all this amazing stuff and our hype goes through the roof because we're so excited because they just gave us this great big marketing presentation and we're super excited about all this new stuff exactly the way they want us to be.

00:02:07   And then there comes a little pit of despair after that when we see maybe certain things aren't as good as we want them to be or as ready or as much as we want them to be.

00:02:18   And we kind of get, "Oh man, this new API looks cool but it turns out I can't use it." Or it turns out it has these limitations that make it hard for me to make useful work out of or whatever.

00:02:28   And then as the summer goes on we start realizing, "Wait a minute, now with this other stuff we can do this, this, and this and actually here's all these little smaller improvements that we didn't really quite see up front."

00:02:39   But now we're realizing, "Oh, this is actually really nice." And then it gets into that plateau of usefulness.

00:02:44   And so I think right now we should be kind of coming down from the peak as we're seeing now we should be at the part of, "Okay, these new APIs maybe didn't give us everything we needed or didn't give us everything we wanted."

00:02:59   But we still have lots of good stuff and work to do. So where are you in your summer pattern here?

00:03:06   Yeah, and I just looked up what you were saying. It's the Gartner hype cycle and it starts with a technological trigger, then the peak of inflated expectations, then followed by the trough of disillusionment, followed by the slope of enlightenment leading to the plateau of productivity.

00:03:21   So those are the official names, which is great. And I would say I am definitely in that slope of enlightenment phase. So essentially the coming up out of the trough.

00:03:29   Because yes, absolutely, at WGC, especially going to Apple Park, having that whole experience the first time in several years, I was definitely in the peak of inflated expectations.

00:03:40   And I think in some ways, that's not a bad thing. I think that was wonderful, in a weird way cathartic or therapeutic in a way, to just like, "Yeah, we're back. We can do this."

00:03:51   That excitement was wonderful to experience, even understanding that yes, it overshoots what is actually being announced, what is actually the reality of what this means.

00:04:03   That's fine. That was great. I enjoyed it. I loved riding that peak up. And then yes, followed by the period of actually kind of wading through the announcements, actually getting into the weeds of, "Okay, what does this actually mean? What can I actually do?"

00:04:17   And then I would say there weren't that many massive disappointments for me in terms of the things that were announced. But there definitely was certainly some learning that had to happen.

00:04:26   And then now I'm in that phase of actually making concrete plans, sitting down and thinking through, "What does my summer look like? What am I going to try and get done?"

00:04:35   For the way that I tend to plan, I think about it as, "By September 1st." The way that I do my planning is I want to plan things out such that by September 1st, they're done, with the assumption that sometime in early September, the final beta, the iOS 16 and watchOS 9 and all those will actually be released.

00:04:56   And so if I'm ready on September 1st, that's a good milestone. And then I usually have a week or two of extra slack there that I can use as I need to or to adapt to if there's new announcements that come out there.

00:05:09   And I think for me, it's certainly a busy summer. I think last summer I got off easy in terms of there was things to do, but it was very much kind of light touch kind of work.

00:05:20   That it was things that were making my apps a bit better and improvements here and there, rather than I feel like this year, there are certainly some big things that are these large.

00:05:29   And it's probably moreover that my work is aligning with the marquee features of the releases in a way that that's the best place to be.

00:05:40   I can tell from experience that if you are in Apple's sweet spot in terms of the things that they're going to be promoting, the things that when they have their big iPhone event, which is probably one of the most widely watched keynotes they do in a year,

00:05:53   if your features and things are aligning with that, people are being told to look out for these features, to look out for them, to expect them, to have that excitement.

00:06:01   So for me, obviously, it's like lock screen widgets is huge in terms of it's a big marquee feature. I think it's fun and interesting in terms of I like the way they've gone about doing it.

00:06:13   And for me personally, as someone who has spent a tremendous amount of time making watch complications, like I built WatchSmith, the app that is the spiritual parent of WidgetSmith,

00:06:27   was entirely about, I was so into complications that I made an app that all it did was let you design and customize complications.

00:06:33   So essentially bringing complications to the lock screen rather than, it's the same technology as WidgetSmith, but it's built with the UI of a complication.

00:06:42   So it's like, great, no problem. I like that I can go into that experience feeling somewhat confident that I know how these work, I know what to expect.

00:06:49   And that's going to be, I think, the big bulk of my summer certainly is fleshing that out and making that work.

00:06:57   And then I think beyond that, I think that's my main goal. And I think this summer is going to fall into a lot of smaller subtasks and projects for the rest of my apps,

00:07:09   maybe somewhat similar to a flavor of last year where Sleepless Plus can take advantage of the new sleep stage tracking technologies that are coming to watchOS 9.

00:07:18   So I'll take advantage of those. In Pedometer++, I can do the same thing with the lock screen widgets to put step counts there.

00:07:26   And then for WatchSmith, there's definitely going to be this interesting tension I'm now starting to run into of that WidgetSmith and WatchSmith are becoming more similar

00:07:37   and have much higher overlap in terms of, you know, you now have complications and they're even built technically the same way, you know, complications in your lock screen, complications on your Apple Watch,

00:07:47   and you can build them using exactly the same technology. And so I think it'll be an interesting thing and maybe a topic we'll discuss at some point later of what do I do there?

00:07:55   Is it worth kind of combining the two together, keeping them separate? Whether I should adopt the technique, you know, add watch complications to WidgetSmith or add, you know,

00:08:03   in some way that could go the other way around and I could add widgets to WatchSmith. Like, there's a lot of overlap there that there wasn't before.

00:08:08   But I think that's sort of my lowest expectation in terms of where I'll be going, because that feels like a project too that might be a good thing going into the fall

00:08:16   and winter to tackle.

00:08:19   Yeah, I think this WVDC, the more I look at, you know, the actual SDKs and watch the videos and look at some of the APIs, the more I realize that what Apple delivered for me is not necessarily what I would have asked for,

00:08:36   but it's what I probably needed. And in the sense that what they delivered for me is a relatively quiet summer. One that I have a few new things that I want to adopt, which I'll get to in a second,

00:08:50   but that most of what they announced is stuff that I don't really need to adopt or shouldn't or can't adopt, with a few little things that I can,

00:08:59   and then a whole bunch of frameworks improvements that I will very much use either now or down the road.

00:09:07   And what's nice about that is that, you know, I've talked for a while here, like how I find myself buried under this pile of old code and massive amounts of UI and technical debt,

00:09:21   as I started Overcast eight years ago, you know, right before Swift and certainly long before Swift UI.

00:09:29   And so, you know, I have this huge mountain of legacy code that I'm trying to dig my way out of slowly over time.

00:09:36   And so what I really want and need to spend this summer doing is continuing to pay down that technical debt,

00:09:43   continuing to migrate a lot of my underlying subsystems to Swift, migrating a lot of my UI to at least Swift and generally, hopefully, some more Swift UI as well,

00:09:54   you know, because it's all still just a C code and there's huge mountains of things I can get rid of.

00:09:59   Like some simple things like all of the table row and collection cell configuration changes they've made in the last couple of releases,

00:10:11   I've adopted almost none of that because frankly, I found it kind of overbearing and odd and cumbersome to use any kind of custom behavior with.

00:10:22   And frankly, I haven't gotten to it yet. But now, like, you know, they have even minor advances there, like the self sizing table view cells, finally,

00:10:31   and the ability to shove Swift UI into those new cell configurations for custom layout.

00:10:37   That's great like that. And that's the kind of thing that will help me migrate towards more modern APIs and take advantage of more modern features as I, you know, bring this huge code base forward and or try to at least.

00:10:49   Meanwhile, all the like big headlining APIs that are there in the new version are mostly things that I either can do very quickly and in like a fairly shallow way or don't need to do at all.

00:11:01   So for instance, I was very excited when I saw the I think it's called the live activities on the lock screen.

00:11:08   But A, that isn't out yet. That API is one of those, you know, coming later this year ones.

00:11:14   And B, actually using iOS 16 now my carry phone only for a couple days, but you know, because only since beta 2, but actually using it now.

00:11:23   I kind of don't think I need to do that because the now playing widgets always going to be there. Like if you're playing audio, the now playing thing is going to be in that spot.

00:11:32   So I don't think I even can use that for anything useful.

00:11:37   So I probably will need to do that. The lock screen widget situation. Am I correct that it's only like those handful of monochrome widgets up top?

00:11:47   It's not like the whole screen middle section? Correct. So there's the one that's called the inline lock screen widget that goes above the time.

00:11:57   Yeah, like next to the date. Yeah, it's one image, one text. That's all that you're allowed to put up there.

00:12:03   And then there's the rectangular one that goes below the below the time. And then the circular one that goes in that same spot.

00:12:09   But yes, one row of those, the middle of the lock screen will continue to be open space from a widget's perspective. I think things can slide up there in terms of live activities and notifications and things, but we can't put anything there.

00:12:21   It's only that sort of the very thin one above and then the medium sized row below. Right. And so because that's all it is, frankly, I don't think a lot of people are going to find it useful to have overcast there.

00:12:34   Because I think at best I can either offer like an app launch icon, which I mean, OK, that's easy. I'll probably do that.

00:12:42   Or I can use the little text rectangle type to show like the one next episode or something.

00:12:50   But it's not much to work with. I don't think that's going to be very used by my by my customers.

00:12:56   And so I don't really have to do much there, if anything. And certainly I could even you know, if I'm not there on day one, it isn't the end of the world.

00:13:03   And then the focus modes API, I've already kind of asked some users and thought about it myself and figure out like, how would I integrate focus modes into overcast?

00:13:12   And the answer is, I don't think I need to. And I don't think it's going to be worth the UI for that.

00:13:18   It's not really I don't think it's the kind of app that you really need that for. And then I want to do the share with you API, because that's you know, I have a lot of messages sharing that goes on in my app.

00:13:28   And so that's, that's great. And I'm looking forward to that. And I think that's about it, like for in terms of user facing API's that I really should adopt for for, you know, day one or near day one.

00:13:38   Otherwise, I get to just bring my app forward, I'm going to bump up my required version up to iOS 15. Right now it's on 14.

00:13:45   I'm going to bump it up to 15, I can start really taking advantage of a lot of stuff we got last year.

00:13:49   I still haven't done any kind of, you know, Swift async and actor stuff yet.

00:13:53   I have none of that in my code yet. So I'm looking forward to adding that in, starting to go down that path.

00:13:58   And then starting to finally hopefully take advantage of some of these new Swift UI things that we've gotten.

00:14:03   And so I basically have a year of a little bit of new shiny stuff for my users.

00:14:09   But mostly just the ability to keep pushing my app forward in terms of its underpinnings and its technical debt.

00:14:15   And that I think is way more useful. And it's what I actually need right now.

00:14:19   That's the kind of thing I need to do so I can continue pushing myself out of the hole I've dug for myself.

00:14:26   So that's the kind of somewhere I'm looking forward to. And that's what Apple delivered.

00:14:30   Yeah. And I think that's, I mean, that sounds great. I think it's certainly, especially I think the perspective that you're taking with that sounds very sort of helpful to setting yourself up for success in the future.

00:14:42   Like you continue to success. But there's certainly, yeah, there's some things that make sense for you to do.

00:14:48   But there's not a lot that you need to kind of like try and sort of force into the next two months.

00:14:54   That you have a lot of those you have sort of some runway with to adopting new table cell like configurators and things.

00:15:03   Like, sure, that sounds great. And it's useful over the course of the year. But it's not like you got to rush that in before September 1st.

00:15:09   Your September 1st features are much more focused and potentially straightforward in terms of there are some things that you could use there.

00:15:16   But it's not sort of overwhelming in that way. And then way that I certainly feel a bit more pressure with like widget kit and widget.

00:15:24   It's like WidgetSmith needs to be super impressive on day one with lock screen widgets.

00:15:28   Yeah. And like that's a little bit of a pressure. But I think if you're overcast, lock screen widgets were just essentially play this podcast, play this play the next item in this playlist or resume or something.

00:15:40   And in some ways treating it more like the way that like the flashlight and the camera app are just like quick launchers on the lock screen.

00:15:48   Like could be interesting. But beyond that, you don't need to go to go too far down that road because there's not that I think there's just much there that that would make sense for your app.

00:15:57   Right. And, you know, if the widget system became, you know, more, I guess, real time interactive than it is now down the road, then I could do some things with those little widgets.

00:16:09   Like, you know, like the way live activities are apparently going to work. If I could do that kind of thing with the smaller widgets on the lock screen, then I could have a few a few other ideas and a few other little values I can provide to my customers.

00:16:21   But it doesn't seem like that's in the cards anytime soon. So, you know, with what we have now, I actually have relatively little to do there. And that's fantastic.

00:16:30   We are brought to you this episode by Sourcegraph. So you've hired a brilliant developer. That's great. Now you have to get them onboarded.

00:16:38   If your company is growing, onboarding new developers will be a common occurrence, but it's a big undertaking each time. One of the biggest challenges for new hires is get them up to speed with the project their new team is working on.

00:16:48   This can be tricky if the code bases your developers are working in are already large. Sourcegraph makes it easy to move fast even in those big code bases.

00:16:56   Developers know knowledge is most useful when it's findable. Centralization is helpful, but given that most companies store knowledge in at least two different locations, how do you make knowledge accessible to those that need it?

00:17:07   As a code intelligence platform, Sourcegraph gives developers what they need to drive their own learning over time and in different situations.

00:17:14   Teams without Sourcegraph need to rely on asking colleagues or reviewing out-of-date documentation, which is cumbersome and time consuming.

00:17:20   But with Sourcegraph, every developer can search across millions of repositories to find specific code, saving time for themselves and everyone else.

00:17:27   So when questions do come up, you know it's the big stuff that's worthy of the extra time. Sourcegraph was created to make developers' lives easier.

00:17:35   Today they work with leading companies across every industry, including three out of five of the top tech companies, plus PayPal, Uber, Plaid, GE, Reddit, and Atlassian.

00:17:44   Visit about.sourcegraph.com to learn more. That's about.sourcegraph.com to find out why some of the biggest tech companies in the world use Sourcegraph and to see what it can do for yours.

00:17:55   Or click the link in our show notes to let them know that you heard about them from us. Our thanks to Sourcegraph for their support of this show and Relay FM.

00:18:03   So something too that I think is worth just sort of touching on in terms of strategies for the summer. I think it's sort of talking through a little bit of the way that I think I've found to be a productive way to approach adopting new iOS features.

00:18:18   In terms of how to build them out, how to try them out in a way that isn't feel sort of heavy and cumbersome.

00:18:24   And I think this is something that I've gone through many iOS versions. I guess I started in iPhone OS 2 or 3. I don't even know. So it's been quite a few.

00:18:34   And something that I find is I find this kind of adoption works really well to take a two-phase approach to development.

00:18:42   Starting by taking your app, especially if you have a larger code base, and just opening it up in the new version of Xcode and starting to code, in my experience will often lead to a lot of cumbersome work or things that you end up fighting the tool in a way that is not productive.

00:19:03   And so instead, what I found to be much more helpful is to create a lot of sort of little temporary projects to explore whatever the new API is, to explore and understand how it works, to potentially pull in some of the library code from your app to get a sense of how it might work in your app.

00:19:22   But to be able to explore it in a way that you aren't running into the things that always drive me crazy, where there's weird deprecation warnings or issues with, and sometimes you even have things where your project won't build in the latest version of Xcode until you do this big refactor, or you need to make some changes to the way that your frameworks are linked, or there's some fragile part of your project that gets broken by this change.

00:19:48   Eventually you're going to have to deal with that, though often sometimes those even just go away, that the new Xcode, like beta 3 or 4, is just better in a way that you are setting yourself up for more success and productivity to just sort of wait to do that grand merge, that grand refactor to deal with that.

00:20:07   Instead, if you just set your deployment target to iOS 16 in a brand new project and explore the feature, make sure you understand it really well, make some mistakes that you then won't make with your actual kind of big project, I find that to be very productive.

00:20:21   And that's the approach that I take. I've been doing it so far this year. The only thing I do is, for once, I will open up all my projects in the new version of Xcode and just do a clean build, just to get a sense of if there's some horrible thing down the road that I need to be planning for.

00:20:37   But otherwise, then it's like close those, create a bunch of new projects. So I have a bunch of projects that are just for me to explore how the lock screen widgets work or to explore how the new sleep stages stuff works or trying out some of the new SwiftUI features.

00:20:52   I try and do these in these small little projects. And then probably halfway through the beta cycle is when I'll start really starting to plug those back into the main projects. And that's just something that I've found to be very good for productivity.

00:21:07   I mentioned here in case that is helpful to someone else who is finding themselves frustrated by adopting these new features. And also it makes it easier. I mean, you can obviously manage this with your source control, but I try not to touch my main code branch of the app, such that I'm going to continue probably to need to do bug fix and minor releases over the course of the summer.

00:21:29   And while technically you can have two separate source trees that you're working on, cognitively I find that to be really complicated and confusing. And then you have to manage pulling the code from one to the other.

00:21:42   And so the degree to which I'm able to push off the strong divergence in my source tree, I find to be beneficial and pays dividends to me down the way.

00:21:53   And so, anyway, just a little pro tip. I don't know how you handle it, Marco. I think you have a slightly different code base situation to what I have in terms of I have multiple apps in all kinds of different stages of code and you just have one. But I don't know if finding strategies like that is helpful as well.

00:22:08   Yeah, I mean, I think I do what is fairly common, which is I create an iOS 16 branch of my app and I will do any things I need to do there where I need to build with the iOS 16 SDK. So that way I can still have the main branch where if I need to issue an update before the app store will accept builds from the new Xcode, which is generally before we have a GM, so most of the summer, then I can do that.

00:22:34   But usually, I've been fortunate that usually I have not needed to issue many updates throughout the summer. So usually, unless there's some major thing that I can work around early in the summer for the new betas, usually I get to just leave it and just do all of the work I'm doing in the beta branch.

00:22:53   The downside of that is that I can't release any of that work until we have a GM. So if there are things that actually affect other customers, things I want to get issued throughout the summer, sometimes I've got to deal with manually backporting only that changeback and everything. So it's not a great system, but that's usually at least what I do.

00:23:13   That being said, I've been really slow in these past years to adopt the latest APIs and things. So oftentimes I will experiment with them throughout the summer, or I'll do that branch and I'll spend a few days making some feature with the new stuff, then quickly realize, "Eh, this isn't that important right now."

00:23:32   And then I'll just go back to working in my main branch and do all the updates there. I have stuff going on this summer where I'm also doing some server improvements and I'm trying to both improve performance of server stuff and also reduce the amount of server stuff that is on my plate directly.

00:23:50   Throwing more stuff to CDNs or S3 or whatever the case may be. I'm going to have to do minor changes to the app and things like the sync protocol to talk to a different server in a different way or something.

00:24:04   So that's the kind of thing that doesn't need any of the new stuff and I want to get that out quickly. Meanwhile, if the new stuff is going to be a little less important for me to get here, then this summer I haven't yet created that branch because my app builds just fine and there's no major deprecations I need to worry about yet.

00:24:23   And I'd rather just keep working in the GM toolset most of the time and continuing to push my app forward to the brave new world of iOS 15, which I'm requiring soon.

00:24:35   It's interesting, WBC usually derails everyone's plans and it creates new plans. In cases like you this summer where you have a lot of relevance to the APIs that got changed and improved, that makes sense. But as I mentioned earlier, this summer's releases don't really derail my plans much.

00:24:55   And so I'm trying to exercise some self-control in a way and say, you know what, I'm working on my now playing screen and these underlying code changes and these server optimizations.

00:25:07   I think I should just keep doing mostly that because I still have a long way to go on that. And as you mentioned earlier, setting myself up more for future success as things change more in the future, that's more important to me right now.

00:25:22   To keep going on the path I was already going on than to jump head first into the betas and start using all these cutting edge features that I really don't have much use for this particular year.

00:25:36   And I think there's definitely some wisdom in that. And I will certainly throw out the note of caution that I have made the mistake many times of adopting, trying to force new features into my app where they didn't really make sense in this sort of vague feeling that, well, if I do that, then magic will happen, I guess.

00:25:56   That lots of people will download it or it'll get featured in the app store or something like that will happen. And very often I've just sort of created legacy support weight that I have to carry around for a while.

00:26:08   Where there's these parts of my app that aren't particularly used, aren't particularly important, but just sort of I did because I kind of wanted to make it happen and wanted to say that, you know, whatever I use, I support focus filters or whatever that is.

00:26:23   Did you make an iMessage app? I made several iMessages. I did a whole lot of work with iMessage that I now sort of, I think it's still in, I don't think I've pulled it out anywhere, but I'm not sure if anyone's ever used it.

00:26:37   But that's definitely something, one of those, an example of just being very thoughtful of just trying to force it into your app. If there's a new feature that you think will make your app demonstrably better, that you, when you think about it, got you excited.

00:26:51   Awesome. Like it is definitely obviously benefit. I can tell from experience, it is beneficial to be ready on day one. If you have an idea or a feature that is like really in the sweet, you know, sort of like that sweet spot of like it's new and interesting and you're taking, you know, finding a cool use for it.

00:27:07   But just trying to force it to happen and especially trying to force it to happen in a compressed timeframe is not necessarily the wisest thing. And I'm saying that as someone who's tried that and done it a lot of times that instead, it's much better to, if it's a feature that isn't that time critical, then you can push it out.

00:27:26   Let it be something that if all, you know, that comes out a bit later in terms of it's more of a technical, like adopting some new SwiftUI feature or something like that. Like don't feel like if it isn't a major user facing feature, adopting it on day one is kind of irrelevant that you don't worry about.

00:27:42   It's like, oh, wow, but now that I can do this cool thing in SwiftUI, I'm going to take advantage and do that by September. It's like you have any amount of time you want for that. It's only really the major like marquee iOS 16 features that are going to get any amount of benefit from being there day one.

00:27:56   And I think for those, it's like make sure you have a compelling case. Make sure that when you saw that feature, you were genuinely excited. Because when I look back at all of my regrets, like I think about things like the iMessage App Store, some of the features that even I sort of like I tried to build some things with

00:28:11   like the with iPad drag and drop in the day, I was trying to invent uses for these features when they came. But it's like I was a solution in search of a problem rather than knowing a problem that was benefit from the solution. And I think being aware of that and being careful can save you a bunch of wasted work that you can instead, you know, put towards actual things.

00:28:32   So in your case, like it sounds great to give there's a few little things that Overcast will benefit from and the rest. It's just like using the summer to be continued to like be reducing the weight that you have to carry going forward and benefiting from you.

00:28:46   It's like dropping support for iOS, older iOS versions, if that's appropriate, like awesome. Doing that just like streamlines your yourself going forward rather than necessarily adding on more weight that you have to carry around, which sometimes I'm guilty of doing.

00:29:00   Exactly. Well, thank you very much for listening, everybody. I hope you have a wonderful, you know, next couple of weeks of summer going through all this stuff. I hope you are in the slope of enlightenment or the plateau of productivity. And if not, I hope you get there soon. Thank you for listening and we'll talk to you in two weeks. Bye.