609: Blake Watson on Home Cooked Apps
What is a home cooked app? Blake Watson is on this episode to talk all about the kinds of apps that make a good home cooked app, tips and advice he has for making them, resisting the urge to monetize or growth hack them, and a few CodePen v2 thoughts sprinkled in at the end.
Guests
Time Jump Links
- 00:52 Introducing Blake Watson
- 03:06 What's it like working for NASA?
- 06:10 What is a home cooked app?
- 09:17 What kind of home cooked apps have you made?
- 19:14 What's A Fine Start?
- 30:21 Popularity of React vs Vue vs Angular
- 34:01 What have you learned about making home cooked apps?
- 43:57 What's Watson Bros games?
- 55:13 Resisting the urge to monetize
- 01:42 CodePen v2 thoughts
Links
- Watson Brothers Games
- An app can be a home-cooked meal
- blakewatson.com – About
- blakewatson.com – MagnoliaJS 2023: The joys of home-cooked apps
- MRI Technologies
- blakewatson.com – Building our own private Discord knockoff
- blakewatson.com – Things I miss
- blakewatson.com – Use your Mac the way I do: a thought experiment
- Overimagine1/old-discord-font: CSS to revert Discord's font change.
- A Fine Start - minimal new tab page
- Knockout : Home
- Vue.js - The Progressive JavaScript Framework | Vue.js
- The Programming Language Lua
- Save 10% on Thronefall on Steam
- Game Off 2023 - itch.io
Episode Sponsors 🧡
Transcript
[Banjo music]
MANTRA: Just Build Websites!
Dave Rupert: Hey there, Shop-o-maniacs. You're listening to another episode of the ShopTalk Show, a podcast all about front-end Web design and development. I'm Dave Rupert, and with me is Chris Coyier. Hey, Chris. How are you doing today?
Chris Coyier: I'm doing pretty good. You know? Good day. Fine day. A fine start for a day, I'd say.
Dave: Hey!
Chris: We have a special guest in the house this week! Dave was tempted to call him yet another triple threat. You know?
Dave: Possibly a triple-threat.
Chris: Sorry, Josh.
Dave: Possibly another triple-threat.
Chris: There's another one out there. Triple-threat Blake Watson. How ya doing, Blake? Thanks for joining us.
Blake Watson: Hey. Thanks for having me. Yeah, doing great.
Chris: Yeah, right on. Thanks. Blake, people might know you from your excellent blog, which is probably... I kind of feel like just ripping you off someday. I'm just going to make my blog look like Blake's blog. It's extremely nicely designed and it annoys me how nice it is. [Laughter]
Yeah, anyway. Beautifully designed.
Blake: I ripped. All of the colors came from a VS Code theme that I liked, so.
Chris: Oh, nice.
Dave: Ooh... That's a good inspiration.
Chris: Yeah, it is.
Dave: Yeah. I hate picking colors. I pick... Only bad colors come out of my color picker. That would actually be a good, home-cooked app. We can talk about that later. [Laughter]
Chris: Yeah, it might be. Oh, that's a good idea.
Dave: Just a bad color picker.
Chris: I obsess about it, too, because I feel like I have good taste in colors. I could see. I could be like, "Those are beautiful colors right there." I'm like, "I can do that, too." Then I go to pick and it just looks like a child did it. You know?
Dave: Yeah.
Chris: Anyway... Wow! We already got off on a tangent there. We thought we'd have Blake on because we can talk about a whole bunch of stuff. He's got all kinds of interesting blog posts and things that we could get into, including a concept called home-cooked apps that both Dave and I really like. Presumably, Blake does too because he did a whole talk about it at MagnoliaJS, which is down round about Mississippi, which is where you're from, right?
Blake: Yeah. The first and only Web conference there.
Chris: Is it really? Yeah.
Dave: Cool.
Chris: Yeah, I listened to the talk where you're like, "I'm not going to say I invented this conference, but maybe I did."
Blake: Yeah. I was jealous of all the conferences going on in places that were hard for me to get to, so -- a long time ago -- I was like, "We need one of these in Mississippi," and then it happened, so I don't know. I willed it into existence.
Chris: Yeah. Dang right! If you will it, dude, they will come. Is that how that... [Laughter] Do you build it?
Dave: If you--
Chris: I think I just combined two things there.
Dave: If you blog about it, they will--
Blake: There we go.
Chris: Yeah.
Dave: --they will come. Yeah.
Chris: You have a pretty cool job as well. Once in a while, you drop something like, "I designed this dashboard for NASA." You're like, "I'm sorry. What did you do?" [Laughter] Tell us about that.
Blake: Yeah, so I work for MRI Technologies. They're a contractor working on projects for NASA and other space companies ... aerospace. Yeah, we make a Web app, like a dashboard for doing sort of logistics and management of hardware, like the spacesuit. The spacesuit, it turns out it's made of a gajillion parts, and they all are super important and they want to know where is this part and when was the last time it got inspected. Is it ready to go to space, or is it not ready to go to space?
We do all of that and make sure they've got all the data the need. Just doing my part to increase the amount of JavaScript at NASA, you know.
[Laughter]
Dave: That sounds less safe.
[Laughter]
Blake: That's what you want to find out when you're in space.
Chris: Shit. JavaScript. How much JavaScript has been to space? Do you know? Too much, would you say?
Blake: That's a good question.
Dave: I know there are Web components in space. I do know that.
Chris: Is there?
Dave: I think Dragon--
Chris: Oh, nice.
Dave: --has it on whatever, the Lunar--
Blake: I would bet UI.
Dave: Yeah.
Blake: Yeah.
Chris: That's cool. I'm picturing a select element in HTML with just two options in it that says, "Ready to go to space. Not ready to go to space." [Laughter] You just select which one is this part. That's cool. A pretty cool job. Then you were at an ad agency before that, which you gave a big shout-out to the other day.
Blake: Yeah.
Chris: Yeah. Right on.
Blake: Yeah, that was fun.
Dave: I have... I grew up in Houston, which I assume your company is based in Houston. And had friends who worked at NASA, in that whole field. One of my... My best friend from high school, he had a job where he just checked stuff in and out, like suit parts in and out of that big pool that they train in. You know? Underwater space simulator pool.
Chris: Oh, is that how they do zero gravity?
Dave: Yeah.
Chris: They just go underwater?
Dave: Just kind of go underwater. He would check parts in and out of that because if you lose a wrench in space - or whatever - it's bad news. You know? Or you lose a glove. You know? You have to figure out what happened to it, very much.
Chris: Mm-hmm.
Dave: It's very interesting. A whole industry around it. That's pretty cool.
Chris: All right. Well, that's your current gig and background stuff. But you also write about all of your own stuff as well. You have built probably more apps than the rest of us.
Blake: I doubt that. Yeah.
Chris: I don't know, man. I've seen some stuff. You do some stuff with your brother as well. The whole grid of games and stuff.
Blake: Yeah.
Chris: Anyway, let's talk about this idea of a home-cooked app because you did a whole talk on it, so I assume you have some things to say about it. What do you even mean by the term "home-cooked app"?
Blake: Yeah, so first of all, I totally wrote this entire concept from Robin Sloan. He wrote a great post about it. And so, the definition that he used was, like... Well, there was an example.
Their family was using a sort of video app. I forgot which one it was. Just for sending a quick video. You record a video, and then, "Send this to my daughter," or whatever, and they can look at it, and then it disappears, and that's just what it is.
Chris: Mm-hmm.
Blake: Whatever app they were using quit working.
Chris: I remember that.
Blake: He just made his own one, and it's not made for anybody else. It's just running on their phones.
I guess, what do you do? I guess you still the Apple developer or something if it's an iPhone, but you're not putting it on the store. It's just loading it up on everyone's phones.
That kind of an app where no one else is using this but me. I made this just for me and my family - or whatever. We're just using it because we needed something.
Chris: I suppose, crucially, nobody is going to turn it off by me either.
Blake: Yeah, exactly. No one is going to update. There's not going to be, like, "Oh, man. The new update ruined the feature I was using and now I've got to - whatever." You don't have that problem.
That's kind of the basic gist of it. I've been doing those kind of apps for a while but didn't know what to call them or to even think about them as a category of apps until I read that. Then when I read that, I was like, "Holy crap! This is amazing."
Yeah, I feel like, ever since then, I've probably increased the number of them now that I know what they are and what they're called and how to think about them. I enjoy making them even more than I did before.
Chris: You wrote, "Making a home-cooked app is about redefining what success looks like," which is kind of a cool way to say it, too, right? You've said it a couple of different ways, but the point is this is just for me, so I don't need... I don't know. Whatever. I don't need lots of people using it. I'm not trying to make money off of it. I don't need feedback on it.
Blake: You don't have to sweat the "How many stars did I get? How are the reviewing going? How many people bought it?" You don't have to worry about metrics.
Chris: Yeah. But it's interesting because it is just a category, right? You've made apps where you do care about that or they are built for other people, too. It just happens to be a way to categorize an app. It doesn't mean that you only make these or only like these. It's just sometimes the apps are in one category or the other. What are some ones in this category that you've played with?
Blake: I need my list.
Chris: [Laughter] I mean you talked about a bookmarking one that was important.
Blake: Yeah. I just replaced... I'm looking at my... Yeah, I replaced. I was a long-time user of Pinboard, which I really liked. But for whatever reason, I would put stuff in there and then never ever go back and look at it. I don't know really know why that was, but one day I was like, "You know what? I need my own bookmark app."
Chris: Mm-hmm.
Blake: I have a weekend and time to kill - or something.
Dave: [Laughter]
Blake: I just... The cool thing about these home-cooked apps is that you can just throw code at the wall, and you don't have to care too... Like, no one else is going to... Like, who cares if I lose my production database. It shouldn't be. I'll just be like, "Dang. I lost my production database. Start over," or whatever. You know?
[Laughter]
Dave: There's so much freedom in that statement.
Blake: Oh, yeah.
Dave: Yeah. Who cares? It happened. Oops.
[Laughter]
Chris: Yeah.
Blake: It makes coding a lot of fun. It makes maintaining not a lot of fun. But it makes coding it the first time a lot of fun.
I made a little app. This was my first experiment with Cloudflare workers, which I want to write a blog about at some point. That was kind of cool.
My family, we always owe each other money because we're splitting expenses or doing things and we're like, "Did you send me that? Nah, I sent you... I sent you 50s," or "You only owe me $25 for the other day." We can't keep up with it.
I made this little app where we can go in and be like, "This person owes this person whatever." Then there's a little settle-up screen so that we can split, like, "I owe you for these three things and you owe me for these other things," and we can just cancel this out or whatever. I made a little app for doing that.
Chris: Wow! And so, is it Web in this case?
Blake: Yeah, it's Web. It's super secure. It's just everybody has the same password and the password is in local storage.
[Laughter]
Blake: It can't be any more secure than that.
[Laughter]
Dave: Bulletproof. Yeah.
Blake: There's no users. Oh, that's a fun thing about home-cooked apps. You don't need to have... Everybody is just using the same app. I'm not logging in as a user. We're all the same.
Chris: Admin?
Blake: It's like we're passing a tablet around or something. You know?
Dave: Yeah.
Chris: Right.
Dave: Well, I don't know. If the secret got out, they would just learn you bought your brother pizza - or something - right? [Laughter]
Blake: Yeah.
[Laughter]
Dave: It's not the end of the world if it gets out, right?
Chris: No state secrets in there. Yeah. That makes sense.
Blake: They could probably... They could probably... Yeah, they could screw my brother over by changing the price or delete that item or whatever.
Dave: No, that's cool, though. Then it just kind of does the math. You have an inventory of whatever things you split with your brother or whoever. Then you just say - whatever - "Do the difference," and both of you could look at the list and be like, "Oh, yeah. That sounds right." Rather than - whatever - 200 text threads or whatever, right?
Blake: Yeah. It'll just be something ridiculous. At the end of it, it's like, "You owe Matt $3," or whatever. You know?
[Laughter]
Blake: Like, "Dang it! What was the purpose?"
Dave: Oh, that's funny.
Chris: That's funny. I could see it being helpful in a family. I was always so shocked that Venmo did it the way they did. They were like, "What if we made an app where any time you send anybody money, you had to say why, preferably with one emoji, and it's public? Just anybody can see it." I'm like, "Not only do I not care about what anybody else does with their money, I actively don't want anybody else to know when I do it." I want neither side of this marketplace. But that's only widely public.
Blake: It's just opt-in. I mean it's not even opt-in, right? It's just auto-opt-in, right? If you don't change any settings, everybody is just seeing it. Is that how it works?
Chris: Yeah. Yeah, yeah.
Blake: I feel like anybody I've ever interacted with on Venmo, now I see all of their stuff. I don't know how it works, but I feel like when I go there.
Chris: Yeah. You bought a ceramic cup at a fricken' art fair and now you're buds. You're going to see when they split some pizza. God! Get out of here!
The problem is it doesn't matter what they do because the app is so fricken' useful for the thing that you actually need it to do that any other crap they pile onto it, it just doesn't matter. It's free to send money to each other? Great. I don't care what you do otherwise.
Anyway, but I could see, in a family, it's actually pretty useful. That's cool. I didn't know about that one.
Dave: I still maintain part of the reason I got married was because I was tired of splitting bills with my roommates.
[Laughter]
Dave: I was just like, "I'm going to have one roommate for the rest of my life, and we are going to share a bank account. That's the goal." It so far has worked out okay. But it was that thing. "Uh, I didn't use $16 worth of gas. I think I only used $8 worth of gas." You're like, "Okay, Brandon. Sure, dude. I guess we can negotiate this."
Chris: Yeah.
Dave: I was exhausted.
Chris: I'm also going to get married next weekend because of you, Brandon.
Dave: Yeah. Because of you, I've met somebody and I'm out.
[Laughter]
Chris: That's funny. But one of the ones you did, too, was like a chat thing, like a little Discord knockoff, which is interesting, too. But that one you probably would have to have logins for, huh?
Blake: Yeah. Yeah. We do, yeah. Yeah, we just... I still don't know why we did that one.
Chris: [Laughter]
Blake: I think we just needed something to do. We were just like, "You know what? We're not going to use Discord," because of whatever reason. We can say it's because - I don't know - maybe China can read all of our stuff. I don't know what we thought, but we just needed something to do, really.
I do like that we were able to bring back the OG Discord font, Whitney.
Dave: Oh, wow.
Chris: Nice.
Blake: I think it was on CSS-Tricks for a while.
Chris: It was. I freaking love Whitney. Yeah.
Blake: Yeah, it's great.
Chris: Super good font.
Blake: I don't know how many people notice when that font changed, but the first time I got on Discord and that font was not there, I was like, "What is this? What is this crap? What is going on?"
Chris: [Laughter] I tried to grab it the other day because I was working on a thing that needed to evoke the Discord look. I was like, "What font is this now?" It's something called - I don't know - it's called Discord GG or something like that. It's pretty similar, and maybe I'm different than you in this. I do kind of like their new one okay and don't blame them for getting off Whitney, necessarily. But Whitney is very nice.
Blake: Is it... Did they release that?
Chris: No, can't use it. The page says specifically this is for us and not for you. I don't know if that will be forever, but it's been a year or two, hasn't it? Yeah, it's not open-source.
Dave: I like making your own Discord because Discord is a lot of action. You log in and it's like, "Hey, here is every hobby you've ever been interested in," and it's all 7,000 notifications across 2,000 channels. The idea you can be like, "It's just one chatroom." [Laughter] That seems amazing. I don't know.
Blake: Yeah. One thing is you never make the mistake of sending the message to the wrong DM group or whatever because it's literally just the one. A few times, I've sent a message and thought, "Did I send that to...?" Yeah, it's the only chatroom. It's fine. Okay.
Dave: That's... See, that's great. Yeah. My wife has had a few... sent the wrong message to the big group chat for her tennis team, and it's caused some stress in her life. You know? That can be an issue.
Chris: Yep. I do. I have had moments like that. I just had one recently. I can't remember what it was, but I'm like, "Ooh, that would be not a huge problem but a little embarrassing if I just dropped that in the wrong channel kind of thing," because our workdays are kind of split up.
What if you're in the middle of a workday and you were clearly doing something else, and you were like, "Hey, what do you think of this?" But you dropped it in "general" at work? [Laughter] You'd be like, "Uh..."
Dave: Yeah, a boat, a new boat.
Chris: Yeah. [Laughter]
Dave: Hey, what's everyone think of this? Yeah. Oops.
Blake: Way back in, like, 2009, Jeffrey Zelman tweeted this. I think about this tweet a lot for some reason. I dug it out a while back and retweeted it, but it's when what's intended as a private DM goes out as a tweet, a simple interface problem becomes a complex human one.
Dave: Yeah. Oh, I mean perfect. Jeffrey is no stranger to blasting out some - I don't know - waiting in the doctor's office tweets were my favorite. Yeah.
Chris: That sounds like it comes from a personal place, Jeffrey.
[Laughter]
Chris: Yeah, he's always been a good design thinker kind of thing. One of the... An app that you worked on for a long time (and still do, probably, to some degree) is that joke I tried to land at the top of the show about a fine start. It's literally the URL is afinestart.me, I think. It's kind of like a browser extension that cloud syncs somehow, and it's very minimally designed. It has a really nice design, and it's just a list of links so that when you make a new tab, it's just like a curated collection of the places you might go to that are just right there.
It's a start page, which is a whole kind of phenomenon of browser extension, but it just happens to be a really classy one. Then it has a paid plan, presumably because of the synching, right?
Blake: Yeah. Yeah, this app actually started as a home-cooked app before I knew what a home-cooked app was. I think there's an entire subreddit devoted to this start page topic, but it started. I just made an HTML page, and I just wrote some links down and a UL.
I was like, "I want this page to be my start page," or whatever, so I just did that. Then I got tired of opening the... Not that it's hard to edit HTML and sometimes it's fun to edit HTML when you've been doing a lot of JavaScript. But I got tired of editing the HTML, so I used--
Oh, man. This is a throwback. I used KnockoutJS to make it sort of a one-page thing with local storage, and you put all your links in there. You can edit. You get to add things and remove things and drag and drop them around and stuff.
Then I thought, "Hmm... People might want this," and so then I kind of turned it into a product eventually. It's mostly free. It's a Chrome, Firefox, Edge extension. It's mostly free. You can totally use it, the start page, and put all your links in there. It's got a free exporter-importer if you don't want feel like bringing any synching, but yeah. The paid thing is literally just to add the synching that you can use different browsers.
Yeah, it's just super-minimal, and a list of links. A big old list of links.
Chris: Is it still in Knockout?
Blake: Oh, no, it's in Vue now.
[Laughter]
Chris: I barely remember Knockout. I remember the name more than it was like to use it.
Blake: I remember that some of the way it worked was in comments. Like in HTML, you would put... You would make an HTML comment, and then you would put some Knockout code in there.
Chris: Wow!
Blake: It would read it, and that was part of how it worked.
Dave: Yeah, like KO colon stuff goes here, sort of something like that.
Blake: Yeah.
Dave: I forget. Yeah.
Blake: Like do a loop. Do a loop in whatever it is. I guess there was an opening comment and a closing comment, and whatever is in the middle, loop this over - or something.
Chris: Wow! Wow. I want to look at that. I didn't even know you could. That seems an especially weird choice for JavaScript because I don't even think you can get a comment as a node, really, right? You can't really.
Blake: I have no idea how that works. Yeah.
Dave: Yeah, I don't know.
Blake: But Knockout, when I was looking for the next thing, this is how. And I don't know. This is not good for my career to say it, but--
[Laughter]
Blake: But somehow, I've made it this far without doing any React. I don't know how. I don't know how I've done it, but somehow I did it. When I was looking for the next thing to use, and the reason I ended up learning Vue, was because it was very similar to Knockout.
I don't know if this page still exists, but there was a page on Vue's website somewhere where it was like, "Vue is kind of the spiritual successor to Knockout," or whatever. And it had these comparisons. And so, I already knew Knockout. I was looking for something that was kind of similar. So, I ended up in Vue. That's what happened.
Chris: Nice. Then what about at work? It happens to be Vue also?
Blake: Yeah. I think I saw their ad on Vue Jobs.
Dave: Oh, wow.
Blake: Looking for--
Chris: Oh...
Blake: Yeah. Yeah, we use Vue there. We're in the middle of... You know Vue is... Vue 2 is end of life now, and so we're having to migrate a lot, a lot of code. A lot of Vue code needs to be updated. So, that's what's going on.
Chris: Really? Is it just Vue, or is it Nuxt too?
Blake: No, it's not. But it's Vuetify.
Dave: Yeah.
Blake: Vuetify is on version 3 or something now, but we're not that far. We're not that far at all, so we've got fun times going on here.
Dave: Yeah. All those kind of big libraries took a while to get to Vue 3. Yeah. Yeah, the link... I guess Vue moved a bit faster than the ecosystem did.
Blake: But it's good timing for all of the excitement about Web components because it turns out Web components can be a nice way to migrate a lot of old stuff up to new stuff. So, that's what we're kind of looking into. Sort of like slowly replacing parts of old Vuetify with our own Web components and just sort of slowly migrate old stuff up to new stuff.
Dave: Yeah. I mean especially because Vue is compatible with Web components. It doesn't freak out if you put a Web component in there. It's like, "Oh, okay. I get it."
Blake: It's perfect.
Chris: Yeah. Yeah, React is getting a little better about it. But not everybody is on the latest -- very, very latest -- of things, as we know.
Dave: I talked to somebody who just went from 16 to 18, I think. They looked exhausted.
[Laughter]
Dave: So, anyway. If you're in that situation, there are people out there who understand your situation.
Chris: You know what bugs me? Not to talk about this because I'm the only user of it, but I'm just going to mention it. It's that Vercel - or whatever - the makers of Next.js does such a good job when they change to a version of, like - I don't know what it is - community stuff - or something - that you can't find anything about Next, old versions of Next, really. It's like they... I don't know what the do. Contact people that wrote blog posts and asked them to take it down or update it for them or what?
Dave: [Laughter] DCMA.
Chris: We're like one version behind. And then if I look up how to do something, it'll be like, "You can only do that in the latest version of Next." I'm like, "Well, I'm not on the latest version of Next."
You know in the Vue docs -- or at least it used to be like this -- you can just... There was just a drop-down. You just select what version of the docs you want to look at.
Dave: Mm-hmm.
Chris: That's awesome. You know? You can't do that in Next. The docs are just the new version. That's what it is.
It's not like I'm super angry about it or anything, but I'm just like it really makes you want to upgrade. Then you go to upgrade, and you're like, "Oh, man. There's just enough in there that made it too hard for us to do," in part because we have a mono repo thing going on. Upgrading Next also involved an upgrade to React itself because our componentry needs to be digested both by Next apps and not by Next apps. The React change made it kind of a non-starter. Ugh! Boo!
Blake: Yeah. Lately, I've just been kind of sick of any kind of build steps because it's just like you want to upgrade something. All right. You can't upgrade this because - I don't know - three dependencies down this thing will break if you upgrade this thing. So, if you upgrade that thing, but then that thing has another related dependency that if you upgrade, you can't upgrade. I don't know. It's just a lot of stuff, and it's extremely difficult to bring everything up to date.
And so, after a while, it's like - I don't know - I start thinking, "This was all supposed to be so that we could have this nice developer experience and stuff. This is not fun. This is not a fun developer experience changing ... numbers around trying to get the right magic ... chants and sacrificing your sacrifices.
Dave: Yeah.
Chris: Oh, tell me about it.
Dave: You're like version 2.8.1 and a half.
[Laughter]
Blake: Yeah.
[Laughter]
Dave: Can I try that? Does that work?
Chris: I feel your pain. You know?
Blake: And then every time you run the build and you have all these messages in the terminal making you feel real bad about the old, like, "Your thing is way old. You need to upgrade into this other thing." Then all the people looking for funding on all of the old, it's just something else.
Dave: Yeah.
Blake: It's something else, man.
Dave: You have 7,200 vulnerabilities, high priority vulnerabilities.
Blake: I'm completely desensitized of the high. I'm like, "Sure. Is that bad? I don't know. Is that a lot?"
Dave: [Laughter] Is that a lot of numbers or a little bit of numbers?
Chris: [Laughter] Yeah. How about a little context, computer. You know? If you're so mad about it, why don't you make a little PR for me then?
Blake: Oh, I'm sorry. That makes me nervous, something like an error message. The other day, I got an error message that was like, "There's an error because I think what you meant to do was--" It literally said, like, "Did you mean to do--?" Like, "You should have done this," or "This is how to fix it."
I'm just like, "You're the computer. Can you just--? If you already know what the problem is," I feel like this is the promise of computers. "If you know what it is, just fix it." You know? I don't know.
Chris: For sure. And if it can't... I don't know. It's kind of our job as humans to make computers, to make products that prop up that ability of computers. That "it should just work" thing looms large in my brain. I definitely like to make products that feel like that if I can.
Aye yai yai. All right. Well, you're a Vue guy. Have you ever seen that... There was an article. What was it? Dave, did you see this, too? It was a couple of months ago that had charts of the popularity of React versus Vue versus Angular (by country).
Dave: Oh, yeah. Yeah, yeah.
Chris: Just the whole thing was shockingly surprising to me. It was like Sweden or something, Vue was just crushing it. It was like 80% market share.
But there were lots of countries where Angular is easily that big. I just didn't have a good sense. I always thought Angular was a little bit of a distant number three - or something. I know Google likes it, but how popular really is it? Because I just don't see people talking about in my own circles all that much. But man, it is fricken' popular. It's just as popular as React is. I don't know why it gets all the... React gets all the chatter, though.
Dave: Well, I think two-way data binding, one-way data binding. Everyone... you know people got very upset about Angular and had to leave it. I think that's why. The new thing is obviously the better thing.
Blake: I haven't used it in a long time. But when I did, I remember... It seems like it needs to control everything. I don't know. Where other ones you could kind of just use it here or there. But you kind of felt like Angular needed to sort of control the page.
Chris: Yeah. I don't think you're sprinkling it in. We even talked to Evan about this back in the day. This is probably years ago now, but Vue was designed to be sprinkle-able in. And it is also designed to just run in the browser, too. It doesn't absolutely require a build process.
Blake: Oh, yeah. Home-cooked apps, that's the way to go. I don't even mess with the NPM. I download that thing from the... You get the minified file from NPM JS or whatever and just download it. Stick that... chuck that right into the repo. But it in my little lib folder.
Chris: Yeah.
Blake: It's great. Never updates unless I update it. You know?
[Laughter]
Blake: Just runs on the browser. There's no... I don't even like... I mean you can totally... If you want to use your ES modules, you can totally do that. You don't need a build step for that. That was one of the things that we had build steps for was to categorize your code and organize it. But you could just totally do that. Just grab the ES inversion.
Chris: Yeah.
Blake: Put it right next to all your other files.
Chris: Your code looks just like anybody else using a bundler. It's just yours doesn't. Even with import maps, it can look literally identical. You can say, "Import Vue from Vue," or whatever you write at the top of a Vue script file where you're about to mount your app and that bare modifier gets interpreted by the source map, which just points into your little libs folder with a minified file that never changes. Boy, that sounds nice.
Blake: It does.
Chris: [Laughter]
Dave: That kind of gives me this... You kind of illuminated it earlier. You've learned how to make home-cooked apps (right) through a fine start, which I used for years and didn't even realize you made it. Then I was--
Blake: Sweet.
Dave: The only reason I stopped was because Edge auto-uninstalled it because they really wanted MSN inside of there for a while. They were fighting. Mom and dad were fighting in that situation.
But what have you learned about making home-cooked apps? This is a sweet trick to just don't use NPM. [Laughter] It sounds awesome.
What are your tricks, I guess, for successfully pulling off a home-cooked app? You have, it feels like, hundreds. Tens, dozens?
Blake: Man, I have a folder, you know. It's like... I probably have a bunch of them that I started and didn't finish.
But yeah, I think the thing to do is to sort of use the stuff that you already know. You don't need to be... like, you don't need to guilt yourself into learning whatever new thing.
If for some reason you're just a jQuery pro, you just write jQuery, then just use jQuery. It's still there. And they just released an update, so you can grab that.
Yeah, the home-cooked apps free you from a lot of requirements, so you can just kind of go in and do whatever you want. I find it useful to maybe just make... You don't even need to do a ton of planning. But just make a list of the stuff that you want it to do. That way you can see, okay, I've got too many. My wish list is very large, and this project is going to die on the vine if I try to do all of these things.
It's like that will help you scale it back to what's the minimum. I hate using the MVP. It's like the minimum viable meal - or whatever I called it in that article. And so, that's a good thing.
Then also, even though I just said use what you know, I do have this other thing I like to do inside of projects, which is called the one new thing, and it's where there is something you want to learn. One of them was Sass (a while back). Actually, I was in that kickstarter. It was like the CSS-Tricks version 10.
Dave: Lodge? The lodge?
Chris: Oh...
Blake: Chris made a million videos. Yeah.
Chris: That was a long time ago, man.
Blake: At the time, I didn't know Sass, or how to do it or anything. So, I was learning it while watching those videos. Then I did a project. I forgot what. I thought my one new thing for this project is going to be Sass.
Chris: Nice.
Blake: I find that's a way to learn just the one thing. Don't get yourself overwhelmed with too many things.
Chris: That is an awesome lesson. Alex, my co-founder at CodePen, is a big fan of that, too. Even when it comes to something like a PR. If you're going to do a bunch of work, don't do five things in the PR. Just do one thing.
When you're looking at work and, like, "We're going to change some technologies, we're going to evolve to something new," don't evolve... Again, don't evolve five of them at once. Evolve one of them so that you can wrap your mind around what's going on. Or if there are problems, you can kind of attribute it to one thing, not like, "I don't know what's broken! We just changed everything." It's for you. It's for your brain to be able to process.
I remember Dan Cederholm when he... He was a CSS guy forever and then kind of forced his brain to learn Sass and then turned it into a book for A Book Apart. Yeah, it was his whole journey there.
Blake: I bet that happens a lot, like intimidated by learning, finally learning something, then becoming an expert on the thing.
Dave: I definitely... even right now. I started making a game. It's in Lua. One new thing. I used a framework inside of Lua. That's two new things. I'm using LDTK, the graphical tile editor. That's three new things.
One of the new things is broken and not working correctly. And so, I'm stumped. And so, it's just... Now it turned into this thing I was really jamming on. I was like, "I'm almost done. I'm certain I'm almost done." You know? [Laughter]
I just was like, "Eight more hours and I'm done." You know? Then I'm just full stop. Now I'm like, "Ugh. I'm going to have to start over and figure out what I broke." You know? I've literally written maybe 20 lines of code. I haven't done much past the demo. But yeah, it's just this weird, like, you introduce too many new things. You're probably going to explode yourself like I just did.
Chris: Yeah. I feel you, man. Sometimes you don't even have the tools to debug it. Sometimes there's a big problem, but if it's in... If it's a big JavaScript project or something, we're all like, "Okay. I don't really know what's going on here. I'm very stumped by what's going on. But I can console.log 500 times to follow the flow of this thing," and I can eventually find it.
I might not want to do that today. I might not have the spoons for it or something. But you could do it. You know? Even if it then goes into PHP land or something, it's like, "I don't know. I haven't done this in a while. But I can still spit some crap out to the console."
If you're doing something totally new, like if I was in your position, Dave, I'd be like, "I'm out." I don't even... You can't even start to follow the flow. Where does it even go? Code is being executed as part of some library that you can't even see?
Dave: Yeah. Yeah, it's like I messed something up. I did something. I clicked a button I shouldn't have - or something - and I messed it up. And so, now it's the classic case. It's a Janga tower, but the Janga tower is only three blocks tall and it's falling over. [Laughter] It seems like way too premature, but it is what it is.
Chris: Hmm... I work with Robert here in my office. He's a long-term Node guy and really good at that stuff. When I see him debug, it's interestingly so different than how I do it. He's really good at using the breakpoint stuff in dev tools. I never do that. But he's just like, "Right at this spot, this is where I want to stop execution."
Then if you actually do that, just kind of "for free," you can hover over stuff in the code in dev tools, and it'll kind of show you what it is and what called it and stuff. You get a heck of a lot more for your buck than you do with a console.log. It just spits out the one thing you're looking at. That's kind of cool.
Then he's more than happy to just be like, "Oh, I see. This is pulling in an NPM dependency." He just immediately starts digging into the code in the Node modules folder.
Usually, that's where I stop. I'm like, "Oh, that's just a library. You don't look there."
[Laughter]
Chris: Not that you don't look there, but you're like, "That's going to be--" I know what that kind of code looks like and it doesn't... I'm not smart enough to be able to crock how these big fancy libraries actually work. I'm just going to look at that code. My eyes are going to glaze over.
Blake: That's like the part of the iceberg under the water. You don't want to be down there in the modules....
Chris: [Laughter]
Dave: Yeah. That's danger zone.
Chris: Not really, but some people are just real comfortable with it. And then if you're really into Node, too, the Chrome dev tools just have a little Node button. You can just click the little button and it'll find active Node processes and give you a dev tools for Node. I'm like, "What is even going on here?" [Laughter] I have a long way to go in my JavaScript debugging journey, apparently, because that stuff does not click.
Blake: Yeah. I feel like I only know how to use two or three of the tabs in dev tools. I know there's a ton of stuff down there that looks awesome. I've just got to do it at some point.
Chris: Yeah. It could be a job, practically.
Blake: You know what? That can be a one new thing. Like, for this project, I'm going to use debugger - or whatever. That's what I'm going to do.
Chris: Yeah, there you go. Yeah. Yeah. That's the key line, too. You do actually have to put a debugger statement in your code, and it's not even a function. You just write the word. I don't know why that seems weird to me.
Blake: Yeah. I guess it's like a linter rule or something. It's to prevent people from accidentally committing debuggers. The last thing you want when the people at NASA start using their own dashboard is for everything to just stop working right in the middle of it.
Chris: [Laughter]
Dave: A pause in the middle, yeah.
Chris: Absolutely halt. Yeah. Whoops!
Blake: Yeah, every time we do it, if I do use it, which is not often because of, like Chris just said, a console log, even though that's sometimes not the right ... but yeah, we have to put a little linter.
The reason I don't do it because I can never remember what the ignore comment is.
Dave: Yeah.
Blake: That's the reason I don't use the....
Chris: Yeah.
Blake: What is that? Is it TS ignore? Is it ignore? Yes.
Chris: Yeah.
Blake: Console log.
[Laughter]
Chris: You have a URL out there, watsonbrosgames.com, with a bunch of ones on it. Is this old? Is this weird to you? Yeah?
Blake: It's not. It's not old but I wouldn't say... I mean it's very hobbyist. Let's just put it that way. The games are... They're games.
[Laughter]
Blake: I don't know half of them.
Dave: Technically, they are games.
Blake: I made... A bunch of it is just learning, I guess. It's almost like... Actually, one of them is a CodePen. Yeah, there's one called Zombies. Zombies love a good wall. That was me trying to make... I wanted to make a pixie game, and so I decided to do it all in CodePen. Yeah, you just shoot zombies. They come at you, and you shoot them.
Chris: What's the popular one with the gardens and the zombies?
Blake: Is it plants vs. zombies?
Dave: Plants vs. zombies. Yeah, yeah.
Chris: Yeah, there you go.
Blake: Yeah.
Chris: Only this one you have a gun. [Laughter]
Blake: Actually, the plants... I really... One of my favorite games genres is tower defense games, which I think I would categorize plants vs. zombies as a tower defense.
Chris: Yeah, I think so.
Blake: That's part of the reason I've been trying to learn some game dev because my ultimate thing is I want to make a cool tower defense game. So, keep an eye on this weird games page.
Dave: [Laughter]
Blake: The tower defense game is going to be out sometime.
Chris: I love that genre, too. It's gotten weirder over the years. It started out as just a trail of increasingly difficult objects are going down this twisty road. Put towers there, and the towers can shoot either arrows or bombs. That was fun enough, getting the most bang for your buck for the towers and deciding if you need another tower to upgrade an existing tower. The stress as the little objects approach your gate. It was just a clever genre.
I don't know if it's totally different, but you see ones that are hordes of thousands of zombies flying at you and the pace of the games can be so much faster. Yeah, I don't know. There are just lots of takes on the genre. It's not played out yet. Do it up, man.
Blake: Yeah, I definitely feel like a bit of a purist when it comes to that, so I don't want a bunch of extra junk going on. I just want my money, my towers, and my upgrade trees, and my little enemies.
Dave: Yeah. It used to be like triangle was archer. Square was--
[Laughter]
Dave: --bomb - or whatever. But now it's changed. Now it's very involved, very high definition.
I play one called Thronefall. Have you seen that? Basically, they use the camera, like, limiting, so you can only focus on one part of the map at a time. And so, other stuff might be happening. Kind of like Warcraft or Starcraft might do. But then they have just all kinds of enemies, monsters, and stuff.
I don't know. it's hard, I guess, is what I want to say. [Laughter] More hard than these games should be.
Chris: Are there resources? There must be, right?
Dave: Yeah. Yeah, so you get money every round. Then you buy stuff.
Chris: Hmm...
Dave: Yeah.
Chris: Awesome. It looks cool. Has that kind of vector look.
Dave: It's a fun one. I recommend it.
Blake: If people are interested in messing around with games, GitHub does this GitHub Game-Off thing in November. They give you a loose theme or something.
The theme might be like - I don't know - bugs or something. That can be... Your game could be about bugs or it could just have bugs in the code. Who cares. Whatever.
Me and my brother, we tried doing that. It's just kind of a fun way if you need a ... sort of a structured way to make yourself do something. Then it's a fun way to go.
Although, it does share the month with National Novel Writing Month. So, that's my other thing that I like to do, so I can't.
Chris: What are the other?
Blake: I always have to decide. I have to decide, yeah.
Dave: You have to pick a novel or a game? [Laughter] It also conflicts with movie directing month.
Blake: Yeah.
Dave: [Laughter]
Blake: So many. Oh, man. I used to write. I used to write these articles for, like, an e-commerce shop. They really loved holiday, like, every day is a holiday. Every day is some kind of day. There's ice cream day or whatever.
Dave: National Secretary's Day. Yeah.
Blake: Yeah. It would just be like, "What am I going to write about?" Check what holiday it is coming up and then just be like, "You know what you need for--?" because they sold home health, like medical stuff. It'd just be like, "You know, for ice cream..." First, you've got to make it real dramatic, like, "Ronald Reagan said about ice cream day," or whatever.
[Laughter]
Blake: Then it's like, "What you need..." but it's really just an article about what products you should buy, like, "You need this ice cream bowl that has a nonstick bottom," or whatever it is. Weird holidays ShopTalk Show topics.
Dave: That's funny.
Chris: Nice. What's up with your brother? Do you work together on stuff sometimes, or is it just for fun? What's up?
Blake: We both did work at the ad agency, and we work at different places now. But yeah, we like to collaborate on stuff. And so, that's part of the home-cooked app. That's probably why there are so many is because sometimes we just want to work on stuff together. It's just fun.
Chris: Yeah.
Blake: And so, we'll get in there and figure out some. That's another. Actually, that's another tip. Something that's annoying to you or I guess a lot of developers have... You made an app to scratch your own itch kind of a thing. But that's just a good thing to do because it's like a motivator. And if we're making a home-cooked app and we know that each other is going to use it, we don't need a ton. It's enough to just know me and one other person are going to use this. That's enough motivation to knock it out and get finished with it and actually (quote, unquote) ship it.
Chris: Yeah, I could see that. If it's just you, it's a little easy to be like, "I'm losing motivation."
Blake: Yeah.
Chris: But knowing that somebody else is going to see it--
Blake: It's the same thing for, like... Yeah, it's the same thing for, like, I was just talking about, like, National Novel Writing Month. I'm never going to probably ever put anything I've written out. I don't think I'm going to do that, but I always make Matt read it. So, he reads everything. When I'm writing, I'm like, "Is Matt going to like this? I wonder if Matt will like this part in there?"
You just need the one. I think it was Jeremy Keith. I think chose to write a blog post of his about, like, when you're blogging, you don't have to imagine that the whole world is going to read this. You're writing it for you, or you can just imagine one other person that's got similar interest to you or whatever is reading this blog post.
Chris: It might make for better writing. Thinking about the whole world is a little much maybe for a blog post. The stakes are high there. But if you just think of - I don't know - Dave is probably going to read this. [Laughter] Will it work for Dave?
Dave: Well, and then your success metric is literally, "Did Dave see it, yes or no?" If Dave saw it, then, dude, I'm motivated to go again.
Chris: Mm-hmm.
Dave: Yeah. Some of my ... game is just getting Jeremy to read my articles. If Jeremy read it, I feel like--
Chris: Yeah.
Dave: If he puts it in his little links thing, oh, I made it, man.
Chris: I know. That's huge.
Dave: [Laughter]
Chris: That's huge.
Dave: That makes me feel--
Chris: It's been... It's been a year or two for me, and I'm like, "Man, I have dropped the ball." But he's also pretty easy to bait because you can just slip the word "progressive enhancement" into a post and then it's kind of a freebie.
Dave: Yeah. There you go.
[Laughter]
Dave: Just be like, "Own your website." Then, yeah, you've got it.
Chris: Yeah, yeah, yeah.
Dave: Yeah, yeah, yeah.
Chris: Say something about the indie Web and you get a freebie.
Dave: Hey. I'm not beyond just doing that from time to time.
[Laughter]
Chris: Yeah. Hell no.
Dave: Okay, so a blood pact or some kind of brain trust really helps with the home-cooked apps. [Laughter]
Chris: Yeah.
Dave: Just some sort of... I like that idea. Just like, "Hey, you're building it for someone, so you know it has immediate utility." Right? That seems huge.
Blake: It's also fun to passively aggressively play in GitHub issues.
Dave: [Laughter]
Blake: We're the only two people, and so I can just put in a GitHub issue and just go ahead and assign... and be like--
[Laughter]
Blake: And then I'll still be in them and be like, "I put an issue in for you."
Chris: Did you see this? Yeah.
Dave: Did you?
Blake: Yeah, did you see this issue?
[Laughter]
Chris: This is a pretty big deal, so I'd appreciate it if you could get on it today.
Dave: Do you have--?
Chris: It's like Sunday.
[Laughter]
Dave: Do you message your brother, "Hey, do you have minutes?"
Blake: Oh, yeah.
Dave: Hey, can you talk?
[Laughter]
Blake: What Chris just said. Did you see this? It's Sunday. That happened on Sunday.
Chris: [Laughter]
Dave: Oh, good.
[Laughter]
Chris: Oh, that's good.
Dave: Is this project dead? Is this project dead?
[Laughter]
Blake: Yes. We've....
Dave: Oh, shoot.
Chris: Oh... That's a good one. That's a good one. I want to do one of, like, a banjo, like a music tab app. There are some that are around and they suck - kind of. Whatever.
I don't know if that's a prerequisite for one of these apps. You're not necessarily--
Blake: That's how they all start.
Chris: Is it?
Blake: Yeah.
Chris: You have to--
Blake: Yeah, there are all these ones. But I don't like them. I've always--
Chris: Yeah. I'm just not 100% confident I could do better. But I could do my own. I at least like to give it a shot.
Then I could... Most crucially, I could just fill it with the ones I care about. If I was going to just load it with songs, be like, "These are my songs." It's not every song. They're mine.
For a while, I wrote down. I was like, "Maybe I'll... It would be nice to have an iOS app version of this that could be your personal songbook." I feel like that's not... I don't see that a lot. I don't know that I've ever seen it of, like - I don't know - I'm a musician. But I only play these 88 songs. Why isn't there an app with just those 88 songs then in it? It's always like, it's all the songs in the whole world or it's just my bookmark of the one song.
Maybe I'll do it, but that started to feel too big, like, "Oh, I don't want to make an app for the whole world." But this has kind of given me some motivation to be like, "I don't have to. I can make an app just for me."
Blake: Yeah.
Chris: It's hard though. My brain wants my fingers to monetize their every movement. [Laughter] Got to fight against it.
Blake: No. Yeah, even when we're working, we start... We'll be like we're making the Discord thing. Then we're like, "But what if?" Because this is every developer problem is always like you think, okay, but is this going to scale? No, stop it. Stop it. It doesn't have to scale.
It doesn't even need to scale to more than two people. It's just a chat with two people. But when you're coding, you want to prematurely optimize everything. Once this hits the big time and a million people a day are coming to this app, that never happens. You don't need that.
Chris: I wonder how far you could take it. Even if your chat app didn't have logins but it just generally knew what your IP was. So, if you sent the message from that IP, it'd be like, "Yeah, Blake sent that." You know? But if it knew a different--
Blake: I guess if you trust everyone, you could just do it, like, "Type your name in," when you get to the app.
Chris: Oh, yeah. Yeah, yeah, yeah.
Blake: Yeah.
Chris: Yeah. That's not bad.
Blake: We're polling every two seconds. If we have half a dozen users with a couple of tabs open, it might break it. I'm not sure.
Chris: Hmm... Yeah. I don't know. Polling is still a thing, isn't it? It's been a minute since I've had to think about that.
Dave: Surprisingly efficient. [Laughter] I don't know. Then they're like... or debounce, which is basically un-polling. [Laughter] You just say, "No. I'm only polling now."
Chris: Yeah. It was like Web sockets sort of helped us stop doing it, but it ups the technology bar quite a bit when you go down that road.
Blake: Yeah. That was our question. Should we use Web sockets? Nah, we don't need them. All the tutorials say you need to use Web sockets for a chat app. We're going to ignore that, and we're going to do it this way.
When we got to the end, we were like, "All right. Yeah, we should have used Web sockets. I can see that now."
Dave: Yeah.
Blake: But it's too late.
Dave: Hey!
Blake: Too late.
Dave: That's version two. You can just be like Google and have infinite chat apps, so there you go. That's... [Laughter] It never stopped them.
Chris: I used a live reloader script the other day. I wish I could find that quick URL to it. But it was so common of a thing to do not that long ago that it'd just be nice if you were just writing an HTML and CSS website that when you saved the CSS file, you didn't have to refresh the browser. You know? It's just been a need for a long time.
These days, depending on the technology you use, it can be super complicated. It uses a brand new, super-fast turbo hot module reloader blah-blah. You're like, "Okay. Well, that's neat. I guess it's doing what I want it to do. I hope it never breaks because I really don't want to think about it."
But this one was so old school, it was polling. It just is like it looked through your HTML and was like, "There's a style sheet. I'm just going to poll every two seconds at that same URL and see if it's different." If it is, I'm just going to replace it.
Dave: Pull in the new one.
Chris: It was like the dumbest app ever for it, but it was probably about 15 lines of code. Got to love that.
Blake: I think I feel like I get a little bit of a reward for hitting the relay button, so I kind of like it. When I do a CodePen, I turn off the live thing a lot.
Chris: Oh, do you? Yeah.
Blake: I'll tell you when to run. That way I can enjoy the feeling. Yeah, that run button. Look at all this stuff happen.
Chris: Well, you should also know that you're saving the environment because that way you're carbon usage is lower. So, you want to save the world. Turn off the auto-run button on CodePen.
Blake: Does the CodePen thing, does it debounce, like if you're typing in your JS? Does it wait for you to stop typing and then--?
Chris: It's waiting for you to stop typing. Twelve hundred milliseconds is the magic number right now.
Blake: Oh, okay. I might be... because I'm using an ... keyboard, so I type kind of slowly sometimes. Anything that ever debounces typing, I'm usually under, like I'm too slow for it. So, it's just constantly trying to.... But I think, like, on CodePen, I don't have as many problems ... because 1,200.
Chris: At one time, we also had a piece of the algorithm there that would be like, "And you have to leave the line of code that you're currently on." So, if you're like editing a line of code, it wouldn't... Until you left that line with the cursor somehow, it would... I can't remember if that's still true or if we aborted that or not. But the ideas was there are a lot of people. You don't want it to trigger an error because you're still writing. Or it's not even the slowness of your typing, necessarily. It's like you're thinking.
Blake: Just not done. Yeah.
Chris: Yeah. Like, I need a minute.
Blake: It's like TypeScript in VS Code is like, "This is a problem. I’m not done yet. When I'm done, then you can--"
Dave: Yeah. [Laughter]
Blake: Stop red squiggling everything. You know?
Dave: Yeah. I'm working. I'm mid-word. Please.
Chris: It's a hard problem to solve, though, because you're like, how do you express that? Because to say this is... One solution is to have a button or something that says, "Okay. I'm done now. Now you go" But that's not... I hate to say it, but most people aren't going to go for the button.
Blake: Yeah.
Chris: They want something else. In fact, CodePen 2.0 is in user testing right now, so if you what to see it, let me know. I'll get you on the list.
Blake: Ah, man. Yeah, give me the hookup.
Chris: [Laughter] It has - whatever - a little bit more aggressive of an error potential. It did early on in our work on it. For example, if you use TypeScript now on CodePen, like today-today on the 1.0 editor, I guess we'll call it, we implemented that TypeScript compiler way before we even know what TypeScript was, I think. It was real early days Typescript. I don't think any of us really got it, really.
For example, if you have a wrong type in your type in TypeScript on CodePen, it doesn't even care. It doesn't red squiggle. It doesn't even tell you. It just doesn't care.
If you have a syntax error, it will still tell you. But any of that type stuff isn't there.
Well, times have changed. Now that people write TypeScript, they want... At least they want the red squiggles of, like, this type is wrong. But more so, they actually want their build to break. They don't want people pushing up busted TypeScript, like the TypeScript compiler errors, hard errors on type problems. Now you're writing a CodePen. You've chosen TypeScript to do it. If you're halfway through a line of code, you get a little bit, like, we can't finish the build because TypeScript has hard errored out. And so, the preview now becomes a more aggressive, like, "Hey, there is an error on app.ts on line 17."
We'll put the red squiggles there, too, but the actual preview area has a big error kind of thing in it. And we had to go through rounds of revisions to chill that out because it's not just the red squiggles that are annoying. You see this big, red box pop up. And some people during user testing were like, "Shut up!" [Laughter] You know? Like, "Chill out. I was just trying to think my way to through the line. Don't hit me with this."
We ended up calling it the bad dopamine problem internally at CodePen because you're like, "Instead of being rewarded for coding and thinking, all of a sudden the machine is yelling at you." You're like, "Don't yell at me! I'm not done yet."
We now have this kind of option that you can minimize those away. Then rather than seeing this big red thing pop up, it just keeps the last successful build behind it. It's not... You don't get that bad dopamine hit.
Probably a little too much information, but it seemed to be what we were talking about. And it's top of mind for me.
Blake: Even though I was just complaining about it, if I'm typing something in TypeScript and I'm not getting the red squiggles, I'm like, "Something is... What's going on?"
[Laughter]
Dave: He's that... problem. Yeah.
Chris: No way this is right.
Blake: The build...
Dave: Yeah.
Blake: Do I need to restart the TypeScript or what?
[Laughter]
Dave: Oh, man.
Chris: Yeah, you're more worried that it's not yelling at you.
[Laughter]
Dave: There's no way I wrote this correctly, so it has to be something massively wrong. Yeah.
Blake: With all of that stuff and IntelliSense and AI completions, I've gotten... Now I just... The UI can just jank around and flash things in front of me. I don't care. Whatever. I'm used to it now.
Dave: Yeah.
Blake: It's fine.
Dave: I'm not quite there yet, but I'm sure I will be joining people on this TypeScript journey.
Well, I think we are at time, so I think... People are pulling into their driveways now. They're ready for us to wrap up.
Blake, thank you so much for coming on the show and talking about this. This whole idea of home-cooked apps really gets my brain going just on the cool stuff people can make. Not just for themselves. Well, for themselves. I like how you and your brother make stuff for yourselves. But just even for one other person, two other people, very, like, "Let's make stuff that doesn't have to be a big deal. Just make stuff that does one job and does it well." I love that, and I think that's really cool.
Thanks so much. But I guess, for people who aren't following you and giving you money, how can they do that?
Blake: Yeah. Well, you can check out A Fine Start at afinestart.me. Then I've got a website, blakewatson.com, and it's got all the links to things there.
Dave: Definitely an RSS subscription you're going to want to put in because, yeah, you had a really good post the other day about, like, use the Web like I do. It was awesome, man. I really appreciated that.
Blake: Cool.
Dave: Yeah. Well, thank you again. Thank you, dear listener, for downloading this in your podcatcher of choice. Be sure to star, heart, favorite it up. That's how people find out about the show.
Follow us on Mastodon because that's the cool one. And then join us over in the D-d-d-d-discord, patreon.com/shoptalkshow. Chris, do you got anything else you'd like to say?
Chris: Oh, ShopTalkShow.com.