Podcast Search

Under the Radar

172: No News is Good News

Select a time to play from there. The line being spoken is highlighted as the audio plays.

0:00:00Welcome to Under the Radar,

0:00:01a show about independent iOS app development.

0:00:03I'm Mark Arment.

0:00:04- And I'm David Smith.

0:00:05Under the Radar is never longer than 30 minutes,

0:00:07so let's get started.

0:00:08- It's kind of hard to pick a topic a lot in the summertime

0:00:12because we're mostly just keeping our heads down working

0:00:15or going on vacations here and there,

0:00:16and we're just kind of plowing through things

0:00:19we have to do for the fall releases.

0:00:22There's not a lot going on,

0:00:23so we kind of wanted to just take this episode

0:00:25to basically do like a status update

0:00:27of what we've been working on,

0:00:29why, and then what we're kind of planning

0:00:32for the imminent summer or imminent fall releases

0:00:36of all these OSes and possible new hardware and everything

0:00:39'cause we're kind of in the home stretch now.

0:00:42The pace of betas from Apple has been steady,

0:00:47but the pace of changes in each beta

0:00:49has been dropping dramatically,

0:00:51so you can tell the OS betas are stabilizing.

0:00:55The tooling has not changed much in the last few weeks.

0:00:58There hasn't been an Xcode release in a few weeks,

0:01:00even a couple of betas ago,

0:01:02and so everything seems to be coasting in for landing here.

0:01:07Like, we're getting close.

0:01:08The new OSes are imminent.

0:01:10They are probably going to have some kind of event

0:01:13and release of the new OSes

0:01:15within about three or four weeks,

0:01:17so we're really in the home stretch here,

0:01:19and so we kind of wanted to just go over like

0:01:22what have we been doing

0:01:23and where are we in our summer progress.

0:01:26So, Dave, what have you been doing?

0:01:29- Yeah, so one of my big goals for,

0:01:33like, I ended up structuring my work this summer

0:01:35slightly different than I think I have in other years

0:01:37where the initial betas, as they came out,

0:01:41were pretty rough this year.

0:01:43Like, things just seemed unsettled,

0:01:47at least for those first few betas,

0:01:49and so I just felt bad and tricky

0:01:52about diving into them too much right away.

0:01:55Like, it just didn't seem like a good fit

0:01:57both for my schedule and the amount I'd be working as well.

0:01:59It was just not gonna be a great idea,

0:02:02and especially because iOS 13 drops support

0:02:06for a number of the sort of older devices.

0:02:10It's kind of an awkward year or two

0:02:12to be too much all in on the new stuff,

0:02:14and I think at this point,

0:02:15I expect to not drop support for iOS 12

0:02:19for at least probably, I wanna say, a year,

0:02:23but it seemed like a year to sort of focus more

0:02:25on, the front part of my summer would be focused

0:02:28on just getting things in a really good place

0:02:32rather than necessarily diving too much into the new stuff,

0:02:35and especially 'cause I think a lot of the new things

0:02:37and the new capabilities that I'll be working on are,

0:02:41there'll be some new apps that I'll be working on,

0:02:43thanks to the new space in my app catalog that I have

0:02:47from retiring, a number of things

0:02:49that I used to be weighing me down.

0:02:52So that's like from earlier in the summer,

0:02:53if you remember, we did a whole episode

0:02:55about getting rid of things.

0:02:55That process is ongoing and continuing to go well

0:02:59to streamline things there.

0:03:00And I'll be sort of writing some new things,

0:03:03and the nice thing with new things is there's not much

0:03:06so far that I've seen that's like,

0:03:07you need to be there on day one

0:03:10to really sort of take advantage of things.

0:03:12It's okay to be a little bit more decline,

0:03:14and I also, I think too, I'm very curious

0:03:17to see where we go hardware-wise this fall,

0:03:21and that may sort of inform a little bit

0:03:24what direction I go into.

0:03:25And so instead, I've just been working on

0:03:28making the existing apps that I have better.

0:03:30And the first one, that big update that I did,

0:03:32was a big update to Pedometer++,

