Under the Radar

Under the Radar 108: Punch-List Mode


00:00:00   welcome to under the radar show but

00:00:02   independent iOS app development I'm

00:00:04   Marco Arment and I'm David Smith under

00:00:06   the radar is never longer than 30

00:00:08   minutes so let's get started so today I

00:00:11   want to be a fun topic for us to talk

00:00:15   about finishing up a project or like

00:00:18   doing that last 1% that definitely

00:00:21   doesn't take 1% of the time you spend in

00:00:24   a project like the VB energy and the

00:00:27   effort and the willpower it takes to

00:00:29   just get over that last little bit is

00:00:31   definitely you know massively

00:00:33   disproportionate for launching a

00:00:35   software product and you get better at

00:00:38   it the more you do it which i think is

00:00:39   something hopefully that I can say that

00:00:41   is if I found my own experience and is

00:00:43   hopefully encouraging if this is if

00:00:45   you're coming to development you know

00:00:48   Furley you're fairly new to this that

00:00:50   it's totally normal for that fit that

00:00:52   last a little bit of a project where

00:00:54   it's like it's almost done but isn't

00:00:56   quite done isn't quite released to feel

00:00:59   like it takes forever and and part of it

00:01:01   I think in the weird way is it's like

00:01:02   the term software release is very aptly

00:01:06   named because software isn't so much

00:01:08   finished as it is like slowly tugged out

00:01:11   of our hand and eventually we just

00:01:12   release our grip and it flies out into

00:01:14   the world like it is never this thing

00:01:17   where at least I've never had the

00:01:18   experience where I feel like I have

00:01:20   created this perfectly formed this

00:01:24   perfectly formed thing that I am NOT

00:01:25   presenting out into the world it's like

00:01:27   at some point you just have to say this

00:01:29   is good enough I'm gonna put this out

00:01:31   and I will fix all the bugs or are the

00:01:34   issues of the problems later and I think

00:01:36   we've talked many times in episodes

00:01:38   previous about the importance of getting

00:01:39   something out into the world because you

00:01:42   can get feedback you can validate your

00:01:43   the idea make sure that you're actually

00:01:45   building something people want or not

00:01:47   missing like whole aspects of the sort

00:01:51   of the problem domain that you're trying

00:01:52   to solve that you're just unaware of

00:01:54   because you're stuck in your own little

00:01:55   world but I do but more importantly I

00:01:58   think whatever Suvi interesting to focus

00:01:59   on for today is some of the little

00:02:01   aspects of doing that of the thing that

00:02:03   you have to do in that last that last 1%

00:02:06   and the first thing that I think is

00:02:08   worth talking about is deadlines this is

00:02:12   especially complicated

00:02:13   being if you're doing this project by

00:02:16   yourself or we just know one or two

00:02:17   other people and this isn't something

00:02:20   where you have an externally imposed

00:02:21   deadline it's not that you're doing

00:02:24   consulting for a client and the client

00:02:26   has said you know by the state you need

00:02:28   to have done this or you know you won't

00:02:31   get paid or you'll have there'll be some

00:02:32   kind of penalty like there's if there's

00:02:34   an external deadline you that sort of

00:02:36   takes care of itself but if you don't

00:02:38   have one of those and I'm but I found

00:02:41   for myself is that if I don't have some

00:02:45   kind of deadline in mind and maybe it's

00:02:47   slightly squishy but it shouldn't be so

00:02:49   squishy that it's not a deadline like it

00:02:51   still should have some some weight

00:02:52   behind it I find it very hard to really

00:02:56   get there because there is something I

00:02:58   think it's Parkinson's law it's one of

00:03:01   those like management laws where it's

00:03:03   like work will expand to fill the time

00:03:05   allotted to it basically so if you give

00:03:08   yourself another month you will find a

00:03:11   month's worth of work to fill that with

00:03:12   and if you give yourself another two

00:03:13   months you will it'll fill indefinitely

00:03:15   if you don't have a deadline like you

00:03:16   would just keep filling with work

00:03:17   forever it's this never-ending like

00:03:20   inflating balloon and so you have to at

00:03:23   some point put a line on it and say you

00:03:24   know I'm gonna get it done by here

00:03:27   something that I found really helpful

00:03:29   with this is to start to try and talk to

00:03:34   other outside people about your launch

00:03:37   so whether this be someone in the press

