Podcast Search

Under the Radar

259: Plans for the Season

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. I'm Marco Arment.

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

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

0:00:13Thank you, you too.

0:00:15Yeah, 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,

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

0:00:24The 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

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

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

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

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

0:01:01in 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

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

0:01:13what 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

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

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

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

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

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

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

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

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

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

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

0:02:29That'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,

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

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

0:03:02You 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,

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

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

0:03:33and 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.

0:03:49This 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.

0:03:57I 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.

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

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

0:04:19or 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,

0:04:34and 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,

0:04:57for 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,

0:05:11or 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,

0:05:25that 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.

0:05:35It 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.

0:05:44Or 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.

0:06:00I 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.

0:06:18The 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.

0:06:30And 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.

0:06:55And 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.

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

0:07:13Like 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.

0:07:24You 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.

0:07:35So 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,

0:07:58get 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.

0:08:18And 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.

0:08:31So 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.

0:08:50And 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.

0:09:01And 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.

0:09:24And 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.

0:09:35We 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.

0:10:02So 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.

0:10:25Yeah, 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.

0:10:53Then 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.

0:11:14Usually 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.

0:11:43You 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.

0:12:02And 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.

0:12:14And 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.

0:12:43And 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.

0:12:55Like 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.

0:13:22So 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.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:17:34So 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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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