Under the Radar

261: A Vacation to the Basement


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 usually not longer than 30 minutes, so let's get started.

00:00:10   So, I am getting to a place that is very exciting in the development life and life cycle of this big version 5 update of Perimeter++.

00:00:21   Plus that if you are a regular listener to the show, you will know that I was like, I

00:00:25   don't even know like, you know, dog my steps for months now. I think I stopped started

00:00:31   working on this maybe in November of last year or something October of last year, like

00:00:36   essentially once I got my sort of new update, you know, iOS 16 updates out, this is all

00:00:42   I've been working on this big focus. It started off as like, oh, I'll just adopt live activities.

00:00:47   Like that was what this sort of started with and ended with,

00:00:50   I have completely rebuilt the entire user-facing part

00:00:55   of the app.

00:00:55   Like it makes me think of-- you know

00:00:57   when Apple talks about with their refurbished products

00:01:00   where deep down on the inside there

00:01:02   might be a part that is still shared,

00:01:05   but anything that a user can touch is completely new?

00:01:09   Like that is essentially what I have done to Pedometer++.

00:01:12   Like I've just taken all of this really, really old Objective-C

00:01:16   UIKit code and replaced it all with Swift and SwiftUI. It's amazing, by the way. As

00:01:25   a difference in velocity and feeling when I'm going in and working on stuff now, it's

00:01:30   amazing. I knew this day would have to come at some point because my old version was just

00:01:34   so old and creaky.

00:01:37   I know how you feel. At least I know the old part of how you feel. I haven't yet gotten

00:01:42   to the amazing new paradise that you're in now.

00:01:45   At some point you I'm sure will get there yourself. But I will say getting here and

00:01:52   getting to this point has been a bit of a journey.

00:01:55   Oh no.

00:01:56   It's been, yeah, and I mean mostly in good ways, mostly in…

00:02:00   You're scaring me a little for my journey.

00:02:02   Well, I think it's the reality of something like this is that it is, you know, it is never

00:02:08   going to be an easy thing to take an existing app that has lots of functionality and lots

00:02:14   of things and rewrite them into something new. But the end result of it has been really

00:02:20   positive and it's been really cool. And specifically, and the thing that I think is useful potentially

00:02:26   to unpack on this episode today is, generally speaking, when I want to tackle something

00:02:32   like this, if you imagine—I mean, it isn't just a rewrite. There's all kinds of new features.

00:02:36   I have a whole new workout mode.

00:02:37   I have live activities.

00:02:39   I have maps on the watch.

00:02:41   I have action button support.

00:02:42   There's all kinds of features that I've been doing.

00:02:44   And if you conceptually were to imagine working on this big update, there's this big pantheon

00:02:54   of features that I could be starting to work on.

00:02:57   And I imagine them.

00:02:58   I write them down.

00:02:59   I'll put them in my reminders list.

00:03:00   I just have them in my head.

00:03:01   And when you start working, you start breaking this down into smaller and smaller tabs.

00:03:06   tasks, you start working through them kind of sequentially, or you pick a feature and

00:03:10   start working on it. And that was the sort of my process for the last several months.

00:03:16   And it took a lot longer because I kept adding things to the list where I'd be like, "Oh,

00:03:19   you know, I'll just leave the settings screen in Objective-C, that's fine. I'll just leave

00:03:24   that there." And then I reached the point that it's like, "Oh, I wanted to improve dynamic

00:03:27   type support." And that's really painful in the way that I had structured it in UIKit,

00:03:32   but it would be trivial in SwiftUI. So instead, I'm just going to rewrite the entire thing

00:03:36   SwiftUI. And like, that's the, so the to do list has continued to extend. But thankfully,

00:03:42   you reach a point where the instead of, you know, the to do list reach has reached its maximum point

00:03:46   and then starts to condense back on itself. And you start to feel like the end is close,

00:03:51   and you're kind of getting there. And the situation that I ran into that I think is

00:03:55   sort of interesting thing, cognitively, is I reached a point where I noticed that there were

00:04:02   one or two sort of tasks left on my to do list that I'd kept putting off. Like, I knew I was

00:04:10   putting them off, I knew that I should be working on these things, I knew that I should be doing