00:03:39   with friends whoever it is and like

00:03:40   start talking around a date like I have

00:03:44   December 12th as the date that I'm gonna

00:03:46   launch workouts plus plus 2.0 like

00:03:48   that's something that I've started to

00:03:50   you know sort of socialize and talk to

00:03:51   talk about to different people and now

00:03:54   that that's a thing in the world like it

00:03:57   changes it from this vague amorphous

00:03:58   thing to something that I have this like

00:04:00   personal ownership of making happen and

00:04:03   if I didn't have that I feel like I

00:04:05   would just keep working on this app

00:04:06   forever which is not good for anybody

00:04:08   it's far better to draw a line you know

00:04:11   to cut what I need to cut narrow it down

00:04:13   so that I can get it to get it out there

00:04:15   and then start you know iterating on the

00:04:18   version that's out in the world rather

00:04:19   just getting stuck with it without a

00:04:21   deadline without it without any sense of

00:04:23   you know end in mind

00:04:25   yeah I mean I have found that most of my

00:04:28   releases have basically been I have

00:04:31   basically been working you know all

00:04:34   month or a year or six months or

00:04:37   whatever working for a very long span on

00:04:39   a kind of unending list of features that

00:04:44   that like everything is like oh I it

00:04:47   would be nice if I had time I can do

00:04:49   this and very few the features are

00:04:51   actually required and so the amount of

00:04:54   time that I'm working on these releases

00:04:56   is pretty open-ended and without any

00:04:59   kind of external deadline imposing on me

00:05:02   like the release of a new version of iOS

00:05:03   or a new Apple hardware or something

00:05:05   like that they would just go on forever

00:05:07   and usually when I do finally release

00:05:10   something it is planned almost no time

00:05:13   in advance and it's one day I just kind

00:05:16   of I'm like you know what I'm just I'm

00:05:17   done I just want this to be out there

00:05:19   I'm I'm tired of it not being released

00:05:22   so I'm just going to recently tomorrow

00:05:24   or something like that like you know

00:05:26   just a kind of arbitrary decision of

00:05:28   okay I just need to get this out there

00:05:30   you know enough is enough

00:05:31   but but a lot of times that you know it

00:05:33   takes me a long time to get to do you

00:05:36   think that kind of slightly

00:05:38   arbitrariness to it works in your favor

00:05:41   or is it like a problematic like it

00:05:44   seems like it could go both ways that in

00:05:46   some in some ways it's helpful because

00:05:48   you're not creating this sort of any

00:05:50   internal stress that about something

00:05:53   you're just kind of working working and

00:05:54   at some point you're just like you know

00:05:55   this is good and just ship it like is

00:05:57   that do you find that to be helpful or

00:06:00   is that problematic it's one of the many

00:06:03   ways that I think and work that are

00:06:07   probably not ideal but that also I

00:06:10   probably will never change about myself

00:06:12   so I just have to basically you know

00:06:14   take the good in the bad that comes with

00:06:16   it I think that there's a lot of things

00:06:18   that are bad about this this kind of

00:06:20   capricious or rash decision making

00:06:23   sometimes it's not a good time to

00:06:25   release that thing it turns out which I

00:06:26   find out later or sometimes you know it

00:06:29   would have benefited from a stronger and

00:06:32   more considered marketing push maybe but

00:06:35   the reality is that I also then

00:06:38   I'm rarely in the position where I have

00:06:41   to wait forever I'm rarely in the

00:06:43   position of designing myself into such a

00:06:46   corner or having such a huge list of

00:06:48   what needs to be done by before the

00:06:50   release that it never comes out like no

00:06:53   one's ever waiting years for an overcast

00:06:55   update though the way I work

00:06:57   ensures that something will get released

00:07:00   on a fairly regular interval and I will

00:07:03   never know until it's actually released

00:07:05   what features you know will end up

00:07:07   making it before that before that

00:07:09   deadline comes or not the be

00:07:10   self-imposed arbitrary you know deadline

00:07:12   that was declared in two days ago yeah

00:07:14   because I think that I was I think it I

00:07:17   find that I need something a bit more

00:07:19   than that there's certainly small like

00:07:21   small feature updates or bug fixes and

00:07:22   stuff for yeah it's not there's not a

00:07:25   sense of kind of planned fulness with it

