Under the Radar

142: Passion Projects


00:00:00   Welcome to Under the Radar, a show about independent iOS app development. I'm Marco Arment.

00:00:04   And I'm David Smith. Under the Radar is never longer than 30 minutes, so let's get started.

00:00:08   So today we are going to talk about passion projects or side projects or things that we work

00:00:16   on that aren't directly related to our core business or our job if you sort of work in a

00:00:22   more traditional environment. If you may remember a few weeks ago we talked about rest and about

00:00:28   taking breaks and about the benefit that that can have on you. That is sort of the passive version

00:00:34   of rest. In many ways passion projects or side projects are the active version of rest. This is

00:00:41   the you're doing something, you're not doing nothing, you're working, but you're working on

00:00:46   something in a very different way and with a very different purpose. And this is something that both

00:00:51   Marco and I worked on this summer. We had little side projects or passion projects that we worked

00:00:56   on and I think we both saw some benefit, learned some lessons, and it was an encouraging experience

00:01:02   for me. And so this is something that I wanted to bring up as a topic because I think it is something

00:01:07   that is very easy as you become more and more professional in your career that you may start

00:01:15   to do less and less. If you learned a program in an academic environment you probably spent the

00:01:21   first few years of your development making projects that don't go anywhere or aren't

00:01:27   particularly useful. Your teacher will say, "I want you to make an app that does something like

00:01:32   this. You need to play Tic Tac Toe or we're going to display the game of life and have it display."

00:01:42   You have all these toy examples. Or if you read any programming book you have these examples that

00:01:48   you're like, "Hey, we're going to build an inventory management system," when you're working

00:01:52   on how to build a web server. And you have this process where you start with a new project, you

00:01:59   build something, and then you put it on the shelf or throw it away. And the purpose of that, in that

00:02:05   context, is to learn, is to develop a new skill. But I think it is easy once we become professionals,

00:02:13   real pros, where we go to work or we have something that we're doing for our living, is to forget the

00:02:20   benefit of that experience, to forget the fact that there's a reason when you're learning something.

00:02:25   The best kind of learning I've ever done is through practical examples of working on a problem

00:02:30   and developing something from scratch. And I think a great way to continue that as a professional

00:02:40   is to have side projects or passion projects or things that you work on. And ideally even,

00:02:45   these are projects where you are intentionally putting them into a place that is tangential to

00:02:52   what you're working on. It's not really a passion project if I start making some other kind of

00:02:59   fitness tracking app. That's my business, that's what I do, so it might be useful. But really,

00:03:06   it's kind of like building a prototype for a potential product. I think a side project in

00:03:10   something is really best if it's in something tangential to what you're doing, where you might

00:03:15   learn some skills that you can reapply, which I think is something I'll get it to as one of the

00:03:20   benefits. But it is not necessarily the primary goal. Because I think really, doing this type of

00:03:25   work has two, maybe three great benefits. And I think the first one is you can learn new skills.

00:03:33   Just try a new framework, try a new language, try a new platform, try something that is different

00:03:40   than what you normally have to do, and you will develop the skills needed to do that in the first

00:03:45   place. Two, you can practice the basics. There are certain fundamental things that we can start

00:03:54   to take for granted, that you have to set up, that if you do file a new project, you start to use.

00:04:01   And it lets you get out of any kind of groove that you may be stuck in with your existing project,

00:04:08   especially if you just have one big app that you work on all the time. There may be a certain way

00:04:12   that you're just used to doing things, but if you start fresh, you may see those basic things

00:04:18   differently. But even there, even if you do it the same way, there's just something good about

00:04:22   practicing, like getting code into Xcode, that you kind of have to start from scratch and go through

00:04:28   that process. And that's just a good exercise, in the same way that once you know how to run,

00:04:34   if you want to stay fit, you can't just say, "Well, I know how to run. I've been doing it

00:04:38   since I was two." You have to practice it. You have to actually go through the motions if you

00:04:43   want to stay fit and capable with that action. So in the same way that development, you've got

00:04:49   to actually sit down in Xcode and put things out. And so it's just a great opportunity for that.

00:04:54   And then thirdly, it's just a great way to have some variety. It can be easy to get kind of stuck

00:04:59   into a place where you get kind of bored, or you hit a dead end creatively. And there is something

00:05:08   fun about solving an interesting problem. I love the best passion projects are the ones that kind

