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