00:07:27   but I think the something that I would

00:07:29   struggle with with your approach is the

00:07:31   sense of like I find my apps whenever

00:07:36   like when I start to work on anything

00:07:37   big the overall quality of the app from

00:07:40   a stability or a bugginess perspective

00:07:43   like drops somewhat precipitously and

00:07:46   then it'll gradually work its way back

00:07:49   up to good again you know over the over

00:07:52   the course of time and I feel like I for

00:07:55   me anyway I find it's important to have

00:07:56   something in mind that I know like how

00:07:59   much time do I have to keep breaking

00:08:02   things before I have to switch things

00:08:05   around to just fixing things and it

00:08:08   might just be the way that I develop

00:08:09   that like I tend to you know break but I

00:08:12   tend to sort of take everything apart

00:08:14   and then put it back together again

00:08:16   rather than be fixing things it's in a

00:08:18   way that is probably a bit more elegant

00:08:22   or straightforward where you know if

00:08:24   something isn't done it could just be

00:08:26   left out or I'd know at any point you

00:08:29   know I know you this happens all you

00:08:31   hear about this a lot with web

00:08:33   development type of things where you

00:08:34   know sort of everything that's in your

00:08:36   master branch is always ready for

00:08:38   production and nothing that touches that

00:08:40   is you know should ever not be be ready

00:08:42   for that which is like the opposite of

00:08:44   what I do I just have you know a things

00:08:46   go go go from great horribly broken back

00:08:49   to great back to horribly broke

00:08:51   for me and so I need that some sense of

00:08:54   the some sense of end point that I'm

00:08:57   aiming at in order to get things turned

00:08:59   around and fixed otherwise I'd find

00:09:02   myself in a lot of problem if I was like

00:09:03   you need to release this in two days

00:09:05   it's like I know I needed like a week to

00:09:07   put it all back together again

00:09:09   you know I've that's but that's should

00:09:10   provide just be the way that I work yeah

00:09:13   I do the exact same thing that but like

00:09:15   you know it basically like when I decide

00:09:18   enough is enough I need to release this

00:09:21   that just becomes my my number one to-do

00:09:24   item is just let's close all this back

00:09:25   up again let's fix what's broken I mean

00:09:27   you know if too much is broken and I

00:09:29   can't do that quickly then okay I won't

00:09:30   release it yet you know but usually the

00:09:33   things that I break horribly are the

00:09:35   first things that I fix in in the middle

00:09:37   you know it during a during a

00:09:39   development cycle for release and then

00:09:41   everything after that is either minor

00:09:43   polish items which are easy to basically

00:09:46   like knock them all out and clean it up

00:09:48   like in one or two days at the end once

00:09:49   you decide you're done or additional

00:09:52   features that aren't really necessary or

00:09:54   that are more self-contained so that

00:09:56   like if I have to disabled entire

00:09:58   feature for release and just ship it

00:09:59   later

00:10:00   you know I can do that fairly easily

00:10:02   with like you know pre process or macro

00:10:04   definitions are commenting out some

00:10:06   things or or things like that

00:10:07   but that it just doesn't usually come to

00:10:10   that for me for whatever reason usually

00:10:12   whatever I make I ship soon afterwards

00:10:17   because I've gotten pretty good at like

00:10:19   the mad rush at the end to just polish

00:10:21   all the rough edges and fix the

00:10:23   remaining bugs of what I have and then

00:10:24   just ship what I have but it's it's more

00:10:27   of a mode of a mode switch for me to

00:10:30   stop making new stuff at that point and

00:10:34   to just only focus on making what I have

00:10:37   releasable yeah and I think it sounds

00:10:40   like we there's this there's a

00:10:41   similarity that I have where as I'm

00:10:44   developing I tend to have like a very

00:10:48   high level sort of feature list of kind

00:10:50   of the things that I'm trying to

00:10:51   accomplish in an update or in a release

00:10:53   and then at a certain point I switch

00:10:59   from that kind of a sort of to-do list

00:11:02   to what I call kind of a punch

00:11:04   which i think is a like term from

00:11:06   construction yeah and they're like when

00:11:09   you're kind of finished finishing up a

00:11:11   house but you switch to this kind of

00:11:14   this different mode where the only

00:11:16   things that are on your list are things

00:11:19   that need to be fixed you're no longer

00:11:21   creating anything all you're doing is