00:05:14   of get stuck in your head, and you start thinking about funny little solutions or creative options,

00:05:19   or like, "Huh, I wonder if I could do this, or I wonder if I could do that."

00:05:23   You have these ideas that you can then explore, and it stimulates you creatively. Like in the

00:05:28   way we were talking about when you take a break, sometimes just doing nothing can sort of reset your

00:05:33   framework and help you to be creative again. Sometimes just making something can also be

00:05:39   creative and a useful thing. Yeah, and you mentioned earlier that it shouldn't be something

00:05:45   that is tied to your primary business. This is a trap that I fall into very frequently, which is,

00:05:51   like, I'll make some kind of side project that actually solves a need that I have or that I

00:05:57   think might actually be a good market, and it's no longer a side project. Then it's just a project.

00:06:03   Then it's just another app I have to maintain as part of my business. There is, I think, a happy

00:06:08   medium, though, which is what you mentioned, which is taking something that you know how to do and

00:06:13   doing that on a different platform. This is kind of what I did with Forecast. Forecast is, so I

00:06:21   have Overcast. The podcast player Forecast is basically a podcast encoder that is directly

00:06:25   related to Overcast, obviously. That is audio related and actually shares some code with

00:06:31   Overcast for some of the processing stuff. But it was for the Mac, first of all, which is,

00:06:37   you know, I don't really do much on the Mac, and I really don't know much about Mac programming. So

00:06:43   to do not only a Mac app, but to do a non-trivial Mac app where it has multiple document windows and

00:06:49   everything, like that was actually a huge learning experience for me. And it was different enough

00:06:54   from Overcast in a lot of large ways that the small ways that it was the same, which is like

00:07:00   it's related in audio and stuff, I think that kind of didn't count. The downside, though, is that

00:07:06   I did make it a product, basically. Like, it's free, but it's still a product I have to maintain.

00:07:10   Like this summer, I have never seen Mojave running. I have never tried to run Forecast on Mojave.

00:07:19   I have no idea if it works. I assume people would have told me by now if it didn't, but I haven't

00:07:25   maintained that at all yet because I've been too busy with Overcast. Similarly, I have a Mac app

00:07:31   that's a much better side project example called Quitter. Quitter is a very simple little dumb

00:07:36   little menu bar app that is barely an app at all because it has almost no interface and almost no

00:07:40   code. But it basically allows you to set time limits and say, like, if you haven't brought this

00:07:47   application to the foreground in X minutes, just quit it. And it was a way for me to basically use

00:07:52   Twitter and stuff less. So, like, whenever it'd be in the background, it would just automatically

00:07:55   quit. Anyway, there's been changes to the way Apple events are allowed to be sent between apps

00:08:02   on Mojave. And I think Quitter might break under that, but I don't know. I haven't tried. I barely

00:08:09   maintain it. I haven't looked at the code for that in probably two years. But again, I've been

00:08:14   too busy. And so, like, part of the risk you run releasing side projects is they will at some point

00:08:22   require maintenance. And even if they are free and you set expectations like, hey, look, this is a

00:08:27   side project. I'm not going to be updating it a lot. I'm not going to take anybody's money. Like,

00:08:31   just have this be out there in the world. Even then, you still kind of have some obligation,

00:08:36   at least the way at least a lot of people perceive you to have some obligation to keep those things

00:08:41   up to date with new OS releases and stuff. And so it's really hard for something to be just a

00:08:48   frivolous side project that never needs any additional work and never becomes kind of

00:08:52   business-like. - Yeah, and I think especially as soon as it becomes something that you

00:08:58   share with anyone else. - Yeah. - Like, that is, I think, is the, like, this precipitous point where

00:09:03   it changes from being a side project just as something you're doing for yourself, something

00:09:08   you're doing for your own education or development or for your own fun. Like, as soon as you share it

00:09:14   with someone else, I mean, maybe beyond, like, your spouse or your friend or your children or,

00:09:20   you know, a situation like that, but as soon as it becomes something that's public, it suddenly,

00:09:25   I think, switches and it, like, it stops being a side project and it becomes a project. It may be

00:09:30   a less important project, but it's, now it's a thing that you're going to have to manage

00:09:35   its life, its life cycle. That if it turns out Quitter doesn't work on Mojave, you're going to

