Under the Radar

106: Long Projects


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

00:00:04   I'm Mark Orment.

00:00:05   And I'm David Smith.

00:00:06   Under the Radar is never longer than 30 minutes, so let's get started.

00:00:10   So today I wanted to talk through an experience I've been having recently where I...

00:00:17   So it's probably fair to say I typically do lots and lots of small little bursts of work

00:00:22   on a variety of my different apps.

00:00:24   Like I have a lot of different apps, so I tend to just like be like a little bee just

00:00:27   buzzing from flower to flower, like taking care of little things as they come.

00:00:32   But every now and then I find myself in a situation where instead I need to kind of

00:00:37   sit down and have a kind of a long, extended development project to really push a product

00:00:42   forward.

00:00:43   And for me right now, that's around Workouts++, which is my workout management and configuration

00:00:51   app for the Apple Watch.

00:00:54   And so usually I would say the longest I work on a particular update to an app is maybe

00:00:59   a week, sometimes two at the most.

00:01:02   And at this point I'm coming up on two months working on this update for Workouts++.

00:01:06   So it's a pretty substantial amount of time and energy and investment that has gone into

00:01:12   this update.

00:01:13   And while I've had to do bits and pieces from side to side, which I'll actually get into

00:01:17   as a topic, it's a long time thing.

00:01:19   And I think, looking right now, I'm aiming to have the update out at the beginning of

00:01:24   December, which would have meant that it would have been about three months of work, which

00:01:29   is a substantial investment.

00:01:30   And for me in this case, too, I also have this vague sort of outside pressure that I

00:01:36   want the app to be out at the beginning of December so that it can be sort of nice and

00:01:41   stable and out and available for the new year, when it is typically a good time and a big

00:01:47   time for workout and health and fitness-related things.

00:01:51   So as I've been going through this process, I've been trying to be aware of some of the

00:01:55   things that I've had to keep in mind and some of the things that I've done as a result.

00:01:59   And it seemed like an interesting topic to talk about through the show.

00:02:03   So probably the best place to start is just to kind of unpack some of the things that

00:02:07   I've tried to make sure that I did before I started.

00:02:11   And so these are some of the questions that I thought I needed to ask.

00:02:14   It's like, why am I doing this?

00:02:16   Why do I want to do this update?

00:02:17   Do I think this is actually a good idea?

00:02:19   Is it worth it?

00:02:20   Is this going to be worth it either in terms of making the app dramatically better, expanding

00:02:26   my market, making more money, garnering the attention of press or Apple?

00:02:31   Whatever it is, it's like trying to understand why I'm doing it and if it's actually going

00:02:35   to be worth doing, trying to understand what I'm actually trying to accomplish, mostly

00:02:42   so that I can know when I'm done.

00:02:45   Because from experience, I know that often what will happen is I will go into one of

00:02:48   these development projects where I'm like, okay, I give myself permission to kind of

00:02:51   run wild and to not have it be just a couple of weeks.

00:02:56   And then I can just sort of end up aimlessly wandering in the wilderness for weeks and

00:03:01   weeks because I don't really know where I'm going and I'm just enjoying the development

00:03:05   process, which can be kind of fun sometimes because it'd be really damaging or problematic

00:03:11   to getting other things done if I just like to have this aimless wander.

00:03:14   So trying to think about when will I know I'm done?

00:03:17   What are the core features?

00:03:19   What are my basic...

00:03:22   It's almost like when you're running a term paper or something and so if you try and write

00:03:25   the introduction and the conclusion and then you fill in the middle, it's like trying to

00:03:28   work out, well, what am I going to put in my release notes when I submit this to the

00:03:33   App Store?

00:03:34   And while that may change, as development goes, it's like if I can't concisely describe

00:03:40   what it is I'm trying to do, I'm almost certainly going to get into trouble.

00:03:45   Then asking questions like, "Is it possible?"

00:03:48   And if it's not, how do I know or if I'm not sure if something's possible?

00:03:55   Like for example, in this update, I've been working on a lot of Apple Watch audio playback

00:04:00   stuff.

00:04:01   Some of that is kind of possible.

00:04:03   Some of it is completely impossible.

00:04:04   You're being very kind.