00:11:24   fixing things that are broken and so it

00:11:27   changes the nature of it because that

00:11:30   list hopefully anyway should have bite

00:11:33   but my necessity will shrink to zero

00:11:36   over time whereas your feature list or

00:11:39   your idea list or your kind of you more

00:11:42   creative list can grow indefinitely and

00:11:45   probably should grow indefinitely in

00:11:47   some ways like it's great when you can

00:11:48   have come up with new ideas for your app

00:11:51   when you can come up with like you know

00:11:52   it's awesome that when you you start

00:11:54   using something for a while then you're

00:11:55   like hey what if it did this what if it

00:11:57   did that like those are awesome

00:11:58   but I have to force myself to start like

00:12:02   right now I have two lists in my search

00:12:05   to do list manager I have one for the

00:12:07   punch list for workouts plus plus 2.0

00:12:09   and then I have the like everything else

00:12:11   list and any any idea or feature

00:12:15   anything that I have that's an idea for

00:12:17   work as opposed to us at this point

00:12:19   that isn't fictive ly fixing a problem

00:12:21   in the app right now goes on to the

00:12:23   second list and won't be looked at until

00:12:25   I get this release out the only thing

00:12:27   that's on my list now is B all these

00:12:30   sort of broken items anything that needs

00:12:31   to be dealt with and you tend to get

00:12:35   into a nice sort of cycle with those

00:12:37   where I'll sit down I'll try and knock

00:12:39   out you know three or four of those I'll

00:12:41   do it's just sort of do a either an

00:12:44   internal beta or you know maybe send it

00:12:47   out to a few people go through the app

00:12:49   see if anything's broken and repeat and

00:12:51   it tends to in a good way

00:12:54   sort of narrow in nicely where you know

00:12:57   you may be the first when I first

00:12:59   started when I first switch over from

00:13:00   feature to punch list maybe you know

00:13:03   have 40 items on my punch list like lots

00:13:06   of things were broken and then you know

00:13:08   you sort of do do a cycle through now

00:13:11   there's 20 things and now there's ten

00:13:13   things now there's five things

00:13:15   now there's three things I'm just going

00:13:16   to have to live

00:13:17   those in a ship like that pattern seems

00:13:20   to work pretty well for me and it's an

00:13:23   important I think more importantly

00:13:24   rather than like how you do that because

00:13:26   having that mindset switch where at the

00:13:28   end you have to have the discipline to

00:13:31   say I'm not gonna add any more features

00:13:33   at this point like it it's now it's just

00:13:36   fixing stuff because if you don't draw

00:13:38   that line at some point like it just

00:13:40   sort of it just expands forever but if

00:13:43   you but it having that mindset switch to

00:13:45   is this broke is it broken or is it if

00:13:47   is it an enhancement and if it's an

00:13:48   enhancement it goes in the next bucket

00:13:50   and it's important I think to have that

00:13:52   other bucket like I would drive myself

00:13:54   crazy if I didn't have a place that I

00:13:56   knew I was going to look at that idea in

00:13:58   the future because I want to build that

00:14:02   I want to do that but it's like I need

00:14:04   to have a place to say you will look at

00:14:06   that you know whatever in my case like

00:14:08   on December 13th you may can look at

00:14:10   that feature you can look at that idea

00:14:13   and work out if it's a good idea but for

00:14:14   right now if it isn't broken then it's

00:14:18   not gonna get fixed

00:14:19   speaking of knowing when things were

00:14:20   broken our sponsor this week is Kingdom

00:14:23   you can monitor your web sites and

00:14:25   servers start today at Pingdom comm

00:14:27   slash relay FM you'll get a 14-day free

00:14:30   trial when you enter offer code radar at

00:14:33   checkout you get 30% off your first

00:14:35   invoice Pingdom is focused on making the

00:14:37   web faster and more reliable for

00:14:38   everybody by offering powerful and easy

00:14:41   to use monitoring tools and services for

00:14:43   example you can monitor the availability

00:14:45   of performance of your server database

00:14:47   or website by using more than 70 global

00:14:50   test servers that emulate visits to your

00:14:51   site checking its availability as often

00:14:53   as once every minute websites are so

00:14:55   sophisticated and potentially

00:14:58   complicated these days and very often

00:15:00   includes several different dependencies

00:15:01   or just contact forms ecommerce

