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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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: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:42
◼
►
Thanks for listening, everybody.
00:29:44
◼
►
I'll talk to you next week.