00:04:07   We've talked about this before.

00:04:08   I don't need to go into it in great detail.

00:04:11   But finding that line between possible and impossible was very important to find out

00:04:15   up front and to make sure before I committed a lot of energy to the parts of audio playback

00:04:23   on the watch that are the supporting stuff you have to do in terms of the easy part,

00:04:30   in some ways, is that core playback experience.

00:04:32   The hard part is all the other management and file management and configuration and

00:04:36   syncing and stuff you have to do.

00:04:38   It's like making sure I deal with that first, but it's kind of this process of saying,

00:04:41   "Is this possible?

00:04:42   Am I sure I can do it?

00:04:44   What do I want to do?

00:04:46   And then why am I doing it?"

00:04:47   And if I can answer those questions, then I'm probably in a pretty good place to get

00:04:50   started.

00:04:51   Yeah, this is an area, the whole just long-term update or new app management, that I'm just

00:04:59   very bad at this.

00:05:00   I'm very, very bad.

00:05:02   I gave a talk a while ago at NS Conference about how I planned Overcast from a marketing

00:05:07   perspective for 1.0, for the initial app launch.

00:05:11   And I made this big document, similar to what you were just saying about how you imagine

00:05:16   the app store release notes as a goal and what should those say and how do I get there.

00:05:23   I did a similar thing where I basically laid out the marketing bullet points for Overcast.

00:05:30   Why choose this over any other podcast app?

00:05:32   I laid those out early on and did a bunch of market research, looking at the other apps

00:05:36   to see that were competitive at the time and saying, "All right, well, why would somebody

00:05:41   use Overcast over AppX?"

00:05:44   And I went through all the competitors at the time, big and small, like, "Why should

00:05:47   somebody choose Overcast over this app?"

00:05:50   And that kind of helped me plan my marketing focus for the app.

00:05:55   It kind of helped inform the feature selection, what to focus on, what to not really focus

00:06:01   on, certain markets that I chose just to not address.

00:06:05   I'll have my app do X, Y, and Z, things like Smart Speed and Voice Boost and the reorderable

00:06:12   playlist stuff and everything, all that stuff.

00:06:14   That was my main marketing bullet point list.

00:06:17   An app is so much more complicated than that in practice.

00:06:20   There's so much more you have to do.

00:06:22   Those core features of the app were done probably after three or four months or at least close

00:06:29   enough to done.

00:06:30   And then during the beta, I kind of finished them.

00:06:33   But the app took me a year and a half or two years to make.

00:06:35   I forget exactly.

00:06:36   It's been a while now.

00:06:38   And so the entire rest of the time was spent doing things that were not on my planning

00:06:43   list, just doing all the different administrative screens and the back end on the servers and

00:06:50   all the different UI details.

00:06:52   And I find that I'm very, very bad at time management and I would say completion estimation,

00:07:00   deadline estimation.

00:07:02   Once I get into all that nitty-gritty stuff of the main feature might be complete or close

00:07:08   to complete because the main feature might be some cool technical thing that I'm doing.

00:07:13   That took maybe a day or two or a month in the worst cases.

00:07:17   But then the entire rest of the app around it, that's so much more complicated.

00:07:23   I had a major problem with this this past summer when the iOS 11 changes came in.

00:07:30   And even before I knew about the iPhone 10, even when it was just iOS 11 drag and drop

00:07:36   and all the new table view mechanics and everything else, I thought I would have time for a major

00:07:42   feature update this fall as well as a UI update to iOS 11.

00:07:48   And not only did I totally fail at that, but then at the very last minute, the iPhone 10

00:07:55   was announced.

00:07:56   And we all knew it was rumored.

00:07:58   We kind of knew that something like this was coming, but I don't think any of us really

00:08:01   knew how much work it would be for apps to adopt it well.

00:08:05   My original plan for my 4.0 update contained so much more than what I actually shipped

00:08:11   as 4.0 because the basics of it, of just keeping up with Apple, that took the entire amount

00:08:18   of time I had.

00:08:19   And the very, very small number of bullet point features that actually made it out in

00:08:24   addition to those, like the new contextual row actions where you can pull across the

00:08:28   whole row to delete, like mail, I added those on the very last day of the beta.

