Podcast Search

Under the Radar

142: Passion Projects

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:26:28Oh, God.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

0:29:28week.

0:29:28Bye.

0:29:30[