Under the Radar

259: Plans for the Season


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

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

00:00:11   So, happy new year. Happy new year to everyone.

00:00:13   Thank you, you too.

00:00:15   Yeah, it is the start of 2023, which I would say this year it kind of snuck up on me in a weird way of thinking,

00:00:22   where I was like, "Oh, it's a new year."

00:00:24   The calendar's turned over. It's been a very busy and mostly almost in a good way, but it's been a very busy kind of

00:00:31   Christmas, New Year, holiday season for me and kind of very slowly starting to emerge back into the,

00:00:39   "What does work look like? What am I going to do in the next five months before WWDC?"

00:00:48   Because I will say it is such a complicated thing. Being self-employed, one of the great benefits is that you have

00:00:56   complete control to some degree of your schedule, which is great, except it means that you sometimes have periods

00:01:01   in the holidays like I just had where I didn't do a lot of work. I focused on family and had a good time with

00:01:07   lots of different things. That means that now, it's almost like I'm coming back to work and have to remind myself

00:01:13   what it is I'm doing, what work I'm doing, what that's going to look like. It seemed like kind of a good point

00:01:19   to have an episode to kind of think through and talk through. In many ways, if you haven't noticed, under the radar

00:01:25   is just Marco and I thinking about our work by verbalizing it, helping us work out what it is we're trying to do.

00:01:33   I think for our first episode, let's take a look and say, "Okay, there's I think 146 days until when I think

00:01:40   W2C is probably going to be. It's about five months. What do I want to accomplish in the next half of the year?

00:01:47   What is that going to look like? What is getting back to work mean?" Just start thinking about what are the high-level

00:01:54   things, maybe even a few specifics of what we hope to accomplish in the first half of 2023.

00:01:59   Yeah, I don't know, Dave, what you're talking about. I had a remarkably massively productive Christmas season

00:02:07   and New Year. I definitely was not doing all sorts of family stuff and getting sick and dealing with all this.

00:02:15   Oh my God, I just looked at my last Overcast commit was December 17th. Today is January 9th.

00:02:21   It's been a while since I've done any work. The only work I've done in the meantime is making podcasts.

00:02:29   That's it. That's all I've been doing because I just had no time. I'm also now having to get back into this mode and remember,

00:02:43   "What was I working on?" I'm telling you, I actually am a little bit nervous.

00:02:50   First of all, this is the time of year when you realize that time has gotten away from you. We talk about the Apple year.

00:03:02   You just mentioned WBC starts it. I don't think of the new year having just begun. I think of in terms of seasons or halves,

00:03:13   "What am I doing this winter?" This winter is already pretty well in progress. We are already somewhat far into this winter.

00:03:23   If I consider it starting maybe November, whenever the fall hardware releases and software releases calm down,

00:03:33   and you're done with new stuff for those, that's usually around November. Now I'm two months in and I have not gotten done what I want to have done by this point.

00:03:49   This happens to me every year. This is not a new thing. Years are shorter than I think they are and winters are busier than I think they are.

00:03:57   I always think, "Oh, I picture myself almost like a cartoon sitting in my office with snow falling out the window, a hot cup of coffee on the desk.

00:04:05   I just have all winter to be at my computer." That's not how it works at all. Not even close.

00:04:11   Not only am I a little far behind, but one thing that's been giving me a little bit of stress, I think, maybe,

00:04:19   or maybe some kind of very mild form of anxiety, is that there's recently been multiple rumors to the effect that we might be getting the Apple AR or mixed reality headset not only this year,

00:04:34   and not only by WWDC, but possibly even before WWDC. I think that's interesting because I think of my own plans for the future and how to prepare myself and my skills and my app, if relevant,

00:04:57   for what seems to be pretty likely to be a new platform that's coming out within our world, within the Apple world here, and that is probably going to have impact on our apps,

00:05:11   or at least our lives as developers. Even if our current apps don't make sense or can't be run on an Apple mixed reality headset or whatever product constellation that might be,

00:05:25   that doesn't mean that we as indie developers will have nothing to do there. There's probably going to be lots of opportunities opened up whenever there's a major new hardware product launched.

00:05:35   It might turn out to be kind of like the Apple Watch, where there's a good market but not an amazing market for third-party apps.