00:08:33   It took me half a day.

00:08:34   I added them in the very last build.

00:08:37   Everything the entire rest of the time was spent on the massive amount of work required

00:08:44   to just update the UI for these things and to pull out some of my old hacks and to put

00:08:49   in a couple of new hacks, but try to keep the new hacks at least fewer number of them.

00:08:53   They were severity than the old ones.

00:08:55   And I just completely mismanaged and more importantly, totally misestimated the entire

00:09:02   project.

00:09:03   >> And I feel like too, the thing that, I know it sounds similar to what happened to

00:09:07   you, but I know it happens to me many times is not necessarily realizing too how once

00:09:13   you start embarking down the road of a big update, the awkward position you find yourself

00:09:18   in is then the app from a user-facing perspective essentially appears stalled.

00:09:27   All of a sudden you stop getting small, minor incremental updates that the things that just

00:09:33   take a half a day to work on to build and add to the app, all of a sudden they get sort

00:09:38   of stuck behind this dam of this big feature that it feels really, it's either technically

00:09:43   difficult to ship because you end up with weird version control management stuff of

00:09:48   like, well, I can add it to the old version, but the old version is like massively going

00:09:53   to be ripped apart and put back together, or it's doing work that is going to be replaced

00:09:58   or have to be repeated in the actual, like the new feature branch or things like that.

00:10:04   You end up in these really awkward places where suddenly the app just kind of gets stuck

00:10:09   and that's really awkward.

00:10:11   And I feel like in some ways it's a good thing to keep in the front of my mind that right

00:10:15   now all of my apps, except for Workouts++, have been updated for the iPhone X.

00:10:22   And that's good, like all those updates are up, but for users of Workouts++, as much as

00:10:30   it's nice for me to be able to say, "Oh, coming soon, awesome, amazing update that I think

00:10:34   you're really going to love," it's kind of awkward too.

00:10:39   The app that I'm putting the most effort into is the one that is falling the most behind,

00:10:44   and so it's probably worth making sure that as we're starting on these projects, it's

00:10:47   like, A, sort of timing them right.

00:10:49   Like often I think we've talked about before on this show where it's often good to do these

00:10:53   types of updates, and maybe in the sort of like February to April timeframe, in sort

00:11:01   of Apple's development cycle where things tend to be fairly calm before W3DC, which

00:11:06   obviously I didn't do this time, but in general it's just a weird thing to keep in mind that

00:11:12   you have to make sure that it is undertaking this project and putting the app into this

00:11:17   weird sort of hiatus state, like worth it and a good thing to do.

00:11:23   Just otherwise you can actually end up shooting yourself in the foot by making the app feel

00:11:28   worse and worse to your customers, and by the time you finish, it's like you arrive

00:11:33   back and be like, "Hey, here's this great new thing," and they've all left, and that

00:11:37   could be rather problematic.

00:11:40   This episode is brought to you by Eero.

00:11:42   Ever think about Wi-Fi again?

00:11:44   Eero has created the dream Wi-Fi setup, a fast, reliable connection throughout your

00:11:49   entire house, even out into your backyard if you want to.

00:11:52   And now is the best time to get on board with Eero, as they've just released their super

00:11:55   slick second generation devices.

00:11:57   Eero has now introduced their tri-band second generation model, along with the Eero Beacon,

00:12:02   which allows you to build a Wi-Fi system perfectly tailored to your home.

00:12:05   The second generation Eero includes a third 5 gigahertz radio, making it twice as fast

00:12:09   as before.

00:12:10   This lets you do more than ever.

00:12:12   Whatever your Wi-Fi needs, Eero has the power to blanket your entire home in fast, reliable

00:12:17   Wi-Fi.

00:12:18   It sits flat on any surface, just plug it into the wall with the included power adapter,

00:12:22   and you are ready to connect your Eero either with ethernet or wirelessly.

00:12:25   And the new Eero also includes a new thread radio, which lets you connect to low power

00:12:29   devices, such as locks, doorbells, and more.

00:12:31   And the new Eero Beacon is pretty cool.

00:12:34   The Eero Beacon, you just plug it into a wall, and it expands coverage into any room.