00:09:39   have to decide and deal with the, like, "Okay, do I need to, like, announce that I'm not supporting

00:09:44   it anymore? Do I need to take it down? Do I, like, it's suddenly this thing." Whereas, ideally,

00:09:50   these projects are just things that you are doing for fun, and then when they're done, they kind of

00:09:54   go on a shelf. Or you use them if they're useful to you. Like, sometimes it's fun if they solve,

00:09:58   you know, solve a problem you have, but it's nice for it to not necessarily be something that you

00:10:03   make public. And I think it's good to go into these kind of things, ideally, without the

00:10:07   expectation that it won't go anywhere. I mean, maybe it's nice if it goes somewhere, or it can

00:10:12   be useful if, say, you're a younger developer and you're just trying to have some level of portfolio

00:10:19   to show people. I know I don't do this for, I don't, I haven't interviewed someone in years,

00:10:23   but I often hear from people that one of the things they like to see is, you know, "Can you

00:10:26   show me something that you've made?" And this may be an example of an opportunity for you to make

00:10:31   something that you can show, but it's still, it's, you need to be careful, I think, because the,

00:10:36   it's like, as you're talking through this experience you've had a few times of doing this,

00:10:40   it's like, it can become a trap where the thing that may have started off being a side project

00:10:46   for fun now becomes not necessarily a burden, but something that you have to think about in

00:10:51   a different way, and something that you may have to make sort of grown-up professional decisions

00:10:55   about, which, whereas, ideally, you're just making it for fun, and it's just using it as a,

00:11:01   as a benefit to yourself. -It's also, it's a lot more work to make something that is releasable

00:11:06   to anyone else, like, you know, when you're just making something for yourself, it can work only

00:11:11   on your computer, only for your needs, and that's it, like, you don't need to, to, you know, account

00:11:18   for certain edge cases, you don't need to do things like have a nice icon for the app, or have

00:11:24   any icon at all for the app, frankly, or, you know, you don't have to do things like, you know, set up

00:11:28   any kind of distribution, if it's not an, if it's like a Mac app, you don't have to do things like

00:11:32   set up a sparkle feed somewhere, and do auto-updating, and stuff like that, like,

00:11:35   you can just have it be a code that you, a code project that you build for yourself whenever you

00:11:40   need it, and that's it, like, there's no distribution overhead, there's no generalization,

00:11:45   there's no, like, officialness, you know, when it's out there, you know, what if you get, like,

00:11:49   a trademark complaint from somebody, or a copyright complaint, because you stole someone's icon,

00:11:52   or something, like, it's just, it's so much more work to do something that is distributable,

00:11:56   versus something that you literally just have to use on your own computers, and, you know, and,

00:12:01   like, this is why, like, I have, I have lots of little scripts, and, and even a couple of apps

00:12:07   that I have built for myself that I've never distributed, and it's just, because it's just not

00:12:12   worth it, and we'll talk about that in a minute, in more detail, but, like, there are some that are

00:12:16   tools that I use, like my, my track aligning utility, everyone keeps asking me to release

00:12:20   the track aligning utility for, for podcast double-enders, there's a reason I haven't,

00:12:24   it's a command line app that works about 85% of the time, it's fine for me, but it's not really

00:12:31   distributable, and it's not good, it's not good enough for that, and it would just create problems,

00:12:36   and, and things I had to work on, meanwhile, I haven't had to look at the code in something,

00:12:39   like, five years, and I haven't worked on it at all in that time, and it's been totally fine,

00:12:44   it just keeps working as a tool for me, and that's it, like, forecast, I used something like two

00:12:50   years before I distributed it to anybody else, or publicly, at least, because that, again, it was,

00:12:55   like, it was a tool that I wanted, I built it myself, but I didn't, I didn't have the time or

00:13:00   the will to, to go through everything it took to make it public, and that's, you know, and there's

00:13:06   lots of apps, like, like, maybe my ad blocker, I probably should have done that, but didn't,

00:13:11   there's, you know, certain things that, like, I shouldn't have released, but, you know, it's,

00:13:16   all these things have been learning processes, and so, the one that I think we're about to talk

00:13:19   about is, I made an app this summer called Town Painter, and my idea for this summer was, I, I

00:13:27   vacation in this town that has this nice little grid of walkable streets, and I loved walking my