00:04:14   this. But I kept putting them off, putting them off, and they're just like, you know, just find

00:04:18   something else to do. Sometimes it's busy work, sometimes it's actual work. But I kept putting

00:04:22   these these particular tasks off. And specifically in the pedometer, it was this sense that I built

00:04:29   all of this really, I think, nice workout modes and live activities and this mapping stuff for

00:04:36   the watch and for the iPhone. And I built a lot of it in prototype apps or separate apps or in,

00:04:41   you know, things that worked, but only in certain circumstances. And what I needed to do is kind of

00:04:46   do this big integration step where I take all of these desperate parts and actually sort of actually

00:04:52   tie them all together so that it works in an app. And I kept putting that off. And I think

00:04:58   I was having a conversation with a friend about this, about kind of like why I was having this

00:05:01   feeling of stuck. And he said, like, "Well, what you need to do is, you know, it's like,

00:05:05   you need to get yourself into a situation where you can work on that. And you can tackle this

00:05:09   big project. And, you know, essentially, what I need to do is go into gradation, which is a

00:05:13   concept or a term that if you're a listener of the Cortex podcast, which I'm sure you are,

00:05:18   if you listen to this, if you know, if you have good taste, good enough taste to listen to Under

00:05:21   the Radar, I'm sure you have good enough taste to listen to Cortex. But in the Cortex podcast,

00:05:26   CGP grade talks about going on these gradations, which are like work retreats, opportunities

00:05:32   to go somewhere separate to do for the purposes of work. And not necessarily like a work trip

00:05:39   insofar as like going to WWDC or going to a conference or something like that, like

00:05:43   a traditional kind of work trip, but a trip that is typically just entirely by yourself,

00:05:48   or if you worked with a team, I imagine with your team. But it's about a change and a

00:05:53   a shift in mindset rather than necessarily activity. Like, you know, you're still working,

00:05:59   you're doing your main thing, but you're going somewhere for the purpose of working and kind of

00:06:04   allowing your brain to get into a different place. And for me, I was finding what I really needed and

00:06:12   why this was the right solution to the problem that I was facing is in order for me to tackle

00:06:17   this task, I knew and like, you know, at least some part deep down inside of me knew that what

00:06:22   I was going to do is, essentially, I would say I'd have to disassemble the entire app

00:06:27   and then put it back together again. I had all these parts, and it made me think of,

00:06:31   I've never done this, but I imagine I've seen videos of people doing this where they

00:06:35   are working on an engine and need to fix something deep inside of it in an internal combustion

00:06:40   car. And so they have to completely disassemble everything, fix the thing, and then put the

00:06:46   whole thing back together. And that's what it felt like I needed to do. But instead of

00:06:50   being able to, in an orderly fashion, lay out engine parts on the floor of a garage. Instead,

00:06:57   I was going to have to lay out all the parts in my brain and hold them in my working set and keep them

00:07:04   there for however long it took to put this all back together. And that's what I needed. That was

00:07:11   the difference that I was putting it off because in a normal day, like a normal eight-hour day,

00:07:16   I didn't have enough time to accomplish the task. Like the thing was probably, you know,

00:07:21   it ended up being maybe about 20 hours of work. And so what I needed is to take a, to change my

00:07:28   mindset such that I could, you know, I'm no new interruptions are coming into my brain.

00:07:32   No new responsibilities, no anything. It's just all work. Like my brain is just 100% supporting

00:07:39   and focused on this work task until it is complete. And so I did that I went essentially,

00:07:45   I went on a great vacation. In this case, and specifically, I stayed home for this.

00:07:50   Like I rather than going somewhere just logistically that was getting too complicated.

00:07:54   And I love my, you know, I have my studio display and my desk that I like and my chair that I like,

00:07:59   and the logistics of transitioning somewhere else was just getting too complicated. But instead,

00:08:04   what I did, and it actually worked way better than I thought it would potentially is,

00:08:09   I had a conversation with my family and said, "I'm going to go on a business trip, essentially."

00:08:15   I'm going to go on a graycation. I'm going on a business trip to the basement.

00:08:19   Yes. I'm just going to go to my office, and I'm not going to interact with anyone else for the

00:08:26   next two and a half days, basically, is what it ended up looking like. I might be downstairs to