00:15:03   checkouts login search so much more and

00:15:05   Pingdom makes it possible to monitor the

00:15:07   availability and performance of all

00:15:09   these key interactions people have with

00:15:11   your site because stuff breaks on the

00:15:13   internet all the time every month they

00:15:15   detect 13 million outages at Pingdom

00:15:17   that is more than 400,000 outages a day

00:15:19   so whether you have a small site or

00:15:21   you're managing a pleat infrastructure

00:15:23   it is very important to monitor its

00:15:25   availability and performance and Pingdom

00:15:27   is great I have used Pingdom since long

00:15:30   for they were a sponsor I used them all

00:15:31   the way back at tumblr and I when I

00:15:34   assumed they said up instapaper I said

00:15:36   at Pingdom immediately that I went soon

00:15:38   as I said up over catch I said it

00:15:39   Pingdom there it is wonderful I've used

00:15:42   it all this time because it is great I

00:15:44   love knowing when stuff is slowing down

00:15:47   or broken or down it is very very useful

00:15:50   to know because you want to know before

00:15:52   all your customers or your audience

00:15:54   finds out you want to know that first

00:15:56   you can go fix it before too many people

00:15:57   see it so all you do is give Pingdom a

00:15:59   URL and monitor if you want any kind of

00:16:01   custom conditions or login you can do

00:16:03   that too but you don't need to they take

00:16:05   care of the rest you are immediately

00:16:07   notified whatever means you want SMS

00:16:09   push notification email and you can fix

00:16:12   the error before too many people see it

00:16:14   check about today Pingdom comm relay FM

00:16:17   for a 14-day free trial and use a code

00:16:20   radar at checkout to get 30% off your

00:16:22   first invoice thank you to Pingdom for

00:16:24   supporting this show and relay FM so as

00:16:27   you're recording you just released

00:16:30   forecast your mp3 encoder metadata

00:16:34   manager chapter maker tool to the world

00:16:38   finally and I know this has been a long

00:16:41   time coming I don't know exactly when

00:16:43   you started working on this tool but it

00:16:44   seems like it was forever ago and I was

00:16:47   curious if you had any thoughts about

00:16:49   what got you through that last 1% to

00:16:52   finally actually ship it put it out in

00:16:55   the world and you know sort of start

00:16:57   that next phase of its life stick

00:16:58   lifespan I wanted to release forecast

00:17:02   for a while and I had waited in part for

00:17:06   the mp3 patents to expire the last of

00:17:09   which expired this past spring so I

00:17:11   could have released it really any time

00:17:12   after that safely and I intended to but

00:17:16   then basically throughout the summer and

00:17:20   fall over cash was basically on fire

00:17:23   you know between iOS 11 and drag and

00:17:27   drop and then the iPhone 10 overcast has

00:17:31   been consuming almost all of my

00:17:34   development time I have I have touched

00:17:36   forecast very little in the last year

00:17:37   just because overcast just was was

00:17:40   needier than I expected

00:17:42   and so what finally pushed me to release

00:17:45   this I mean I've been using this you

00:17:47   know both myself and in in a small

00:17:49   private beta with some of our friends

00:17:50   who are also podcasters for like two

00:17:52   years and and so I knew like the the

00:17:56   functionality of it worked the app still

00:17:58   had a rough edge you know a bunch of

00:18:00   rough edges and it still does because

00:18:01   it's a Mac app and I am terrible at

00:18:04   making mac apps I'm very very new to it

00:18:06   app kit is very little like UI kit it's

00:18:10   very different and and it's there's

00:18:14   still a lot of legacy to be aware of a

00:18:17   lot of rough edges a lot of things you

00:18:19   have to consider a lot of functionality

00:18:21   that is simply just doesn't work and and

00:18:25   and iOS has a lot of this too but I know

00:18:27   what it is and I have been there for so

00:18:29   long you know I have a lot of experience

00:18:30   there on the Mac it's all new to me it's

00:18:33   all unfamiliar and the amount of

00:18:35   available help on the Mac is way smaller

00:18:38   you can't just like you know do a web

00:18:40   search for some problem you're having

00:18:42   and get a thousands you know Stack

00:18:44   Overflow results about the answer's no

00:18:45   like well for mac problems you're lucky

00:18:47   to get one you know me you might even

00:18:49   get you might get two maybe but you're