00:13:33   dog, and so, I wanted to be able to basically walk the entire town, walk every street in town,

00:13:40   and just draw on a map where I have walked, so I know which ones I haven't gotten to yet,

00:13:44   and, because I wanted to walk every single block in town, and so, it was, and I also, you know,

00:13:50   I wanted to learn Swift a little bit better, because I really had barely used Swift,

00:13:54   there's lots of, there's lots of APIs that are involved in making that kind of app

00:14:00   that I wouldn't have had a chance to play with in Overcast for many good reasons,

00:14:04   things like location APIs, the workout and health kit storage API, because I stored everything in

00:14:09   health kit, I was working out data, map kit, and drawing on the maps, like all these things,

00:14:14   I really had never, I never had a reason to use those in like my main app, or any app,

00:14:19   any other app I made, so it was a good learning experience for all that, and I made this great

00:14:24   app, and I even, I drew the icon myself, and I think it turned out pretty good, it went through

00:14:29   a few iterations, so I kind of learned a little bit better icon design, which normally I don't

00:14:33   do myself, I, you know, the name, which actually, I believe you came up with the name, right?

00:14:38   - Maybe, I don't remember.

00:14:39   - I think, you at least came up with the name Paint the Town, and I think I turned it back into

00:14:44   Town Painter, but yeah, it was, so, like, it was a nice collaboration between me and you,

00:14:50   and it was overall really a very nice project, and I'll come back to that in a second, but first,

00:14:58   let's talk about our sponsor. We are brought to you this week by Zojo. Zojo is a cross-platform

00:15:04   development tool for creating native apps for desktop, mobile, web, even the Raspberry Pi.

00:15:09   Zojo currently supports macOS, Windows, Linux, iOS, and Android is coming soon. With Zojo,

00:15:15   you write just one version of your app, say, on the Mac, and then you can literally check a

00:15:19   checkbox and have a completely native Windows version as well. Zojo uses native controls,

00:15:25   so your app looks at home on every platform. You'll be able to build apps 10 times faster,

00:15:30   which will save you time and money. Zojo is great for everyone, from newbies to professional

00:15:35   developers. It's currently used by over 300,000 developers worldwide, from students to Fortune 500

00:15:41   companies. Go take a look at their site, and you'll see just how many companies you know use

00:15:45   Zojo. Zojo's free to use, and licenses are required to build standalone applications,

00:15:50   and you can see more for yourself at Zojo.com/radar. That's X-O-J-O dot com slash radar.

00:15:56   To find out more, and listeners of this show can get 20% off any license with the code radar.

00:16:02   Once again, Zojo.com X-O-J-O dot com slash radar, and code radar to get 20% off any license. Thank

00:16:08   you so much to Zojo for the support of this show and Relay FM.

00:16:11   So I had this wonderful Town Painter app, and honestly, I really enjoyed the process of building

00:16:18   it. It didn't take very long. I spent probably a week on it, maybe two at most, but I probably

00:16:24   wasn't that long, probably about a week. And it really did teach me a lot more about building in

00:16:29   Swift. And that, I think, was the biggest value to me, besides actually getting to use it all summer,

00:16:35   which I did, and it worked great. And I did indeed paint the entire town, and it didn't take me all

00:16:40   summer, it took me June, so that was even better. But at some point, I realized, like, first, I was

00:16:49   kind of making it to be somewhat releasable. That's why it has a nice icon, I gave it a name,

00:16:54   I gave it, like, you know, it's a pretty decent interface, it isn't hard-coded to anything of mine,

00:17:01   you know, it's pretty generalizable. But I decided while making it, like, you know, I've gotten a lot

00:17:07   of value out of just making this. I got a lot of Swift knowledge, I got to play with these new

00:17:12   APIs that I don't normally get to play with, I have become a better developer, I got to even

00:17:17   experiment with icon design, I got to become a better developer by making this app. And what

00:17:23   am I going to do, sell it, you know, or put it on the store? How many downloads is that really going

00:17:28   to get? And then I have an app that I have to maintain when there's, like, a new iPhone release

00:17:33   and stuff, and I don't have time. So, basically, I made the app, I walked the entire town, and by

00:17:41   July, it was done. And so I thought, okay, that app is done. Like, I got what I wanted out of it,

00:17:48   I drew my map, I'm going to do the same thing next summer, I'm going to have the same, you know,