00:08:32   get some food. You might see me around, go into the bathroom or whatever, but I'm not here. Just

00:08:37   pretend that I don't exist. It's not rude. We're both on board with this. We all had an understanding

00:08:44   about what this was going to look like. But if something's happening, if it isn't

00:08:50   emergency level urgent, if it can wait, then it will wait until I come back in terms of

00:08:55   until my worker fee is finished. And my wife was super supportive of this, my kids were

00:09:00   super supportive of this, and it worked. I just spent essentially two and a half days

00:09:05   working. And other than I slept maybe six hours in the night and I did an hour of exercise

00:09:11   to kind of keep myself going mentally and drank a tremendous amount of Diet Coke and coffee. But

00:09:16   like, it was, I mean, it's, which I will say, this is not a sustainable thing. Don't view this as

00:09:21   like, "Oh, anytime, you know, I should be doing one of these, like, you know, once a month." It's

00:09:26   like, no, this is like a once a year, like, break glass, pull lever kind of scenario because you are,

00:09:32   it is brutal on your brain. Like, don't think that this is just like an easy thing to do. But if you,

00:09:38   you know, in the right circumstances with the right preparation, super powerful. So I can

00:09:44   recommend the Graycation. It got me over the hump, like I was able to essentially take the app

00:09:48   completely apart, put it back together with the workout and mapping modes integrated inside of it.

00:09:52   And like, it got me past that point where suddenly, rather than having this big barrier that I kept

00:09:59   having at the bottom of my to-do list, like I moved that out, had the remaining few tasks to

00:10:04   to turn a knockout after that, but this huge blocking thing that had been kind of just

00:10:08   like this big stumbling block in front of me is finally gone.

00:10:12   You're kind of inspiring me because I've been actually talking with my family about

00:10:17   possibly doing one of these soon myself, although I'm not quite ready for it yet. But this

00:10:22   is really a great idea if you can swing it with your family because modern life, the

00:10:31   The older I get, the more I'm trying to cram into each day.

00:10:36   And I keep having all of these different things I want to do, or interruptions from just life,

00:10:42   you know, or whatever it is, or I'm task switching, you know, well, I'm coding, and I'm also recording

00:10:48   podcasts, and I'm also doing, you know, other projects.

00:10:52   And so it's so hard to get large blocks of uninterrupted time when you want to do a lot,

00:10:59   when you want to have different aspects of your life.

00:11:02   You want to have a solid family life,

00:11:04   and you want to have multiple projects,

00:11:06   and you want to have health and exercise for yourself

00:11:10   and everything else.

00:11:11   It's just so hard to balance all of these things

00:11:13   and also give yourself large blocks of time to work.

00:11:18   I feel like the full-time job world,

00:11:22   I mean, to whatever degree,

00:11:24   they come with their own sets of interruptions,

00:11:28   meetings and more meetings and constant meetings,

00:11:32   you know, that's its own set of interruptions.

00:11:34   But, at least the full-time job world,

00:11:36   you are forced to, for the most part,

00:11:39   go to a place every day and be there for a long time.

00:11:42   And so, it makes it easier to have those large blocks

00:11:46   of time by force, and then the rest of your life

00:11:50   oftentimes is challenging to schedule

00:11:52   and to fit and to balance, but it forces you

00:11:55   you to like cluster all the other things in your life to the mornings and evenings of

00:12:01   each weekday and then the weekends. Whereas indie life, I find, this is something I've

00:12:06   always found very challenging in indie life. I have always had a very hard time balancing

00:12:12   my time management and giving myself large blocks of time. And it's not, you know,

00:12:18   and people might think like, oh, it's all about interruptions. No, it's really not.

00:12:23   Like that's some of it, but it's mostly just myself.

00:12:26   Like I have a very hard time,

00:12:29   like not running off and doing something else

00:12:32   at any given moment.

00:12:33   You know, like not like, oh hey, the dog is crying,

00:12:36   let me go take him for a walk.

00:12:38   You know, like I have a very hard time not doing that.

00:12:40   Or like, hey, you know what,

00:12:41   as much as I'm in the zone right here,

00:12:44   I'm gonna have a workout in an hour,

00:12:47   so I better go prepare, move the living room around