00:05:44   Or it might turn out like the iPhone, where there's a massive market for third-party apps, and we don't really know. Or it could turn out like the iMessage store or the Apple TV, where there's a very, very, very small market for mostly specialized types of things, and most of us won't have much to do there.

00:06:00   I think knowing nothing about this product at all, I think it's likely to have probably something along the lines of the Apple Watch in terms of what we should probably be prepared to do on this platform.

00:06:18   The level of attention that developers, in terms of app plans and career plans, should be paying is probably something along the lines of the Apple Watch, at least for the time being.

00:06:30   And so that, to me, kind of tells me a couple things. Number one, it tells me, first of all, I want all of my skills to be pretty up to date, because if they're going to launch a brand new platform, you know it's going to use not only all of their newest tech, like SwiftUI and everything like that, but it's probably going to exclusively use their newest tech.

00:06:55   And so this is the time to brush up on SwiftUI, especially, I would say, and possibly some AR stuff if you have interest in this world.

00:07:05   And this is definitely a time to look at your app and say, "What kind of legacy requirements do I have that might not work?"

00:07:13   Like if Apple has a new platform that drops all legacy frameworks and stuff like that, you know, if I was still using the old audio toolbox code, maybe that wouldn't be there on an AR headset.

00:07:24   You know, if I'm still using some kind of old C++ framework, maybe that's not going to be exposed on the XROS or whatever we're calling it, ROS.

00:07:35   So this is a time to, if you're looking in the direction of there's about to be a new platform release in our ecosystem, this is a time to get rid of legacy in your app as much as you can, to stop relying on legacy frameworks, legacy code bases as much as possible, to brush up your skills in as much new stuff as you can,

00:07:58   get to know the new Intents frameworks and obviously new UI stuff, Swift concurrency, get all this stuff under your belt because chances are, with a new platform coming, if you're going to want to bring over any of your common code to this new platform, it's probably going to have to be pretty modern to work there.

00:08:18   And you might have to do a lot of simplification also, so it's going to have to be well structured, it's going to have to be clean, it's going to have to have different components you could easily enable or disable on different platforms.

00:08:31   So it's kind of a time to both modernize and clean up your code. Or if you can't do that with a particular app or if it doesn't make sense to do that with a particular app, clean up your plate so that you can maybe start a new app or start a new version of your app on this new platform.

00:08:50   And those are both pretty big jobs for most people. I know certainly for me that's a very big job with my massive legacy code base and my very full plate.

00:09:01   And I think based on the rumors of this thing being this fairly expensive, fairly specialized product to start and then maybe coming more mass market later, this is probably not going to set the world on fire immediately, but it is going to be something that we should be prepared for a big bomb to drop in our ecosystem.

00:09:24   And be ready to jump on new opportunities if they arise and things like that. And so that to me makes this a different kind of year than the average winter and spring.

00:09:35   We talked in the past about winter and spring being a good time to plow through some big items on your to-do list. This is a great time to add new features to your app, to pay down technical debt, to do big operations because you don't have the standard beta and new OS release and new hardware release cycle interfering much usually between January and June.

00:10:02   So this is usually a good time to do a whole bunch of this kind of work anyway. But I think this year in particular, because we are expecting that they're very likely maybe a new platform dropping, this is a good year to do to kind of focus more on the cleanup and preparedness side and maybe less on the new feature side if you think you might want to jump into this new market.

00:10:25   Yeah, I think it's like there's always, it is such an interesting time of year as a developer because it is, I very much had the same feeling as you of sort of the first half of the winter developer season that sort of once all the initial fall hardware is out and things are kind of settled down and you've maybe done a few point releases with the new OSes and things and it's like that's all out and done.

00:10:53   Then you have the busy time but not with work of Thanksgiving through New Year's, more or less, where it tends to be, I can get some work done but not necessarily a ton and then now it's sort of this things start to settle down, things start to open up in terms of my work capability.

00:11:14   Usually it is, it's a great time to kind of really, I think, really is important for this, but I found is to look at this as okay, say I had two months, three months, four months, what would I want to accomplish? And can I structure my time and effort towards that with the look towards any plan that goes past the first week of June is foolish, is unlikely to be something it may happen, you know, maybe it may be a quiet year for you at WGT.

