Under the Radar

Under the Radar 108: Punch-List Mode

 

  welcome to under the radar show but

  independent iOS app development I'm

  Marco Arment and I'm David Smith under

  the radar is never longer than 30

  minutes so let's get started so today I

  want to be a fun topic for us to talk

  about finishing up a project or like

  doing that last 1% that definitely

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

  a project like the VB energy and the

  effort and the willpower it takes to

  just get over that last little bit is

  definitely you know massively

  disproportionate for launching a

  software product and you get better at

  it the more you do it which i think is

  something hopefully that I can say that

  is if I found my own experience and is

  hopefully encouraging if this is if

  you're coming to development you know

  Furley you're fairly new to this that

  it's totally normal for that fit that

  last a little bit of a project where

  it's like it's almost done but isn't

  quite done isn't quite released to feel

  like it takes forever and and part of it

  I think in the weird way is it's like

  the term software release is very aptly

  named because software isn't so much

  finished as it is like slowly tugged out

  of our hand and eventually we just

  release our grip and it flies out into

  the world like it is never this thing

  where at least I've never had the

  experience where I feel like I have

  created this perfectly formed this

  perfectly formed thing that I am NOT

  presenting out into the world it's like

  at some point you just have to say this

  is good enough I'm gonna put this out

  and I will fix all the bugs or are the

  issues of the problems later and I think

  we've talked many times in episodes

  previous about the importance of getting

  something out into the world because you

  can get feedback you can validate your

  the idea make sure that you're actually

  building something people want or not

  missing like whole aspects of the sort

  of the problem domain that you're trying

  to solve that you're just unaware of

  because you're stuck in your own little

  world but I do but more importantly I

  think whatever Suvi interesting to focus

  on for today is some of the little

  aspects of doing that of the thing that

  you have to do in that last that last 1%

  and the first thing that I think is

  worth talking about is deadlines this is

  especially complicated

  being if you're doing this project by

  yourself or we just know one or two

  other people and this isn't something

  where you have an externally imposed

  deadline it's not that you're doing

  consulting for a client and the client

  has said you know by the state you need

  to have done this or you know you won't

  get paid or you'll have there'll be some

  kind of penalty like there's if there's

  an external deadline you that sort of

  takes care of itself but if you don't

  have one of those and I'm but I found

  for myself is that if I don't have some

  kind of deadline in mind and maybe it's

  slightly squishy but it shouldn't be so

  squishy that it's not a deadline like it

  still should have some some weight

  behind it I find it very hard to really

  get there because there is something I

  think it's Parkinson's law it's one of

  those like management laws where it's

  like work will expand to fill the time

  allotted to it basically so if you give

  yourself another month you will find a

  month's worth of work to fill that with

  and if you give yourself another two

  months you will it'll fill indefinitely

  if you don't have a deadline like you

  would just keep filling with work

  forever it's this never-ending like

  inflating balloon and so you have to at

  some point put a line on it and say you

  know I'm gonna get it done by here

  something that I found really helpful

  with this is to start to try and talk to

  other outside people about your launch

  so whether this be someone in the press

  with friends whoever it is and like

  start talking around a date like I have

  December 12th as the date that I'm gonna

  launch workouts plus plus 2.0 like

  that's something that I've started to

  you know sort of socialize and talk to

  talk about to different people and now

  that that's a thing in the world like it

  changes it from this vague amorphous

  thing to something that I have this like

  personal ownership of making happen and

  if I didn't have that I feel like I

  would just keep working on this app

  forever which is not good for anybody

  it's far better to draw a line you know

  to cut what I need to cut narrow it down

  so that I can get it to get it out there

  and then start you know iterating on the

  version that's out in the world rather

  just getting stuck with it without a

  deadline without it without any sense of

  you know end in mind

  yeah I mean I have found that most of my

  releases have basically been I have

  basically been working you know all

  month or a year or six months or

  whatever working for a very long span on

  a kind of unending list of features that

  that like everything is like oh I it

  would be nice if I had time I can do

  this and very few the features are

  actually required and so the amount of

  time that I'm working on these releases

  is pretty open-ended and without any

  kind of external deadline imposing on me

  like the release of a new version of iOS

  or a new Apple hardware or something

  like that they would just go on forever

  and usually when I do finally release

  something it is planned almost no time

  in advance and it's one day I just kind

  of I'm like you know what I'm just I'm

  done I just want this to be out there

  I'm I'm tired of it not being released

  so I'm just going to recently tomorrow

  or something like that like you know

  just a kind of arbitrary decision of

  okay I just need to get this out there

  you know enough is enough

  but but a lot of times that you know it

  takes me a long time to get to do you

  think that kind of slightly

  arbitrariness to it works in your favor

  or is it like a problematic like it

  seems like it could go both ways that in

  some in some ways it's helpful because

  you're not creating this sort of any

  internal stress that about something

  you're just kind of working working and

  at some point you're just like you know

  this is good and just ship it like is

  that do you find that to be helpful or

  is that problematic it's one of the many

  ways that I think and work that are

  probably not ideal but that also I

  probably will never change about myself

  so I just have to basically you know

  take the good in the bad that comes with

  it I think that there's a lot of things

  that are bad about this this kind of

  capricious or rash decision making

  sometimes it's not a good time to

  release that thing it turns out which I

  find out later or sometimes you know it

  would have benefited from a stronger and

  more considered marketing push maybe but

  the reality is that I also then

  I'm rarely in the position where I have

  to wait forever I'm rarely in the

  position of designing myself into such a

  corner or having such a huge list of

  what needs to be done by before the

  release that it never comes out like no

  one's ever waiting years for an overcast

  update though the way I work

  ensures that something will get released

  on a fairly regular interval and I will

  never know until it's actually released

  what features you know will end up

  making it before that before that

  deadline comes or not the be

  self-imposed arbitrary you know deadline

  that was declared in two days ago yeah

  because I think that I was I think it I

  find that I need something a bit more

  than that there's certainly small like

  small feature updates or bug fixes and

  stuff for yeah it's not there's not a

  sense of kind of planned fulness with it

  but I think the something that I would

  struggle with with your approach is the

  sense of like I find my apps whenever

  like when I start to work on anything

  big the overall quality of the app from

  a stability or a bugginess perspective

  like drops somewhat precipitously and

  then it'll gradually work its way back

  up to good again you know over the over

  the course of time and I feel like I for

  me anyway I find it's important to have

  something in mind that I know like how

  much time do I have to keep breaking

  things before I have to switch things

  around to just fixing things and it

  might just be the way that I develop

  that like I tend to you know break but I

  tend to sort of take everything apart

  and then put it back together again

  rather than be fixing things it's in a

  way that is probably a bit more elegant

  or straightforward where you know if

  something isn't done it could just be

  left out or I'd know at any point you

  know I know you this happens all you

  hear about this a lot with web

  development type of things where you

  know sort of everything that's in your

  master branch is always ready for

  production and nothing that touches that

  is you know should ever not be be ready

  for that which is like the opposite of

  what I do I just have you know a things

  go go go from great horribly broken back

  to great back to horribly broke

  for me and so I need that some sense of

  the some sense of end point that I'm

  aiming at in order to get things turned

  around and fixed otherwise I'd find

  myself in a lot of problem if I was like

  you need to release this in two days

  it's like I know I needed like a week to

  put it all back together again

  you know I've that's but that's should

  provide just be the way that I work yeah

  I do the exact same thing that but like

  you know it basically like when I decide

  enough is enough I need to release this

  that just becomes my my number one to-do

  item is just let's close all this back

  up again let's fix what's broken I mean

  you know if too much is broken and I

  can't do that quickly then okay I won't

  release it yet you know but usually the

  things that I break horribly are the

  first things that I fix in in the middle

  you know it during a during a

  development cycle for release and then

  everything after that is either minor

  polish items which are easy to basically

  like knock them all out and clean it up

  like in one or two days at the end once

  you decide you're done or additional

  features that aren't really necessary or

  that are more self-contained so that

  like if I have to disabled entire

  feature for release and just ship it

  later

  you know I can do that fairly easily

  with like you know pre process or macro

  definitions are commenting out some

  things or or things like that

  but that it just doesn't usually come to

  that for me for whatever reason usually

  whatever I make I ship soon afterwards

  because I've gotten pretty good at like

  the mad rush at the end to just polish

  all the rough edges and fix the

  remaining bugs of what I have and then

  just ship what I have but it's it's more

  of a mode of a mode switch for me to

  stop making new stuff at that point and

  to just only focus on making what I have

  releasable yeah and I think it sounds

  like we there's this there's a

  similarity that I have where as I'm

  developing I tend to have like a very

  high level sort of feature list of kind

  of the things that I'm trying to

  accomplish in an update or in a release

  and then at a certain point I switch

  from that kind of a sort of to-do list

  to what I call kind of a punch

  which i think is a like term from

  construction yeah and they're like when

  you're kind of finished finishing up a

  house but you switch to this kind of

  this different mode where the only

  things that are on your list are things

  that need to be fixed you're no longer

  creating anything all you're doing is

  fixing things that are broken and so it

  changes the nature of it because that

  list hopefully anyway should have bite

  but my necessity will shrink to zero

  over time whereas your feature list or

  your idea list or your kind of you more

  creative list can grow indefinitely and

  probably should grow indefinitely in

  some ways like it's great when you can

  have come up with new ideas for your app

  when you can come up with like you know

  it's awesome that when you you start

  using something for a while then you're

  like hey what if it did this what if it

  did that like those are awesome

  but I have to force myself to start like

  right now I have two lists in my search

  to do list manager I have one for the

  punch list for workouts plus plus 2.0

  and then I have the like everything else

  list and any any idea or feature

  anything that I have that's an idea for

  work as opposed to us at this point

  that isn't fictive ly fixing a problem

  in the app right now goes on to the

  second list and won't be looked at until

  I get this release out the only thing

  that's on my list now is B all these

  sort of broken items anything that needs

  to be dealt with and you tend to get

  into a nice sort of cycle with those

  where I'll sit down I'll try and knock

  out you know three or four of those I'll

  do it's just sort of do a either an

  internal beta or you know maybe send it

  out to a few people go through the app

  see if anything's broken and repeat and

  it tends to in a good way

  sort of narrow in nicely where you know

  you may be the first when I first

  started when I first switch over from

  feature to punch list maybe you know

  have 40 items on my punch list like lots

  of things were broken and then you know

  you sort of do do a cycle through now

  there's 20 things and now there's ten

  things now there's five things

  now there's three things I'm just going

  to have to live

  those in a ship like that pattern seems

  to work pretty well for me and it's an

  important I think more importantly

  rather than like how you do that because

  having that mindset switch where at the

  end you have to have the discipline to

  say I'm not gonna add any more features

  at this point like it it's now it's just

  fixing stuff because if you don't draw

  that line at some point like it just

  sort of it just expands forever but if

  you but it having that mindset switch to

  is this broke is it broken or is it if

  is it an enhancement and if it's an

  enhancement it goes in the next bucket

  and it's important I think to have that

  other bucket like I would drive myself

  crazy if I didn't have a place that I

  knew I was going to look at that idea in

  the future because I want to build that

  I want to do that but it's like I need

  to have a place to say you will look at

  that you know whatever in my case like

  on December 13th you may can look at

  that feature you can look at that idea

  and work out if it's a good idea but for

  right now if it isn't broken then it's

  not gonna get fixed

  speaking of knowing when things were

  broken our sponsor this week is Kingdom

  you can monitor your web sites and

  servers start today at Pingdom comm

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

  trial when you enter offer code radar at

  checkout you get 30% off your first

  invoice Pingdom is focused on making the

  web faster and more reliable for

  everybody by offering powerful and easy

  to use monitoring tools and services for

  example you can monitor the availability

  of performance of your server database

  or website by using more than 70 global

  test servers that emulate visits to your

  site checking its availability as often

  as once every minute websites are so

  sophisticated and potentially

  complicated these days and very often

  includes several different dependencies

  or just contact forms ecommerce

  checkouts login search so much more and

  Pingdom makes it possible to monitor the

  availability and performance of all

  these key interactions people have with

  your site because stuff breaks on the

  internet all the time every month they

  detect 13 million outages at Pingdom

  that is more than 400,000 outages a day

  so whether you have a small site or

  you're managing a pleat infrastructure

  it is very important to monitor its

  availability and performance and Pingdom

  is great I have used Pingdom since long

  for they were a sponsor I used them all

  the way back at tumblr and I when I

  assumed they said up instapaper I said

  at Pingdom immediately that I went soon

  as I said up over catch I said it

  Pingdom there it is wonderful I've used

  it all this time because it is great I

  love knowing when stuff is slowing down

  or broken or down it is very very useful

  to know because you want to know before

  all your customers or your audience

  finds out you want to know that first

  you can go fix it before too many people

  see it so all you do is give Pingdom a

  URL and monitor if you want any kind of

  custom conditions or login you can do

  that too but you don't need to they take

  care of the rest you are immediately

  notified whatever means you want SMS

  push notification email and you can fix

  the error before too many people see it

  check about today Pingdom comm relay FM

  for a 14-day free trial and use a code

  radar at checkout to get 30% off your

  first invoice thank you to Pingdom for

  supporting this show and relay FM so as

  you're recording you just released

  forecast your mp3 encoder metadata

  manager chapter maker tool to the world

  finally and I know this has been a long

  time coming I don't know exactly when

  you started working on this tool but it

  seems like it was forever ago and I was

  curious if you had any thoughts about

  what got you through that last 1% to

  finally actually ship it put it out in

  the world and you know sort of start

  that next phase of its life stick

  lifespan I wanted to release forecast

  for a while and I had waited in part for

  the mp3 patents to expire the last of

  which expired this past spring so I

  could have released it really any time

  after that safely and I intended to but

  then basically throughout the summer and

  fall over cash was basically on fire

  you know between iOS 11 and drag and

  drop and then the iPhone 10 overcast has

  been consuming almost all of my

  development time I have I have touched

  forecast very little in the last year

  just because overcast just was was

  needier than I expected

  and so what finally pushed me to release

  this I mean I've been using this you

  know both myself and in in a small

  private beta with some of our friends

  who are also podcasters for like two

  years and and so I knew like the the

  functionality of it worked the app still

  had a rough edge you know a bunch of

  rough edges and it still does because

  it's a Mac app and I am terrible at

  making mac apps I'm very very new to it

  app kit is very little like UI kit it's

  very different and and it's there's

  still a lot of legacy to be aware of a

  lot of rough edges a lot of things you

  have to consider a lot of functionality

  that is simply just doesn't work and and

  and iOS has a lot of this too but I know

  what it is and I have been there for so

  long you know I have a lot of experience

  there on the Mac it's all new to me it's

  all unfamiliar and the amount of

  available help on the Mac is way smaller

  you can't just like you know do a web

  search for some problem you're having

  and get a thousands you know Stack

  Overflow results about the answer's no

  like well for mac problems you're lucky

  to get one you know me you might even

  get you might get two maybe but you're

  probably only get zero or one answer to

  what you're looking for and it might be

  on some ancient mailing list that's

  impossible to skim or or find so Mac

  development is very slow going so part

  of why I haven't released it yet is

  because it wasn't the app wasn't very

  pretty or you know polished and so I I

  was afraid to release it you know

  because I was afraid that people would

  judge it on these superficial but still

  important qualities that I'm just not

  very good on the Mac yet and I might

  never be so that was part of it but you

  know our conversation last week was a

  pretty big motivator for me to go into

  let's just release this mode because you

  know last week we basically you know I

  talked with you about how it how I

  decided basically that it should be free

  because it has benefits to me beyond

  just money like it benefits overcast it

  benefits podcasts as a whole you know it

  saves people time and it can generate a

  lot of goodwill for overcast so

  I figured like based on that rationale

  if it's gonna be free then I don't I

  have a lot less to worry about I can

  pull out a lot of like weird license

  checking code and I don't have to worry

  about like in-app purchases or the Mac

  App Store or anything badly or some kind

  of storefront for the website and then

  supporting paid like the number of

  things you have to do and worry about

  and manage if it's free drops down

  tremendously and then also I figured

  like well I want to start accruing those

  benefits now all those benefits is gonna

  have to overcast and to podcasting

  everything

  why keep this private any longer like

  this is probably good enough to release

  for free right now and so I basically

  went into you know punch list mode as

  you said like I fixed the few remaining

  bugs I cleaned up I disabled some

  experimental stuff that that I decided

  was a dead end

  I you know polished up some of the wrote

  some of the rough edges and I released

  it now the process of releasing a Mac

  app when you've mostly not released a

  Mac at before I did release quitter

  before I so I have one Mac app that

  doesn't even have a window really I know

  it does I guess the Preferences window

  but yeah like it's one very small Mac

  app that lives in the menu bar and does

  very little so that was a little bit

  easier but when you release apps outside

  of the Mac App Store and and I you know

  I don't want to get too much into that

  but once I decided that this was not

  going to be paid the Mac apps the

  argument to be in the Mac App Store

  basically evaporated because it's you

  know the complexity of doing that and

  maintaining a different version that was

  sandbox versus not sandboxed for the you

  know it was it was not gonna it was not

  worth it and maybe down the road it will

  be but right now it's not so I decide

  but when you when you're not in the Mac

  App Store you basically have to build

  iTunes Connect from scratch for yourself

  like I think us iOS developers have have

  we take a lot of things for granted like

  things like updates like how do you how

  does your app update itself if it's not

  in an app store and so you know what Mac

  apps do is they had this framework

  called sparkle usually that that is like

  the Ottawa gating framework that

  everyone has seen

  the windows of but maybe do you maybe to

  know what is called but almost all has

  to use this on the Mac but you have to

  then have an RSS feed on your server

  that tells the app installations like

  what version is available you have to

  have have a like signature workflow on

  it to sign your updates to make sure

  that it's coming from you and and then

  you have to have some kind of way to

  manage these builds and validate them

  and and so before when I was just doing

  the forecast beta and when I and for

  quitter I just have a couple of local

  shell scripts that do all this and it's

  kind of it's it's pretty crappy but it's

  pretty basic needs on those for forecast

  it's an overcast product so that's why I

  decided it should be part of the

  overcast website and that I wanted some

  kind of web management panel to do these

  things so I so I so like basically

  yesterday I built all of this I

  basically built myself a a crappy small

  limited version of iTunes Connect that

  like I upload a build it reads the plist

  it you know pulls out the keys for like

  build number and version number and

  everything and it sticks it all in

  database and I can edit the release

  notes which is also good because then I

  can provide a version history on the

  website very very easily cuz it's all in

  the database so you know edit the

  release notes for it be able to publish

  it or have it not be published yet I'm

  going to next I'm going to create a beta

  channel which I haven't done yet

  basically just you know and not even to

  the to the level of sophistication I

  just got just like a granularity of like

  is this version on the beta train or not

  and then have a separate feed for that

  then it's all in the overcast site and

  then it runs to you have cache CDN so I

  don't to worry about like download you

  know overloads or overages so I it was a

  lot of work to build all that and this

  is like it's one of those things like

  the first time you make a mac app you

  learn all this crazy stuff just like you

  know I guess similarly the first time

  somebody makes an iOS app and learn

  about like all the provisioning stuff

  that you have to do and certificates and

  everything else so I guess it isn't it

  isn't that different of an amount of

  work but you know certainly the first

  time you build all this it's it's a lot

  and and this is all even easier because

  it's free like if it was actually paid

  and I had my own storefront on my

  website I had to build

  and manage that and that's not a small

  thing either so there's a lot that you

  have to do in the Macworld that you

  don't do in iOS at least if you don't do

  the App Store and it's kind of made me

  appreciate like oh this is why people

  still use the App Store like not

  everyone uses it a lot of big developers

  don't because they have the resources

  not to but certainly if you if you are a

  small developer and you just want to put

  something up charge a few bucks for

  whatever the app store is way easier

  than doing it yourself it's not even

  close you know the I guess they they get

  that 30% for a reason

  so ultimately it was a ton of work

  almost none of which was the forecast

  app itself like almost all of it was

  putting together the infrastructure

  making a page for it on the site writing

  what's on the page taking a screenshot

  putting that on the page like it's all

  this and all this work that we have when

  we release a new app especially if it's

  the first app for a certain platform

  that we've released there's so much work

  to do that you know it's like that last

  1% is usually the last 1% is ridiculous

  when it's like you were very first Mac

  app that you've ever made like you make

  this happen somehow like it's so much

  work and it's nowhere near you know

  polished or done but it's it's close

  enough it's functional and so I guess

  shipped it and I think do there's a more

  general point that I hear are you saying

  is it's it's important to remember too

  that there may be a lot of things that

  you have to do before you even when you

  finally gets the point that you let go

  and say yep this is good enough I'm

  gonna put this into the store like

  there's still like not that the work is

  not done at that point like you the work

  may be done in Xcode like you may have

  you know finally uploaded your binary to

  iTunes Connect or in your case like

  overcast Connect but like then you have

  all these other stuff that you have to

  do like are you gonna do send any kind

  of frequently asked questions or get to

  build a website for it are you the

  things like there's any kind of

  marketing materials even just the iTunes

  Connect kind of screenshotting and all

  that kind of stuff like if you have a

  localized set of screenshots like it can

  take it takes a good day for whenever I

  need to update my screenshots even when

  I automate a lot of it

  like just because I you know I think

  pedometer plus plus is localized into

  ten languages or something like that and

  so if I have you know multiple five

  screenshots times ten times ten

  languages times multiple devices like it

  just it just goes crazy and it's

  important I think to keep it in mind to

  that if you have set a deadline and you

  have communicated that that you need to

  leave buffer in your workflow so that

  you have time to do all this stuff that

  is that you either serve that has

  nothing to do with finishing the app

  that you finally got your punch list

  down to you know good enough you're done

  it's like you still have a bunch of

  other stuff that you're gonna have to do

  and so just like leaving enough buffer

  in your schedule to actually do that is

  important like I know I've gotten caught

  out for iOS updates where it's like I

  feel like you know I'm working towards

  making it so that you know as soon as

  the gold master version of Xcode comes

  out and as soon as iTunes Connect opens

  up I'm ready to go and then I forgotten

  that I'm like I'm gonna need a whole new

  set of screenshots and so rather than

  you know submitting right that moment

  I'm submitting like a day later and so

  that's just entirely poor planning on my

  part

  yeah screenshots - are are my Achilles

  heel they always take me for like I

  always forget that have to do them and

  then the very last minute I'm like oh

  crap I need to make 40 screenshots this

  is bad and then you know then I have to

  figure out some way to try to automate

  some of it I know those tools out there

  to help with this but I've never

  bothered to set one up and so it's it's

  that's a big deal this is one of the

  reason why I've made a preview videos

  yet I probably should make videos just

  to try them out but I haven't yet in

  part because that's a massive

  undertaking to add to this like to add

  like the production of an entire video

  to the list of things have to do every

  time your your your UI changes that's or

  every time you a new device comes out

  that's a that's a large amount of work

  and so you know it has to be pretty

  compelling and I just I haven't had the

  time to do it yet but you know now you

  know forecast is out you know it's

  mostly stable you know I don't think I

  need to do a whole lot of work on it

  release wise overcast is pretty stable

  so I'm back in a good place now but the

  man

  last one percent on both of those things

  was was killer yeah and I think the

  thing that's fun is like now you're in

  the place that is at least if any if

  you're anything like me is the best part

  right now you can look at your big long

  feature list and you like the reward for

  for battling through that last 1% is

  that you now have the opportunity to

  look at your like fun feature list and

  you know decide what's fun to work on

  next and like that's in a weird way it's

  like as an engineer like the best reward

  for preferred for lots of hard work is

  more hard work but at least it's like

  the fun work that I enjoy doing rather

  than the hard like they the grunt work

  that I don't enjoy doing as much exactly

  alright we're out of time this week

  thanks listening everybody and we'll

  talk to you next week bye