PodSearch

Under the Radar

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:17 ◼   ► for

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:53 ◼   ► for declare

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:20 ◼   ► past that

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:03 ◼   ► to you

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 ◼   ► bad

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