00:11:43   You never know. But in general, having that view to have this limited amount of time, what do I want to get done in it? I think to your point for a lot of it is making sure that like the decks are clear for whatever you kind of are anticipating is going to be coming and that you are ready and that your apps are ready.

00:12:02   And I keep thinking of the WGT slide from the State of the Union last WGT where it's like very clearly Apple's, you know, it says we believe the best way to make apps is with Swift and Swift UI.

00:12:14   And that is in many ways, for better or worse been like in the back of my mind and the theme that I'm kind of applying to my own work ever since that, if they sort of they're not saying the old stuff is going away, they're saying, going forward, this is where if you want to be a relevant developer, you should be putting a lot of your effort to be an expert, like refine and develop your expertise in these two technologies, because that is what's going to be most relevant going forward.

00:12:43   And so that's been largely what I'm doing. That's, you know, what I've been doing in pedometer plus plus, I've been doing this big update to it is essentially rebuilding almost the entire app in Swift and Swift UI.

00:12:55   Like at this point, I'm expecting there will just be like some core data handling stuff that will still be Objective C. And that's only going to stay Objective C because I'm terrified to try and change it because it's, you know, it's the sort of the that core business logic that's, you know, it's sort of it's starting to become the makes me think of all the like mainframe banking software that's written in Fortran or something like, I just don't feel confident to change this.

00:13:22   So I'm just going to leave, let it be there until I absolutely can't. But everything else, it's like, it's everything around it is going to be in Swift and Swift UI, both to clear the decks, in terms of the, you know, making it so that I can more easily and straightforwardly share code between things and move forward and be ready if there's a new platform I need to extend my app into, as well as preparing me for, you know, understanding what the new stuff in Swift and Swift UI is like one of my little sort of jobs.

00:13:51   little sort of jobs for the next few months is like, you start using Swift concurrency,

00:13:57   because at this point, I've never used it other than when I had to use it for, like in live

00:14:02   activities, and there's a few things that you have to use it, but I've never written anything

00:14:06   against it, because I'm kind of have one leg in an old legacy, you know, Grand Central Dispatch

00:14:12   codebase. And so it's like, these are the kind of things that I want to really come up, my hope

00:14:17   would be to come out, you know, the end of May, ready with all the technology skills and abilities,

00:14:24   like, you know, under my belt, ready to go. And that's what I want. And so structuring my work

00:14:30   on whatever it is on kind of getting ready so that I can dive into whatever new opportunities

00:14:36   may present themselves. And worst case, there's no new opportunities that are very important. And

00:14:40   I've just improved myself, which is not a pretty bad, not a bad thing to end up with, by any means.

00:14:47   Yeah, because, you know, what we're talking about is, you know, this kind of, you know, cleanup,

00:14:52   modernization of your skills and your codebase, you know, paying down tech debt, adopting new APIs.

00:14:57   First of all, this is the kind of thing that you kind of have to do over time anyway,

00:15:01   even when there aren't new platform releases on the horizon. But also, this is a large component

00:15:07   of what we usually do, you know, before WBC, like in the lead up to WBC every year, that's usually

00:15:13   a good idea. Because usually some of the stuff that you, you know, some of your older code or

00:15:18   frameworks might be about to be deprecated in the next OS releases. Or there might be like some new

00:15:23   technology you want to adopt or some new SDK you want to use that comes out that requires,

00:15:28   you know, a new a newer environment that to be running within. So, you know, this is kind of the

00:15:34   usual advice that we gave right before WBC. But I think here, because we're expecting this larger

00:15:41   platform to be very likely to drop this year, I think it makes more sense again, to spend even

00:15:47   more time doing that, and maybe less time doing new feature exploration than you otherwise would,

00:15:53   if you have a lot of that cleanup to do. So we'll see. Anyway, we are brought to you this episode

00:15:58   by Issue. So whether you work for yourself or you're part of a team, it's time to get creative,

00:16:05   make your online presence and your business stand out from the rest with Issue. Issue is the all in

00:16:11   one platform to create and distribute beautiful digital content, from marketing materials and

00:16:17   magazines to catalogs and portfolios and so much more. There's no need for endless scrolling through

