00:00:00 ◼ ► Welcome to Under the Radar, a show about independent iOS app development. I'm Marco Arment.
00:00:05 ◼ ► And I'm David Smith. Under the Radar is never longer than 30 minutes. So let's get started.
00:00:08 ◼ ► So happy new year, everybody. And we decided this week to talk about kind of, you know, what,
00:00:14 ◼ ► you know, where we are right now, kind of a brief retrospective for the year, what we expect to do,
00:00:28 ◼ ► It was in preparation for this episode, I went and listened to our sort of New Year's episode
00:00:41 ◼ ► And you were very incredulous that that would be possible. And to say this one of those,
00:00:53 ◼ ► actual like product app. However, I did launch the app that I worked on with my son Ian's awesome
00:00:59 ◼ ► counter. I did put that into the App Store. So it's like by the letter of the law, I would say
00:01:03 ◼ ► that I launched a new app to the spirit of the law of what I was saying. I think I didn't. So
00:01:08 ◼ ► score that however you will, but I wanted to, you know, follow up on whether or not I could go a
00:01:13 ◼ ► whole year without launching something. I think I might call that a draw. I think neither of us
00:01:18 ◼ ► were correct. Yeah, it was I think it's fair. And it's been overall, I'd say 2021 was an interesting
00:01:25 ◼ ► year for me because when I look back on it, I think I changed more in that year than I have in
00:01:33 ◼ ► a lot of the years before it in terms of the way that I'm thinking about work, the way that I'm
00:01:38 ◼ ► expect to approach work going forward into 2022. And I think a lot of it came from a place where in
00:01:45 ◼ ► 2021, the early part of the year, I spent a lot of time trying to sort of trying to make things that
00:01:53 ◼ ► weren't sticking more sticky. And like, specifically, I spent probably a good third of the year at the
00:02:00 ◼ ► beginning working on a WatchSmith update. It's this big, long update. And the reality is I did
00:02:06 ◼ ► all this work and nothing actually fundamentally changed with WatchSmith. It's the same sort of
00:02:11 ◼ ► revenue downloads, affinity, like all the things about it are fairly similar. But the work I did on
00:02:20 ◼ ► pedometer and the work I did on WidgetSmith both had big impacts. And I think, as I as I look back
00:02:32 ◼ ► mentality that if I just keep adding something, if I just eventually I'll be able to sort of,
00:02:37 ◼ ► you know, hit a tipping point with the things that aren't really working, and suddenly they will start
00:02:42 ◼ ► working. And I think I've changed, matured, adjusted, whatever you want to say, to a mindset
00:02:47 ◼ ► now where I feel much more comfortable saying, I have a couple of apps that are doing well,
00:02:54 ◼ ► and that have traction, and can sort of trying to build more momentum and push those farther and,
00:03:00 ◼ ► you know, take advantage of the opportunities that exist there is a really wise use of my time.
00:03:06 ◼ ► In a way that trying to create like, turn, you know, it's like turn things or turn things that
00:03:12 ◼ ► are hard to turn, and putting effort into things that ultimately is probably going to be sort of
00:03:18 ◼ ► wasted or not interested or not actually productive. And I think that's sort of the for me,
00:03:23 ◼ ► that's sort of the arc of 2021. And it's that learning. And I think we've talked about this
00:03:27 ◼ ► in a lot of our recent episodes, too, of, I think I've developed a little bit of a mindset,
00:03:33 ◼ ► moreover, that is a little bit more thoughtful and intentional about how I approach the business,
00:03:42 ◼ ► the things that I do, you know, it's like we talked about, like adding a remove ads button
00:03:46 ◼ ► to pedometer plus plus was a meaningful thing in my, for my business this year. And it's like,
00:03:51 ◼ ► I can't believe I hadn't done it before, but it's coming from a different place. And I feel more
00:03:56 ◼ ► comfortable about asking for money, I feel more comfortable about structuring things in order to
00:04:02 ◼ ► treat my business as a business, not just as a hobby, not treating it as something that
00:04:13 ◼ ► you know, working on that app. But I think the blurring of between like, I'm doing that because
00:04:19 ◼ ► it's fun, and I'm doing it because it's my job. When I start to overlap those, I think I've
00:04:24 ◼ ► learned that it's problematic, because it's not really a hobby. This isn't what I'm doing for fun.
00:04:28 ◼ ► This is work in time that is taking away from my actual jobby job kind of work. And it's, you know,
00:04:34 ◼ ► but it's not a hobby in the sense of it's like, oh, I'm doing it nights and weekends, or, you
00:04:38 ◼ ► know, it's what I do to relax at the end of the day. So to treat my work like my work and do the
00:04:43 ◼ ► things that I think will move my work better is the, for me, I think the big lesson from 2021.
00:04:48 ◼ ► Yeah, I like that. 2021 to me was a year of very slowly defrosting my brain and un-sticking myself.
00:04:58 ◼ ► From the probably two years before, like I would say 2020, I got very little good work done. And I
00:05:07 ◼ ► mean, yeah, there's lots of reasons for that. I'm not like beating myself up for it too badly.
00:05:16 ◼ ► And in 2021, I didn't make major progress, but I made some. And when you go from almost none to some,
00:05:28 ◼ ► it's like clearing a log jam. So, you know, like, if I look back, I'm like, what I actually shipped,
00:05:38 ◼ ► for my Git commits for the year, just to see, just to remember, like, what did I do in the app this
00:05:43 ◼ ► year? Like, what was I actually working on? And it's, you know, there were a couple of, you know,
00:05:49 ◼ ► interesting headlining things. I finally made a widget. I made CarPlay, I've read a whole,
00:05:54 ◼ ► you know, read a carplay and everything and, and improved a lot about a lot of things about the
00:05:59 ◼ ► watch app. But what I, what I really see when I look at what I actually did over the last year,
00:06:04 ◼ ► is, I mainly just fixed things. And I had a couple of improvements here and there, some of which,
00:06:11 ◼ ► like the CarPlay thing required, like, you know, totally rewriting something using a whole new API,
00:06:23 ◼ ► you know, fixing bugs and making things work a little bit better, adding what really are minor
00:06:28 ◼ ► features like a widget, or like CarPlay, you know, like, those are, those are actually pretty minor
00:06:33 ◼ ► features. They're important, but they're minor. And then in the fall, I started doing, finally,
00:06:40 ◼ ► my first kind of significant redesign work. It's not, this isn't out yet. And most people haven't
00:06:45 ◼ ► seen it yet. But I occasionally will have like a design breakthrough. And, you know, the current
00:06:53 ◼ ► design of the now playing screen with the swipey cards. That I remember still when I had that
00:06:58 ◼ ► breakthrough was on a trip to London a few years ago. And I remember like, I thought of it. And I
00:07:02 ◼ ► coded up a quick little prototype one night in a hotel room there. And I showed it to friends the
00:07:07 ◼ ► next day, because I happened to be visiting a bunch of podcast friends, and you were there,
00:07:10 ◼ ► actually, visiting a bunch of podcast friends there. And I was like, Hey, what do you think of
00:07:14 ◼ ► if I if I read the now playing screen to be like this? And everyone loved it. And I'm like, all
00:07:19 ◼ ► right, this is the direction I'm gonna go. And then over the next couple of months, I made it.
00:07:23 ◼ ► And I, you know, flesh it out and finished it. I had one of those design breakthroughs over
00:07:28 ◼ ► Thanksgiving break this past fall. And I've been working on it since then. And it's been going
00:07:33 ◼ ► great. And so that's been where I'm where I put a whole bunch of my work since then. And
00:07:38 ◼ ► so that kind of completes for me, like the transition from the log jam of kind of 2019 to
00:07:45 ◼ ► 2020. And then now I'm now I'm like flowing again, like, I'm really getting a lot of work done. I'm
00:07:51 ◼ ► making progress, I feel good about my app. Again, I feel good about where I am, I feel like I'm not
00:07:56 ◼ ► under too much crushing technical debt from from just having such an old app that's gone through,
00:08:01 ◼ ► you know, the Swift transition, Swift UI, you know, like all this stuff that that's been changed
00:08:06 ◼ ► over the years. You know, so I'm finally like moving again, in a meaningful way. And so that's
00:08:13 ◼ ► kind of what I expect for this year to come as well. You know, the redesign work is going to take
00:08:19 ◼ ► a long time as I have talked about in previous episodes. I think the like, right now what I'm
00:08:24 ◼ ► working on mostly is a couple of like theme wide changes like font and color tweaks and things like
00:08:32 ◼ ► that. But for the most part, I'm working on just the root screen, like the the main list of your
00:08:37 ◼ ► playlists and podcasts. And I thought I'd be done with this a month ago. And I'm about halfway done
00:08:44 ◼ ► with it now. So it turns out, when you're rewriting an entire screen, like it takes a while, when it's
00:08:50 ◼ ► when it's an important screen, and when it's a complicated one. And I'm doing things like
00:08:55 ◼ ► adopting UI diffable data source for the table, you know, stuff like that, like there's stuff
00:09:00 ◼ ► that's just like a major changes, architectural changes, adopting new API's, things like that,
00:09:06 ◼ ► that just take a while. And I'm in the design phase. So it's a lot of iteration, it's a lot of,
00:09:10 ◼ ► let me see how this works. And the way I design things, as I've talked about before, I don't
00:09:15 ◼ ► design things in Photoshop, I design things by building them and seeing if I like them.
00:09:18 ◼ ► And so and then if I don't like it, I throw it away and do something else, or I modify it. And
00:09:23 ◼ ► so my design processes is not super fast, but it is highly functional. And so that's kind of where
00:09:31 ◼ ► I am with, you know, with what I'm doing from the end of last year into the beginning of this year.
00:09:36 ◼ ► And I expect that root screen redesign, I expect to probably ship within a month or two, maybe.
00:09:43 ◼ ► And then I have the rest of the app to handle, you know, I have some ideas on how I'm going to
00:09:48 ◼ ► redesign the now playing screen. That's going to also probably take a few months there. And so I
00:09:54 ◼ ► think this whole, you know, design refresh I'm going through with the app is probably going to
00:09:57 ◼ ► take most of the year to be honest. And then, you know, we'll see what happens with WVDC. And,
00:10:04 ◼ ► you know, if, if this is the year of Linux on desktop, I mean, the AR headset, we'll see what
00:10:09 ◼ ► happens with that, how that if that throws any wrenches in my plans, but that's kind of what I
00:10:15 ◼ ► expect. You know, I'm optimistic for this year. I think that I might my log jam has been cleared,
00:10:22 ◼ ► for the most part. And now I'm on I'm on a roll, and I'm feeling good. And I'm getting stuff done.
00:10:28 ◼ ► And I hope I can continue this momentum for a while and really and really knock a lot out.
00:10:33 ◼ ► Yeah, because I would say as someone who has a, that's like a fortnightly conversation with you
00:10:41 ◼ ► like a seasonal change in the way that in your flavor feeling about your work and the way that
00:10:46 ◼ ► your work was going that there is sort of lots of themes about frustration or kind of lack of
00:10:53 ◼ ► movement. And then as we gotten sort of the second half of 2021, it changed to many more themes of
00:11:02 ◼ ► flow and progress and inspiration and motivation and having that sense of like, yeah, this is this
00:11:09 ◼ ► is good. This is moving. This is going somewhere, which is always just exciting to hear because it's
00:11:14 ◼ ► like, it would be great if that was always the case. But I think we've both been doing this for
00:11:18 ◼ ► long enough to know that. Well, it'd be great if you were always in that place of being, you know,
00:11:23 ◼ ► inspired, motivated, productive, all of those things. There it is a natural process of, you
00:11:29 ◼ ► know, having been doing this for what 13 years, that like, there are going to be seasons where
00:11:33 ◼ ► it's just not as nice. And it just isn't quite there. And we're making some progress and we're
00:11:37 ◼ ► doing a bit of work, but it just doesn't feel as good as when you hit those places where it feels
00:11:41 ◼ ► good. And it feels like we're making progress. And it feels like the work is, is sort of heading in a
00:11:46 ◼ ► good direction that is actually productive, rather than just doing the work to do the work. So it's
00:11:50 ◼ ► like, it's been super exciting to, to see that shift in your year and to look forward to now
00:11:55 ◼ ► that continuing hopefully into 2022. And I imagine, especially as you get some of this work that
00:12:01 ◼ ► you've been doing out into the world, that it potentially sort of help keep sort of keep that
00:12:07 ◼ ► momentum going, because then you get the benefit of the feedback and the sort of the reward for
00:12:12 ◼ ► the work of it actually, you know, making people's lives and their use of your app better, rather
00:12:16 ◼ ► than just being something just for yourself. Yeah, I mean, the the importance of momentum,
00:12:30 ◼ ► you know, long periods of doing basically nothing, followed by short bursts of incredible
00:12:37 ◼ ► productivity. And, and this is not something I have historically felt very good about, you know,
00:12:42 ◼ ► this is something that I historically felt very, you know, ashamed of or guilty that like, I don't,
00:12:46 ◼ ► I don't do a lot of work a lot of the time. And I do a whole ton of work all at once, you know,
00:12:50 ◼ ► and so this is one of those, you know, and I feel like that that goes in that other place,
00:12:56 ◼ ► but the small scale on a big scale, you know, on the on the small scale, my days are kind of
00:13:01 ◼ ► structured like that, where I will have periods of a few hours where I'll get everything done for
00:13:06 ◼ ► the day. And then the rest of the day, I do basically nothing of value, or I only do like,
00:13:11 ◼ ► you know, low value, busy work, like admin stuff, you know, deal with my taxes, or I'll deal with
00:13:16 ◼ ► my email, both of which I feel similarly about, as you can tell. But, but you know, my actual,
00:13:21 ◼ ► you know, coding work or making work, that's, that's usually, you know, a very small number
00:13:26 ◼ ► of hours each week that are just very densely, you know, productive, whereas that same thing
00:13:32 ◼ ► also applies at the bigger scale. That same thing applies, you know, not just on a day scale,
00:13:37 ◼ ► but on like a month scale, like there are certain months where I just get nothing of consequence
00:13:43 ◼ ► really made or done. And then other months, I will like blow away half my app and re and have
00:13:48 ◼ ► this amazing or like, I'll do an amazing new feature in three days, you know, and then I won't
00:13:53 ◼ ► have another good feature for three months. And this is just how I've always worked, which,
00:13:59 ◼ ► you know, it was not always very compatible with the with the, you know, working for other people
00:14:05 ◼ ► world. But this is just how I've always been and, and, you know, I, at some point, I stopped being
00:14:12 ◼ ► ashamed of it and just accepted, well, this is just who I am. And let's, let's figure out how
00:14:17 ◼ ► to use it, you know, but so you know, so that's, that's kind of where I am now where like, I
00:14:21 ◼ ► basically had, yeah, almost, I think, maybe a year or two where I really was not doing much. And,
00:14:29 ◼ ► and now I'm doing a lot and I'm really happy about it. Finally. Speaking of momentum, let's take a
00:14:35 ◼ ► break here for a moment to talk about our sponsor this week. It is hover, one of relay FM's longest
00:14:41 ◼ ► running sponsors. When you have that one big idea, when you have that momentum, you're ready to go.
00:14:45 ◼ ► Well, that business that you want to make that app you want to make starts with a domain name.
00:14:50 ◼ ► So for many people, hover is that big leap to really get you going. They have over 300 name
00:14:55 ◼ ► extensions to choose from. So no matter what you want to build, there's a domain name available and
00:14:59 ◼ ► waiting for you. And they have excellent technical support to answer any questions you may have.
00:15:03 ◼ ► And they're really dedicated to getting you online and just getting you going not trying to upsell
00:15:08 ◼ ► you into a bunch of packages and stuff like that. Hover has free whois privacy. So people don't have
00:15:13 ◼ ► to, you know, get your spam information. They have a clean UX and UI monthly sales on popular top
00:15:18 ◼ ► level domains. So it's easy to see why hover is the popular choice for people starting businesses.
00:15:23 ◼ ► I personally use hover. And one thing I love about them besides of course, their great support and
00:15:27 ◼ ► their clean design and everything. They have a really good search. Like if you want to tell
00:15:31 ◼ ► what's available, what kind of main names are available, which is pretty important with domain
00:15:34 ◼ ► names. hover search is really, really great. That's why I always go there first. So we know you like
00:15:40 ◼ ► intuitive user experiences, things that work straight out of the box. So we know you will
00:15:44 ◼ ► appreciate hover. It's super easy to use. It's nice. It respects you. So buy your domain. Start
00:15:50 ◼ ► using hover today. Go to hover.com slash radar and get a 10% discount on all new purchases. That URL
00:15:58 ◼ ► one more time is hover.com slash radar. Make a name for yourself with hover. Our thanks to hover
00:16:05 ◼ ► for the support of this show and relay FM. For me, when I start to think about what 2022 might
00:16:12 ◼ ► look like, I think certainly something that I've learned that I think is sort of a general
00:16:16 ◼ ► statement that is useful potentially for our audience is understand that your year will have
00:16:21 ◼ ► two chapters to it almost certainly if you're an Apple developer. There's between now and the first
00:16:26 ◼ ► ish week of June, and from the first week of June to the end of the year. And sometimes like last
00:16:32 ◼ ► year, there was not that much difference necessarily between those two. Some years, there's
00:16:37 ◼ ► huge differences. And this is obviously I'm talking about WWDC, which is around the first week of June.
00:16:41 ◼ ► And it kind of is this discontinuity because you can't plan or predict what's going to come,
00:16:47 ◼ ► come out there, what work you're going to have to do, what opportunities you want to take advantage
00:16:51 ◼ ► of whatever, like, that's just the nature of what we're doing. And so whenever I start to think about
00:16:56 ◼ ► like, what do I want to accomplish this year? Where do I want to head? You know, what's sort of my
00:17:00 ◼ ► theme for the year is I always kind of will break it in half and not serve it, it's impossible to
00:17:07 ◼ ► plan beyond June. So just don't even think about it. If you can't have a yearly plan, you can only
00:17:12 ◼ ► have essentially the next five months or so of a plan. And when I look at a calendar, it's like,
00:17:19 ◼ ► basically, I have about 100 days of work, probably, between now and WWDC. It's like, maybe slightly
00:17:27 ◼ ► more, slightly less, depending on how you count it, but it's in that ballpark. And I think 100
00:17:32 ◼ ► working days is enough to get quite a bit done. Like it's years, you can certainly get, it's about
00:17:37 ◼ ► 20 weeks of work, and you can get quite a bit done in that. But it's still, this is sort of manageable
00:17:43 ◼ ► in an amount that I can, I can think about, at least. And I think for me, when I looked forward
00:17:48 ◼ ► to 2022, and kind of what have I learned in 2021? I think there's in my mind, like my theme, my goal,
00:17:54 ◼ ► the thing that I'm going to be trying to aim towards for the beginning of the year is a lot of
00:17:58 ◼ ► like 1% improvements in a lot of my apps, because I think the more the when I start to look at look
00:18:05 ◼ ► at them with a lens of like, what's a small refinement? What's this little improvement?
00:18:11 ◼ ► What's a low hanging fruit? What's something that I could do? Like, the more I look at the
00:18:15 ◼ ► existing apps that I have, I see opportunities like that all over the place, that there's lots
00:18:19 ◼ ► of these little things that aren't these big, sort of sweeping new features, these brand new apps,
00:18:25 ◼ ► these big things there. But they're things where I could make the app just a little bit better.
00:18:31 ◼ ► And in aggregate, I suspect that a lot of these smaller refinements would, overall, you get to
00:18:37 ◼ ► the end of 100 days of doing that kind of work. And I would hope anyway, that the apps will be
00:18:42 ◼ ► in a really good place and be in a very sort of strong position to go forward into whatever Apple
00:18:47 ◼ ► throws at us in June, whether that's things that are relevant or they're not, but I'll be in a
00:18:51 ◼ ► good place. Because it's, I think, it's easy for me to sometimes think that, oh, these apps are,
00:18:57 ◼ ► you know, it's like they're, they're old, and they're, they've been around for a long time.
00:19:01 ◼ ► So there's no more low hanging fruit, there's no more of these little opportunities. But
00:19:04 ◼ ► it's like they certainly exist. And it's kind of amazing that they do exist. And when you hit on one,
00:19:11 ◼ ► how beneficial it can be like I recently did a lot of work playing around with the paywall in
00:19:18 ◼ ► Widget Smith. And there's one of those things that screen had been the same since I launched the app,
00:19:23 ◼ ► essentially, like I made a few adjustments, but it just like, started playing around with it. And
00:19:28 ◼ ► it's like, it started to perform a lot better as a converting new users and getting people
00:19:32 ◼ ► starting their trials with subscriptions. And it's like, why haven't I been doing this for the last
00:19:36 ◼ ► year? I should have, I should have been looking rather than this is going down the road of like,
00:19:41 ◼ ► oh, let me add this wild, like whole bunches of new widgets and new opportunities. It's like,
00:19:45 ◼ ► just look at what I have, go through a screen by screen, see how can I make this a little bit
00:19:50 ◼ ► better? How can I make this screen a little bit better, you know, go sit down with instruments,
00:19:54 ◼ ► and go through the time profiler and look through all of the, you know, the main parts of the app.
00:19:58 ◼ ► And so like, where can I make this a little bit faster? Where can I make this a little bit better?
00:20:02 ◼ ► And I think that's a good theme and a good sort of goal for me looking forward into this,
00:20:07 ◼ ► this first half of the year. Because I think it's set me up well. And I think in some ways,
00:20:12 ◼ ► it'll make me feel better. Because every time I come across one of these things, I keep having
00:20:17 ◼ ► the back of my mind, like, why haven't I been doing this for, you know, what, all along? Why
00:20:21 ◼ ► have what, you know, sort of, there's this, it's almost like blaming myself for my, you know,
00:20:25 ◼ ► sort of these past oversights, but it's a bit harsh, and isn't actually how I feel how I feel.
00:20:37 ◼ ► and if there are places where I can be analytical about it, like look at my crash, like one of the
00:20:41 ◼ ► things that I have started doing is like going through all my crash reports, you know, in the
00:20:45 ◼ ► organizer and be like, some of them, I'll probably never be able to get rid of. That's just the
00:20:49 ◼ ► reality of like, if you have a watch app, you're almost impossible to get away. I was about to say
00:20:54 ◼ ► watch OS. It's basically impossible because it reports a lot of crashes that are sent or just
00:21:00 ◼ ► like the background, being killed in the background because the system was busy, which,
00:21:04 ◼ ► like, sometimes is your fault, sometimes isn't. So I'm never going to get rid of all of those. But
00:21:08 ◼ ► I think sometimes I can be like, oh, all my crashes are those kind of crashes. And then,
00:21:12 ◼ ► like in the last week, I've gone through a bunch of my crash reports, and I found little things
00:21:17 ◼ ► that I'm like, oh, it's not a big crash. It's not happened to a lot of people, but it's something
00:21:21 ◼ ► that I can fix. And I'm sure for the, you know, whatever the hundred people who that have had
00:21:26 ◼ ► affected in the last month, it's like it not affected them going forward will be a great thing.
00:21:31 ◼ ► So that's sort of the approach I'm taking and kind of having that general theme of like 1%
00:21:40 ◼ ► Jared Ranerelle - I mean, that's how I spent a lot of 2020, which I was, you know, at the time,
00:21:46 ◼ ► felt like it was kind of low flow in a way. But really, it turned out to be quite an improvement.
00:21:53 ◼ ► I mean, when I look back on, you know, things like my watch app, which was always something I was
00:22:02 ◼ ► over the last year, I finally worked out, as far as I can tell, almost all of the kinks.
00:22:11 ◼ ► And it's pretty good now. It's reliable. Like, it's reliable in a way that it's never been
00:22:15 ◼ ► reliable before. And part of that was my fault, and part of that was Apple's fault. But the
00:22:20 ◼ ► combination is, it's now reliable. And I'm so proud of that. And I don't really hear about it
00:22:26 ◼ ► anymore from people, which is great for the first time ever. You know, I'm not getting one star
00:22:31 ◼ ► reviews from my watch app every single day like I used to. So this is, you know, like that kind of
00:22:37 ◼ ► focus on quality and minor improvements. That is good stuff. It really helps a lot. I mean,
00:22:42 ◼ ► heck, just about just a couple of days ago, I had this utility function that I use all over the place
00:22:48 ◼ ► in my data layer class called FC model, which is open source. You can go see it if you want.
00:22:56 ◼ ► it's, this is, anyway, it's my data layer. And I have this method all over the place that ensures
00:23:01 ◼ ► that any code that is running on the SQLite layer always runs on the main thread. And there's a
00:23:08 ◼ ► bunch of reasons why I do it this way. But anyway, there was a point where, you know, I've known for
00:23:12 ◼ ► a while the difference between main thread and main queue. That's a different thing. You know,
00:23:16 ◼ ► that other queues can run on the main thread. So this function, if you call it from a different
00:23:24 ◼ ► thread, will dispatch sync its code to the main thread, because all the code in FC model is all
00:23:30 ◼ ► synchronous. So I can't just, you know, async it and wait till it comes back and have a callback.
00:23:34 ◼ ► It's all synchronous code. So if you call for a database model, it gets it synchronously. So
00:23:39 ◼ ► there was a possible deadlock where I didn't realize until a few days ago that it is possible
00:23:45 ◼ ► for other queues to run on the main thread. So if a background queue that happens to be running on
00:23:52 ◼ ► the main thread at that moment, called this function that says always do everything synchronous
00:23:56 ◼ ► on the main thread, it would deadlock. And so I had to fix this really obscure bug. That was a
00:24:01 ◼ ► one line fix. But like, it was that alone is probably going to save me some of these really
00:24:08 ◼ ► obscure crash logs that I thought, how the heck did this crash? Why did this deadlock? Or what,
00:24:13 ◼ ► why does this one weird usage pattern occasionally do this? And when you find something like that,
00:24:18 ◼ ► it's incredibly satisfying. I was so when I figured that out, because I had I finally had
00:24:23 ◼ ► a reproducible case, like in development, where like, using this one API and difficult data source
00:24:27 ◼ ► would would hit this. And I was like, what, what is going on? And once I figured this out, like,
00:24:32 ◼ ► it was it was like a light bulb going, it's like, oh, my God, I have just probably fixed at least
00:24:37 ◼ ► three or four crashes that I never would have figured out otherwise. But I just figured this
00:24:43 ◼ ► out. And it that's an incredible feeling. And, you know, you do that enough times. And that adds up
00:24:48 ◼ ► to meaningful improvements in the app. You know, like I, I found a scroll hitch yesterday where
00:24:53 ◼ ► like, I was scrolling through a list of artwork in my new UI. And I noticed it would hitch every
00:24:58 ◼ ► time it would hit your upload screen. And like, why, why is it uploads artwork so slow, and uploads
00:25:04 ◼ ► artwork is dynamically generated? So that way, it's transparent in the theme. And so you when you
00:25:08 ◼ ► have the dark theme, it shows a dark background and everything. And I was generating it at too
00:25:12 ◼ ► high resolution. And nothing really needs it. So I just lowered the resolution down to something that
00:25:16 ◼ ► the UI actually uses. And it fixed the scroll hitch because it made the image like an eighth
00:25:21 ◼ ► the number of pixels. And stuff like that, that fixes one scroll hitch I noticed, but that, you
00:25:27 ◼ ► know, that same problem has been catching the uploads artwork in lots of places probably over
00:25:31 ◼ ► the years. And I was always rendering it too big. And so that's, again, gonna make the app faster
00:25:37 ◼ ► and take up less memory. And that also means not only will it be more responsive, but by taking up
00:25:41 ◼ ► less memory, that means it'll get killed in the background less often. And that'll fix that'll
00:25:45 ◼ ► improve other conditions and make it more responsive in other situations. So like, this
00:25:48 ◼ ► kind of work is really impactful and satisfying in the aggregate. Yeah. And then I think that's my
00:25:55 ◼ ► hope. And that's the thing that I've been seeing that I feel good about it sort of striving in that
00:26:00 ◼ ► direction. Because like I've like this last week, I saw the similar kind of thing to you where there
00:26:03 ◼ ► was this way that I was interacting with the photos framework, that I think was the leading
00:26:08 ◼ ► cause of crashes in widgetsmith. It's a very subtle, very minor kind of a thing. And it's not
00:26:12 ◼ ► like it happened to lots of lots of people, it was causing lots of problems. But it's like,
00:26:15 ◼ ► the situation as far as I could tell is if sometimes when this the out of the OS does a
00:26:21 ◼ ► system update, all of your photo permissions get reset, as far as I can tell. And when that happens,
00:26:28 ◼ ► it was creating this weird situation where like, you once had permission to use the photos,
00:26:33 ◼ ► and then it kind of goes away in this not in the regular going away way, but in another way that
00:26:37 ◼ ► they went away. And I could reproduce it and I was able to fix the bug and kind of protect against it.
00:26:42 ◼ ► And once I did that, it's like, I imagine there's this whole sort of class of crashes that just went
00:26:46 ◼ ► away. And it's just yeah, like I said, it's very satisfying. And it's but it's work that I'd kind
00:26:52 ◼ ► of put off because it's like, well, it's, it's not happening a lot. It's happening to, you know,
00:26:57 ◼ ► a quarter of a percent of users or something like that. And it's, which is like a big deal, but also,
00:27:02 ◼ ► you know, maybe it's better to pay attention to me, what if I had this whole big thing,
00:27:09 ◼ ► spending some time just working on refinement. And eventually, I'm sure I'll run out of these
00:27:14 ◼ ► refinements. And the thing will be, it's like the apps be running, you know, smooth as butter,
00:27:18 ◼ ► and it'll be great. And then I can start to work on kind of some kind of large, holistic change,
00:27:24 ◼ ► or, you know, get to the point that it's WDC and it'll be time to work on whatever new things
00:27:30 ◼ ► announced. But it certainly is something that is it's, it's like focusing on that work is so it's
00:27:36 ◼ ► so rewarding to both in terms of the impact of it, as well as I think, just motivationally,
00:27:42 ◼ ► it's like, yes, it's like there was a problem, the problem is gone. The app, you know, it had this,
00:27:46 ◼ ► it had this issue or had this thing that didn't look quite right. And I spent the time to get,
00:27:50 ◼ ► you know, the alignment of this, the, you know, these two views that were always a little off,
00:27:54 ◼ ► or the spacing or the, it's like that kind of work, just sometimes it's easy to not to prioritize it.
00:28:00 ◼ ► But I feel like, you know, spending a period prioritizing that and focusing on that is going
00:28:05 ◼ ► to be beneficial overall. Yeah. And I think for me, like, my, my main thing I'm going for now is
00:28:12 ◼ ► a balance, a better balance between, you know, if I basically spent like all of 2019 and 2020, doing
00:28:19 ◼ ► mostly like minor improvements and fixes like that. And I fell way behind on the major stuff.
00:28:25 ◼ ► And I felt bad about that. And 2021 is when I started finally rebalancing that game. Okay,
00:28:30 ◼ ► now I'm going to keep doing the quality stuff when I can. But I'm also going to start tackling the
00:28:35 ◼ ► major things and get movement there. And that to me is, that's a much better balance. And I and
00:28:40 ◼ ► that's why I'm happier now. And that's what I hope to keep going for in 2022. Yeah, I think that makes
00:28:45 ◼ ► sense. And I think it wouldn't surprise me if I have sort of part of how you're able to be motivated
00:28:50 ◼ ► and productive now is because you spent a bit of time on quality. And I think that's sort of my
00:28:53 ◼ ► hope is that if I spend a bit of time with a focus on quality, I'll be able to have more motivation
00:28:58 ◼ ► and speed and sort of velocity when I turn my attention to new opportunities, whether Apple
00:29:03 ◼ ► created or myself or wherever they come from, I'll be ready for them. So you releasing any new apps
00:29:09 ◼ ► this year, Dave? Well, it is too early to say ask me again in June. You want to take a bet?
00:29:14 ◼ ► I think I would I think this year I would say I will likely launch a new app. Yeah, I'm not