00:17:53   rebuild the code, fix any obvious problems on the new phone, which there probably won't be,

00:17:57   and then I'll just start using it again next summer, and that'll be it. And that's, I think

00:18:01   that's enough for that app for me. Like, I don't think it would ever get enough usage, like, as

00:18:06   soon as I started making it, I started hearing people saying, like, you know, you can just do

00:18:09   this with, you know, all these different fitness apps that already do this. It's like, there's,

00:18:14   like, pretty much every major fitness app, like, you know, Strava and Runkeeper, and even your app,

00:18:18   even Workouts++, all support features that are very similar to this, if not this exact same

00:18:22   thing. And so it's like, you know, I really don't need to distribute this, I really don't need for

00:18:27   this to be a product, and I don't have time for it to be a product, I need to focus on Overcast,

00:18:31   and, you know, all these Mac apps I keep neglecting. So, like, I decided, you know,

00:18:37   that was it. And when I got my new iPhone X, I even deleted the app off my phone, I'm like,

00:18:41   well, I'm done until next summer, like, I don't even need the app to be taking up a spot on my

00:18:44   home screen anymore. And I'm very happy with that just being it. Like, it was a great learning

00:18:50   experience, it was useful for me for a month, it'll be useful to me next summer for another month,

00:18:55   and that's it. Yeah. And I think there is something, like, delightful about that, like,

00:19:00   that it's, you make, you made something, served a purpose, it was fun, you learned something,

00:19:05   and it doesn't have to be more than that. Like, it's, there's something just, I don't know,

00:19:10   there's something almost beautiful about just making something for its purpose, and then its

00:19:14   purpose is, it's lived out, and then you can move on. And, like, you learn something, and what you're

00:19:18   taking with you forward isn't some kind of project or some thing that you have to maintain, but you're

00:19:23   just taking the knowledge and the learning that if you need to work with location APIs, or mapping

00:19:28   APIs, or health kit APIs, or Swift in general, it's now something that you have experience with,

00:19:36   that you just wouldn't have had otherwise, and you had to solve some interesting problems. Like,

00:19:40   I helped you a little bit on some parts of this, because obviously health and fitness related stuff

00:19:45   is something that I worked on, and I get to, you know, I dug around a little bit in what you're

00:19:49   doing, and it's like, you know, it's your having to solve problems at a different level than,

00:19:53   you know, sort of than anything you're going to have to deal with in Overcast. And I think,

00:19:58   you know, as simple as a project like this is, and this is something that I think is probably a more

00:20:01   interesting point, is that ostensibly what you did is a very simple application. You know,

00:20:07   what you did, it's as you walk around, track my location, and plot it on a map, and overlay past

00:20:14   walks on the same map. Like, that is ostensibly what the app does. There's a lot of, however,

00:20:19   really interesting problems you have to solve, and things that come up. And as an example, there is,

00:20:23   I had a little teeny part of this app that I, we were talking about it, and the question became,

00:20:30   "How would you know when you're done?" And the, we just talked a little bit about it,

00:20:35   but I couldn't get that question out of my head. For like, like days, I kept being like,

00:20:39   "How could you work out when you're done?" Because that's, it's like, ostensibly, it's a little bit

00:20:45   simple, but it's actually kind of a tricky problem, because you're dealing with just

00:20:48   raw location data, and are you gonna, you know, how do you know when you've actually covered every

00:20:53   street segment? And I ended up, just because I couldn't not stop, I couldn't stop thinking about

00:20:58   it, I ended up solving that problem. And it's like, I ended up going to like raw OpenStreetMap

00:21:03   data for the island that you're walking on. - Right, because Apple Maps doesn't even give

00:21:07   you the street data. Like, you just tell it, render these things in this geometry, you know,

00:21:12   in the world, but you can't read street data for Apple Maps. So you had to actually go to

00:21:18   OpenStreetMap, download the map for where I was, you know, bound it off like with where I could,

00:21:23   where I could walk. - And like doing this all like in raw, like I just got an XML dump from

00:21:28   OpenStreetMap, and it's like, I had to learn how to parse that. What does that actually mean? Like,

00:21:33   what are the different features that are actually useful? Because obviously it's not that, like,

00:21:37   it'll tell me all kinds of things, like where the sea, where the ocean is, what like, I don't need

