#111: In it for the long haul.
00:00:00
◼
►
Hello and welcome to Developing Perspective. Developing Perspective is a
00:00:03
◼
►
podcast discussing news of note, iOS development, Apple, and the like. I'm
00:00:07
◼
►
your host, David Smith. I'm an independent iOS and Mac developer based in Herne,
00:00:10
◼
►
Virginia. This is show number 111 and today is Tuesday, March 5th, 2013.
00:00:16
◼
►
Developing Perspective is never longer than 15 minutes, so let's get started.
00:00:20
◼
►
Alright, so today's episode is going to have two topics. I'm going to talk about the
00:00:26
◼
►
process of updating a very old app and then talk a little bit about burnout and related
00:00:33
◼
►
So to start off, I'm going to talk about an update that I'm working on now.
00:00:35
◼
►
The project that is my primary focus right now in addition to some of the other things
00:00:39
◼
►
that I'm doing.
00:00:40
◼
►
And it talks about updating my recipe book, which is one of my sort of more successful
00:00:46
◼
►
It's been on sale for quite a while.
00:00:48
◼
►
And I'm trying to bring it up to what I'm going to call version three.
00:00:51
◼
►
Now my recipe book is an app that's been around for almost three years.
00:00:55
◼
►
I think it was launched the summer of 2010.
00:00:58
◼
►
So I've been working on it in some capacity for at least
00:01:01
◼
►
probably about three years.
00:01:03
◼
►
And during that time, it's had 30 released versions
00:01:06
◼
►
last time I checked, which works out
00:01:07
◼
►
to be somewhere around a version a month or so,
00:01:11
◼
►
in terms of since it's actually released until now,
00:01:13
◼
►
which is quite a lot.
00:01:14
◼
►
There's a lot of things that have changed
00:01:18
◼
►
in terms of look and feel, in terms of functionality,
00:01:20
◼
►
in terms of how the app works over that period.
00:01:23
◼
►
And it creates some interesting questions
00:01:25
◼
►
when you're going to go and do a big update, when you're
00:01:27
◼
►
going to do some stuff that gets into some database, that
00:01:29
◼
►
gets into some usability, that gets
00:01:31
◼
►
into all these kinds of questions
00:01:33
◼
►
that you don't have when you're creating a new app.
00:01:36
◼
►
When you're just starting with something new,
00:01:37
◼
►
you just create it.
00:01:38
◼
►
And there's no existing user base.
00:01:40
◼
►
There's nobody's data you have to worry about.
00:01:42
◼
►
And for something like my recipe book,
00:01:44
◼
►
it's even more complicated because what
00:01:46
◼
►
you're dealing with is users' non-recreatable data
00:01:50
◼
►
in that sense.
00:01:51
◼
►
So people are collecting and building
00:01:53
◼
►
databases of recipes they like.
00:01:55
◼
►
And if something were to happen to them,
00:01:57
◼
►
if they install the update and their data goes away,
00:02:00
◼
►
we have a pretty substantial problem.
00:02:01
◼
►
And the app would certainly be not-- the users
00:02:06
◼
►
wouldn't be happy with that.
00:02:08
◼
►
And this actually happened once before.
00:02:10
◼
►
I accidentally shipped an update that if you
00:02:12
◼
►
had a database that was above a certain size,
00:02:17
◼
►
it would corrupt the database, which was unfortunate.
00:02:19
◼
►
And I immediately pulled the app actually
00:02:22
◼
►
actually had to pull the app from the store,
00:02:26
◼
►
so that the update wouldn't propagate,
00:02:28
◼
►
submit an expedited review with the fix,
00:02:31
◼
►
and the app was just out of, not in the store
00:02:33
◼
►
for about four days, and it cost me a bit of money
00:02:35
◼
►
and a bit of goodwill, but in the end it worked out.
00:02:38
◼
►
But the point is, it's very complicated, I think,
00:02:42
◼
►
when you are doing these kind of upgrades,
00:02:44
◼
►
versus a fresh update.
00:02:45
◼
►
And so I just kind of wanted to talk through
00:02:46
◼
►
some of my thoughts about that.
00:02:48
◼
►
The first, and the most important part, I think,
00:02:50
◼
►
doing these kinds of things, to realize that you at the end, you
00:02:53
◼
►
just kind of have to be pragmatic about it. There's
00:02:57
◼
►
you're never going to be able to test every possible
00:03:00
◼
►
configuration, every possible path, all the different things
00:03:03
◼
►
that users can do. And so your goal is just trying to cover the
00:03:06
◼
►
vast majority of them and to do things in a way that will
00:03:09
◼
►
degrade gracefully as best you can. So for example, I can, it's
00:03:13
◼
►
not reasonable or sort of practical for me to test. You
00:03:18
◼
►
You see a user three years ago had bought the app at version 1,
00:03:22
◼
►
bought it, installed it, added a couple of recipes,
00:03:25
◼
►
never did anything to it.
00:03:26
◼
►
And then-- or even worse if they'd kept using it.
00:03:30
◼
►
But you know, if they'd-- and they'd never upgraded.
00:03:32
◼
►
And then they installed version 3.
00:03:35
◼
►
So now there's 29 intermediary versions that they have not had.
00:03:40
◼
►
And it gets very complicated for me
00:03:41
◼
►
to be able to test what that would look like to their data.
00:03:44
◼
►
Typically, that should work fine.
00:03:46
◼
►
I have a lot of lightweight migrations
00:03:48
◼
►
that just run and it works pretty well.
00:03:51
◼
►
But it's one of those things that I'm not
00:03:53
◼
►
too worried about that.
00:03:56
◼
►
As a percentage of my users, very few of them
00:03:58
◼
►
bought the first version, just because over this lifespan
00:04:01
◼
►
it's only been around for probably about a month or two.
00:04:05
◼
►
But the reality is I just can't worry too much about that.
00:04:08
◼
►
When I look at my version stats and details about that,
00:04:10
◼
►
it's not a high percentage of users who are on old versions.
00:04:13
◼
►
Most people are running the latest version
00:04:15
◼
►
on the latest OS.
00:04:17
◼
►
And so I can generally speaking say, focus on those, and then try and be just sort of
00:04:22
◼
►
mindful of how that would affect older users.
00:04:25
◼
►
But the reality is, it's there's only so much you can do.
00:04:28
◼
►
And then this is just one of those sort of things that I've come to grips with that I
00:04:32
◼
►
can never please everybody with every update.
00:04:34
◼
►
And so I just have to sort of understand that.
00:04:37
◼
►
And then in terms of what I do for that update, it's interesting because you just have to
00:04:40
◼
►
understand what makes sense for a big update.
00:04:44
◼
►
You know, this is an app, you know, it's been around, I said for about three years, there's
00:04:47
◼
►
not a lot of things that I need to do to it.
00:04:49
◼
►
I mean, the app has been largely unchanged for probably about a year now, if not more,
00:04:54
◼
►
and it still sells at almost the identical level as it did when it was first introduced.
00:04:59
◼
►
It's just, it keeps going and that's awesome.
00:05:01
◼
►
But the reality is, you want to update it periodically, if for no other reason than
00:05:07
◼
►
just to kind of continue to engender that goodwill with your users.
00:05:11
◼
►
trying to find what are the things that are frustrating about it. You know, if the app
00:05:15
◼
►
is featured fairly, you know, from a feature perspective is fairly complete, there's not
00:05:18
◼
►
much more in terms of what it needs to do. We're just trying to find different ways to
00:05:23
◼
►
make users lives better. And so like this, this feature and this update is primarily
00:05:27
◼
►
focused on making the app universal, which is one of those, you know, widely requested
00:05:31
◼
►
feature, you know, make it work from right now it's an iPad only to make it work on an
00:05:34
◼
►
iPhone as well. And it's something that users have wanted. And it's something that I'm,
00:05:39
◼
►
you know, working on and will be releasing.
00:05:41
◼
►
And it was that's-- at this point,
00:05:43
◼
►
it's that and a few other minor features are all
00:05:45
◼
►
that we hear these days.
00:05:47
◼
►
And so at some point, the app will likely
00:05:50
◼
►
fall into a more just sort of long-term maintenance mode.
00:05:53
◼
►
It was just kind of a strange thought to me.
00:05:55
◼
►
Usually, for a lot of my applications,
00:05:57
◼
►
I'm constantly working on them.
00:05:59
◼
►
I'm constantly improving and updating and kind of thinking,
00:06:01
◼
►
I have this long list of features that would be nice,
00:06:04
◼
►
would be nice, would be nice, would be nice.
00:06:06
◼
►
At some point, you kind of run out of that.
00:06:07
◼
►
this has already happened to me with audiobooks on my other apps, where I have, I don't do
00:06:12
◼
►
major updates to it anymore, because functionality wise, it does pretty much everything I've
00:06:16
◼
►
ever wanted to do. And I, you know, add content to it, and I tweak the UI's and whenever new
00:06:21
◼
►
OS's come out or new devices, I make sure it looks good on those. But the reality is
00:06:25
◼
►
what that the benefit that that's created for me is I can focus on new things, you know,
00:06:29
◼
►
have another project at this point, I'm not quite ready to share it yet. But I have a
00:06:32
◼
►
new project that I'm working on, that'll be a big release, probably my big app for 2013.
00:06:37
◼
►
And it's the interesting part of that,
00:06:42
◼
►
being comfortable with that intentional neglect
00:06:46
◼
►
in a positive way, is just something that I've had to come to grips with
00:06:51
◼
►
by being a one-man shop.
00:06:54
◼
►
That at a certain point, an app gets pretty good, it gets good enough,
00:06:56
◼
►
and continuing working on it beyond a certain point,
00:06:59
◼
►
you start getting a lot of diminishing returns.
00:07:02
◼
►
And that's not to say you want to ignore things, let them decay.
00:07:03
◼
►
But there's a point at which the steady state of a really quality solid app that is has very few bugs that has been just absolutely polished and polished and polished, that you just sort of let that ride and make adjustments to it rather than major changes.
00:07:18
◼
►
I kind of think about this, otherwise you would get into the situation that you saw
00:07:22
◼
►
with something like, say like Microsoft Word.
00:07:25
◼
►
Over time, it just kept growing and growing and growing to a point that it starts doing
00:07:30
◼
►
all these crazy things that aren't really enhancing its core functionality, that aren't
00:07:35
◼
►
making it better at, you know, doing text processing or, you know, writing things.
00:07:42
◼
►
And you end up with these overly featured complicated apps that people have trouble
00:07:47
◼
►
And so on the flip side, what I try and do is make something that is good and useful
00:07:52
◼
►
and gets super polished and focused. And then once you run out of major features that make
00:07:56
◼
►
sense to do, it's like, okay, that's probably what it's going to be, at least for a very
00:08:00
◼
►
long time. And you just live with that and it lets you, you know, free up your time to
00:08:05
◼
►
work on new and interesting projects.
00:08:06
◼
►
All right. And so the next thing I was going to talk about, this is a question that I got
00:08:11
◼
►
from Nathan Reyes on Twitter. And he was just asking me to talk a little bit about burnout.
00:08:17
◼
►
and talking about how I deal with that, or I guess in terms of like, what do you do with
00:08:22
◼
►
that? I mean, it's a common problem. It's a common situation, I think, for just people
00:08:27
◼
►
in general that you kind of get to a point where you're just overwhelmed when you're
00:08:31
◼
►
beat down. And it's very hard to sort of face your next day in some ways. First, the first
00:08:38
◼
►
thing that comes to mind is probably a good disclaimer to have is that this is one of
00:08:43
◼
►
those things where you, the sort of the things that I can say
00:08:47
◼
►
about it will not will absolutely not apply to
00:08:50
◼
►
everyone. Because by its nature, the reasons that we are sort of
00:08:55
◼
►
face burnout of the reasons that we face difficulty in our work
00:08:57
◼
►
are going to be so unique to us. And so this is one of those. If
00:09:01
◼
►
you have to work, you know, 15 hours, 16 hour days, month after
00:09:06
◼
►
month, because that's what you need in order to feed your
00:09:08
◼
►
family, like I, who am I to say that's not a good decision, a
00:09:11
◼
►
good choice. But what I in general, these are kind of the
00:09:14
◼
►
broad lessons that I've learned that I think apply more often,
00:09:18
◼
►
and especially if you can take a step back from your situation
00:09:21
◼
►
can help you kind of decide and navigate where you should head
00:09:24
◼
►
next. So first, this is kind of a an echo of what I said in my
00:09:29
◼
►
ergonomic episode a couple weeks ago, is it's important, I think
00:09:34
◼
►
whenever you're approaching your work, that you consider from you
00:09:38
◼
►
consider from the outset that you have to be able to work in
00:09:42
◼
►
such a way that you can continue working indefinitely. And so in
00:09:47
◼
►
the ergonomics perspective, I was saying, you know, make sure
00:09:49
◼
►
your office physical environment is set up such that, you know,
00:09:52
◼
►
it's not putting any strain on you that over time will end up
00:09:54
◼
►
wearing you down. And on the flip on the sort of the burnout
00:09:58
◼
►
side of that, I think it's from a work schedule from a pressure
00:10:02
◼
►
from a intensity perspective, that same, that same principle
00:10:06
◼
►
applies that if you aren't in a situation that you feel like you could keep doing forever,
00:10:12
◼
►
then there's probably something that you need to do about it. You need to make a change.
00:10:15
◼
►
You need to do something because by that very definition of that situation, you can't continue
00:10:21
◼
►
to do that. At some point, you will hit a point that you are just done. And that's almost
00:10:27
◼
►
certainly going to happen at the least opportune time. And the consequences of that happening
00:10:31
◼
►
are unlikely to be good. So the first thing is if you find yourself in a situation where
00:10:36
◼
►
you just like, you know, I can't, there's no way I could keep doing this. You really
00:10:39
◼
►
need to understand, look, like look introspectively about that you need to understand what's going
00:10:44
◼
►
on, you need to talk to your boss, talk to your clients, just understand how what what
00:10:48
◼
►
is causing that, you know, trying to just as much as you can think about it. This is
00:10:52
◼
►
a great thing to get other people's advice about how where you're spending your time
00:10:57
◼
►
talking to them about your workflow. It's just like, this is something that you almost
00:11:01
◼
►
certainly if you can find peers, whether that's at your workplace, whether that's going to
00:11:05
◼
►
a meetup or conference and talking to other people, someone's probably gone through it.
00:11:09
◼
►
And you can often get a lot of ideas or a sense of really what the root cause of it
00:11:14
◼
►
is from that and be able to sort of respond accordingly. And secondly, the thing that
00:11:20
◼
►
I think about with that is it's understanding that your work schedule is probably has more
00:11:28
◼
►
flexibility in it than you than you think. And by that I mean, I
00:11:32
◼
►
know for myself that I, the times that I need to work crazy
00:11:38
◼
►
hours or be under super pressure, and there's a place
00:11:40
◼
►
for that. And it's probably fair sort of disclaimer to say that
00:11:43
◼
►
you can, you know, usually for you have to understand how long
00:11:47
◼
►
you can go and you want to have a sort of a definite limit for
00:11:50
◼
►
yourself on that for how long you want to go in that mode. You
00:11:53
◼
►
know, it's kind of like, I go into there's periodically I've
00:11:56
◼
►
needed to go into like a superpower mode where I'm working long hours with great intensity.
00:12:00
◼
►
But for me, I can't do that for more than about five days before I'm done. And after
00:12:04
◼
►
five days, I just have to change. And if it's necessary beyond that, then we have a big
00:12:09
◼
►
problem. But generally, you just want to understand for yourself what a sustainable schedule looks
00:12:15
◼
►
like, and then do everything you can to approach that and to get it. And this is one of those
00:12:21
◼
►
things that's like, "Well, that's fine for Dave, I guess." Like in terms of, "Well, that's
00:12:24
◼
►
not my situation. You know, my boss puts a lot of pressure on me. My boss says that I
00:12:29
◼
►
have to do this and this is the best job I can find." And like, okay, that's really
00:12:34
◼
►
unfortunate if that's really true. If you really are finding yourself in a place where
00:12:40
◼
►
the only option you have is to burn yourself out. But really what you need to do is be
00:12:45
◼
►
making conscious steps, I think, at every point to say, "Okay, this is the situation
00:12:52
◼
►
I'm in right now. This is where I find myself. I wish it was different. I wish I wasn't didn't
00:12:57
◼
►
feel so stressed. I didn't feel so burned out. I wish I could, you know, sleeping more,
00:13:01
◼
►
spending more time with my kids, whatever it is. And you have to think, okay, if that's
00:13:06
◼
►
true, if that's really how I feel, if that is important to me, what can I do to change
00:13:11
◼
►
that? Where, what can I do about my schedule, about the clients I take, about the job I
00:13:16
◼
►
I have that will allow me to put my time and energy into the places that I care more about.
00:13:23
◼
►
Because if you really love your work and you really enjoy it, and this is where you want
00:13:26
◼
►
to put your energy, you're probably not going to get burned out doing it. But if you look
00:13:30
◼
►
at yourself and you're saying, "Man, this is rough. I'm getting crushed." You have to
00:13:35
◼
►
change that. And there's no easy answer. There's no shortcut or trick that can make that go
00:13:41
◼
►
away. You can be perhaps more productive with your time to try and squeeze the amount of
00:13:46
◼
►
work that is needed into a smaller amount of time. And that
00:13:50
◼
►
may help. But at the end of the day, whatever the situation is,
00:13:54
◼
►
you have to be able to say, you know what, I'm more important,
00:13:58
◼
►
my health and sanity is more important than the work I'm
00:14:01
◼
►
doing. I'm not going to look back on my deathbed and say,
00:14:04
◼
►
Hey, you know, I wish I really had shipped that project a week
00:14:06
◼
►
earlier, you want to be able to look at yourself in the mirror
00:14:09
◼
►
and say, you know what, I'm taking care of the things that I
00:14:12
◼
►
care about. And that's often really difficult. But being you
00:14:15
◼
►
know, being an adult is often really hard. All right, that's
00:14:19
◼
►
it for today's show. As always, if you have questions, comments
00:14:22
◼
►
or concerns, I'm on Twitter at underscore David Smith. I'm on
00:14:25
◼
►
app net at David Smith. There's a feed for both of both of those
00:14:29
◼
►
networks for the show at dev perspective, which is where just
00:14:32
◼
►
an update every time a new episode comes out if that's your
00:14:34
◼
►
preferred way to get it. And also, I just wanted to mention
00:14:37
◼
►
I'm starting something new on my blog, David dash Smith.org,
00:14:39
◼
►
where I'm starting to post much more regularly.
00:14:42
◼
►
And if you like what I have here,
00:14:43
◼
►
you may also like the articles I'm writing there.
00:14:45
◼
►
So check it out.
00:14:46
◼
►
That's david-smith.org.
00:14:47
◼
►
There'll be a link in the show notes.
00:14:49
◼
►
And that's it.
00:14:50
◼
►
Have a great week.
00:14:50
◼
►
Happy coding.
00:14:51
◼
►
And I'll talk to you later.