0:03:34where, and I think this is very much one of those

0:03:36like tech debt, niggling features,

0:03:40problems that affect .01% of users,

0:03:43but for that one, .01% of users

0:03:45are really annoying kind of bugs.

0:03:47And that was just sort of like this big update

0:03:49that had no big marquee features,

0:03:51but lots and lots of little features.

0:03:54And the most amusing part of this particular update

0:03:56is that it, for the first time ever,

0:04:00required or at least encouraged me to write unit tests,

0:04:05which, and it was shocking,

0:04:07we've talked about this many times on the show,

0:04:08that unit tests are not my favorite thing,

0:04:10but I ended up actually writing some unit tests,

0:04:13primarily because the situation that I was trying to fix

0:04:17was one of these really weird database things,

0:04:20where if a user had a particular structure of data,

0:04:24and then they did a particular operation,

0:04:26and then it merged with their Apple Watch,

0:04:28then you could end up in this sort of situation

0:04:31where you'd have some data inconsistency.

0:04:33But it was incredibly hard to actually create

0:04:36that situation where this would happen.

0:04:38And so that becomes a situation where like,

0:04:40all right, unit test is the right answer here,

0:04:42where I can very sort of consistently go through all,

0:04:45have the process of the unit test,

0:04:48create all the steps to create this problematic case,

0:04:52check that my fix is in fact working,

0:04:55and then be confident about it.

0:04:57And I wrote it, it worked great.

0:04:59Everybody speaks to that.

0:05:02And I think when you've talked about

0:05:05sort of automated testing in the past,

0:05:06it's one of those things where I feel like

0:05:08it is problematic when it becomes,

0:05:10like you become zealous about it,

0:05:13and you start, it's like everything has to be unit tested,

0:05:16and everything, your tests are just as important

0:05:18as your code.

0:05:18I find that kind of development perspective

0:05:21a very sort of inflexible and non-pragmatic view.

0:05:26But unit tests are just a, they're just other,

0:05:28like all you're doing is just writing other code

0:05:30to test your other code, and doing it

0:05:33with some of the affordances of the tooling.

0:05:35And so in that sense, the pragmatic thing is sometimes

0:05:38to just use your code that way.

0:05:40And I wrote a unit test rather than,

0:05:43the other version I could have done

0:05:44is would have had some utility method

0:05:45that I pass an argument into the app on launch,

0:05:48and it goes through and messes with the database

0:05:50in an inappropriate way to get into that situation,

0:05:54and I would run my test that way.

0:05:55But functionally, I just took that code,

0:05:58and instead of kind of the awkward place

0:06:00of putting it actually into the code itself,

0:06:03that I don't want to ship to customers necessarily,

0:06:06because I don't want to somehow, down the road,

0:06:09accidentally create this bad situation

0:06:11in a customer's database.

0:06:13It's like putting it in the unit test

0:06:14that was pragmatic, made sense, and worked fine.

0:06:17But I have now officially written my first unit test

0:06:21after doing this professionally for like a decade.

0:06:23- How do you feel?

0:06:24Do you feel like a different kind of person now?

0:06:27- I feel remarkably the same.

0:06:29- Do you feel like you want to start testing everything?

0:06:32- Just all the things.

0:06:34I can go crazy and just, I'll start testing,

0:06:37like have all that have the,

0:06:38every function I write now needs to have a precondition

0:06:42and a postcondition, I think, remember this right?

0:06:44Is that how that works?

0:06:45- Yeah.

0:06:46- Remember, wasn't there?

0:06:47This is where you started getting to,

0:06:48like back in college, I remember taking

0:06:50a software testing course, and it was this very tedious,

0:06:55kind of mathematical approach to software development,

0:07:00where you had this thing where every function

0:07:02was supposed to have a particular precondition,

0:07:04like these are the possible ranges of values for the inputs,

0:07:07and then these are the, the postcondition is the value,

0:07:09possible values for the outputs,

0:07:11and you would like structure,

0:07:12and so it's almost at a certain point,

0:07:14you're like, your code becomes this giant equation