00:12:38   You can add as many Eero Beacons as you want, as long as you have a base Eero device for

00:12:42   them to connect to.

00:12:43   And this even includes a built-in LED nightlight with an ambient night sensor.

00:12:46   The Beacon is super cool, super slick, plugs right in, sits flush against the wall.

00:12:50   You barely even noticed there.

00:12:51   It's really great.

00:12:53   The Eero app also lets you manage your network from the palm of your hand, and you can also

00:12:56   easily create and share a guest network, too.

00:12:58   They make it so easy to do all this stuff.

00:13:01   And the Eero customer support is great if you need any help.

00:13:04   The new Eero system starts at just $399 for one second generation Eero and two Beacons.

00:13:08   And that is everything you need for, I would say, almost any place.

00:13:12   If you need more, you can have more later, but you probably don't need more than that.

00:13:15   Listeners of this show can get free overnight shipping to the US or Canada.

00:13:19   When you head over to Eero.com, that's E-E-R-O dot com, and use promo code radar.

00:13:24   That's Eero.com promo code radar for free overnight shipping.

00:13:27   Thank you to Eero for supporting this show.

00:13:30   So once you've gotten through all that and you're actually in the middle of building

00:13:34   an update, the hardest things I find in a lot of ways is keeping motivated, keeping

00:13:41   progress moving forward every day.

00:13:44   Because in a large part, independent development often feels fairly isolated or lonely, but

00:13:52   it definitely feels the most isolated for me when I'm working on features that take

00:13:57   weeks and weeks or months and months to work on because it's just kind of like me off

00:14:01   in my own little world working on stuff.

00:14:04   One thing I wanted to mention in the show is over the years of doing this, I've developed

00:14:10   a little, like, I don't even know, like it's a little mental crutch that for me helps

00:14:14   me to stay motivated and to feel like I'm continuing to move forward.

00:14:19   Because often what will happen, you know, is you can spend all day like a definitely

00:14:25   focused, hardworking day of effort and you get to the end and you don't feel like you

00:14:31   accomplished anything.

00:14:32   And that is just so demotivating, so crushing.

00:14:37   Those days then make me start questioning all kinds of things about whether I should

00:14:41   even be working on this, is this good, should I just completely drop this app and go do

00:14:45   something else, should I find a new career, I'm terrible at this, like lots of not productive

00:14:51   good things.

00:14:52   But you're lucky if those are just days too.

00:14:53   I've had months like that.

00:14:55   Yeah.

00:14:56   But one thing that I have found to be helpful for me personally is to try and every day

00:15:05   have something, one thing that I did that day that I can point to.

00:15:11   Which is, can be as small as, can be small, can be big, whatever it is.

00:15:16   But I try and structure my work such that at the end of the day I have something, one

00:15:23   thing that I can point to and say like, that's what I did.

00:15:27   That little feature, that thing, and it's a concrete, tangible example.

00:15:31   And sometimes you can't do this.

00:15:32   Some projects will just, you're doing some deep model layer work that takes a few days

00:15:37   and like, okay.

00:15:38   But once you've done it, then that becomes your thing for those three days.

00:15:43   But I found that to be a really, and then at the end of every day, I consciously make

00:15:51   the decision to think about what I did and to remind myself of that thing that I accomplished,

00:15:57   even if it is just one thing.

00:15:58   And typically it is just one thing.

00:16:01   And I found doing that over and over again, it keeps me honest in terms of, keeps me from

00:16:10   getting sucked down rabbit holes that are unproductive and I'm not actually getting

00:16:14   anywhere in.

00:16:16   If I have nothing to show for the end of the day and that happens two or three days in

00:16:20   a row, maybe something's wrong.

00:16:23   Maybe I'm doing something that I really shouldn't be doing.

00:16:27   And it gives me that awareness.

00:16:30   And on the flip side, it helps me to just be aware of that and say, yes, I did this.

00:16:37   And what I found is, it's somewhat obvious, but if you string together enough days where

00:16:41   you accomplish something tangible every day, you make genuine progress.

00:16:45   And so, I don't know, that's just a little silly trick that I've found for tricking

00:16:48   myself into making progress, especially in the midst of things that can take a long time.

