PodSearch

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 ]