0:07:16that has to be perfect because you've sort of proved

0:07:19at every point that the input and output is correct,

0:07:21so the total output has to be correct,

0:07:23but I've never actually found that to be useful in practice.

0:07:28So, but no, it's, I mean, you're testing it is,

0:07:30it's just code, like I think that's the thing that is,

0:07:33like the way that I view it is that

0:07:34it is a different type of code, and it is useful

0:07:38insofar as it's like sometimes you have to write code

0:07:41to test your other code and to make sure it works,

0:07:43but beyond that, it's just a tool that's nice there,

0:07:48and like, but I don't really see, you know,

0:07:49like I have a couple, so now I have a few unit tests,

0:07:52and probably before I do releases going forward,

0:07:55I'll like run my test suite once, just because like why not?

0:07:58It's, you know, it's sitting there.

0:08:01- That's kind of the point.

0:08:03- But like I don't expect it to be the kind of thing

0:08:04where like I'll do continuous integration

0:08:06and have it like running all the time

0:08:07and have an Xcode server sitting somewhere,

0:08:09like running this and like doing all that kind of stuff.

0:08:12Like that doesn't, I mean, that's just not the way I work.

0:08:16Like I don't think of, I don't think of my code that way,

0:08:19and honestly, in a weird way, like I'm not,

0:08:22there's so many aspects too, I think,

0:08:24where because I'm a solo developer, I so often,

0:08:28my code is not always in a shippable state.

0:08:32Like I'm sure there are times that I'm,

0:08:34like I'm breaking the build, and I'm doing it,

0:08:37and it's fine because I'm not affecting someone else

0:08:39when I do that.

0:08:41Like I sometimes just wanna, like,

0:08:44I mean this is years ago now, but when I used to work

0:08:46in a bigger company, like it was a big deal

0:08:48to sort of ever check in code that would break unit tests.

0:08:52And obviously you can make your own development branches,

0:08:54and like there's ways to work around this,

0:08:57but it was a big deal, and it was something

0:08:58that you had to have in your mind,

0:09:00where sometimes I will just be like checking in code,

0:09:03and it's like sometimes my commit message,

0:09:04it just like seems to kinda work.

0:09:07(laughing)

0:09:08And I'm just like, and then like two commits later,

0:09:11it's like actually that didn't work at all.

0:09:12And it's like that's okay, because I'm just having

0:09:15a little conversation with my version control

0:09:17about my process as I go, and it's much,

0:09:21like commits are lightweight and great,

0:09:23so I can just make as many of them as I want,

0:09:25and they're just little checkpoints for me

0:09:27if I wanna be like oh man, I went down

0:09:29the totally wrong path here, let me just roll back.

0:09:33And I can do that in kind of a lightweight way,

0:09:34but yeah, anyway, so I've been down the road--

0:09:37- Do you do branching much?

0:09:38- Very little branching.

0:09:41What I tend to do is I have like my actual,

0:09:45like this is the version I ship,

0:09:47and then the only time I typically branch

0:09:49is if I am going to be working on a major update

0:09:54while concurrently shipping minor bug fix updates.

0:10:01So an example will be once I got this big update out

0:10:06that has all these bug fixes for everyone,

0:10:08I will likely make a branch for iOS 13,

0:10:11and kind of work on that a little bit,

0:10:13and then sort of work down that way.

0:10:15But typically, that is the extent of what I'm doing,

0:10:18and sometimes I also, I'm sure it's a terrible thing,

0:10:22but sometimes I make those branches kind of retroactively.

0:10:26I'll go down a path and be like huh,

0:10:29I should probably make a branch of this at this point.

0:10:32But it's all these weird, it's like these tricky things

0:10:35with like code hygiene and structure where it's,

0:10:39I have much more flexibility about it

0:10:41because I'm just a single developer,

0:10:44and like in the same way that unit tests exist

0:10:47to make my life easier, you know,

0:10:49like version control largely exists to make my life easier.

0:10:52And so doing something that was more heavy-handed

0:10:55or even just like, it's just never really clicked for me