00:16:23   PDFs. Issue features your digital content in an easy to view way on every device. You make it once

00:16:29   and you can then distribute it everywhere without reformatting. Your contents automatically optimize

00:16:35   for engagement and ready to share, which saves you so much time. Issue also works seamlessly with

00:16:41   the tools you already use and love, like Canva, Dropbox, MailChimp, InDesign and more. Content

00:16:47   and Issue can be published as public or private. So you can have, for example, private content that

00:16:52   only people with the link can view, and public content will be available for your audience,

00:16:57   and it'll be available for others to discover on the Issue platform. This is pretty cool. The

00:17:02   platform also provides statistics on how your content is being consumed, so you can learn more

00:17:06   about your audience with data on impressions, clicks on content, duration spent reading, pages

00:17:11   viewed and again, so much more. Check out Issue. Issue helps creators, marketers, designers and

00:17:17   really anyone who wants to make content that stands out. Get started with Issue today for free

00:17:22   or sign up for an annual premium account and get 50% off when you go to issue.com/podcast and use

00:17:28   promo code RADAR. Issue is kind of spelled like the magazine Issue, but replace the last E with a U.

00:17:34   So it's I-S-S-U-U. I-S-S-U-U dot com slash radar and promo code RADAR at checkout for your free

00:17:43   starter account or 50% off an annual premium account. One more time, issue I-S-S-U-U dot com

00:17:50   slash radar and promo code RADAR at checkout. Our thanks to Issue for their support of Under the

00:17:56   Radar and all of Relay FM. Yeah, so I think maybe it would be an interesting place to kind of wrap

00:18:01   up this discussion if they'd be getting a little bit specific in terms of, I guess, our plans or

00:18:06   thoughts for the next few months. And I think for me, like I'm sort of halfway through this big

00:18:14   update to Pedometer++ and my focus for the next couple of months is going to be to try and actually

00:18:20   ship it, which I will say as someone who has gone through this process many times, I do find somewhat

00:18:26   intimidating that I know how easy it is for redesigns and rebuilds and things like this

00:18:33   to sort of scale out in complexity and scope and kind of what it is I want to do to such a point

00:18:42   that it's like so hard to actually get to the point that you're actually going to ship it. And so for

00:18:46   me, my sort of focus and intent for the next month or two at least is to say, okay, what is the scope

00:18:54   of this project? What is it that I feel like I could realistically ship by maybe March 1st,

00:19:01   with the understanding that most likely I won't ship March 1st, maybe March 15th, the end of March,

00:19:05   but like two months from now, what could I get done? Scope it for that, remind myself that

00:19:13   saving features for subsequent updates is actually a good thing, which is one of those little things

00:19:19   that I sometimes I find in this kind of a context where I'm trying so hard to kind of cram things in

00:19:24   is to say, actually, if I leave a feature for the next point release, that's actually a good thing

00:19:29   that creates more interest going forward and demonstrates work and lets me respond to my

00:19:34   customers. So I have to keep telling myself that because I think in my natural state, I will just

00:19:40   keep gobbling up features and keep adding them and trying to squeeze them in until I can. So I'm

00:19:45   telling myself no, find the set of features that you think is core and essential, find the scope

00:19:52   that you can manage and do. And then that's going to be my primary focus between now and then and get

00:19:59   that shipped. And then part of that is after that, it's like, we'll see, we'll see if this update has

00:20:06   how it's received, how it works there. I think I look forward to doing a bit more beta testing for

00:20:12   this feature, this update than I have in the past. That's something that I feel like I don't do well.

00:20:16   And so it's like, I look forward to trying to get better at that with this update. Also working a

00:20:22   lot of things towards accessibility and localization that I haven't done before. Like,

00:20:28   it has been really fascinating in this update so far to really embrace dynamic type. Like,

00:20:33   I think it's easy to have a basic support for dynamic type, but to actually go from the ground

00:20:39   up because I'm rebuilding everything anyway. So be like, from the start, how would I structure this

00:20:44   so that I can make my app, you know, I'd adjust to different text sizes. So those are the kinds

00:20:49   of themes and things that I'm really kind of trying to pay attention to and work towards,

00:20:53   you know, in the next two or three months in the hopes of kind of clearing that off,