00:12:50   to do that or whatever.

00:12:51   There's always something like, oh hey,

00:12:53   "Oh, the so-and-so just came into town.

00:12:55   "Let me go say hi to them, maybe get some lunch with them."

00:12:57   Like, there's always something.

00:13:00   And to actually take this time,

00:13:02   we've talked in the past about how valuable it is

00:13:06   during WWDC to kind of give yourself that whole week

00:13:10   to quote, go to the conference,

00:13:12   even if you weren't actually there physically,

00:13:14   and even if there's nothing to physically attend anymore,

00:13:18   to give yourself that time to say,

00:13:19   "All right, this week my only job

00:13:21   to watch these sessions and go to these labs

00:13:23   and read these docs and whatever else.

00:13:25   Well, that same concept applies to work as well,

00:13:29   to regular work, like what you're describing here,

00:13:31   where if you can get away from it all

00:13:35   and block off time where all you're doing

00:13:38   is that one task and you tell yourself,

00:13:41   even at the beginning, like look,

00:13:43   this is gonna be an additional burden

00:13:44   on my family or whatever, so it better be worth it.

00:13:47   I better spend this time wisely

00:13:48   and actually do just this task and get it done

00:13:52   and not wander off and say,

00:13:54   "Hey, let me play with Mastodon apps," or whatever.

00:13:56   There's always something you could be distracted by,

00:14:00   but if you assign this time to say,

00:14:03   "This is what this time is for,

00:14:05   "and I'm reserving it, I'm blocking it off,

00:14:08   "I'm getting my family to support me in this,"

00:14:11   that is very valuable, and that is something

00:14:13   that your day-to-day life will never create blocks like that

00:14:18   And so when you have something really big to tackle, that can be extremely valuable.

00:14:24   Yeah. And I think there was definitely something that I noticed in myself too,

00:14:28   that sort of towards what you're saying is, I think the, like, you know, the best positive

00:14:34   sense, like the peer pressure of it, of like, I am, this time is having a cost, like in so far as

00:14:41   like, I'm not seeing, you know, my kids and my wife who I love, and I'm not doing other things

00:14:46   that I might otherwise do. And, you know, I'm putting extra burdens on my wife to have more

00:14:51   responsibilities inside the home as a result of this. Like, it made the time feel precious and

00:14:58   pressured in a good way that I felt much more motivated. And I think, specifically what you're

00:15:05   saying, I think so often I have a tendency of, if I run into something that is difficult, like

00:15:11   something that is hard work, it is easy in those moments to bounce off of it onto something

00:15:19   easier. That can be easier work or it could be just easier like exploring new Mastodon

00:15:26   apps or going for a walk or getting a snack or whatever it is. It can look lots of different

00:15:32   ways, but I think my brain is a sly little machine that just constantly wants to avoid

00:15:40   hard work. And so I have to be careful with it in terms of making sure that I don't let it just

00:15:47   sort of always try and avoid things because eventually you have to face up to the task or

00:15:52   the thing that is difficult and is hard. And I found in this situation, this approach really

00:15:57   meant that it was some of the most challenging and nuanced programming I've had to do in a while

00:16:04   to take all these things and fit them all together again. But it was like, "Okay,

00:16:09   "I'm just going to keep going until it's done." There is no alternative to that. There's no like,

00:16:14   "Oh, maybe I'll just put this off and deal with it another day." It's like, "No,

00:16:19   we settle all scores today. This is going to happen." And it wasn't to say, "I did it

00:16:25   straight through. I used the strategies of take a shower, go for a walk to think about it."

00:16:30   There's lots of things that you do if you get stuck on a part. There's a difference between

00:16:33   getting stuck on something and needing to let your brain process the problem versus

00:16:40   having your brain avoid the problem because it's hard, because it's difficult, because

00:16:45   you know it's going to be cognitively unpleasant. And so I think that pressure that it created

00:16:50   was definitely something that was very powerful in pushing me through the things that I would

00:16:56   have otherwise potentially just bounced off of.

00:17:00   We are brought to you this episode by Issue.

00:17:03   If you post content on your website, share to Instagram,

00:17:06   and send it to your clients, but then

00:17:07   find posting your content to your channels