0:10:58when that's like okay, I'm gonna work on version 4.1.2.

0:11:02Let me make the 4.1.2 branch and start working on that,

0:11:05and then merge that into master and like do all that.

0:11:09I mean, I'm even the, this is the,

0:11:12it's like, I don't know, this is like Dave's confessional

0:11:13where I'm like, I've actually changed masters

0:11:16several times too.

0:11:17- Wait, you can do that?

0:11:18- Well, I just have like new master and like new new master.

0:11:21(laughing)

0:11:22- Oh no.

0:11:23Master v2 final final final v1.

0:11:26- Yep, exactly.

0:11:27I've gone down that road too.

0:11:29And like it works, like it's fine.

0:11:31And I'm sure, yes, I'm sure there's some git command

0:11:33I could actually do, but like, 'cause every now and then

0:11:36if I actually like try, and I'm sure there's some like,

0:11:38is this when I'm supposed to rebase or something?

0:11:41- I don't know what that means.

0:11:42- And rebase like hurts my head, but there's--

0:11:44- There's a whole bunch of like advanced git maneuvers

0:11:46that just break my brain and I just don't, I don't do,

0:11:49I never, I just never do any of them.

0:11:50I don't know what they mean, I'm scared to ever try them.

0:11:53- Yeah, but like this is the thing where like sometime

0:11:55I'll make a branch, I'll go down this path and like,

0:11:57and then I'll go to merge it back into master.

0:12:00And then there'll be like a big massive set

0:12:03of conflicting changes or something in the,

0:12:05and like I don't, I don't wanna like deal with that.

0:12:09Like that's just busy work that isn't actually name important

0:12:12because the name of the branch, that's the one I ship,

0:12:16being called M-A-S-T-E-R is entirely like semantic.

0:12:20Like who cares?

0:12:22And so I'll just be like, it's like now I'll just be like,

0:12:24let me just take whatever this feature branch

0:12:26that I've been working on and I'll call it new master

0:12:29or I'll call it Dave's awesome code and like,

0:12:33this is what I'm shipping now.

0:12:35- Super master. - It's fine, yeah.

0:12:36And the thing is because like the way

0:12:40that version control works, like whatever the most recently

0:12:43worked on thing is like becomes the head of the tree

0:12:45of like version control, like essentially the old master

0:12:48just like withers away and dies and I never see it again.

0:12:51And like that's fine, so.

0:12:53- Wow, yes, you really are doing it more like a tree

0:12:56'cause you know, in an actual tree,

0:12:58branches don't ever merge back into the trunk.

0:13:01- That is true.

0:13:03- So you're kind of like, you're doing it more semantically

0:13:06to the word branch in its original meaning.

0:13:10- Yeah, my branches go off and then sometimes they kind of

0:13:14go back in towards the trunk but most of the time,

0:13:15sometimes they just go off and become their own trees.

0:13:18Like those really awesome trees where like the tree,

0:13:20you know it's like basically what I'm doing is that

0:13:21you know when the tree falls down and then a new tree

0:13:25is like springs out of the trunk of the old tree,

0:13:28so you have like a tree that's horizontal

0:13:29and then another one comes up out of it vertically?

0:13:31That is my version control system.

0:13:34- That's fantastic.

0:13:35No, I mean, and I think there, and first of all,

0:13:37before I forget, I actually use branching a little closer

0:13:40to the way I think we're quote supposed to do it

0:13:44but still not to the way that a large organization

0:13:46will do it 'cause you know, I do branching where I mostly

0:13:50am doing most of my work on the master branch

0:13:52for most of the year but I will create branches

0:13:55if I'm doing like a big experiment that requires like

0:13:58what if I tear apart the UI and rearrange things

0:14:01in a really big way that I know would take a lot more work

0:14:04before it would ever become shippable?

0:14:06I'll create a branch for that that like I'm gonna change

0:14:08a whole bunch of code in a way that I probably don't want

0:14:11in the master and might never want in the master

0:14:13so I'm gonna do this experiment off to the side.