00:21:42   to worry about that segment, I need to worry about the roads. What is an actual road versus a path?

00:21:47   Like, do paths count? - Right, and once you have a feature that's like, tells you how complete it is,

00:21:53   then you have basically like infinite feature creeps. And it's like, well, you could maybe,

00:21:58   you know, build an incentive system to like try to keep the ratio high, you know, have old ones fall

00:22:03   off the end of like, have like a sliding window, so you can say, in the last 30 days, how much have

00:22:07   I done? Am I at 95%, am I at 99%? Then you have to realize, oh, as you said, some of these are not

00:22:13   actually streets, some of the data is wrong, or some of them are not actually reachable,

00:22:16   you can't actually walk there, or there's like, you know, there's a house in the way,

00:22:20   or it's a private road, you aren't allowed actually on it, and so you have to have some way to mark

00:22:24   certain road segments as unreachable. And it's like, there's like infinite potential feature

00:22:29   creep for something like this, and it's so tempting, maybe you could notify the user with

00:22:34   prompts if they haven't walked that day. Like, there's infinite amount of potential feature

00:22:39   creep on this that could just make this project balloon in scope and time, and that's extra true

00:22:45   if you do release it, 'cause then the public is asking for these features, or you're competing

00:22:48   with somebody, like, it's extra true with that, but like, even as a personal project, the temptation

00:22:53   for feature creep is very strong, and I had to resist a lot of that. - Yeah, and like, in the end,

00:22:58   like, the app does exactly what it says, and like, my little part of it that calculates your percent,

00:23:02   it's like, it just does the best job it can, and I feel good about having solved that problem,

00:23:06   that I could finally put it out of my head, and it maybe doesn't solve it perfectly, maybe it solves

00:23:11   it like halfway, or it gives a reasonable estimate of what percentage of the roads you've worked on,

00:23:15   but I learned something. I learned how OpenStreetMap data works, I learned how to do some kind of cool

00:23:20   segmentation stuff with that, and then I moved on, and like, I haven't looked at that code since,

00:23:25   I don't expect to ever look at that code ever again, but I learned something from it, and you

00:23:29   know, that was the goal. - Well, and you know, at some, some day in the future, some of this might

00:23:33   prove useful to you. Like, you helped me out very much by this, by giving me a block of your code

00:23:38   that reads the work I did at a health kit and plots it on a map, which is great, because that saved me

00:23:43   a ton of time, and then at some point, I decided to tackle the unnecessary problem for the scope of

00:23:49   this, of, you know, there's a lot of points in this data, I should smooth out those points so it

00:23:53   renders faster, and there's fewer points, you know, to manage on the screen, so I did some research

00:23:59   for a day where I should have been doing anything else, and learned like algorithms for reducing the

00:24:04   number of points with like the least disturbance to the shape of the data, and I figured that out,

00:24:09   I implemented it, and then at some point, you had a need for that, and so I gave that back to you,

00:24:13   and so we kind of helped each other out with this, and you know, all, you know, sharing techniques

00:24:18   and code samples that solve problems that we mostly don't have, but are kind of nice to get

00:24:26   solved sometimes anyway, and that's kind of, you know, that's kind of what this whole episode's

00:24:29   about, like just doing stuff that you might not need to do, but that's intellectually satisfying,

00:24:36   and might prove valuable to you in other ways later. Yeah, exactly, like, and I think, so another

00:24:42   example just quickly that I wanted to talk about is this summer when we were traveling in Europe,

00:24:47   I built another app just for myself. You? Which, yeah, well, which is funny, you say that as though

00:24:53   it's like I build all these apps, the last time I launched publicly an application was two years ago.

00:24:57   Yeah, that's fair. I'm actually not that prolific anymore, but I've made a bunch of apps, but I just

00:25:02   don't really, I've learned the lesson and stopped releasing them. Like our Tesla app that we made

00:25:07   together. Yeah, exactly, we made an app for managing our cars. Yeah, because the built-in

00:25:10   app wasn't very good, and we, so we made our own Tesla app that, like, you know, there's limitations

00:25:14   of it, like if you want to log out, you have to crash the app. It's fine. It's fine. It works for

00:25:21   us. Yeah, exactly. Anyway, so when I was in England, my son loves departure boards at train

00:25:29   stations. Like this is just, he just absolutely loves them. Like watching all the trains come in