00:18:52   probably only get zero or one answer to

00:18:54   what you're looking for and it might be

00:18:56   on some ancient mailing list that's

00:18:57   impossible to skim or or find so Mac

00:19:00   development is very slow going so part

00:19:03   of why I haven't released it yet is

00:19:06   because it wasn't the app wasn't very

00:19:09   pretty or you know polished and so I I

00:19:13   was afraid to release it you know

00:19:14   because I was afraid that people would

00:19:16   judge it on these superficial but still

00:19:19   important qualities that I'm just not

00:19:21   very good on the Mac yet and I might

00:19:23   never be so that was part of it but you

00:19:26   know our conversation last week was a

00:19:28   pretty big motivator for me to go into

00:19:30   let's just release this mode because you

00:19:34   know last week we basically you know I

00:19:36   talked with you about how it how I

00:19:39   decided basically that it should be free

00:19:41   because it has benefits to me beyond

00:19:45   just money like it benefits overcast it

00:19:49   benefits podcasts as a whole you know it

00:19:52   saves people time and it can generate a

00:19:54   lot of goodwill for overcast so

00:19:55   I figured like based on that rationale

00:19:59   if it's gonna be free then I don't I

00:20:03   have a lot less to worry about I can

00:20:04   pull out a lot of like weird license

00:20:06   checking code and I don't have to worry

00:20:07   about like in-app purchases or the Mac

00:20:09   App Store or anything badly or some kind

00:20:12   of storefront for the website and then

00:20:14   supporting paid like the number of

00:20:16   things you have to do and worry about

00:20:18   and manage if it's free drops down

00:20:21   tremendously and then also I figured

00:20:23   like well I want to start accruing those

00:20:25   benefits now all those benefits is gonna

00:20:27   have to overcast and to podcasting

00:20:29   everything

00:20:30   why keep this private any longer like

00:20:32   this is probably good enough to release

00:20:34   for free right now and so I basically

00:20:36   went into you know punch list mode as

00:20:38   you said like I fixed the few remaining

00:20:42   bugs I cleaned up I disabled some

00:20:44   experimental stuff that that I decided

00:20:46   was a dead end

00:20:46   I you know polished up some of the wrote

00:20:50   some of the rough edges and I released

00:20:53   it now the process of releasing a Mac

00:20:55   app when you've mostly not released a

00:20:57   Mac at before I did release quitter

00:20:59   before I so I have one Mac app that

00:21:02   doesn't even have a window really I know

00:21:05   it does I guess the Preferences window

00:21:06   but yeah like it's one very small Mac

00:21:08   app that lives in the menu bar and does

00:21:09   very little so that was a little bit

00:21:11   easier but when you release apps outside

00:21:14   of the Mac App Store and and I you know

00:21:15   I don't want to get too much into that

00:21:17   but once I decided that this was not

00:21:19   going to be paid the Mac apps the

00:21:24   argument to be in the Mac App Store

00:21:25   basically evaporated because it's you

00:21:27   know the complexity of doing that and

00:21:29   maintaining a different version that was

00:21:31   sandbox versus not sandboxed for the you

00:21:34   know it was it was not gonna it was not

00:21:36   worth it and maybe down the road it will

00:21:38   be but right now it's not so I decide

00:21:41   but when you when you're not in the Mac

00:21:43   App Store you basically have to build

00:21:46   iTunes Connect from scratch for yourself

00:21:48   like I think us iOS developers have have

00:21:52   we take a lot of things for granted like

00:21:55   things like updates like how do you how

00:21:59   does your app update itself if it's not

00:22:00   in an app store and so you know what Mac

00:22:03   apps do is they had this framework

00:22:04   called sparkle usually that that is like

00:22:07   the Ottawa gating framework that

00:22:08   everyone has seen

00:22:09   the windows of but maybe do you maybe to

00:22:11   know what is called but almost all has

00:22:13   to use this on the Mac but you have to

00:22:15   then have an RSS feed on your server

00:22:17   that tells the app installations like

00:22:20   what version is available you have to

00:22:21   have have a like signature workflow on

00:22:24   it to sign your updates to make sure

00:22:26   that it's coming from you and and then

00:22:29   you have to have some kind of way to

00:22:30   manage these builds and validate them

00:22:32   and and so before when I was just doing