00:17:09   includes reformatting, resizing, redownloading, and re-uploading,

00:17:12   you need Issue, because then you can create once and share

00:17:16   everywhere.

00:17:17   Issue is the all-in-one platform to create and distribute

00:17:20   beautiful digital content, from marketing materials

00:17:23   and magazines to catalogs and portfolios and so much more.

00:17:27   There's no need for endless scrolling through PDFs.

00:17:29   Issue features your digital content in an easy-to-view way on every device.

00:17:34   You make it once and can distribute it everywhere without reformatting.

00:17:38   Your content is automatically optimized for engagement and ready to share, which saves

00:17:42   you so much time.

00:17:44   Issue works seamlessly with the tools you already use and love, like Canva, Dropbox,

00:17:48   MailChimp, InDesign, and more.

00:17:51   Content on Issue can be published as public or private.

00:17:54   Private can be only people with a shared link can view it.

00:17:57   content will be available for your audience and it'll be available for others to discover

00:18:01   on the Issue platform. So the platform also provides statistics on how your content is

00:18:05   being consumed so you can learn more about your audience with data on impressions, clicks

00:18:10   on the content, duration spent reading, pages viewed and more. Issue helps creators, marketers,

00:18:16   designers and really anyone who wants to make content that stands out. Get started with

00:18:20   Issue today for free or sign up for an annual premium account and get 50% off when you go

00:18:25   go to issue.com/podcast and use promo code radar.

00:18:29   Issue is spelled I-S-S-U-U, so it's I-S-S-U-U.com/podcast

00:18:34   and use promo code radar at checkout

00:18:38   for your free starter account

00:18:40   or 50% off an annual premium account.

00:18:42   One more time, issue, I-S-S-U-U.com/podcast,

00:18:46   promo code radar.

00:18:48   Our thanks to Issue for their support of Under the Radar

00:18:50   and all of Relay FM.

00:18:53   So I think the other thing that kind of seemed worth talking about, so I've gone on this

00:18:57   great occasion, I've gotten through these hard problems, and it has now meant that I'm

00:19:03   at an interesting place in my development cycle that I think is just worth mentioning.

00:19:07   And if you are a long time follower of my work, you'll be aware of this concept.

00:19:11   But just like two hours before we started recording, I put up a sign in my office right

00:19:16   underneath my monitor, just like with some masking tape on the back, it says, "No more

00:19:22   new features. It has two little ships on it. And it's a big day for me. It's exciting.

00:19:29   And I'm going to explain why that's so important for me, because why it's so exciting when

00:19:33   I get to put up this sign. And the reason this sort of had to have found myself having

00:19:38   to do this is in the nature of development, the nature of working on new features, of

00:19:45   doing big updates like this, inevitably, I have ideas. I have ideas for things that I

00:19:50   want to do for ways that I could extend this for ways that I could make the app better. And that

00:19:56   list of ideas is functionally unlimited. Like, the more I work on something, the more ideas I have,

00:20:03   the longer the list gets. But if I sort of constrain myself to, you know, if I don't

00:20:10   constrain myself to some point having to actually ship this app, take it, you know, out of my eye,

00:20:15   out of my head, out of my Xcode and put it into the world, like, I'll never get there, that list

00:20:20   will grow indefinitely and it will be like, you know, like I'm just never going to get there.

00:20:25   And so I have found that I've, what I have to do is at some point I have to draw a line in the sand

00:20:29   and say, this is it. No more new features. The app is good enough for version whatever it is. In this

00:20:35   case, version 5.0 of Pedometer++ is good to go. It's ready. I can take this app, it has enough

00:20:41   features, these features are great. Any ideas or things I have that are beyond this are going into

00:20:46   to the next version. And that doesn't mean that it's done. And I think this was the key

00:20:52   insight that I had a few years ago about why, you know, having up this sign and having this

00:20:57   mindset shift was so invaluable is because what doesn't mean that the app is done, it

00:21:01   means that all of the features it's going to contain are done. But now I enter a different

00:21:06   phase rather than the development phase where I'm creating new things and adding things.

00:21:12   Now I'm in the polishing phase. Now I'm in the phase where I'm going to go through and

00:21:15   I'm going to continuously just use the app in different modes, try it on different devices,