00:20:58   having that app, you know, happily in a place where it's modern, it's moving forward, it's not

00:21:03   all Objective C and UI kit and full of pain and suffering as a result. So that's like my main goal

00:21:09   for the next couple of months. Awesome. Yeah, my main goal is, I have such a hard time like

00:21:18   setting these because here's what I want to make my main goal. I want to make my main goal,

00:21:23   some kind of large, you know, overcast modernization of a lot of the code base and start,

00:21:28   you know, start doing some of the UI and Swift UI and have my sync engine running with the new

00:21:32   Blackbird database and things like that. And that's, unfortunately, that's really ambitious.

00:21:39   And whenever I set a large, ambitious goal like that, for any kind of time span, it just doesn't

00:21:46   really happen. You know, that's why like my quote redesigns take like three years to do, you know,

00:21:52   two screens, because it's just, it's always so much bigger than that when I actually tried and

00:21:57   I always have so much more on my plate than I think I do, or something comes up or whatever. So

00:22:02   I know better than to set a large concrete goal. So instead, I'm just going to set vague,

00:22:11   some more achievable goals, you know, more in the context of Cortex theme, where I just, I want this

00:22:20   to be the year of real overcast modernization, and real technical debt replacement. And, and so,

00:22:29   you know, I do want this to be a year of large moves into Swift, Swift UI and Blackbird for

00:22:37   overcast. And that's going to mean a lot of rewriting code. And I'm usually pretty hesitant

00:22:44   to rewrite working code. You know, I read Joel on software a million years ago, like I know that

00:22:49   rewrites are usually considered, you know, a bad idea, and for good reason. But, you know, this is

00:22:56   a this is a pretty old code base now. And I, there are just so many things that I just feel tied down

00:23:03   with legacy code by so much modernization, I'd like to do so many features that I'd like to add

00:23:10   or changes I would like to make, or design updates I'd like to do. And, and I, you know, as I

00:23:16   mentioned in the past, my big redesign I did about a year and a half ago, or a year ago, whenever

00:23:21   that was, I did it all on Objective C. And that ended up being really stupid. Because, like, there

00:23:28   are things people ask, like there are changes people ask for, or little tweaks or customization

00:23:32   options that I know if I did it in Swift UI, I could do that in five minutes. But because I did

00:23:40   it in all the old code, all Objective C, all UI kit, I know that I'm just never going to do that.

00:23:46   Because not only will it take more than five minutes, but it would introduce a level of

00:23:49   complexity to the code that that it's just not worth maintaining over time. And I don't want,

00:23:54   I don't want to do that to myself or to my code or to my app. And it would make it buggier and,

00:23:58   and more bloated and everything. And so it really is, holding on to the legacy is holding me back

00:24:05   in a lot of ways now. And it's not that it's not that all those were bad languages and bad

00:24:10   frameworks. It's that our needs have outgrown them in terms of like what one indie developer is

00:24:15   expected to do with an app these days, all the different, you know, views and extensions and

00:24:23   different versions of our app and UI, different forms they have to take, different environments

00:24:27   that have to be shown in, different sizes and color schemes and accessibility settings, as you

00:24:31   mentioned, and there's so many different things that, you know, different, different, I guess,

00:24:37   faces of our app and, and different environments, again, that those have to be shown in that,

00:24:42   that it's just really hard to keep up with all of that and to make something that's, that's good

00:24:46   and good looking and performant and accessible. And to do all that as one person writing an

00:24:53   Objective-C and UI kit with any kind of non-trivial app, is just a lot to ask for one person.

00:24:59   And so I can't keep up. I can say that, I mean, those of you out there who can, that's great. You

00:25:04   probably work better than I do. That's not, you know, that's not hard, but I'm not a very good

00:25:09   worker, but you know, I can't keep up myself with, with all of that. And so I need to use these more

00:25:14   advanced tools to keep up better. I need to use higher level stuff. I need to use less customization.

00:25:19   And that to me means Swift and Swift UI and Blackbird, hopefully. And so that, that's what

00:25:25   I want to do is start doing these major breaking changes, these major rewriting components.

00:25:31   And hopefully what I'm left with is way less code and way easier to change and modernize and tweak