0:14:16Another way, another time I create branches

0:14:18and by the way, most of those just get abandoned

0:14:21and then another way I do them more frequently

0:14:23is whenever there is a new beta season

0:14:26so I basically, WBC Monday every year,

0:14:30I create a new branch for this year's iOS 13

0:14:34and that branch requires iOS 13 so I get all the most fun

0:14:38warnings in Xcode about everything that's deprecated

0:14:41and everything that's changed and everything,

0:14:42all these new warnings and I just slowly plow through

0:14:45and work on that branch throughout the summer

0:14:47as I get things done and it's for the same reason

0:14:50that you kind of mentioned earlier of like I want to be able

0:14:53to ship updates to the master branch if necessary

0:14:56for the old OS over the summer and this summer,

0:14:59I've been doing a lot more of that than I ever had before.

0:15:02I think almost every summer, I've issued like between zero

0:15:06and one update in the entire summer for the old OS

0:15:08because I basically stop working on that completely

0:15:11and put all my resources behind the new OS.

0:15:13This year's a little bit different.

0:15:15You mentioned this too.

0:15:16This year is that, you know, it's,

0:15:19iOS 13 not only is in a pretty rough state,

0:15:22you know, and wasn't in a pretty rough state for a while

0:15:24and might still be but also it is the first update

0:15:27in a while to drop all device compatibility

0:15:29and so a combination of those two things I think

0:15:32is gonna result in a slower than usual adoption rate

0:15:35and also there's not a lot in iOS 13

0:15:39that I really must adopt on day one.

0:15:41There's a bunch of stuff I'm excited to migrate to

0:15:43and to add and to, you know, that'll make my app better

0:15:47and I am working on a big iOS 13, you know,

0:15:50UI rearrangement and everything but it's not urgent

0:15:54and so it's not gonna come soon.

0:15:56It's not gonna come like on day one.

0:15:58I'm not gonna do the thing I usually do

0:15:59where I drop support for the old OS basically

0:16:01in the first week of the new moon coming out

0:16:04'cause it's basically not ready yet.

0:16:06I don't have time and I haven't had the chance to finish it

0:16:09and it's too big of a job.

0:16:10So instead what I've been doing is working on stuff

0:16:14in the iOS 12 branch that doesn't require 13.

0:16:16So underlying changes, code, you know,

0:16:19like under like, you know, model level changes,

0:16:21audio processing type changes,

0:16:22anything that doesn't require new APIs for 13,

0:16:26I'm doing on my master branch and then, you know,

0:16:29every few weeks like pulling it and merging it

0:16:31into my iOS 13 branch and then I have a second branch

0:16:35off of the iOS 13 one for three column view

0:16:38'cause three column view breaks everything in the app.

0:16:40So that one is like the iOS 13 build is kind of shippable.

0:16:44The three column view branch which is branched

0:16:47off the 13 branch is not at all shippable yet.

0:16:51I can't even use it on my own phone yet, it's so broken.

0:16:53Like everything is broken.

0:16:55So I have this summer been doing a heck of a lot more

0:16:58in the master branch while leaving the beta branch

0:17:02as like my side project which is totally the opposite

0:17:05of how you have usually done it.

0:17:07But I do think there's a larger lesson here

0:17:10which I'll get to in a moment.

0:17:10But first, we are brought to you this week by ZOJO.

0:17:14X-O-J-O, ZOJO.

0:17:16ZOJO is a cross platform development tool

0:17:18for creating native apps for the desktop, mobile, web

0:17:21and even Raspberry Pi.

0:17:23ZOJO currently supports Mac OS, Windows, Linux, iOS

0:17:26and Android's coming soon.

0:17:28With ZOJO, you write just one version of your app,

0:17:30say on the Mac, then you just literally check a check box

0:17:32and you have a completely native Windows version as well.

0:17:35ZOJO uses native controls so your app looks at home

0:17:38on every platform and you'll be able to build apps

0:17:4010 times faster which will save you time and money.

0:17:43ZOJO is great for everyone, from newbies

0:17:45to professional developers alike.