00:21:20   use it in different languages, do all the different things that I'm going to do. Use

00:21:23   it with VoiceOver on, use it with Dynamic Type Giant, use it with Dynamic Type Small.

00:21:26   Do all of the different modes to stretch out the application and as a result find lots

00:21:33   of bugs, find lots of issues, find little things in the app that could be better. And

00:21:39   this gives me a time, like it's probably going to be about the next three or four weeks,

00:21:43   I would guess, of just this endlessly polishing. And it's like, in woodworking, you imagine

00:21:49   you start with the big, rough sandpaper, and eventually you're getting down to this super

00:21:56   fine, very gentle sandpaper. You're almost polishing it with just linen at the end, where

00:22:01   it's so soft, but it means that you can just get that absolute smoothest surface possible.

00:22:05   That's the mindset that I want to get into now. And that kind of work is different than

00:22:10   the initial work where I'm just sitting there with chisels and hammers bashing away at things.

00:22:16   And so anyway, it's an important part in this process of saying, "No more new features.

00:22:21   Put up a sign." I do physically have to put up a sign under my monitor, because if I don't,

00:22:26   I will cheat and tell myself, "Oh no, this isn't a new feature. This is just like a variant

00:22:32   on an existing feature." And so I need to constantly remind myself that, "No, you've

00:22:38   said to yourself, "No more new features. If it isn't a polish, if it isn't a fix, it shouldn't

00:22:43   be being worked on right now." And so that's where I am, and it's something that I've found

00:22:49   is dramatically increased the quality of my apps, because taking the time now where I'm

00:22:56   intentionally just going to be polishing means that things are actually polished, rather

00:23:00   than it being this awkward thing where I would find, especially on the summer work between

00:23:06   between WWDC and iOS's release, where I'd suddenly find myself like, you know, it's

00:23:11   like a week before iOS 16, and I just need to like, ship whatever I have. It's like,

00:23:17   that's not good. I should have, you know, at the end of August, I should have put up

00:23:20   a sign that says no more new features, and just spent a week or two just polishing things,

00:23:25   finding bugs, dealing with things. And it means that my launches have subsequently,

00:23:29   since I sort of went into this mindset of no more new features, has been, you know,

00:23:33   launches have been so much less stressful because so few bugs relatively are found.

00:23:39   Like I've given myself enough time and enough opportunity to really get in there and find

00:23:44   all the issues, find where the little gremlins deep in my code with weird modes are and can

00:23:50   fix them rather than finding out that they're in there when a customer runs into them for

00:23:55   the first time.

00:23:56   That's very admirable.

00:23:58   That takes a level of discipline and structure

00:24:01   that frankly I don't have and I never have.

00:24:04   For me, my release schedule is more like

00:24:08   I work on something for a while, I get it into beta,

00:24:11   I test it in beta for a random seemingly amount of time,

00:24:14   and then one day I wake up and I'm like,

00:24:17   you know what, I just gotta ship this thing.

00:24:19   I just submit to the App Store.

00:24:20   And I basically submit it to the App Store

00:24:23   whenever I'm tired of it being in beta.

00:24:25   kind of irrespective of how ready it is.

00:24:30   And that's kind of, I know that's not how I'm supposed

00:24:35   to do things, and I wish that's not how I did things,

00:24:38   but that is how I've always operated.

00:24:40   It's just like, I'm tired of this not being released,

00:24:42   I'm going to release it, dammit, and that's it.

00:24:44   But your method I think makes a ton more sense

00:24:48   and is much more mature and professional.

00:24:51   Again, I wish I could work that way.

00:24:53   But yeah, that's very admirable.

00:24:56   So obviously this is gonna be presumably coming up

00:25:01   and going to the app store fairly soon.

00:25:03   Like when do you know that you're ready to submit it?

00:25:08   - I mean I think that is the part similar

00:25:13   to what you're describing in your model,

00:25:14   where there is a point where it is more just instinctual.

00:25:18   It is more just like the nature of the bugs

00:25:22   I'm running into and the issues that I'm having, you know, it's sort of the change in sort of

00:25:28   qualitatively, if not necessarily quantitatively, like there's a different kind of issue. If I'm