00:22:34   the forecast beta and when I and for

00:22:36   quitter I just have a couple of local

00:22:38   shell scripts that do all this and it's

00:22:40   kind of it's it's pretty crappy but it's

00:22:42   pretty basic needs on those for forecast

00:22:45   it's an overcast product so that's why I

00:22:47   decided it should be part of the

00:22:48   overcast website and that I wanted some

00:22:52   kind of web management panel to do these

00:22:55   things so I so I so like basically

00:22:57   yesterday I built all of this I

00:22:59   basically built myself a a crappy small

00:23:02   limited version of iTunes Connect that

00:23:04   like I upload a build it reads the plist

00:23:08   it you know pulls out the keys for like

00:23:10   build number and version number and

00:23:12   everything and it sticks it all in

00:23:14   database and I can edit the release

00:23:16   notes which is also good because then I

00:23:17   can provide a version history on the

00:23:19   website very very easily cuz it's all in

00:23:20   the database so you know edit the

00:23:22   release notes for it be able to publish

00:23:24   it or have it not be published yet I'm

00:23:27   going to next I'm going to create a beta

00:23:29   channel which I haven't done yet

00:23:30   basically just you know and not even to

00:23:33   the to the level of sophistication I

00:23:34   just got just like a granularity of like

00:23:36   is this version on the beta train or not

00:23:39   and then have a separate feed for that

00:23:41   then it's all in the overcast site and

00:23:43   then it runs to you have cache CDN so I

00:23:45   don't to worry about like download you

00:23:46   know overloads or overages so I it was a

00:23:51   lot of work to build all that and this

00:23:54   is like it's one of those things like

00:23:55   the first time you make a mac app you

00:23:57   learn all this crazy stuff just like you

00:23:59   know I guess similarly the first time

00:24:00   somebody makes an iOS app and learn

00:24:02   about like all the provisioning stuff

00:24:04   that you have to do and certificates and

00:24:06   everything else so I guess it isn't it

00:24:07   isn't that different of an amount of

00:24:10   work but you know certainly the first

00:24:13   time you build all this it's it's a lot

00:24:14   and and this is all even easier because

00:24:15   it's free like if it was actually paid

00:24:18   and I had my own storefront on my

00:24:21   website I had to build

00:24:22   and manage that and that's not a small

00:24:25   thing either so there's a lot that you

00:24:28   have to do in the Macworld that you

00:24:30   don't do in iOS at least if you don't do

00:24:32   the App Store and it's kind of made me

00:24:34   appreciate like oh this is why people

00:24:37   still use the App Store like not

00:24:38   everyone uses it a lot of big developers

00:24:40   don't because they have the resources

00:24:42   not to but certainly if you if you are a

00:24:46   small developer and you just want to put

00:24:47   something up charge a few bucks for

00:24:49   whatever the app store is way easier

00:24:50   than doing it yourself it's not even

00:24:52   close you know the I guess they they get

00:24:55   that 30% for a reason

00:24:56   so ultimately it was a ton of work

00:24:59   almost none of which was the forecast

00:25:02   app itself like almost all of it was

00:25:04   putting together the infrastructure

00:25:06   making a page for it on the site writing

00:25:09   what's on the page taking a screenshot

00:25:11   putting that on the page like it's all

00:25:14   this and all this work that we have when

00:25:17   we release a new app especially if it's

00:25:18   the first app for a certain platform

00:25:20   that we've released there's so much work

00:25:23   to do that you know it's like that last

00:25:25   1% is usually the last 1% is ridiculous

00:25:28   when it's like you were very first Mac

00:25:30   app that you've ever made like you make

00:25:31   this happen somehow like it's so much

00:25:33   work and it's nowhere near you know

00:25:36   polished or done but it's it's close

00:25:38   enough it's functional and so I guess

00:25:40   shipped it and I think do there's a more

00:25:42   general point that I hear are you saying

00:25:44   is it's it's important to remember too

00:25:46   that there may be a lot of things that

00:25:49   you have to do before you even when you

00:25:52   finally gets the point that you let go

00:25:54   and say yep this is good enough I'm

00:25:56   gonna put this into the store like

00:25:57   there's still like not that the work is

00:25:59   not done at that point like you the work

00:26:02   may be done in Xcode like you may have

00:26:04   you know finally uploaded your binary to

00:26:07   iTunes Connect or in your case like