0:17:47It's currently used by over 300,000 developers worldwide

0:17:51from students all the way up to Fortune 500 companies.

0:17:54Go take a look at their site and you can see

0:17:56just how many companies you know use ZOJO.

0:17:59It's free to use and then licenses are required

0:18:01to build standalone apps.

0:18:03To learn more, go to ZOJO.com/Radar.

0:18:06That's X-O-J-O dot com slash radar

0:18:10and you can get 20% off any license with the code radar.

0:18:13Thank you so much to ZOJO for the support of this show

0:18:16and Relay FM.

0:18:18So I think one of the big themes that,

0:18:21covering both testing which I also use but extremely little,

0:18:24like I have a test suite for the FC model database layer

0:18:29of my app which by the way is currently broken,

0:18:31like it doesn't even build.

0:18:33- Perfect.

0:18:34- And I shipped an FC model bug in my beta tree last week

0:18:38or the week before.

0:18:39I shipped a couple of builds that had a pretty significant

0:18:41bug in FC model that caused really bad performance

0:18:45and I didn't even run the tests.

0:18:47I haven't run the tests in months which is why

0:18:49the build is broken.

0:18:50'Cause like certain things changed and the test suite

0:18:54build broke and I didn't notice.

0:18:55So I'm not a good tester and you aren't a very good

0:18:58version controller and I think this leads to a larger issue,

0:19:04or a larger I guess lesson or truth to this which is that

0:19:08many of these tools, you mentioned continuous integration,

0:19:12even version control to some degree, I do think all indies

0:19:17should be using version control but you don't need to be

0:19:19doing a lot of particularly fancy stuff with it.

0:19:21And certainly testing I think would be in this category

0:19:25as well.

0:19:27These are tools that we have in the industry that

0:19:32are kind of optional for indie developers because they're

0:19:35not really made for us.

0:19:37They isn't to say they can't help us but that they are

0:19:41really much more necessary when you have a team

0:19:46of developers.

0:19:47When you have multiple people working on the same code base,

0:19:49people at different skill levels working on different

0:19:52components, maybe, and especially as your team gets larger,

0:19:56these things become more and more necessary and more

0:19:58and more beneficial.

0:20:00But when you're just one person, a lot of these advanced

0:20:03tools don't have that much bang for the buck for you.

0:20:08And that isn't to say, again, this isn't to say you can't

0:20:10benefit at all from them.

0:20:12You very much can benefit from all these things.

0:20:14Using advanced version control stuff, using automated

0:20:17testing and test-driven development, anybody, one person,

0:20:22up to 1,000 people can benefit from this.

0:20:25However, I think the math changes of what's worth it or not

0:20:28and to what degree you need to do this.

0:20:31How deeply do you need to run these tests?

0:20:34How advanced and how diligent do you have to be with your

0:20:37use of branches and different commit styles and commit

0:20:40messages and version control?

0:20:41When you're in India, it gives you not only the freedom

0:20:47to tone some of that down, depending on your preferences

0:20:50and your needs, but also, I think you have kind of an

0:20:54obligation to question a lot of this stuff and to question

0:20:58how far you need to go with it as an indie, because you

0:21:02don't have time to do it all.

0:21:04Time is incredibly precious to indie developers.

0:21:08It is by far our most limiting resource.

0:21:10And if something's gonna cost a ton of time to improve

0:21:15your code quality by 5%, that might not be worth it.

0:21:19So you have to kind of find that balance for yourself.

0:21:21Like which of these various advanced tools are actually

0:21:23worth it for you?

0:21:24- And I think too, there's a little bit of the time,

0:21:27but I think honestly, the thing that I find more important

0:21:31is motivation and fluidity, where there are certain things

0:21:36that you could say that you should be doing because of

0:21:44software engineering or just good best practice.

0:21:48You're setting yourself up for more success in the future.

0:21:51You're putting yourself into a good position.

0:21:54Those are all true.

0:21:56But any time that my tooling or my process is getting

0:22:01in the way of my creation, that is like, I will fight that,

0:22:06I will drop that, it will hurt my motivation,

