Under the Radar 39: Lightning Round 1
00:00:00
◼
►
welcome to under the radar the show
00:00:02
◼
►
about independent iOS app development
00:00:03
◼
►
I'm Marco Arment and I'm David Smith
00:00:06
◼
►
under the radar is never longer than 30
00:00:08
◼
►
minutes so let's get started
00:00:09
◼
►
so we decided to ask our audience on
00:00:12
◼
►
Twitter a little bit ago what we should
00:00:13
◼
►
talk about this week because you know in
00:00:15
◼
►
the summertime there's not a whole lot
00:00:16
◼
►
of news that happens in the tech world
00:00:18
◼
►
usually and so we decided this week to
00:00:21
◼
►
do something a little bit different
00:00:21
◼
►
we're gonna have kind of like a
00:00:23
◼
►
lightning round of listener Q&A and
00:00:25
◼
►
basically pick a lot of the tweet
00:00:27
◼
►
responses that we got and try to answer
00:00:30
◼
►
them in you know cuz like a lot of these
00:00:32
◼
►
things are not things that we can talk
00:00:33
◼
►
about it for a whole episode we just
00:00:36
◼
►
won't have enough to say on these issues
00:00:37
◼
►
to fill a half hour but we might have
00:00:39
◼
►
enough to say on them to fill a few
00:00:40
◼
►
minutes so we're basically pick as many
00:00:42
◼
►
you just see how many we can get through
00:00:44
◼
►
and a half hour and and see what happens
00:00:47
◼
►
from that so Davey when I get started
00:00:49
◼
►
sure so the first question that I was
00:00:52
◼
►
gonna answer is I got a question from
00:00:54
◼
►
Jordi Bruin who asked about projects set
00:00:58
◼
►
up when you are first starting new
00:01:00
◼
►
things and as somebody who starts a lot
00:01:02
◼
►
of new things a lot yes um I have a lot
00:01:05
◼
►
of experience at this and I've done a
00:01:07
◼
►
lot of different things I think where
00:01:08
◼
►
I'm gonna take his question with a lot
00:01:10
◼
►
of these I'm where you could be asking a
00:01:13
◼
►
different question then we're actually
00:01:14
◼
►
gonna answer and if that's the case
00:01:15
◼
►
sorry but that's the way this is just
00:01:18
◼
►
necessarily going to work so I'm
00:01:21
◼
►
imagining stuff like when you hit a new
00:01:23
◼
►
project woody how do you actually set up
00:01:24
◼
►
that initial Xcode project before you
00:01:26
◼
►
start coding and I've done a lot of
00:01:28
◼
►
things over the years I've tried all the
00:01:30
◼
►
different templates like when you go
00:01:31
◼
►
into Xcode and it has you know would you
00:01:33
◼
►
like this to be a tab to application
00:01:35
◼
►
would you like it to be a master detail
00:01:38
◼
►
view and there's all kinds of things
00:01:40
◼
►
that you can do you trying to set it up
00:01:42
◼
►
for core data or not or all these other
00:01:44
◼
►
sort of templates into this stuff I've
00:01:47
◼
►
tried all those in the past I've always
00:01:48
◼
►
found that at a certain point it starts
00:01:50
◼
►
to get really messy if I go hit check
00:01:53
◼
►
too many of those boxes and so at this
00:01:55
◼
►
point I would say what I do is I just do
00:01:57
◼
►
the minimalist or impossible
00:01:59
◼
►
so I do a single View application I
00:02:02
◼
►
don't check any of the core data even
00:02:05
◼
►
though I use core data
00:02:05
◼
►
I'll have the you know I'll go in and
00:02:07
◼
►
add all of those things later and I find
00:02:10
◼
►
that works a lot better so sometimes
00:02:12
◼
►
I'll make a throwaway project
00:02:14
◼
►
to see how the template would have set
00:02:16
◼
►
something up so if I'm curious if
00:02:17
◼
►
they've changed their core data stack or
00:02:19
◼
►
the way they recommend it or look at it
00:02:21
◼
►
but I just wanted as empty of a project
00:02:24
◼
►
as can be and I'll go into my app
00:02:26
◼
►
delegate I'll create my instantiate my
00:02:29
◼
►
first my root view controller and I'll
00:02:31
◼
►
present it and I find that doing it that
00:02:33
◼
►
way what I love is I know everything
00:02:36
◼
►
every part of the application from the
00:02:37
◼
►
absolute like from the bottom up is
00:02:39
◼
►
something that I understand and
00:02:41
◼
►
something I know it's working and so
00:02:43
◼
►
that I don't need these weird surprises
00:02:44
◼
►
that I find if I set it up using one of
00:02:46
◼
►
the Xcode templates cool
00:02:49
◼
►
yeah that's pretty I have nothing to add
00:02:50
◼
►
to that because I start a new project
00:02:51
◼
►
like every three years it takes a locked
00:02:53
◼
►
I I always forget what I've done last
00:02:56
◼
►
time and I just kind of wing it and kind
00:02:58
◼
►
of plow through your way sounds a lot
00:03:00
◼
►
better than my way
00:03:01
◼
►
okay yeah all right our next topic comes
00:03:04
◼
►
to us from Shore Johnson and who asks
00:03:07
◼
►
how do you know when an update is
00:03:08
◼
►
finished and can't be polished anymore
00:03:10
◼
►
startling that with myself now so this
00:03:12
◼
►
is you know this happens to every
00:03:14
◼
►
developer I know where like you have an
00:03:17
◼
►
update or even your 1.0 to your app and
00:03:19
◼
►
you could just keep making it better and
00:03:20
◼
►
adding a little thing here or there oh
00:03:22
◼
►
you know I get thrown one more thing I
00:03:23
◼
►
throw one more feature I could make this
00:03:24
◼
►
thing a little bit better I could
00:03:25
◼
►
redesign this one screen or this one
00:03:27
◼
►
element and when do you actually just
00:03:29
◼
►
say all right enough is enough I have to
00:03:30
◼
►
ship it and for me I've got I've you
00:03:34
◼
►
know kind of gone through different
00:03:35
◼
►
parts of this myself in my own
00:03:36
◼
►
experience like I've kind of gone a
00:03:38
◼
►
different into the spectrum here but
00:03:40
◼
►
ultimately I think it's better to err on
00:03:42
◼
►
the side of more frequent updates rather
00:03:45
◼
►
than fewer larger updates you know it
00:03:48
◼
►
you can't we actually talked a little
00:03:50
◼
►
bit about this a while ago about
00:03:51
◼
►
marketing and we're like you can hold
00:03:54
◼
►
back a bunch of features to release all
00:03:56
◼
►
at once in as I can marketing strategy
00:03:59
◼
►
to try to make like one major update
00:04:00
◼
►
that will be newsworthy enough for maybe
00:04:02
◼
►
some blogs to cover
00:04:03
◼
►
but in practice that's not most updates
00:04:06
◼
►
and the value of that itself is also
00:04:08
◼
►
kind of questionable it's it varies as
00:04:10
◼
►
to whether that's even worth doing with
00:04:12
◼
►
it actually works that way or not in
00:04:14
◼
►
general air now on the side of just
00:04:17
◼
►
release things as they get done and that
00:04:20
◼
►
tends to work better for me how about
00:04:22
◼
►
you yeah I would agree that in general
00:04:24
◼
►
the the thing that I've learned most
00:04:27
◼
►
after doing lots of updates is that the
00:04:30
◼
►
things that I think are important or
00:04:32
◼
►
interesting are very often not the
00:04:33
◼
►
things that are important and
00:04:35
◼
►
interesting and so the to my users and
00:04:38
◼
►
so the sooner that I can get it in front
00:04:40
◼
►
of people and get their reactions to it
00:04:42
◼
►
the better that the number of times I
00:04:45
◼
►
like I mean that I know this understand
00:04:47
◼
►
exactly that phase that he's talking
00:04:48
◼
►
about sort of if you're like oh what if
00:04:50
◼
►
I did this what if I did that what if I
00:04:51
◼
►
did this and you can keep doing that
00:04:53
◼
►
forever like there is no and what though
00:04:55
◼
►
you will never reach a point where
00:04:57
◼
►
you're like done this is perfect
00:04:59
◼
►
ship it you have to always be in sort of
00:05:02
◼
►
forcing yourself to cut it off
00:05:04
◼
►
and I think the more disciplines you can
00:05:06
◼
►
be to write off small things get them
00:05:09
◼
►
good and solid ship them and get
00:05:11
◼
►
reactions the better your app will be
00:05:12
◼
►
much more quickly and sometimes you look
00:05:15
◼
►
in it when you avoid probably more
00:05:17
◼
►
important that you avoid the situation
00:05:18
◼
►
where you go down this rabbit hole you
00:05:20
◼
►
build this like crazy new thing that no
00:05:24
◼
►
one uses or isn't important to the app
00:05:25
◼
►
or actually makes the app worse because
00:05:27
◼
►
you're you're doing it in a way that
00:05:29
◼
►
people aren't actually using your
00:05:31
◼
►
application for exactly so the next one
00:05:35
◼
►
I wanted to react to is a question we
00:05:37
◼
►
got from Rob Barney who asked
00:05:40
◼
►
essentially about the way we do UI
00:05:43
◼
►
layouts so do we code them do a dude
00:05:45
◼
►
interface builder or do we use a
00:05:46
◼
►
combination or you know in libraries and
00:05:49
◼
►
auto layout and all those kinds of
00:05:50
◼
►
things and so I I think I have a
00:05:53
◼
►
slightly strange view on this at least
00:05:56
◼
►
compared to a lot of people I've never
00:05:57
◼
►
really met on someone else who does it
00:05:58
◼
►
the way that I do it but this just works
00:06:00
◼
►
for the way my brain is so I do all of
00:06:02
◼
►
my layout in code for the most part I'll
00:06:05
◼
►
do have a few interface builder files
00:06:07
◼
►
usually those are for things like
00:06:08
◼
►
setting screens or kind of one-off views
00:06:11
◼
►
that aren't dynamic or interesting
00:06:13
◼
►
they're just kind of like something like
00:06:14
◼
►
a little part of the app you know a
00:06:16
◼
►
little corner of the application that I
00:06:17
◼
►
don't want to do in code but usually I
00:06:19
◼
►
just write them in code I do all my
00:06:21
◼
►
layout in in code as well I don't use
00:06:25
◼
►
auto layout instead
00:06:27
◼
►
do you know dynamic and interesting
00:06:29
◼
►
layout things but I do it all in like
00:06:31
◼
►
view to layout subviews or equivalent
00:06:35
◼
►
methods and the view controller or the
00:06:36
◼
►
view depending on what it is
00:06:38
◼
►
every time the views frame updates
00:06:41
◼
►
I'll go through and update the frames of
00:06:44
◼
►
all of its sub views appropriately and
00:06:46
◼
►
which is essentially what Auto layout
00:06:47
◼
►
does but I do it in a way that for me I
00:06:49
◼
►
can understand that I can be you know
00:06:51
◼
►
you're right clear declarative you know
00:06:56
◼
►
code that says like I want this to be at
00:06:59
◼
►
this percentage of this thing and I
00:07:01
◼
►
could do that in Auto layout and maybe I
00:07:02
◼
►
would get some benefits but every time
00:07:04
◼
►
I've gone down that road of taking my
00:07:06
◼
►
layout code and it will take my layout
00:07:08
◼
►
and putting it into something else
00:07:09
◼
►
whether that's interface builder whether
00:07:11
◼
►
it's Auto layout
00:07:12
◼
►
whenever there's some kind of magic
00:07:13
◼
►
that's happening somewhere else it in my
00:07:16
◼
►
experience it come to that comes back to
00:07:18
◼
►
bite me eventually that there's gonna be
00:07:20
◼
►
weird edge cases or problems or things
00:07:24
◼
►
that just mean that I would rather just
00:07:26
◼
►
do it in code it's not for everybody you
00:07:28
◼
►
have to kind of be good at can imagining
00:07:32
◼
►
a layout in your brain without it's you
00:07:35
◼
►
know seeing it in front of you so if you
00:07:36
◼
►
can't do that then this approach doesn't
00:07:39
◼
►
work but that's what I do and a random
00:07:41
◼
►
like pro tip for any kind of UI layout
00:07:43
◼
►
things is that every UI view has a layer
00:07:47
◼
►
and every layer can have a border width
00:07:49
◼
►
and so one of the like the biggest tools
00:07:53
◼
►
I ever use for fixing and debugging
00:07:55
◼
►
problems with my layouts is taking
00:07:57
◼
►
whatever UI view I'm working with and I
00:07:59
◼
►
say view dot layer dot bordered with
00:08:02
◼
►
equals one which just adds a little
00:08:03
◼
►
black line around it which makes it
00:08:06
◼
►
incredibly easy to see where things are
00:08:08
◼
►
actually laid out on your screen black
00:08:11
◼
►
that's so boring you should be using FoF
00:08:12
◼
►
the the bright pink ugly color that you
00:08:15
◼
►
that nobody ever uses in reality so you
00:08:16
◼
►
always know that's what you're looking
00:08:18
◼
►
it's true but then I would need two
00:08:19
◼
►
lines of code rather than just one
00:08:20
◼
►
that's true all right yeah I actually
00:08:24
◼
►
have a pretty similar answer to that
00:08:25
◼
►
question where I do occasionally use
00:08:28
◼
►
interface builder for something but it's
00:08:30
◼
►
rare I I prefer to do things in code now
00:08:34
◼
►
I actually do use auto layout more than
00:08:36
◼
►
just like a view layout sub views kind
00:08:38
◼
►
of thing where I I will I will use
00:08:42
◼
►
constraints and constraint and language
00:08:43
◼
►
but I do it through the library that I
00:08:45
◼
►
have open source called compact
00:08:47
◼
►
constraint and it's basically a kind of
00:08:50
◼
►
shortcut CSS looking kind of language
00:08:54
◼
►
constraints manually and I use a
00:08:57
◼
►
combination of that along with the
00:08:59
◼
►
what's called a visual format language
00:09:01
◼
►
the kind of ASCII language of
00:09:02
◼
►
constraints like the ASCII art thing I
00:09:04
◼
►
don't know what it's called yeah I
00:09:06
◼
►
believe it's the I think it's called
00:09:07
◼
►
visual foreign language anyway I use a
00:09:09
◼
►
combination of those two things so
00:09:11
◼
►
basically my layouts end up you know
00:09:14
◼
►
there is a there is a coat there is a
00:09:15
◼
►
function somewhere maybe it is view
00:09:17
◼
►
alejo subviews or awake from neighbor
00:09:19
◼
►
whatever you know me there's a view
00:09:20
◼
►
somewhere in my code there's a section
00:09:23
◼
►
where where for every view I have listed
00:09:25
◼
►
like here's all the constraints for when
00:09:28
◼
►
you create this view and it looks kind
00:09:30
◼
►
of like CSS and it makes it very easy to
00:09:32
◼
►
see what's going on and to change what's
00:09:35
◼
►
going on and one of the reasons I do it
00:09:37
◼
►
this way and one of the things I don't
00:09:38
◼
►
really care for about using interface
00:09:40
◼
►
builder is when you're using an
00:09:41
◼
►
interface builder to do things it's it's
00:09:43
◼
►
often difficult to add a glance see what
00:09:47
◼
►
are all of the what are all the rules
00:09:49
◼
►
and all of the property changes from
00:09:51
◼
►
defaults that I'm applying to this
00:09:53
◼
►
object you know it when interface
00:09:55
◼
►
builder a lot of times things are buried
00:09:56
◼
►
in in checkboxes somewhere or like the
00:09:58
◼
►
little value changes deep down somewhere
00:10:00
◼
►
like you might miss if you're gonna
00:10:02
◼
►
cleansing glancing at the file whereas
00:10:04
◼
►
if you do the layout and and
00:10:05
◼
►
customization of properties all in code
00:10:07
◼
►
you can see it all right there you can
00:10:09
◼
►
see everything you're doing to this view
00:10:11
◼
►
or to this window or whatever the case
00:10:13
◼
►
may be and it makes it a lot easier to
00:10:15
◼
►
find and fix problems and a lot easier
00:10:16
◼
►
to figure out like oh what's going on
00:10:18
◼
►
here like why why is this thing bold or
00:10:20
◼
►
whatever you can see it all in one place
00:10:22
◼
►
and that's something that you can just
00:10:24
◼
►
never get really an interface builder
00:10:25
◼
►
alright my next question comes from
00:10:28
◼
►
William Robinson asking failure putting
00:10:32
◼
►
an app out and nobody caring slash
00:10:34
◼
►
downloading so basically what happens if
00:10:36
◼
►
your app just doesn't go anywhere this
00:10:39
◼
►
is heartbreaking it happens though it
00:10:41
◼
►
happens to everybody you know ultimately
00:10:42
◼
►
what if it starts going somewhere and
00:10:44
◼
►
then stops and then you know eventually
00:10:46
◼
►
sales reach negligible levels this has
00:10:49
◼
►
happened to a number of my apps because
00:10:50
◼
►
again this happens to everybody and you
00:10:53
◼
►
know one of the one of the clearest ones
00:10:55
◼
►
was bug shot where I just kind of shot
00:10:56
◼
►
up you know made made a couple thousand
00:10:58
◼
►
dollars in the first few months and then
00:11:00
◼
►
just kind of went down to nothing and
00:11:01
◼
►
was making like a dollar a day for
00:11:02
◼
►
awhile at best and you know that's when
00:11:07
◼
►
that happens you
00:11:08
◼
►
you kind of have to face reality and
00:11:09
◼
►
it's it's a little hard to judge like
00:11:12
◼
►
okay well if I put a lot more effort
00:11:14
◼
►
into like a 2.0 maybe I can like save
00:11:17
◼
►
this or rescue this usually that's not
00:11:20
◼
►
the right move usually you can't save a
00:11:22
◼
►
rescue it usually the market is telling
00:11:23
◼
►
you something the market is telling you
00:11:25
◼
►
either you know either we don't need
00:11:27
◼
►
this or we are satisfied by other neat
00:11:31
◼
►
by other solutions to this problem
00:11:32
◼
►
enough that yours isn't necessary and
00:11:35
◼
►
you know you could change things about
00:11:37
◼
►
it like you know you could change the
00:11:39
◼
►
price maybe you could you know again you
00:11:41
◼
►
could release a 2.0 but usually if
00:11:43
◼
►
something has failed in the marketplace
00:11:45
◼
►
enough that you need to face this
00:11:47
◼
►
reality chances are any of those changes
00:11:49
◼
►
you would make to it would not be enough
00:11:51
◼
►
to turn what is clearly a failure into a
00:11:55
◼
►
success you might eat a little bit more
00:11:57
◼
►
time out of it a little bit more money
00:11:58
◼
►
out of it maybe but probably not
00:12:01
◼
►
chances are you know recognize your
00:12:03
◼
►
recognized failures early enough and
00:12:05
◼
►
then just move on if you can that's
00:12:08
◼
►
usually a better use of the time than
00:12:10
◼
►
then like you know shoving more time and
00:12:12
◼
►
effort into an app that has already
00:12:14
◼
►
failed in the market yes and I have
00:12:18
◼
►
failed a lot like the experience he's
00:12:21
◼
►
describing and some that I've
00:12:22
◼
►
experienced many times I've watched a
00:12:24
◼
►
lot of apps and I've had many of them
00:12:27
◼
►
that go out and either have the thing
00:12:29
◼
►
you describe with bug shot where it's
00:12:30
◼
►
like he goes up and then just like falls
00:12:32
◼
►
flat or even I have just had it never go
00:12:34
◼
►
anywhere like you just never know and
00:12:37
◼
►
the biggest thing I suppose is to
00:12:40
◼
►
understand that it is not like the
00:12:45
◼
►
ultimate the Beth of ultimate product
00:12:47
◼
►
that I am building throughout my career
00:12:49
◼
►
is myself like what I want is to at the
00:12:55
◼
►
end of the sort of have each project of
00:12:57
◼
►
everything of each thing that I build
00:12:58
◼
►
make me a better developer make me more
00:13:01
◼
►
able to make better and more awesome you
00:13:05
◼
►
know products and send things down the
00:13:07
◼
►
road because tastes will change
00:13:09
◼
►
platforms will change like all of those
00:13:11
◼
►
things are always going to be very you
00:13:14
◼
►
know evolve over time and no one product
00:13:16
◼
►
is going to last forever you know my
00:13:18
◼
►
business and based on products in the
00:13:21
◼
►
dude kind of terrible but that was fine
00:13:23
◼
►
they had their moment and sometimes you
00:13:26
◼
►
know you never are gonna know exactly
00:13:27
◼
►
what's gonna happen and so when I
00:13:28
◼
►
whenever you have failures I think the
00:13:30
◼
►
most constructive way to look at it is
00:13:31
◼
►
to say what can I learn from this how
00:13:35
◼
►
can that you know how can this
00:13:36
◼
►
experience have make make me a better
00:13:37
◼
►
developer and then take that experience
00:13:39
◼
►
and just pour it into your next thing
00:13:42
◼
►
because as long as you are getting
00:13:45
◼
►
better each time then you're being
00:13:47
◼
►
successful like you are meeting the core
00:13:50
◼
►
goal and while that's nice when it's you
00:13:52
◼
►
know you hit on a product that is
00:13:53
◼
►
successful and really just takes off and
00:13:55
◼
►
like that's awesome you know I'm just
00:13:57
◼
►
really not diminishing that but making
00:14:00
◼
►
sure that you always keep it perspective
00:14:01
◼
►
that like the individual product is not
00:14:04
◼
►
you know you trying to have some
00:14:05
◼
►
distance from what you create is really
00:14:08
◼
►
helpful and keeping the focus on what
00:14:10
◼
►
can I learn and now let's go work on the
00:14:12
◼
►
next thing I not get too stuck on it all
00:14:14
◼
►
right we are sponsored this week by
00:14:16
◼
►
Braintree learn more at Braintree
00:14:19
◼
►
payments comm slash radar why make
00:14:22
◼
►
payment integration more difficult than
00:14:23
◼
►
it has to be brain trees powerful
00:14:25
◼
►
full-stack payment platform allows you
00:14:28
◼
►
to accept nearly any type of payment
00:14:29
◼
►
from any device with just one
00:14:31
◼
►
integration its flexibility your systems
00:14:34
◼
►
needs and supports most programming
00:14:35
◼
►
languages so whether you're using java
00:14:37
◼
►
god I hope not you have my sympathy Java
00:14:39
◼
►
Ruby or Python you always have a range
00:14:42
◼
►
of server-side and client-side SDKs
00:14:44
◼
►
available the Braintree code supports
00:14:46
◼
►
Android iOS and JavaScript clients and
00:14:49
◼
►
it tastes just ten lines of code to
00:14:51
◼
►
implement Braintree makes payments and
00:14:53
◼
►
your job a whole lot easier
00:14:54
◼
►
learn more at Braintree payments comm
00:14:56
◼
►
slash radar thanks a lot to Braintree
00:14:58
◼
►
for sponsoring our show okay so the next
00:15:02
◼
►
question I wanted to address is from hip
00:15:04
◼
►
tommcatt and he's asking about
00:15:07
◼
►
architectural patterns like mvvm MVC
00:15:10
◼
►
coordinators I have had a few quiet
00:15:12
◼
►
questions about this like the all of
00:15:15
◼
►
these things do kind of I don't I don't
00:15:17
◼
►
go and maybe my answer will probably
00:15:19
◼
►
point out that I don't go down the road
00:15:21
◼
►
of paying too much attention to a lot of
00:15:24
◼
►
these things that there's a lot of
00:15:24
◼
►
things that I keep hearing about where
00:15:26
◼
►
people are talking about like new
00:15:27
◼
►
patterns or sometimes there are new
00:15:29
◼
►
structures or approaches to apps or
00:15:32
◼
►
Mike and I see that and I look at it and
00:15:35
◼
►
I the thing that I always worry about
00:15:36
◼
►
whenever I see people who get really
00:15:38
◼
►
wrapped around patterns and this goes
00:15:42
◼
►
back to like back in my old Java days
00:15:44
◼
►
where the like design patterns thing was
00:15:48
◼
►
a big like there was like a big fat or
00:15:49
◼
►
is that was the whole thing everything
00:15:50
◼
►
had to be a factory or an observer god
00:15:52
◼
►
and the important thing I always try and
00:15:56
◼
►
keep keep in mind again and like when I
00:15:58
◼
►
get gonna people ask me this kind of
00:16:00
◼
►
question is making sure that you're
00:16:02
◼
►
writing code that a you can understand
00:16:05
◼
►
and and know that you understand like at
00:16:07
◼
►
a vague level how it works but you can
00:16:09
◼
►
under you understand why it's structured
00:16:11
◼
►
the way it is like the worst
00:16:13
◼
►
implementations of everyone ever was
00:16:15
◼
►
back when I used to do consulting where
00:16:16
◼
►
I'd come in to a project and have to try
00:16:20
◼
►
and work out how they're doing something
00:16:21
◼
►
and you kind of clearly get the sense
00:16:23
◼
►
that they're using a design pattern
00:16:25
◼
►
because they feel like they should but
00:16:28
◼
►
they don't really understand what that
00:16:30
◼
►
design patterns intent or purpose was
00:16:33
◼
►
and so it's just a mess so if you're
00:16:36
◼
►
ever going to use a pattern you have it
00:16:37
◼
►
should be this thing that it's like well
00:16:39
◼
►
you know this is the best way to do it
00:16:41
◼
►
I completely understand the trade-offs
00:16:43
◼
►
on both sides of this and for me and the
00:16:45
◼
►
way that I think about this problem this
00:16:47
◼
►
will work really well and if one of
00:16:49
◼
►
these approaches works great having view
00:16:52
◼
►
models or coordinators or whatever it is
00:16:54
◼
►
like that's that fits with the way your
00:16:56
◼
►
brain works then awesome that's great
00:16:58
◼
►
but definitely never feel like you have
00:17:00
◼
►
to go down the road of adopting some
00:17:03
◼
►
pattern because it's sort of hip and
00:17:04
◼
►
trendy because the nature of hip and
00:17:07
◼
►
trendy is that it will change and it
00:17:09
◼
►
isn't necessarily changing because we've
00:17:11
◼
►
somehow like had this breakthrough
00:17:13
◼
►
discovery and now it's like turned the
00:17:15
◼
►
world of software development over time
00:17:17
◼
►
like there's an element of it that it's
00:17:18
◼
►
just trendy and so find what works for
00:17:21
◼
►
you and make sure that you can
00:17:22
◼
►
understand your code and it's
00:17:24
◼
►
understandable you're gonna have far
00:17:25
◼
►
fewer bugs then the thing where it's
00:17:28
◼
►
like oh well theoretically if I use this
00:17:30
◼
►
thing and I completely abstract all of
00:17:32
◼
►
my logic away down the road it'll make
00:17:34
◼
►
it easier and I'll have great
00:17:35
◼
►
encapsulation and my bugs will go down
00:17:37
◼
►
because I can you know test all my
00:17:38
◼
►
interfaces and that's great that's
00:17:41
◼
►
probably true at a certain point but the
00:17:43
◼
►
actual like developer sitting at the
00:17:45
◼
►
keyboard has to
00:17:45
◼
►
understand what's going on and if you
00:17:47
◼
►
can do that then great like for me most
00:17:50
◼
►
of my architectural patterns in my apps
00:17:51
◼
►
ie are structured around like single
00:17:54
◼
►
thins and managers I guess I call them
00:17:56
◼
►
you guys the way most of my apps are
00:17:58
◼
►
caps all my app logic is kind of broken
00:18:00
◼
►
up into you know have a whole bunch of
00:18:02
◼
►
Singleton's that handle a bunch of Jeff
00:18:04
◼
►
like have a particular domain so I have
00:18:07
◼
►
a single thing that handles all my stuff
00:18:08
◼
►
with health and dealing with health kit
00:18:10
◼
►
or dealing with core data or doing
00:18:12
◼
►
networking and for me that works like I
00:18:16
◼
►
can I know where all like all the
00:18:18
◼
►
problems with that like there's
00:18:19
◼
►
certainly issues the singletons and
00:18:20
◼
►
coupling and like I understand those
00:18:22
◼
►
downsides but for me it works great and
00:18:25
◼
►
I understand it and I know how not to do
00:18:26
◼
►
it wrong and that's what I do and I try
00:18:30
◼
►
not to be too distracted whenever
00:18:31
◼
►
there's like some hip new thing that's
00:18:32
◼
►
come out and you know it's like you have
00:18:35
◼
►
the problem of you see a talk say at a
00:18:36
◼
►
conference or something or blog post and
00:18:38
◼
►
someone's like hey we did this thing and
00:18:40
◼
►
it worked great for us and you
00:18:42
◼
►
immediately can try and extend that to
00:18:45
◼
►
say like hey they did this cool thing
00:18:47
◼
►
and it'll work right for me when if you
00:18:50
◼
►
really you have to have a much more deep
00:18:52
◼
►
understanding of what that thing is and
00:18:53
◼
►
what its benefits are but before you can
00:18:55
◼
►
ever make that kind of a judgment yeah I
00:18:57
◼
►
I pretty much agree with everything you
00:18:59
◼
►
say I also developed with a lot of
00:19:01
◼
►
Singleton's and things I also don't use
00:19:04
◼
►
a lot of design patterns or lead the
00:19:07
◼
►
Gang of Four book and and so maybe I'm
00:19:09
◼
►
using them without even realizing I'm
00:19:11
◼
►
using them but I never really got into
00:19:13
◼
►
that side of software architecture of
00:19:17
◼
►
like really obsessing over that kind of
00:19:19
◼
►
thing because in in the scale that I'm
00:19:22
◼
►
typically working at with you know a
00:19:23
◼
►
one-person team that kind of stuff tends
00:19:25
◼
►
not to matter as much as it would maybe
00:19:28
◼
►
on a larger team and I'm working on
00:19:30
◼
►
pretty simple things and also like you
00:19:32
◼
►
know I just tend to follow the
00:19:33
◼
►
conventions of the system I'm in so like
00:19:35
◼
►
I'm very familiar with the way Apple
00:19:37
◼
►
does things with the cocoa API is and
00:19:39
◼
►
the way they're structure and kind of
00:19:40
◼
►
the the patterns that they encourage and
00:19:42
◼
►
that they use themselves and I try to
00:19:44
◼
►
structure the rest of my app that way to
00:19:45
◼
►
kind of mesh well and and kind of mimic
00:19:48
◼
►
the structure of the cocoa api's beyond
00:19:51
◼
►
that I don't really do any kind of other
00:19:53
◼
►
fancy structure all right
00:19:55
◼
►
next I wanted to bring up a question
00:19:57
◼
►
from Luke Allen whose ass
00:19:59
◼
►
about the viability and landscape for
00:20:01
◼
►
new indie developers to break into the
00:20:03
◼
►
iOS and Mac marketplace in 2016 now this
00:20:06
◼
►
is obviously a big and kind of broad and
00:20:09
◼
►
kind of squishy feelings question so
00:20:11
◼
►
it's a little hard to answer like you
00:20:12
◼
►
know can do Indies break-in now to me I
00:20:15
◼
►
think all you have to do to answer this
00:20:18
◼
►
question is to take a look at your phone
00:20:20
◼
►
homescreen and what apps are on it today
00:20:22
◼
►
and then think back or if you if you
00:20:25
◼
►
have old screenshots even better look
00:20:27
◼
►
back at what your home's what your home
00:20:28
◼
►
screen look like three years ago and how
00:20:31
◼
►
many of the apps that you that you're
00:20:32
◼
►
using today were out three years ago I
00:20:34
◼
►
bet it's not that many you know that is
00:20:37
◼
►
even ruling out like apples built in
00:20:39
◼
►
apps or anything which even they have
00:20:40
◼
►
changed quite a bit
00:20:41
◼
►
but the fact is that yes this is a a
00:20:45
◼
►
large and saturated and old market
00:20:47
◼
►
however there's always churn in every
00:20:50
◼
►
software market there's always room for
00:20:52
◼
►
something new and it isn't always easy
00:20:55
◼
►
to break in but there's always a spot
00:20:57
◼
►
somewhere in the market like you know
00:20:59
◼
►
simple things like that you think would
00:21:01
◼
►
be very very crowded like notes and
00:21:04
◼
►
weather apps like you know we bring up
00:21:05
◼
►
these examples a lot I mean there's
00:21:07
◼
►
always a market for a new notes or
00:21:09
◼
►
weather app if you can do something a
00:21:11
◼
►
little bit differently some people will
00:21:13
◼
►
like yours some people won't and that's
00:21:15
◼
►
okay there's a room it's a very very big
00:21:17
◼
►
market lots of people use it not
00:21:19
◼
►
everybody wants the same things out of
00:21:21
◼
►
every app and a lot of times people just
00:21:23
◼
►
kind of get tired of what they've what
00:21:24
◼
►
they're using and just want to look at
00:21:25
◼
►
something new so there's always room it
00:21:27
◼
►
is oh it is getting harder to find that
00:21:30
◼
►
room and there's more people vying for
00:21:31
◼
►
it however there is always room for new
00:21:34
◼
►
things to break into the market yes and
00:21:36
◼
►
I think the key thing when you're if I
00:21:39
◼
►
was if I was a new Indies trying to like
00:21:42
◼
►
source if I decided one day that that
00:21:44
◼
►
was what I wanted to do I want to be an
00:21:46
◼
►
independent software developer I would
00:21:48
◼
►
be very careful about aid like my mood
00:21:53
◼
►
check my motivations make sure I'm doing
00:21:54
◼
►
it for the right reasons and like
00:21:56
◼
►
understand how terrible of a job it is
00:21:58
◼
►
and not just sort of get which I can say
00:22:02
◼
►
a bit jokingly but quite honestly as
00:22:04
◼
►
well like it is not the it is it is not
00:22:08
◼
►
like a glamorous lifestyle being an
00:22:10
◼
►
indie software developer that there's
00:22:12
◼
►
only some upsides Oh
00:22:13
◼
►
being your own boss and being able to
00:22:15
◼
►
work on things that you think are cool
00:22:16
◼
►
but there's a lot of really not-so-great
00:22:19
◼
►
things some things that you give up from
00:22:20
◼
►
working for in a corporate job or in a
00:22:22
◼
►
consulting job so you know you there's a
00:22:25
◼
►
definite some trade-offs make sure
00:22:26
◼
►
you're doing for the right reason and
00:22:27
◼
►
then making sure that you're have you
00:22:30
◼
►
having realistic expectations about what
00:22:32
◼
►
you are hoping to accomplish you know is
00:22:36
◼
►
it that your goal is to in you know just
00:22:39
◼
►
have a side income from your Biff from
00:22:41
◼
►
your indie work it's gonna be your
00:22:44
◼
►
entire income and understand that those
00:22:47
◼
►
different levels are going to require
00:22:48
◼
►
different amounts differing amounts of
00:22:50
◼
►
time and luck and effort and be careful
00:22:55
◼
►
about what you're going after
00:22:57
◼
►
you know like sort of like you said like
00:22:58
◼
►
some apps there's a natural trendiness
00:23:01
◼
►
to them and so it makes sense to get
00:23:05
◼
►
into something and you know be some of
00:23:07
◼
►
that's similar anywhere there's a lot is
00:23:08
◼
►
a lot of churn like a weather app is
00:23:10
◼
►
something sort of comes to mind there's
00:23:11
◼
►
something where there's there's this
00:23:13
◼
►
natural like I don't know everyone just
00:23:15
◼
►
thinks of something differently and so
00:23:17
◼
►
you can have a unique take on something
00:23:19
◼
►
and that has has an opportunity to be
00:23:21
◼
►
successful and it also say be really
00:23:24
◼
►
careful about taking on projects that
00:23:27
◼
►
are very complicated to start with like
00:23:32
◼
►
you either need to be have some if you
00:23:34
◼
►
have some like really deep and
00:23:36
◼
►
interesting new approach to something
00:23:38
◼
►
like I think of someone like Chris Lucio
00:23:40
◼
►
with all of his audio processing stuff
00:23:43
◼
►
that he does like he he has made a
00:23:46
◼
►
business of making software because of a
00:23:51
◼
►
really specific skill set that he has
00:23:53
◼
►
that he really is good at audio
00:23:55
◼
►
processing and so he can make a business
00:23:56
◼
►
because not a lot of people can do that
00:23:58
◼
►
and so if you have a skill like that
00:23:59
◼
►
like run with that if you have some
00:24:01
◼
►
background knowledge or some domain
00:24:02
◼
►
expertise like go for that and and
00:24:05
◼
►
pursue it and but if you don't don't get
00:24:08
◼
►
sucked into the trap of trying to like
00:24:09
◼
►
build this grand big very like it's just
00:24:12
◼
►
like this existing thing but like way
00:24:14
◼
►
bigger and more complicated yeah that
00:24:16
◼
►
never breaks that's gonna really come
00:24:18
◼
►
back to bite you especially if it's just
00:24:19
◼
►
involved like oh it's gonna be a to
00:24:20
◼
►
sinking and it's gonna have all these
00:24:21
◼
►
other stuff and like that would be
00:24:23
◼
►
something I'd stay away from and
00:24:24
◼
►
especially to start with like
00:24:26
◼
►
start simple start with something you
00:24:27
◼
►
enter you enjoy something that if you
00:24:29
◼
►
made the app and no one downloaded it
00:24:31
◼
►
but you had it and could use it every
00:24:32
◼
►
day that you would be happy and that's
00:24:34
◼
►
probably a good place to start all right
00:24:37
◼
►
the next question I wanted to address is
00:24:39
◼
►
from Phil Koury who's asking about unit
00:24:42
◼
►
testing for the one-man shop is it
00:24:44
◼
►
worthwhile and if so where to start so
00:24:47
◼
►
unit testing is a midcity epidemic topic
00:24:53
◼
►
for me as it is something that I've
00:24:54
◼
►
never done so I can speak to it only in
00:24:58
◼
►
the theoretical rather than in the
00:25:00
◼
►
practical experience type unit testing
00:25:05
◼
►
is something that I have used it in the
00:25:06
◼
►
past like on different projects but not
00:25:09
◼
►
no never mind II work and I would say
00:25:13
◼
►
unit testing in my experience is useful
00:25:16
◼
►
for one of two reasons
00:25:18
◼
►
it's either useful because the cost of
00:25:23
◼
►
messing something up is very high so if
00:25:27
◼
►
you know if you're someone who's writing
00:25:29
◼
►
software that you know is used to
00:25:33
◼
►
control a plane it's flying through the
00:25:35
◼
►
air you need some unit testing like you
00:25:37
◼
►
need some serious you know quality
00:25:39
◼
►
assurance kind of process because if you
00:25:41
◼
►
mess up that really like like genuinely
00:25:45
◼
►
bad things can happen not just like bad
00:25:46
◼
►
things like my server went down for a
00:25:48
◼
►
few hours like you know life and death
00:25:50
◼
►
kind of situation so if you're if you're
00:25:52
◼
►
in a situation where the cost of having
00:25:54
◼
►
him having a bug having a mistake is
00:25:56
◼
►
truly you know significant absolutely
00:26:00
◼
►
and the other situation where in my
00:26:02
◼
►
experience unit testing is helpful is I
00:26:04
◼
►
know like there are some some developers
00:26:06
◼
►
I've worked with over the years for whom
00:26:08
◼
►
like developer unit testing is the way
00:26:10
◼
►
they think of development that they
00:26:12
◼
►
create you know sort of like the
00:26:13
◼
►
test-driven development approach or
00:26:15
◼
►
saying like here's this problem I'm
00:26:16
◼
►
going to code a test that will you know
00:26:21
◼
►
be global pass once I've solved that
00:26:23
◼
►
problem and then they go and solve the
00:26:25
◼
►
problem and it's just a like a construct
00:26:28
◼
►
that is helpful for the development
00:26:29
◼
►
process and if that's helpful for you
00:26:32
◼
►
then like you're probably you know if
00:26:34
◼
►
you're that kind of person like I'm not
00:26:35
◼
►
that person I like
00:26:37
◼
►
maintaining unit tests is one of the
00:26:39
◼
►
things that it like destroys my soul
00:26:41
◼
►
more than anything else in it because I
00:26:44
◼
►
feel like I'm building the app twice and
00:26:46
◼
►
I hate that feeling I what I value most
00:26:50
◼
►
in my development is being fast and
00:26:52
◼
►
efficient and um not doing a lot of
00:26:56
◼
►
ceremony around the development like I
00:26:58
◼
►
just want to get into Xcode I want to
00:26:59
◼
►
you know write the codes and ship them
00:27:01
◼
►
and unit testing because like I'm
00:27:03
◼
►
building two apps and one of them no one
00:27:05
◼
►
will ever see so that's my approach to
00:27:07
◼
►
unit testing yeah I'm pretty much the
00:27:09
◼
►
same I think if I had to write unit
00:27:11
◼
►
tests for everything I did I would stop
00:27:14
◼
►
programming all right one very last
00:27:17
◼
►
thing very quick thing here from Pete
00:27:19
◼
►
who asked things you now know that you
00:27:22
◼
►
wish you could have told your younger
00:27:23
◼
►
develop ourselves when just starting out
00:27:25
◼
►
so we only have time for maybe one each
00:27:27
◼
►
so my one is going to be that your
00:27:30
◼
►
actions in your app that you do to your
00:27:32
◼
►
customers are way more important in a
00:27:34
◼
►
competitive landscape than what your
00:27:36
◼
►
competitors are doing it's like if you
00:27:38
◼
►
if your app already has people using it
00:27:41
◼
►
it is yours you it like they are yours
00:27:44
◼
►
to lose people don't usually flee to
00:27:47
◼
►
other apps because of some competitors
00:27:50
◼
►
feature that attracted them over there
00:27:51
◼
►
they flee to other apps because your app
00:27:54
◼
►
is sucking in some way you're neglecting
00:27:55
◼
►
something you're not addressing
00:27:56
◼
►
something you're not facing something
00:27:57
◼
►
you're being too slow to to adapt
00:27:59
◼
►
something new whatever the case may be
00:28:01
◼
►
your customers usually yours to lose and
00:28:04
◼
►
so what you do is way more important
00:28:06
◼
►
than what your competitors do absolutely
00:28:08
◼
►
I think my best advice that I would give
00:28:12
◼
►
my younger self is that nobody has it
00:28:15
◼
►
all together and this is most I guess to
00:28:19
◼
►
address this sort of like the imposter
00:28:20
◼
►
syndrome kind of a problem that early on
00:28:23
◼
►
in my career I struggled with a lot and
00:28:25
◼
►
I still do in some ways but it's this
00:28:28
◼
►
it's so easy to look at someone else's
00:28:30
◼
►
output and judged just like judge the
00:28:33
◼
►
output not the process that it took for
00:28:35
◼
►
them to get there because it's easy to
00:28:37
◼
►
look at the output and say wow look at
00:28:39
◼
►
all like this is perfect it's like you
00:28:41
◼
►
know as though it was somehow like born
00:28:42
◼
►
like it was birthed magically into the
00:28:44
◼
►
world it's just this perfect process
00:28:46
◼
►
that was effortless and without problem
00:28:48
◼
►
it's like when the reality
00:28:50
◼
►
we all make mistakes we all have like
00:28:53
◼
►
the development process is often messy
00:28:55
◼
►
and uncomfortable and we have lots of
00:28:56
◼
►
failures some of those are public some
00:28:58
◼
►
of those are private but everyone nobody
00:29:01
◼
►
has it all together we're all just kind
00:29:03
◼
►
of like fumbling our way through and the
00:29:06
◼
►
the more I was able to wrap my head
00:29:09
◼
►
around that and be comfortable with that
00:29:11
◼
►
reality I did more honestly that I was
00:29:14
◼
►
just able to make better software
00:29:15
◼
►
because I was less worried about
00:29:17
◼
►
comparing myself to this impossible
00:29:19
◼
►
standard that I imagined other people
00:29:23
◼
►
were living up to and just did my best
00:29:25
◼
►
and that we worked there worked out a
00:29:28
◼
►
lot better well said all right thank you
00:29:31
◼
►
very much for listening everybody not
00:29:32
◼
►
eight topics in 30 minutes not bad at
00:29:35
◼
►
all that's pretty good yeah all right
00:29:36
◼
►
and we will talk to you next week