00:16:54   Yeah.

00:16:55   And also, for me, as I mentioned a few minutes ago, doing my little swipe actions thing in

00:17:00   half a day at the end, it made me feel a lot better about the release.

00:17:04   It made me, I was having so much doubt during the development cycle of my 4.0 of, am I doing

00:17:11   enough here that customers will actually care about?

00:17:14   This is taking, I'm spending, and we've talked about this before too, I'm spending

00:17:18   months on this update, and is this actually including anything that my customers will

00:17:23   get excited about, or is it just changing things?

00:17:27   Or just keeping up with iOS and new phones?

00:17:30   That's just a bare minimum of what I should be doing, is just keeping up.

00:17:33   Ideally, I'm also making things better.

00:17:36   And so I started to look for features that were fairly low complexity to implement that

00:17:42   people have been asking for, and just try to knock some of those out in the last few

00:17:46   days that I had.

00:17:48   And that really helped a lot, not only for making the update better, but for making me

00:17:53   feel like I had spent all this time for a sum total product here of something that was

00:18:00   actually worth that time, even though the distribution within that of how I spent that

00:18:05   time versus those meaningful features might not have been ideal.

00:18:08   - Yeah, and I think the important thing there is even, it almost makes me wonder if you

00:18:12   would have been well served to do those small little features in the middle of your development

00:18:17   cycle as best as you could, to try and have these little rewards or these little psychological

00:18:25   perks.

00:18:26   'Cause I know for myself, I love having, every now and then, often it ends up happening,

00:18:32   it's on a Friday, but I'll just have a day where I just allow myself, the thing I'm going

00:18:37   to do is try something kind of crazy.

00:18:42   And I enjoy that.

00:18:43   And it's a motivating thing and an encouraging thing.

00:18:47   And allowing myself kind of a conscious decision to do that allows me to make progress in the

00:18:54   meat and potatoes part of the app, where it's maybe not quite as fun or not quite as interesting.

00:18:59   It's like, well, once I've done this, then I can work on that cool thing that I know

00:19:02   I'm going to feel good about, even if it is maybe just a teeny little detail or something

00:19:07   that most users will never notice.

00:19:11   I remember when I was working on the achievement system in Pedometer++, where you can earn

00:19:16   badges if you work on them.

00:19:19   I allowed myself a day where I was just going to work on making the badges sparkle when

00:19:24   you earn them.

00:19:26   That's so cool.

00:19:27   Which was just a totally silly idea.

00:19:30   I love it in the app.

00:19:31   I think it works really well.

00:19:33   The menu bar button at the top that opens the badge page sparkles too with the same

00:19:39   effect when you earn a new badge and things.

00:19:43   It's great.

00:19:44   It was a reward for a lot of the other hard work of doing some ridiculously, or maybe

00:19:51   surprisingly hard, logic computation to work out how you calculate how long your streak

00:19:58   is and what the longest streak you have is.

00:20:00   There's some really nasty work you have to do to make that happen.

00:20:05   Having these little checkpoints along the way, it was so fun on that day for my one

00:20:10   thing to be cool sparkly pixie dust.

00:20:16   And it's just being okay with the fact that it sounds a little silly, that I'm a grown

00:20:20   professional, but these are the things I have to do to keep myself motivated, understanding

00:20:25   that if I'm unmotivated, if I'm not working effectively, I'm not making progress.

00:20:32   It's not like, "Oh, I should just intrinsically be motivated to always work at maximal efficiency."

00:20:39   It's like, "No, I have to trick myself and I have to do things that allow me to get

00:20:44   around the fact that I'll get stuck and I'll get demotivated, and then my productivity

00:20:49   overall will drop precipitously as a result."

00:20:52   Well, you're human.

00:20:54   You can't blame yourself or feel bad for being human.

00:20:58   Nobody likes working tirelessly day after day on a project that feels like it's going

00:21:04   nowhere.

00:21:05   And a lot of people don't have the choice in the matter.

00:21:07   They just have to do that because their job is not very fulfilling or not being managed

00:21:12   well.

00:21:13   We as indies have the freedom, we're lucky that we have the freedom that we can actually