0:22:08whatever it is.

0:22:09I mean, it is something that I think is, at least for me,

0:22:12is just, it's far better for me to be excited and just

0:22:17cranking away and making stuff and getting it out and

0:22:23being thorough, but in ways that are not cumbersome, maybe.

0:22:28And so many of these aspects of tooling or around testing

0:22:32or version control or whatever, just sort of get in the way.

0:22:35And I like being lightweight with this stuff.

0:22:39And as much as there have been times that it comes back

0:22:42to bite me, it has come back to bite me way fewer times

0:22:46than you would think.

0:22:47And having done this for hundreds of different releases

0:22:52over the years, if you are, the testing that's really

0:22:55important is getting it on devices and using it and playing

0:22:59with it and making sure that you really have an understanding

0:23:03of how the app is going to work and that you put it through

0:23:06the use cases and the experience.

0:23:09And the reality is that too, that kind of testing also,

0:23:13if you put yourself in that position, is you're exposing

0:23:16yourself to different kinds of problems, more qualitative

0:23:20problems rather than just quantitative problems.

0:23:22And that's something that is also very important, to be

0:23:25like, man, when I run this on this whole device,

0:23:27it's really slow.

0:23:29I mean, in some ways, you can sort of get that from a test.

0:23:31But having a number that says, running the test on this

0:23:34device, your test suite takes 16 seconds to complete rather

0:23:38than 13 seconds to complete, that may not be nearly as

0:23:43impactful on you or as important to you.

0:23:46And so that's just something else that I keep in mind.

0:23:48And I think especially, I like kind of, I don't know, maybe

0:23:51like over the summer, everything's just kind of feels a

0:23:54little bit more loosey goosey for me.

0:23:56But it's a time of year where I enjoy just kind of trying

0:24:00things out and being much less structured.

0:24:04It kind of makes me laugh, but I feel like at the end of the

0:24:07summer, the rightmost page of my phone is full of apps that

0:24:12are just like the white icon with the little icon grid in

0:24:17it.

0:24:18Like, not even joking, I think I have probably, let's see,

0:24:23one, two, three, four, five, six, seven, eight, I have 24

0:24:27of those.

0:24:27(laughing)

0:24:28Like an entire--

0:24:30- That's awesome.

0:24:31- It's like an entire page, and a few more of apps.

0:24:35And I like this time of year where it's like, ah, I wonder,

0:24:38it's like, hey, this is a new interesting API.

0:24:40Like, let me just make an app.

0:24:42And I'm not doing version control, I'm not thinking about

0:24:44release or anything kind of structured for it.

0:24:47It's just like Xcode, file, new project, give it a go, and

0:24:52like 99% of that will just get thrown away.

0:24:55But what is also kind of surprising and kind of nice is

0:24:59more often than not, there'll be one function from that

0:25:02little experiment, that little project, that little thing I

0:25:06did once on a hot afternoon in the summer when I was feeling

0:25:09bored.

0:25:10We'll come back and it'll be useful.

0:25:13Or later in the time it'll be like, oh, I wonder, I need to

0:25:18use this API, how does it work?

0:25:21Or like, I have in my mind, oh man, that API is full of

0:25:24dragons and is going to bite my head off, and I'm not even

0:25:26going to go near it.

0:25:28It's useful, and some of that is just about being loose,

0:25:33fast and loose with the stuff that you can be, and then just

0:25:36being conscious and intentional with stuff that is probably

0:25:39best not to be.

0:25:40And I think as indies, we have to think about the entire

0:25:44business, not just the code.

0:25:47And a lot of this, I think your instinct to avoid and get

0:25:52rid of things that slow you down from experimentation is

0:25:55very good for this business because you can have the most

0:25:59battle hardened, rock hard, 100% test suite coverage, you

0:26:04can have the best app in code quality in your category, and

0:26:08then someone else can come with a really crappy one and

0:26:10take a bunch of market share from you because they can move

0:26:12faster than you, or they're doing features that you didn't

0:26:14do, or they're undercutting you on price, or whatever else.