00:25:34   spending my time working on like, tiny alignment issues where like, huh, you know, this button is

00:25:39   actually two pixels off where it should be. And I'm going in there with x scope, like measuring

00:25:44   stuff and like doing those kinds of things. You know, I think there's a certain amount of just

00:25:51   experience that goes into it. And this is where I think, you know, your method is likely not as

00:25:55   problematic as superficially it might appear, because it's being done by someone who's been

00:26:02   doing this for, you know, over a decade. And you have a sense of what's going to come back to bite

00:26:08   you and what isn't, and you're not, you know, you're less likely to ship something when it's

00:26:12   not in that state. And I think for me, it's, you know, how do I know it's ready is that sense of,

00:26:18   has it been in this process of polishing for long enough now are the kind of issues or the

00:26:22   feedbacks I'm getting changed sort of from this, you know, big issues, big problems. You know,

00:26:29   the kind of thing that back when I used to have a jobby job, whatever, 14 years ago, they would

00:26:33   talk about is like the show stopping bugs or like it is like level one bugs and level two bugs and

00:26:38   all these kind of things like you get to a point where none of your bugs are these like

00:26:41   show stopping issues that would, you know, make the app crash, they'd be data loss,

00:26:46   they would prevent the user from using one of the main features of the app. You know, it's like,

00:26:50   if you don't have any of those anymore, if you've tried it in enough situations that you're confident

00:26:55   that, you know, any data migration or data changes are going to be successful, like, just reach this

00:27:01   point of comfort. And then like, huh, yeah, no, I think today's the day. And then I will have the

00:27:07   same kind of like, there's a slight whimsy whimsicalness to it of just like, yeah, today's

00:27:11   the day it goes to the App Store. But I think it's, it's more it's like, I need to give myself

00:27:16   the time to take one step back before I go into there to make sure that I have enough

00:27:21   perspective to see the issues rather than being so lost in the forest for the trees

00:27:28   or the trees for the forest, whichever way that metaphor was supposed to go.

00:27:30   Yeah, that makes sense. That makes sense. And part of it, I think, is kind of alleviated by,

00:27:42   know, we're not burning CDs to ship to a store. We're not like burning cartridges.

00:27:47   You know, like, we, if we ship something that doesn't mean we never work on it

00:27:52   again or and we never have the chance to fix any bugs. Like, shipping something

00:27:55   just means, all right, this version is good enough for most people to have it

00:27:57   and then, you know, you can always change it later. You can always fix it later.

00:28:01   Which, I recognize this is not, you know, this is not a universal good, that there

00:28:06   are downsides to that dynamic, of course, but I think the upsides outweigh them

00:28:10   generally in today's modern world especially,

00:28:13   where things are much more complicated than they used to be.

00:28:15   So I think that's,

00:28:16   I try not to let perfection hold me back from shipping,

00:28:22   which is its own topic for a different day,

00:28:24   but again, I think that's kind of,

00:28:28   my less disciplined approach does have that one advantage

00:28:30   of like, I will ship something on a certain,

00:28:33   certain rough frequency just because I will need to.

00:28:37   Like I just now would just get the urge,

00:28:39   I gotta ship this thing,

00:28:40   whether it's ready or not, but certainly I think your method is less likely to have to

00:28:46   do catastrophic emergency point one updates immediately afterwards.

00:28:51   Yeah. And I think there's definitely that element of it, but I think the other part

00:28:55   that I just wanted to reinforce is it is also a way of disciplining myself around finding

00:29:01   the point where it's enough features. Like this feature has enough things going on, it'll

00:29:07   be enough. It's enough talking about it. It's actually a good thing to hold back some features

00:29:11   so that they'll have subsequent things to add to the app. And it's a way of saying,

00:29:15   this is enough. And it has these, you know, I could just ship at that point. But the quality

00:29:21   benefit of waiting a couple of weeks is certainly there. But more important for me is this means

00:29:26   that I actually ship this means that I actually will take this thing and not just keep working

00:29:30   on it, you know, for another month, because inevitably, I could have more features add

00:29:34   more things. It could be more and more, but it wouldn't necessarily be better.

00:29:37   Thanks for listening everybody, and we'll talk to you in two weeks.

00:29:41   Bye.