00:21:17   take a day in the middle of a giant slog of trying to figure out UITableView's new crazy

00:21:22   behavior or something like that, or some weird bug, or trying to implement some really tedious

00:21:26   new thing.

00:21:27   We can take a break in the middle of that and do something for an afternoon or a day

00:21:33   that is fulfilling, that we can complete in that time, and that can work.

00:21:39   The whole reason that many of us, I should say, but certainly for me, one of the reasons

00:21:44   why I love programming so much and one of the reasons why I became first a self-taught

00:21:49   and then eventually a more formally taught programmer is that when normal people, I say

00:21:56   loosely, attempt to program or do something else that they don't really enjoy doing,

00:22:03   like maybe a certain subject in school growing up, when they succeed, they might not get

00:22:08   any kind of satisfaction out of that.

00:22:10   The people who stick with programming are the ones who can make it through all the incredibly

00:22:15   tedious and frustrating parts of it, which there are many, because they are motivated

00:22:21   so much by the satisfaction when you make something, when something works, when you

00:22:27   build something.

00:22:30   Those who really get into it are the ones who like that little hit of satisfaction or

00:22:35   adrenaline or whatever it is, it motivates us through the rest.

00:22:39   So you have to find ways, if you are that kind of person like I am, you have to find

00:22:44   ways to keep that motivation going even when you have to go through a very, very long slog.

00:22:53   I was very bad at that this summer.

00:22:55   I found it very, very hard to keep myself motivated and to work hard and to make forward

00:23:01   progress instead of just banging my head against the wall.

00:23:03   >> Yeah, and I think one thing too that I've found to be very helpful is trying to involve

00:23:10   other people in the process as best as you can is another thing that I find really helps

00:23:14   for these long slogs.

00:23:16   And so often it's having a very small, it's not even really a beta group, but just other

00:23:22   people who are using the app who can then be giving you feedback, giving you suggestions,

00:23:29   giving you reactions, and even just giving you that sense of like you ship something

00:23:33   that they enjoy or they like and they can tell you they like it, that's encouraging

00:23:37   and motivating.

00:23:39   And this is well before you'd get into kind of a broader beta test or something, but just

00:23:43   to try and make it so that it's not just you, even if it's just you and a couple of friends

00:23:48   or you and your spouse or whoever it is, but just making it so that it's not just like

00:23:53   if you can make that a little bit bigger, I find this really helpful.

00:23:57   And it's also probably helpful in making sure that you're actually making progress, that

00:24:01   you can have some shared perspective on like is the app better now with this update than

00:24:07   it was before or not?

00:24:09   Because you can easily sort of find yourself sucked down into the rabbit hole where you

00:24:13   are doing something because it's what you've been working on for a long time, but you may

00:24:18   be kind of losing the forest for the trees at a certain point.

00:24:22   So it's definitely helpful to kind of spread that out a little bit if you have the ability

00:24:26   to do that.

00:24:27   Yeah, that's one of the reasons why I took the somewhat, I think, unusual step of developing

00:24:33   the 4.0 UI kind of in the open.

00:24:36   I did a lot of like Twitter development basically where I'd like post screenshots on Twitter

00:24:40   and say, "Hey, what do you think of this?" or "Is this kind of weird?" or "Which of

00:24:43   these four options do you think would be best or work well?" or whatever else, taking kind

00:24:46   of a lot of like informal Twitter polls basically.

00:24:49   And normally I would do all this development in secret and then just release the final

00:24:53   product and try to make a big splash or whatever else then and try to keep everything secret

00:24:58   the whole time, which is very stressful and difficult, especially if you want to do a

00:25:01   large beta.

00:25:03   And this time I decided to just do it in the open in part because I was tired of keeping

00:25:08   things secret, but also in part because I wanted a little bit more of that validation

00:25:13   and of that testing and it actually made a better product in the end.

00:25:16   Like having public feedback on it.

00:25:19   I know this is a luxury and not everyone has the audience size to do, but everyone has

00:25:25   something like that.

00:25:27   Whatever your abilities or resources are, use them.

00:25:32   Even if it isn't a bunch of people on Twitter, it can be friends in real life.

00:25:36   It can be other testers.

00:25:37   It can be people whose opinion you trust who can take a look at something and can give