0:26:17The market does not reward code quality beyond a certain

0:26:21level.

0:26:22We're not launching the space shuttle here, we're making

0:26:24apps for phones for the most part that aren't very important

0:26:28that no one's going to die or get hurt if our app crashes,

0:26:31or behaves slightly weirdly.

0:26:32If you're in one of those fields where that's not the case,

0:26:35please don't listen to any of this advice.

0:26:37But most of us are doing things that that level of code

0:26:42quality mostly just hinders us, and it's really hard to

0:26:47accept as a developer, there's a bug here, I know there's a

0:26:50bug here, and I have to ship this version anyway because I'm

0:26:52going to miss the deadline if I don't, or whatever.

0:26:54But again, it's about finding balance.

0:26:58You can't have massive top 100% code quality and also still

0:27:03be nimble and be making an app that has good features and is

0:27:08competitive in your category if you're one person.

0:27:10You just can't, you're only one person.

0:27:12And so you have to kind of choose areas in which to take

0:27:14shortcuts that hopefully won't impact things too badly and

0:27:18will hopefully keep you nimble and keep you competitive.

0:27:20And you have to think about the whole business holistically,

0:27:23not just the code quality itself.

0:27:27- Yeah, and I think too, there's an aspect too of making

0:27:29sure that you understand why you're doing something that

0:27:34you're doing.

0:27:35Like, there's the reasons why many organizations have robust

0:27:40processes and like sophisticated version control or build or

0:27:45continuous integration.

0:27:46The reason why they do that may be to catch problems that

0:27:50won't exist in your case.

0:27:52Like some of the continuous integration stuff is about

0:27:54making sure that merge conflicts don't mess up the builds.

0:27:57Like you're not gonna have a lot of merge conflicts if you're

0:28:00the only person working on the code.

0:28:02It's not like someone else has been working on it.

0:28:03Like these are, there's a reason why it exists and that may

0:28:06not be something that actually applies to you.

0:28:08And so like doing something blindly is never a good idea.

0:28:11So it's also like, I think just being thoughtful and saying,

0:28:14is this actually useful?

0:28:15Is this making my product better?

0:28:17Is this improving my product in a way that my customers are

0:28:19going to appreciate and enjoy?

0:28:21And is it motivating me?

0:28:22Is it keeping me excited?

0:28:24Is it keeping me moving and like doing all the things that

0:28:27are actually driving the product forward?

0:28:30And if it is, great, do it.

0:28:31Otherwise, like drop it and it's like spending that time

0:28:35enjoying the summer instead.

0:28:37- And more importantly than a lot of these factors,

0:28:40you have to consider is it worth it?

0:28:41Because all these things have costs.

0:28:42They all have costs.

0:28:44You know, you can point to any of these things and say,

0:28:46well, if you have, if you do this kind of practice or this

0:28:49kind of technique, you'll save yourself from problems X, Y,

0:28:51and Z and that's invaluable.

0:28:53But nope, it has a value and all these things have costs.

0:28:56And you have to weigh whether those costs are worth it.

0:28:59A lot of times we get so obsessed with the cool part of what

0:29:02these tools and techniques can do that we ignore the costs.

0:29:05We ignore like, wow, that took me eight hours to set up

0:29:07or something like you ignore those costs.

0:29:10But these all have costs and you could be doing other things

0:29:13with that time instead, possibly even nothing and taking a

0:29:16vacation and you have to really weigh what that's worth.

0:29:18Companies are really bad at that.

0:29:20Companies waste a lot of money on things they might not,

0:29:23they might not need because they're afraid of different

0:29:24factors and everything.

0:29:25But you as an indie have to be more conscious of time cost

0:29:30of what these things take.

0:29:31- Yeah.

0:29:32- Anyway, this, here we go proves that we can talk about

0:29:34anything for a half hour.

0:29:35Thank you so much for listening everybody and we'll talk to

0:29:38you in two weeks, hopefully with a topic that time.

0:29:41- Yeah, bye.

0:29:41Bye.

0:29:42[BLANK_AUDIO]