00:25:34   and working out which platform which train goes to, and if you've ever been to a British train

00:25:38   station, they have these just massive walls with departure boards on them, and he just loved them.

00:25:43   And it became this thing that over the summer, I was like, "Well, would you like to make your

00:25:48   own departure boards? Like, should we, you know, let's design an app together. Let's make our own

00:25:52   departure board." And he just thought this was the funnest thing ever. And, you know, we sat down

00:25:57   with a piece of, you know, like paper and pencil, and we drew out what the app would do. And then we

00:26:01   sat down and kind of, he's not quite at the level where he's learning to code a little bit, but he

00:26:05   isn't really at that point where he's able to code code, but, you know, he, we designed it together.

00:26:10   I sat down and we worked on, you know, what it should look like together. And we had that part,

00:26:15   and that was a really fun experience for us to work together. And then I worked on the,

00:26:20   like the ugly parts of the app that he would have no interest in dealing with, and I had barely

00:26:24   any interest in, because like getting the actual data, you have to get from a SOAP API.

00:26:28   Oh, God.

00:26:29   If you've ever worked with SOAP is like the most, like just mind-bending API to work with.

00:26:35   But I learned how to do that. I've never done that before. Now, if that ever comes up in the future,

00:26:40   if I ever have to deal with a weird API, like I have this tool in my back pocket for how to do it,

00:26:45   I worked out a way to do that. I actually have like a caching proxy that takes in the SOAP data

00:26:50   and turns it into JSON. So I didn't have to make our actual app very complicated. Like,

00:26:55   I had all this fun experience. And it turned into, like, I solved some interesting problems. I had a

00:27:01   deal, I wrote it in Swift, just like you did with Town Painter, where it's like, I got to experience

00:27:06   a bunch of new APIs in Swift. And like, the reality is this app does what like, you know,

00:27:12   60%, 70% of apps on the App Store do, which is takes in some JSON data, parses it, manages it,

00:27:18   and displays it to the user. And I got an experience of doing that. And in the process,

00:27:22   I got to spend some really great quality time with my son doing something that he really enjoys and

00:27:26   that we used in practical ways. Like during our trip, which was kind of even like doubly fun,

00:27:32   which he thought was great, but we're like, running late to catch a train, and we need to know what

00:27:36   platform our train's going to be at. And I could bring up my UK Departure Sport app. And you know,

00:27:41   he could, he knew exactly how to make it work. And he could find out which platform it is. And

00:27:44   he could feel like a hero for saying like, you know, we need to get to platform six by

00:27:47   2.2.47. Like, that's really fun. And I learned something, you know, we had a nice experience,

00:27:54   and it became something that like, I don't expect to use that ever really again. I guess whenever

00:27:58   I'm in England, I might use it again. But I don't care. Like, I didn't have to worry about like,

00:28:04   API pricing rules and things where like, it's like all these things that if I released it,

00:28:09   and suddenly it's like a thing, I have to manage the cost of that. Whereas for personal use, it's

00:28:14   like, I'd never hit my limit of like 1000 API requests a day. Like, that was never a problem

00:28:19   for me. And if I did, and I spent, you know, spent six cents in API charges, it's not a big deal.

00:28:24   But I learned something, I had a fun experience with my son, I have this little like fun memory

00:28:28   now. And I can move on. And I learned something from it. And I think it just reinforced this thing

00:28:34   in my mind that I think every year, I should be working on a project like this every year,

00:28:39   every six months, whatever it is, I should have something that I make for fun that I learned

00:28:44   something from, and then I can just put on a shelf and intentionally try and put it on that shelf,

00:28:48   then unless it turns out to like, be this radically awesome thing that you just can't

00:28:52   hold to hold on to, and you have to share with the world that you just put down, and you're okay with

00:28:57   that. And I think going into that, that mindset just dramatically helps your ability to get what

00:29:03   you want out of it without having to be fearful to start or sad going forward.

00:29:09   Jared Ranerel Yeah, that is a balance and a lesson that

00:29:13   has taken me a long time to learn. I'm not sure I fully learned it yet. But having done it, having

00:29:18   successfully done that with Town Painter feels really good. And I'm really, I hope that I am

00:29:24   better with that in the future. Well, thanks for listening, everybody. And we'll talk to you next

00:29:28   week.

00:29:28   Bye.

00:29:30   [