00:25:41   you feedback on it.

00:25:43   That's incredibly valuable for not only the quality of the product, which of course is

00:25:47   the ultimate goal at the end, but also this motivation factor in the middle when you're

00:25:52   just slogging through.

00:25:53   It's nice to know that you're working on something that people actually are going to like.

00:25:59   And probably the last thing that seems like worth talking about through is how to wrap

00:26:03   up a big project like this in terms of some of the little mistakes I've made in the past

00:26:09   that I try and avoid now.

00:26:11   As I was thinking about that, one thing that I do, I've never found that having an external

00:26:18   to-do list management for code level issues or questions never really -- it just doesn't

00:26:23   work that great for me.

00:26:24   But one thing I have found to be really helpful is to leave little breadcrumbs in my code

00:26:31   that help me keep track of things that I need to take care of before I wrap up and before

00:26:36   I ship.

00:26:37   So in Objective-C, I do these with the #warning declaration, where you can anywhere in Objective-C,

00:26:48   if you just say #warning and then you write some text, that'll show up anytime you build.

00:26:54   You'll get a list of those.

00:26:55   And they're almost like to-dos or things that I need to make sure are checked.

00:27:00   In Swift, you don't have quite the same ability, but what I've taken to there, which is kind

00:27:04   of a horrible hack but it works, is I just say let warning equal and then a string that

00:27:11   is what needs to be fixed or taken care of.

00:27:14   So then Swift complains that that variable is unused and should instead be assigned to

00:27:17   underscore, which works just as well.

00:27:22   But at the time --

00:27:23   >> That's a crazy hack.

00:27:24   >> It works, though.

00:27:25   Like, Swift does not like variables that are unused.

00:27:27   So that's how I do it now.

00:27:30   But these are great, because usually these are little details that are things I need

00:27:35   to check.

00:27:36   Because what I don't want to do while I'm developing is have to feel like I need to

00:27:41   take care of every little detail as I'm going along, because I may end up wasting a lot

00:27:46   of energy on stuff that ends up not getting into the final version.

00:27:49   So these tend to be little things that make sure this works in -- sometimes it's localization

00:27:54   stuff or different units.

00:27:57   Or it could just be -- it's like make sure this actually works on the iPhone 5S, whatever

00:28:02   the slowest device is.

00:28:04   Or little reminders and hints.

00:28:05   It's a great way to do it.

00:28:07   And then once I do my final build for the app store, if there's no warnings, then I've

00:28:12   taken care of all of those.

00:28:14   So that's a useful little trick.

00:28:16   One thing I always do is I do a get diff from the last shipped version to the current version

00:28:22   that I'm about to ship and just look through it.

00:28:25   Sometimes it'll be a little tedious and it'll take a little while.

00:28:28   But I've caught weird bugs or issues that way.

00:28:31   And it also is just really helpful as I'm preparing my marketing material to actually

00:28:36   remember all of the things that have changed.

00:28:38   And so I don't forget cool little nuggets or features and things that I added.

00:28:43   Because just in the scope of the size of the update, I may have missed it.

00:28:47   So it's usually worthwhile.

00:28:49   Just spend an hour going through that diff and just kind of getting a sense of all the

00:28:53   little changes that you made.

00:28:55   And then lastly, it's probably something that I have been bitten by many times by not doing.

00:29:00   So now I try to be very regimented about is making sure that you do a clean or app store

00:29:06   install of the app onto a fresh device, use it for a little while, get it set up, and

00:29:10   then test the update process to this big update.

00:29:15   Because the number of times you kind of forget about things that way, it'll come back to

00:29:19   bite you.

00:29:20   It can be awful.

00:29:21   So always make sure that you do that to just catch any weird migration issues or just things

00:29:26   that become really confusing.

00:29:29   Because I have not been using the app store version of my app for months at this point.

00:29:35   So it's important for me to be reminded of where my customers are coming from.

00:29:38   And it should feel really old when you see it, ideally.

00:29:41   All right.

00:29:42   Thanks for listening, everybody.

00:29:44   I'll talk to you next week.

00:29:46   Bye.

00:29:46   All right.

00:29:47   [ Silence ]