00:26:09   overcast Connect but like then you have

00:26:14   all these other stuff that you have to

00:26:15   do like are you gonna do send any kind

00:26:17   of frequently asked questions or get to

00:26:18   build a website for it are you the

00:26:21   things like there's any kind of

00:26:22   marketing materials even just the iTunes

00:26:24   Connect kind of screenshotting and all

00:26:27   that kind of stuff like if you have a

00:26:28   localized set of screenshots like it can

00:26:30   take it takes a good day for whenever I

00:26:32   need to update my screenshots even when

00:26:34   I automate a lot of it

00:26:36   like just because I you know I think

00:26:37   pedometer plus plus is localized into

00:26:41   ten languages or something like that and

00:26:44   so if I have you know multiple five

00:26:47   screenshots times ten times ten

00:26:49   languages times multiple devices like it

00:26:52   just it just goes crazy and it's

00:26:54   important I think to keep it in mind to

00:26:56   that if you have set a deadline and you

00:26:59   have communicated that that you need to

00:27:01   leave buffer in your workflow so that

00:27:04   you have time to do all this stuff that

00:27:07   is that you either serve that has

00:27:09   nothing to do with finishing the app

00:27:10   that you finally got your punch list

00:27:11   down to you know good enough you're done

00:27:14   it's like you still have a bunch of

00:27:16   other stuff that you're gonna have to do

00:27:17   and so just like leaving enough buffer

00:27:19   in your schedule to actually do that is

00:27:21   important like I know I've gotten caught

00:27:23   out for iOS updates where it's like I

00:27:27   feel like you know I'm working towards

00:27:29   making it so that you know as soon as

00:27:31   the gold master version of Xcode comes

00:27:33   out and as soon as iTunes Connect opens

00:27:35   up I'm ready to go and then I forgotten

00:27:37   that I'm like I'm gonna need a whole new

00:27:38   set of screenshots and so rather than

00:27:40   you know submitting right that moment

00:27:41   I'm submitting like a day later and so

00:27:44   that's just entirely poor planning on my

00:27:46   part

00:27:47   yeah screenshots - are are my Achilles

00:27:49   heel they always take me for like I

00:27:51   always forget that have to do them and

00:27:52   then the very last minute I'm like oh

00:27:53   crap I need to make 40 screenshots this

00:27:57   is bad and then you know then I have to

00:27:58   figure out some way to try to automate

00:28:00   some of it I know those tools out there

00:28:01   to help with this but I've never

00:28:02   bothered to set one up and so it's it's

00:28:05   that's a big deal this is one of the

00:28:08   reason why I've made a preview videos

00:28:09   yet I probably should make videos just

00:28:11   to try them out but I haven't yet in

00:28:14   part because that's a massive

00:28:16   undertaking to add to this like to add

00:28:20   like the production of an entire video

00:28:22   to the list of things have to do every

00:28:24   time your your your UI changes that's or

00:28:28   every time you a new device comes out

00:28:29   that's a that's a large amount of work

00:28:32   and so you know it has to be pretty

00:28:34   compelling and I just I haven't had the

00:28:36   time to do it yet but you know now you

00:28:38   know forecast is out you know it's

00:28:41   mostly stable you know I don't think I

00:28:43   need to do a whole lot of work on it

00:28:44   release wise overcast is pretty stable

00:28:47   so I'm back in a good place now but the

00:28:49   man

00:28:50   last one percent on both of those things

00:28:51   was was killer yeah and I think the

00:28:54   thing that's fun is like now you're in

00:28:55   the place that is at least if any if

00:28:57   you're anything like me is the best part

00:28:58   right now you can look at your big long

00:29:00   feature list and you like the reward for

00:29:03   for battling through that last 1% is

00:29:05   that you now have the opportunity to

00:29:08   look at your like fun feature list and

00:29:10   you know decide what's fun to work on

00:29:12   next and like that's in a weird way it's

00:29:14   like as an engineer like the best reward

00:29:17   for preferred for lots of hard work is

00:29:19   more hard work but at least it's like

00:29:21   the fun work that I enjoy doing rather

00:29:23   than the hard like they the grunt work

00:29:25   that I don't enjoy doing as much exactly

00:29:28   alright we're out of time this week

00:29:30   thanks listening everybody and we'll

00:29:32   talk to you next week bye