00:25:38   over time. Way easier to give people what they've been asking for, for, for months or years. Like,

00:25:45   I have so many feature requests that just keep coming up over and over again that I would love

00:25:49   to do for people. And, and I'm just held back so much by this mountain of very complex UI kit code

00:25:56   that, that I, mostly UI kit is most of the problem in my app. It's not necessarily Objective-C. I

00:26:01   mean, it happens to be Objective-C and I can, I can write it more concisely and better with Swift

00:26:07   now, but mostly it's, this is, I'm talking about a move to Swift UI mostly. And I think that will

00:26:12   save me a lot in the long run, but it will cost a lot in the meantime. It'll be basically an

00:26:18   entire spring of like no feature updates. And that's, that kind of sucks for everybody, but,

00:26:23   you know, that's sometimes you got to do that. And I think after all this time, you know, with

00:26:29   this app that I wrote, I wrote most of these screens that I'm on to replace like eight years

00:26:33   ago. So I think it's, I think it's about time. Yeah. And I think the only thing that I would

00:26:38   sort of challenge you on or make you to sort of hope, hopefully you can think about is making sure

00:26:44   that you, there isn't a path forward for you where you do this in a incremental quick win kind of

00:26:52   approach. Where I think about it is, and this is just coming purely from my own experience with

00:26:57   parameter plus plus the update I'm doing there is like, there was a part of me that regrets

00:27:01   that I'm doing this as these kind of large holistic rewrite, like now I'm like halfway through the

00:27:08   rewrite where like, maybe what I should have done is just been working towards taking each section

00:27:14   of the app and kind of work on it a little bit and then just ship it and kind of work towards it in a

00:27:20   way that makes it doesn't feel like I'm not sort of continuing to throw plates into the air that

00:27:25   I'm trying to juggle. And at some point, the complexity of that and the size of it just is

00:27:30   kind of weighing me down a little bit. And so the only thing that I would say to you is think if

00:27:34   there are places in the app that you could replace with Swift and SwiftUI and get it out there and

00:27:41   sort of start to get some momentum going. And in some ways it makes me think of like your,

00:27:45   say like your purchase screen. I know we've talked in the last, you know, couple of few episodes ago

00:27:49   about, you know, paywalls and things there. It's like, just rewrite that screen in Swift and SwiftUI

00:27:54   and start there. Or the now playing screen perhaps or like something that's like picking something

00:28:00   rather than feel viewing it as sort of this whole, this holistic thing because it is I have found

00:28:07   something that I find really difficult. And especially if I'm honest, coming back into work

00:28:11   after the holidays is doubly so. Like just a little like pro tip that I will recommend everyone try

00:28:19   is when you're coming back from a break, try and find something that you can think you might be

00:28:25   able to like make good progress on in a day or two and just work on that. Even if it's not the most

00:28:29   important thing, even if it's not the most urgent thing, but something to kind of like, you know,

00:28:34   you don't want to go and run a race without warming up. It's like you need some kind of warm up to just

00:28:40   get back into the flow. Remember how things are, remember where things are. Like just physically and

00:28:44   mentally like just something that I've found time and time again. So like I have a little project

00:28:49   that I'm expecting to sort of tackle inside of the pedometer plus plus update today and tomorrow.

00:28:56   But it's like just a nice little quick win, it'll be done. And then I can actually like turn around

00:29:01   and face the mountain of features and the mountain of other stuff that I want to be chipping away to

00:29:05   the next few months. But like hopefully with a little bit of like a quick win under my belt

00:29:09   before I get there. So just a thought. Yeah, that's a good idea. I should probably do that.

00:29:15   I guess I've been trying to avoid having to do a whole bunch of bridge code. Like if I convert part

00:29:19   of the like, you know, say I convert the sync engine over to Blackbird, then I have to write

00:29:23   a whole bunch of bridge code for all the other Objective C code that's still there in the app

00:29:27   to access all the new database models and stuff like that. And so I've been trying to avoid that.

00:29:32   But I think you're I mean, there are things like the purchase screen that are terrible that I could

00:29:35   probably rewrite. So thank you. That's good advice. Anyway, good luck, everybody starting off your new

00:29:41   year. Happy New Year and we'll talk to you next time. Happy New Year. See you in two weeks.