Whiskey Web and Whatnot

A whiskey fueled fireside chat with your favorite web developers.

Listen/Watch

38: A Battle of Two Worlds and Mentorship Above Milestones with Cory Brown


Show Notes

It's not often that a blog post sets the internet on fire. But a recent post by Cory Brown about async/await led to an uproar and even messages of pity from Hacker News. Who knew a simple post about pattern preferences would cause such controversy?  Today, Cory's here to explain his side of the story for those happily using async/await in various concurrency patterns. Luckily, Cory believes, to each their own, and even welcomes responses from developers like Eric Elliott and Robbie as important food for thought. So which universe do you prefer? Object-oriented or functional? In this episode, Cory talks with Chuck and Robbie about why he prefers promise to async/await, his response to Robbie's weekly rant on classes, what really makes an engineer "senior", how every tech team should operate, and why Cory recently chose to learn Scottish Gaelic. Key Takeaways * [00:40] - A brief introduction to Cory. * [01:19] - A whiskey review. * [08:39] - Cory's controversial opinion on async/await patterns. * [18:56] - How Cory views classes and his defense of Hooks. * [29:54] - Why time matters with engineer seniority. * [42:00] - A Dr. Pepper and obscure language-themed whatnot.  Quotes [26:27] - "I've already seen ideas from the object-oriented world come in and benefit the functional world. And vice versa — the functional world come in and really benefit the object-oriented world. So I don't want to see either of them go away even as I choose to essentially wholly live on one side." ~ Cory Brown [https://twitter.com/uniqname] [37:10] - "If you have any hope of going to whatever your next job is and entering a codebase that is at all reasonable, then we need to start training our junior engineers. And unfortunately, businesses are not investing in that for whatever reason so it's on us to do that." ~ Cory Brown [https://twitter.com/uniqname] [40:24] - "A large chunk of the last several years of my career has been a diminished focus on producing stuff directly and more in enabling others to produce more quickly." ~ Cory Brown [https://twitter.com/uniqname] Links * Cory Brown on Twitter [https://twitter.com/uniqname] * Cory's website [https://365jsthings.tech] * Aumni [https://www.aumni.fund/] * National Geographic  [https://www.nationalgeographic.com/] * Spiritless Kentucky 74 [https://spiritless.com/products/kentucky-74-non-alcoholic-bourbon] * Eric Elliott [https://ericelliottjs.com/] * Why I avoid async/await  [https://uniqname.medium.com/why-i-avoid-async-await-7be98014b73e] * JavaScript [https://www.javascript.com] * Promise [https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise] * Async/await [https://javascript.info/async-await] * Hacker News [https://news.ycombinator.com] * YAML [https://yaml.org]  * Douglas Crockford [https://www.crockford.com] * Yehuda Katz [https://yehudakatz.com] * Ember.js [https://emberjs.com] * React [https://reactjs.org] * Preact [https://preactjs.com] * Stencil.js [https://stenciljs.com] * Hooks [https://reactjs.org/docs/hooks-intro.html] * Clojure [https://clojure.org] * The Coming Storm (Cory's post about emerging software developers)  [https://uniqname.medium.com/the-coming-storm-c03ada70b022] * Backstage [https://backstage.io] * Dr. Pepper [https://twitter.com/drpepper] --- Send in a voice message: https://podcasters.spotify.com/pod/show/whiskey-web-and-whatnot/message

Transcript

Robbie Wagner: [00:09] What's going on, everybody? Welcome to another Whiskey Web and Whatnot with myself, Robbie Wagner and my co-host, as always, Charles William Carpenter III. And our guest today is Mr. Cory Brown.

Cory Brown: [00:25] A man of very little consequence, I’m kidding, but I'm glad to be here.

Chuck Carpenter: [00:30] I don't know. You got the Internet worked up, and I think that was enough to have you on as a guest.

Cory Brown: [00:34] I did, didn't I?

Chuck Carpenter: [00:36] Yes. I can't wait to get to that and discuss that. But we'll start with a little about Cory. You're at a company now called Aumni?

Cory Brown: [00:46] Aumni, like alumni but without the 'l'.

Chuck Carpenter: [00:50] Yes. So, making things. There you are, my former Padawan turned master.

Cory Brown: [00:57] Twice over.

Chuck Carpenter: [00:57] Yeah. Twice over. And we used to work together at various places, one of those being National Geographic, which people have heard me talk about before, was a wonderful time in my life. Probably yours, too, to get to work with me.

Cory Brown: [01:09] It was great. Yes. Any time I get to work with you, Chuck is a joy forever.

Chuck Carpenter: [01:15] As Robbie knows. So, we have a special whiskey this week. It is by a company.

Cory Brown: [01:23] Special.

Chuck Carpenter: [01:23] Yeah. Special one in quotes. I hope it tastes like Dr. Pepper for your sake.

Cory Brown: [01:29] I appreciate that. Thank you.

Chuck Carpenter: [01:30] Yes. So, it's by a company called Spiritless that does nonalcoholic spirits. I think they do gin some other stuff, but obviously we're more concerned with the whiskey here. And it's called the Kentucky 74. I have no idea what the 74 is, but I did read a little about how they make it, which seems interesting. They do, like some sort of accelerated aging thing because bourbon typically is four years or older. Ryes can be two years or older. This I guess they do in a matter of hours, some sort of, like, pressure thing to get the woodiness and some reverse. What was it called? The reverse distilled.

Robbie Wagner: [02:06] Reverse distilled.

Chuck Carpenter: [02:07] Take the alcohol out. So, they actually do use a spirit initially, and then I guess they use that for, like, the aging process and everything else, and then they take it away. Yeah. Just kind of nice.

Cory Brown: [02:18] You said Spiritless, and I swear I heard a whole bunch of future listeners groaning.

Chuck Carpenter: [02:25] They're like, well, there's one I'm not going to buy. You never know, actually. So, I don't know. It's not really outing or whatever for health reasons. My brother can't drink anymore, and he's very excited to try this after we have it. Yeah.

Robbie Wagner: [02:40] And they also recommend, like, you can mix it half and half if you want less alcohol or less calories. It's versatile.

Cory Brown: [02:47] Yeah. Without watering it down. Nice.

Chuck Carpenter: [02:49] Yes. 13 servings per container. Each 2oz is only 15 calories, which is significantly less than a normal whiskey. I think. What it's like 2oz is something like 160 calories or something. It's a decent amount.

Cory Brown: [03:02] Holy crap. Yeah.

Robbie Wagner: [03:03] I was going to say like 80 calories an ounce.

Chuck Carpenter: [03:07] There's the pop. So anyway, as we do, let's get to it.

Cory Brown: [03:13] Woody.

Chuck Carpenter: [03:13] Yeah, woody, woody, is a good indicator. Has a woody leathery kind of smell to me.

Robbie Wagner: [03:22] It smells like a Chinese sauce. Anyone else getting that?

Chuck Carpenter: [03:28] Oh wow.

Robbie Wagner: [03:28] Like General Tso’s chicken?

Chuck Carpenter: [03:30] Oh, yeah. Like the glaze. Like the sweet and sour kind of glaze. Yeah. I'm not going to affect your opinion.

Cory Brown: [03:39] To be fair, I have nothing to compare this to.

Chuck Carpenter: [03:42] Right? Yeah. As a teetotaler, yes. You've got no basis, I can tell you without a doubt, this doesn't taste like whiskey.

Cory Brown: [03:52] Okay.

Chuck Carpenter: [03:55] Even a little bit.

Robbie Wagner: [03:56] I would say it does a little bit. It's like 10% whiskeyish, I would say.

Chuck Carpenter: [04:03] I'm going to give you like .1% whiskeyish I guess, I don't know. Yeah. So, this has a little bit of sour to it, a little bit of like citrusy and obviously misses the burning aspect, which is a big part of whiskey normally. So maybe if you mixed it, you would get the nuances there, but.

Robbie Wagner: [04:21] Which I am going to do.

Chuck Carpenter: [04:24] There you go. You have it pure. Yes. It has like almost like when bubblegum, or gum starts to get a little old and doesn't have its flavor. And it has that whole I don't know; I'm getting some of that on the finish or like the smell of a tennis ball. A little bit of that taste.

Cory Brown: [04:42] To me, it tastes like the smell of a dry erase marker.

Chuck Carpenter: [04:46] Yeah. I can get a little of that.

Robbie Wagner: [04:49] It may just feel watered down because there's no alcohol, but I feel like they need more flavor in it. If you're going to have no alcohol, make it like punch you in the mouth and not just be like some watery flavor.

Chuck Carpenter: [05:01] Yeah. Little sugary, little dry erase.

Cory Brown: [05:05] Yes. Again, having nothing to go on. I was kind of expecting I don't know why it's spice or something.

Chuck Carpenter: [05:12] Yeah.

Robbie Wagner: [05:13] Yeah.

Chuck Carpenter: [05:13] Right Yeah. Spiciness is definitely a quality of whiskey. I think it just misses the mark on a few things that you're going to get out of whiskey. So, I don't know. It'll be interesting to see what my brother thinks of it. So, Cory, you know the deal. I don't know what you'd be comparing it to, but on a one to eight of let's just say for fun things you would have at a party. How would you rate it against those things?

Cory Brown: [05:38] Will I be drinking this again on a scale of one to eight tentacles soon?

Chuck Carpenter: [05:41] Yeah.

Cory Brown: [05:43] You know, out of sheer novelty, I think I'd give it a five.

Chuck Carpenter: [05:47] Wow. I think that's pretty solid just because.

Cory Brown: [05:52] I really want to know what all the hubbub is about. And this is about as close as I'm going to get.

Chuck Carpenter: [05:56] Yeah. Well, you should look up some cocktail recipes and then make one with this.

Robbie Wagner: [06:03] It comes with a book.

Cory Brown: [06:05] Oh yea it does.

Robbie Wagner: [06:06] Yeah. So, I mix it with some ginger beer to give it more kick. And it's pretty tasty in that it just gives a little bit of a different flavor to the ginger beer and I like it. But I think, yeah, on its own. It's definitely made for cocktails. I would say not on its own.

Chuck Carpenter: [06:21] Okay, so maybe that's the space. I glean just enough of that to hear your recommendation of mixed versus not.

Robbie Wagner: [06:29] Am I breaking up a little bit.

Cory Brown: [06:31] For a hot minute? I used to review root beers from all over the place and there was one root beer that I tried cold and it was just nasty. It didn't taste like anything. It was almost watery. And then I tried it warm and it was delicious. So yeah, the environment and what's with can totally change the whole perspective, I'm sure.

Chuck Carpenter: [06:55] Yeah. I'll have to give it a small sip of some kind of mixer. I did not bring any in to give it that opportunity. I'm going to say personally, I'm probably never having this again. I'm never going to do this again. I mean, I will be passing this bottle on and it's fine. That's why I was wondering, are you going to hang on to it? Are you going to just take it into the office as a novelty for other people to try? But it sounds like you would maybe give it a shot.

Cory Brown: [07:21] When and if I drink it again, it will be with other people to experience the novelty again with them.

Chuck Carpenter: [07:26] Yeah.

Cory Brown: [07:27] But I don't see I'm not going to be sitting in my office on a lonely Saturday night.

Chuck Carpenter: [07:36] Coding away.

Cory Brown: [07:37] I don't know what I'm doing with my life.

Chuck Carpenter: [07:39] I'm trying to hit the Ballmer Peak and if I keep drinking this it's never happening. I don't know why not.

Cory Brown: [07:47] That's so weird.

Chuck Carpenter: [07:48] Yeah. So, I'll give it a two, I guess it's not like, oh my gosh, this was disgusting. I'll finish this little bit as not to waste, but I'm moving on to the real stuff. Real deal.

Robbie Wagner: [08:03] Yeah. I think from a branding and price point and novelty perspective, it's pretty cool for that. I'm going to give it a three. We are trying another nonalcoholic one in a couple of weeks. I think there's only maybe like three or four companies total that make one. So, we'll see how that one is. If it's similar or not.

Cory Brown: [08:22] Why is that, you think?

Chuck Carpenter: [08:23] Well, I don't know. It's a newer trend. I've seen the gins and tequila as well. So that seems interesting. I guess it's the thing. All right, so you give it three, two, one. So yeah, we should discuss. Let's get to the meat of it. All right. Let's talk about how you set the internet on fire.

Cory Brown: [08:43] A very small corner, I'm sure.

Chuck Carpenter: [08:45] Well, I mean, Eric Elliot decided to chime in.

Cory Brown: [08:49] Oh, he did? That's true.

Chuck Carpenter: [08:51] Yeah.

Cory Brown: [08:52] Highlight of my career right there.

Chuck Carpenter: [08:54] Yeah. Somebody's there. And you wrote an article about how you do not like or you do not recommend async/await patterns.

Cory Brown: [09:03] Why I avoid async.

Chuck Carpenter: [09:05] You avoid that.

Cory Brown: [09:06] I was trying to be clear that this is just me a pattern that works out well. And that was clearly not conveyed, I think.

Chuck Carpenter: [09:14] Yeah. There's a lot of people, I think, that are using it in various concurrency patterns and are really happy about it. And they're really jazzed that now it exists in Node and all their favorite JavaScript places.

Cory Brown: [09:30] Now it's top level. You can use it on the top-level screen, right?

Chuck Carpenter: [09:33] Yeah.

Robbie Wagner: [09:34] Let's take a step back, though. And for people that haven't read the post, give us a little synopsis of your feelings and thoughts there.

Cory Brown: [09:42] Yeah. So, it might have helped if I had given some context in the article a little bit. I lean in my JavaScript writing, I lean. I inclined functionally. So, I like functional style things. I prefer that, it makes more sense to me. So, for that reason, I am drawn towards something like a promise, which is very monadic in it and the way it operates. I can think in terms of that. And I find that I can break up things into more discrete pieces by venting over the promise multiple times. And because you get the flat map capabilities of a promise, you can easily avoid a lot of the very deep. What I see a lot of people do often, and this is a point of making the article is they'll create this essentially callback hell of promises. So, we had callback hell, and then promises are supposed to solve that. And then people just wrote promises. If they were writing callbacks, which is silly. That's what you're doing then. Yeah, of course, async/await looks a lot better. So, I tried to convey certain ideas why I like the promised API for Asynchronous activity over async/await, and a lot of that. In the past, I've written some functional style articles that don't get any traction. Nobody cares. You get people talking functional and you get dismissed. I'm also libertarian, so I get dismissed for that, too. He's crazy. He's a crazy libertarian functional programmer. We don't need to listen to him at all. But I'm used to it. That's fine. So, I was trying to come at it from a different perspective. And one of the problems I have with async/await is that because I do a lot of mentoring, too. So, I talk to young new developers. Not so young, but new developers who are learning and conceptualizing and building up this framework in their mind about how programming works and what async/await does looks remarkably like synchronous code, which is kind of its selling point, but also, it's not synchronous. There are really important aspects of asynchronicity that are kind of masks over when you make it look synchronous, and it becomes, at least in my experience and my experience is not the totality of everyone's experience. But you can tend to make assumptions about the code as if it were synchronous that are not valid simply because it is asynchronous. If that makes sense.

Chuck Carpenter: [12:15] I think another thing that tends to happen when you're using it a lot is you don't really even know what is asynchronous or not. You're just going to throw an await on everything just to be safe. So, I think whichever one you like better, I think knowing what is asynchronous and how to handle it is definitely important. And not just being like, oh, I don't know. I'll just await everything.

Cory Brown: [12:41] That's true. I had some conversations with coworkers after this. I kind of see where could I have clarified so that I didn't animate people so much in one direction? Because as of this recording, I have now 62,000 views on Medium on this. That is approximately 61,000 more than my other most popular one.

Chuck Carpenter: [13:10] Right. So, we're striking while the iron is hot. That's really what this is all about. We were like, maybe we have this guy on. No, now's the time. Now's the time. People are talking. We want to fly to that 62.

Cory Brown: [13:24] Yeah. I'll be honest with you, for like a week, I was, I don't know, depressed. Closest thing to depressed. I've been I was like, wow, do I suck that bad? Am I that wrong? It happened like people were commenting and it was fine. And then it got onto Hacker News. I was like, oh, I wonder what they're saying? And out the gate it was bad. It went from like, you're an idiot on Medium to, I feel sorry for this guy. Like, wow. Yeah, I don't need your pity.

Chuck Carpenter: [14:00] Yeah, that's an interesting place to sort of get feedback. I'm a lurker on Hacker News. I'm afraid to engage any of that community too much. But boy, do I like reading about other people. So, I kind of got that. Yeah. I mean, there's a lot of really smart, super opinionated people there too. So, the assumption is that there is a right way. And I think that's the fallacy to the argument to begin with. Right. Like, it's not the one way to skin a cat kind of thing. I think just regress a little bit back to the thing you were saying about just in your experience. Right. And like a conversation that we've had a lot internally and probably on here a little bit around it's like, oh, what are the check boxes you need to become, level up and become just an engineer from a junior engineer or become a senior. What does it take to become senior? Right. What are the things that you're able to do that you can check off or what's the time frame and all of that? And it's really like super ambiguous because I think that what makes you more senior is just having gone through more things and solved more problems in a successful way. And so, I think when you're coming out from it, where I'm getting at here is that this is a way that you've been able to solve software problems is by saying this pattern for me and what I've experienced makes more sense, straightforward, maybe gives readability, maybe some of the things that you said versus the other thing which has some pitfalls if you don't fully understand.

Cory Brown: [15:33] Yeah. It's always hard to convey whenever you have an opinion about some pattern that you prefer is that there are the discrete and concrete things that you can describe. You say, here's why these are good, and you could even describe here are some drawbacks to it. What's much, much harder to convey is that when you have this pattern and it fits into a much larger kind of conceptual framework in which you work in code, it has this multiplying effect. So, if you take this like async/await versus promises in isolation all by itself and say all other things don't really matter, but just these two things, and look at it that way, it's incredibly subjective. There's no real you can land and say, oh, yeah, definitely this is the way to go. But if you take it and you say, you know what? I generally write functional style JavaScript. I like the monadic patterns. I like functors and all this other stuff that fit into a kind of a mental model thinking about programming. And then you say, okay, here's something that looks remarkably like a monad, and here's something that looks remarkably like a statement. It makes a lot of sense that one would drift towards the monadic looking thing, because that fits well into the paradigm that you're familiar with. So, for me, that's really why I lean towards it. And there are other advantages I try to articulate, but those advantages could go in. I'd probably still lean towards it.

Chuck Carpenter: [17:05] Right, well, and it's just a pattern of personal success, I think. Right. It's in the same way that Robbie hates functional components and prefers class-based components. Yes. There'll be some very opposite opinions in those things.

Robbie Wagner: [17:23] You're jumping around a little here. We have a few more notes around that, but we could jump straight into that if you want.

Chuck Carpenter: [17:31] No, if you've got some things you want to say, I think you should say it.

Cory Brown: [17:34] I get it now. This is a hostile environment. I see.

Chuck Carpenter: [17:40] There's no debate I've ever looped you into Cory. That isn't hostile for me. It's about the show. I just want to watch, sit back and watch.

Cory Brown: [17:49] Watch the world burn.

Chuck Carpenter: [17:49] Because I don't care that much.

Robbie Wagner: [17:51] The more drama, the more listeners.

Chuck Carpenter: [17:53] Yeah. And I strive to be an overpaid YAML developer in my future, so I don't care.

Cory Brown: [18:00] Well, I can talk to you about YAML and how terrible it is, but we'll skip that for now.

Robbie Wagner: [18:05] My big thing for anyone who's jumping in on this episode and hasn't heard me rant on a bunch of other episodes, this is kind of how we've been developing JavaScript. We have frameworks which would fake classes. Like, we've got kind of this object that's like a class. It has some things that are classish. Everyone's like, I really want classes. Like, Java has them. Let's be object-oriented, do all this stuff. Then, like, years and years go by and we finally get classes and everyone goes, I fucking hate classes. Can we just go back to functional? I want functions. And I'm like, what are you guys doing? We've been asking for classes forever, and they're so much nicer. I don't have to be like, use thing, use other things. Use a thing to use the thing. I can go like, state equals, whatever. Like, it's so much nicer to just set the thing and it's there.

Cory Brown: [18:55] So I think you and I might have had a little bit of a different experience in the JavaScript world over the time. My perception of it is there are, there have always been essentially two camps of JavaScript because JavaScript is like a multi-paradigm. You have people coming into JavaScript from Java or picture object-oriented programming language, and they understandably want to bring what they already know with them into this paradigm. And they see like, wait, you can't make a class, but you have to do this hacky weird function and then new it up and it's bizarre. All right, that's gross. And then you have people coming in and from functional paradigms or just procedural paradigms. And they say, oh, yeah, functions and no functions. It's fine. Why do I need to do this to do the thing? I just do the thing that I'm familiar with, and it divided out in these camps. I distinctly remember I'm going to date myself a little bit here. But Douglas Crawford, he would talk about JavaScript's prototypal nature, and talk about how prototypes are, strictly speaking, superior to classes because you can emulate classes and prototypes. You cannot emulate prototypes and classes. That was his argument. So, I came up in that school a little bit where everyone I knew, everyone I was following was like, ah, classes. I mean, it's what we have to deal with now, but hopefully we can have a better system in the future. Don't have to worry about this and all that other stuff. And then you have this other class, I think championed, I think, in large part by again, names, Wycats Yehuda.

Chuck Carpenter: [20:38] Oh, Yehuda, yeah.

Cory Brown: [20:40] Who has been a huge champion for the advancement of classes in the JavaScript language, bringing championing decorators and private fields and all that. It's been fun to watch. It's been interesting. And he makes some good arguments, but from my perspective, at least, it's kind of like the other side of JavaScript. There's that side and there's this side, and both seem to be progressing. You have the functional advocates that are getting things that they're asking for, and you have the class-oriented advocates that are getting things they advocate for. And in a lot of ways, I think that's fantastic. Even though I'm not going to be using the classes.

Chuck Carpenter: [21:17] Yes, that's funny. The Yehuda has some very entertaining like Twitter battles.

Cory Brown: [21:23] Yes.

Chuck Carpenter: [21:24] And that would make a lot of sense for Robbie, since he's still Ember through and through.

Robbie Wagner: [21:29] Yeah.

Cory Brown: [21:30] Yeah. I thought that was a good tie back into the main thrust of the podcast, right?

Chuck Carpenter: [21:35] Yeah.

Robbie Wagner: [21:36] But even in React, I haven't done much React, but I've done some React-y things, Preact and some StencilJS and whatever. And I would still prefer to use classes because maybe it's just because I don't understand why we need to have like 50 hooks for everything. But I just want to be able to set my state. I don't need to tell you I'm going to set it and how I'm going to set it and what I'm going to do. I just want to set it.

Chuck Carpenter: [22:03] See, I see hooks as like a simplification of like the Redux Sagas, Dunk, whatever, full application state and reducer actions stuff that started happening that was just highly complicated. And you had to declare different state in three different places and track it in all these places and then dispatch actions so that it could trigger a change in the state and all these things. So, hooks, I think, are way more handy in having like local state granularly in your component or in your higher order component or whatever, so that, hey, I can track what I need right here and I don't have to go through all this crap.

Cory Brown: [22:48] I think the thing to keep in mind, though, is that one of the things that functional programming attempts to do is to isolate side effects, right? Things that happen outside of the function that are observable. And so, things like hooks are an attempt to kind of wrap around that and say, I'm going to take these things that are visible outside the function, and I'm going to kind of keep it right here and tuck it away and keep it separated from everything else. I don't think you're wrong, Robbie, at all in saying that it is easier in terms of writing the code to say this dot state equals this thing dot. What tends to, at least from a person of functional influence would argue like that's all well and good, but you can't control you can't make any guarantees about who is updating that state and where and to what and all that. And so, in an attempt to kind of create those guarantees, you have these mechanisms like hooks and stuff. And to be clear, I think there's definitely room for improvements on hooks, even though I do think it's an improvement over the old class model for React components at least. Who was it? Again, with my name problem, the creator of closure, I think who said that, or maybe I'm just remembering who it was at all, but something along the lines of the shared mutable state is the root of all evil. That's exactly what, at least in terms of inside of a class, your various methods that have access to this shared mutual state. I think things like private fields and private methods and stuff really go a long way in taming that. But it's not mathematically pure. It's not mathematically pure.

Robbie Wagner: [24:37] Yeah. See, I don't care about being pure. I care about it being easy developer experience wise. But I get that a lot of people want to really engineer stuff so hard that it's impossible to do the wrong thing, and that's fine.

Cory Brown: [24:52] Where do you want the DX to come from? You want it to be at authorship time or in production when there's a bug? And I think the functional camp wants to say I'd rather not deal with bugs as much as possible. I'm going to go through a lot of extra effort up front to try to make as many guarantees about there not being any. And that means the developer experience upfront side of it is going to be a little more cumbersome and tedious and mentally taxing, whereas I think there's a good argument to say yeah, but maybe that's too much.

Chuck Carpenter: [25:27] So essentially saying that I think both camps are trying to address that in different ways. So, I think that what you're saying is, okay, the functional camp, let's just say, like the React not as a library but as a framework. They're trying to build it into the API, that you can't make those kinds of mistakes if you're following docs in the API. And I think, conversely, things like Ember are trying to do it by saying we have a robust testing framework across three different layers. Right. And that's another way to prevent bugs, potentially, as well as long as the business contract is followed and you write tests, I think tests are a way to do that versus the framework API.

Cory Brown: [26:11] Yeah. I'm not in the business of telling people that they're wrong for preferring object-oriented or class-based or anything. It's fine. But my predilections, my proclivities lie elsewhere personally. And again, I think it's great. I've already seen ideas from the object-oriented world come in and benefit the functional world, and vice versa. The functional world come in and really improve the object-oriented world. So, I don't want to see either of them go away, even as I choose to essentially wholly live on one side.

Chuck Carpenter: [26:47] Yeah. Just speaks again. I kind of come back to these are patterns in your experience that has enabled you to write successful software for various companies.

Cory Brown: [27:01] Successful enough.

Chuck Carpenter: [27:01] Right? Yeah. I mean, things work, people keep hiring you. Something must be going. Okay.

Cory Brown: [27:07] Or I'm really good at fooling them.

Chuck Carpenter: [27:09] Or they're just desperate.

Cory Brown: [27:10] Yeah. I mean I could be mental.

Chuck Carpenter: [27:12] I think you talk a big game, but then the output is Cory, why does it take you three weeks to change the color of this button? You know, we want it red. Stop arguing.

Robbie Wagner: [27:23] Well, which red? I'm really trying to figure out which one is the best looking.

Chuck Carpenter: [27:27] Yes. A hue of red is...

Cory Brown: [27:30] What really is red.

Chuck Carpenter: [27:31] Yeah. What do you mean by red? Red in what language? Rojo. Sorry, I'm in a real foreign language mode since I recently returned from Europe. Rosso is what it would be in Italian. Rosso, Bianco, Nero.

Cory Brown: [27:49] Dearg in Scottish Gaelic.

Chuck Carpenter: [27:51] Oh, wow. Are you Scottish?

Cory Brown: [27:53] I am, but that's not why I'm learning it. It's just interesting to me.

Chuck Carpenter: [27:58] Why not Irish Gaelic.

Cory Brown: [27:59] I don't know. I don't have a good reason.

Chuck Carpenter: [28:01] Is it the golf cap?

Cory Brown: [28:03] Maybe that's it. I don't know. It's the kilt. I really want to not be in a kilt. That's what it was.

Chuck Carpenter: [28:08] Yeah. Sans underwear. Any kind of underwear. How would that work out?

Cory Brown: [28:13] Yeah, I don't know.

Chuck Carpenter: [28:13] I'm only alluding, yeah, so.

Cory Brown: [28:16] Having never worn a kilt. I really couldn't tell you what goes on underneath. That's not an area of Scottish culture that I have studied.

Chuck Carpenter: [28:24] Well, dreams can come true.

Cory Brown: [28:26] Braveheart tells me that it's very commando down there, but I'm not sure that was historically accurate.

Chuck Carpenter: [28:32] Yeah. Mel took some liberties with various films, is what I understand. Yeah.

Robbie Wagner: [28:38] It seems like it would be inconvenient to have nothing on underneath.

Chuck Carpenter: [28:42] Yeah. Especially fighting with swords. I feel like I just want. I don't know. Is it going to stop a sword? I don't know, but I don't want to be all out there.

Cory Brown: [28:50] Yeah. You want to keep things close?

Chuck Carpenter: [28:54] Yeah, close as possible. So, the golf cap that you're wearing today makes me think of there's a very funny Robin Williams skit about golf. I don't know if you've ever heard that where it's like a Scottish guy and he's describing this game to someone else and like all the crazy things you have to do, you hit it over here and there's trees and sand and you get it out and if you knock it in the water and you start over and blah, blah, blah, and then finally you get it in this hole.

Cory Brown: [29:20] Why is he Ukrainian?

Chuck Carpenter: [29:22] Because when I talk really fast. Also, that's a very explicit, specific accent that you're picking up from what I'm doing.

Cory Brown: [29:31] Oh yeah.

Chuck Carpenter: [29:32] Yeah. And so, they ask him like, okay. And at the end of that, it's all done. And he's like, no, you do it 18 effing times fucking times. We curse on this podcast. I don't care. Anyway, it's a really funny one about golf. And that was inspired by your head wear, which I have like ten of those too. So, Robbie took a note around. You had a post on senior engineers, I think, which dovetails well, goes nicely from something I brought up earlier about what makes you senior versus whatever else. Yeah. Being in short supply because the industry is growing so fast.

Cory Brown: [30:09] Yeah. That one didn't get nearly as many hits as my other one, but yeah, we can talk about that one.

Chuck Carpenter: [30:14] I think it's important, though. I think it's to say, like, basically everyone is becoming a technology company regardless of your output, because they have technology needs and everybody wants pieces of pie. But obviously there's only so many of us really.

Speaker 2 [30:29] Yeah. And not only that, but even if we could meet demand for engineers, you would find that the ratio of people with experience to the people without experience keeps the distance, keeps getting bigger.

Chuck Carpenter: [30:46] Yes.

Cory Brown: [30:47] And kind of like what you said before, one of the aspects and this is something I've noticed as well, one of the aspects of a senior engineer. I have known some truly, truly brilliant junior engineers. Shockingly good. And I've watched companies promote them to a senior engineer after three years doing the job. And I'm like, okay, you clearly have a knack for this. And in short order, you're going to be a better engineer than me. I don't doubt. However, there is something that comes with just like slogging through crap and failing multiple times, just having experiences that I think is absolutely necessary to be a senior engineer.

Chuck Carpenter: [31:32] Right. And it's hard to quantify that. Right. That's a big challenge. So, we're going through multiple iterations of our career ladder internally. And it's really different for an agency, too, versus where I've done it as a manager in larger companies. But even so, quantifying it explicitly is really tough because I saw this posted somewhere. I don't know if it was a tweet or something else that said, senior engineers aren't necessarily faster. They've just seen it before. And that's really what I think it right. Like, you've just had experiences. You've just happened to have a few different jobs where you've had to do different things, solving different problems or the same problem where you failed before, and this time it went differently. And now you have a little more in your tool belt. It's not that, you know, React better or that you can basically pump out 16 story points per sprint. It's not any of those things. It's just that you've been there.

Cory Brown: [32:34] No, I totally agree. It's pattern recognition and the development of an intuition for saying you're able to say something like the other people say, oh, this is a different problem than this other one. But you look at it and say, actually, no, I see the similarities. And I think the solution is the same, even though they appear to be different problems.

Chuck Carpenter: [32:55] Yeah.

Cory Brown: [32:55] I think only somebody who's been through enough different things is able to do that. I don't care. It almost doesn't matter how innately talented a given engineer is. You just have to go through the experiences. And I'm sympathetic to companies because they are under immense pressure to hire engineers to pay wages that are growing faster than inflation. And inflation is growing fast already. And people want titles because titles give them more money, whether that's good or bad. So, you have they're promoting people who've been in the business for three years, a senior engineer because they can't hire a senior engineer if for real it costs too much or they're just not around. And two, that's the only way you can retain them anyway.

Chuck Carpenter: [33:42] And there it is like hire and or retain and HR. I've seen this trend over the last ten years, even I feel like it's accelerating more and more in the last few years. But essentially HR companies will have spent all this time mapping out their pay bands and all this kind of stuff. And the only way you can play this game to either retain or hire someone into a pay band that they want is to say, great, we're just going to elevate their title in order to make it work, whether it matches that or not. This is the game. This is the shell game we've got to play to get people in the door and good people and well-meaning and all that kind of stuff. And I can't fault them for playing into that because why wouldn't you? But you're not getting the same thing. So, it's like I'm desperate to have a senior engineer. I'm having to hire someone at two or three years of experience into that to meet their wage demands. But now when I need them to be a senior engineer and maybe lead another team, they can't do it. They can't do it.

Cory Brown: [34:47] Yeah, absolutely.

Chuck Carpenter: [34:47] So then what am I. You know?

Chuck Carpenter: [34:49] Yeah. And my thinking on this is like, I'm not going to be able to do anything about this in terms of telling people you don't stop promoting people too soon, that's not going to happen.

Chuck Carpenter: [34:58] No.

Cory Brown: [34:58] Market forces are just way like. And plus, it's just me. Nobody cares about me. I'm nobody.

Chuck Carpenter: [35:05] Nobody cares about any of us. We're one individual, regardless of whether we're Yehuda or Cory Brown or whatever else is that one versus the many. And the market is getting flooded and is going to continue to get flooded because the demand is there. And anyone with a bit of aptitude and interest in this job market would obviously go get a piece of that pie. So, then what?

Cory Brown: [35:28] Yeah, two thoughts on that. First. That is the first and last time my name will ever be mentioned in the same sentence as Yehuda Katz. And I am grateful for it. I'll cherish it forever. And two, the conclusion I came to was the only thing I can really do is if this is how it's going to be. This is how it's going to be. I guess what I can do is attempt to impart as much information as I have to as many people as I can, as quickly as I can in a meaningful way. And so, yeah, that little post was just, hey, I'm just looking for people to mentor. I know a lot of people are looking for mentors. Come talk to me. I got a handful of people that I was working with and I was thinking, hey, maybe I could turn this into business and quickly learn. No, I don't want to do that at all. But I do like mentoring.

Chuck Carpenter: [36:11] I was going to say, you could do it. And there's an opportunity there. I think.

Cory Brown: [36:15] I could. In fact, one of the people I'm mentoring has some really good ideas around that. So, I'm like, okay, let's stay together here for a little bit.

Chuck Carpenter: [36:23] Yeah. Why not?

Cory Brown: [36:25] And see what we can do.

Chuck Carpenter: [36:26] Commoditize that in some way, in a way that you enjoy doing it, too. It's not a time suck because you have a full-time job.

Cory Brown: [36:32] Yeah, I do. But the important thing here is that it's valuable and useful. And so, I think it has been for the very small handful of people I've been working with. Hopefully I can inspire other people who are properly grizzled senior engineers to kind of take that on themselves, too, because I think it's important for us to, we're in no danger at all of being supplanted and replaced by all of these fresh young people coming into the business. There's so much work to do. I'm not concerned about that at all. But if you have any hope of going to whatever your next job is and entering a code base that is at all reasonable, then we need to start training our junior engineers. And unfortunately, businesses are not investing in that for whatever reason. And so, it's on us to do that.

Chuck Carpenter: [37:27] Yeah. Well, something that I said earlier around how every company is a tech company now. Right. But they're not understanding the structure of that quite well, because naturally, as a senior engineer who goes further in their career, unless you become an architect. But I would argue even an architect versus a lead has responsibility to the company and to the team that are embracing their plans to help them understand how to execute. Right. They're not the hands to execute, but you need to understand. So, there's a level of that. A lead on any team automatically has mentorship responsibility. They don't have managerial responsibility, which has to do with, like, success paths and growth and all those kinds of things. But a manager also has that. So, there's, like, a lot of it around is that you need to understand that you're building teams where experience needs to be conveyed, shared and supported. So, you should be in teams where the workload that you take on is everybody. So, a junior engineer just gets the bugs and blah, blah, blah. And they're often an island like that's bullshit. The reality is that everything that comes into your team's workload is everyone's responsibility. So, we don't care about assigning responsibility. We're all going to get this done together, and you figure out ways to do that. So, your lead engineer comes in and says, let's do pairing and mob sessions and multiple minds, one set of hands. Let's get this done. And that's how people learn. That's how you accelerate.

Cory Brown: [39:09] Yeah. Companies would be wise to take their senior engineers and make them as much as they're willing to be made. Leads like you're talking about where they're not going to be responsible for actually directly responsible for outputting stuff. Their job is to pair, to mob, to be there around the others as much as possible and talking with them and coaching and whatever.

Chuck Carpenter: [39:31] Yeah. The fallacy is that my senior engineer gets the most story points done, and that's why I want four seniors on my team. So, it's a misnomer around velocity and some other things, but you have the brain and experience here and then you have a team of hands.

Cory Brown: [39:50] I think it was Eric Elliott who said long before he criticized my post, which I appreciated. It was a great response.

Chuck Carpenter: [39:58] I wonder if he likes whiskey. We should hit him up.

Cory Brown: [40:01] Yeah, you should. But I think he said something along the lines of it back when people were everyone was talking about 10x engineers for a hot minute and he said, 10x engineer is not someone who did ten times work of regular engineer. A 10x engineer is the one who enables five other engineers to go twice as fast. That's what a 10x engineer is. And that resonated with me. I'm like, yeah, that's exactly right. So, a large chunk of the last several years of my career has been diminished focus on producing stuff directly and more in enabling others to produce more quickly. And the fact that I've been fortunate enough that two different companies I've been at to start up a team whose whole job is dedicated to removing roadblocks and establishing patterns that enable acceleration on the product levels for others.

Chuck Carpenter: [40:52] Yeah, that's a smart thing. Yeah, I've been a part of that on one client where it's essentially as a platform team which would take out of band items like upgrading packages, upgrading Node versions.

Cory Brown: [41:04] Exactly right.

Chuck Carpenter: [41:05] Getting perf metrics and finding nuances there to improve the application performance wise, and all that kind of stuff that can go out of band from the normal feature bug work but still move the needle on things. And yeah, writing RFCs to communicate across the company. And then we did like a DX portal called Backstage, but there's a few now starting to become like kind of a hot thing. So Backstage is the open-source Spotify one, and basically like, oh, it's a big company with a lot of tech, a bunch of services that are disparate. Nobody understands what they learn. So, you have a catalog there, you can spin up new sandbox environments, you can. What's another thing? Oh yeah, we get a lot of metrics on what's deployed, what were the recent performance runs, stuff like that. And then anyone in the org can go there, one stop shop, get this kind of info.

Cory Brown: [41:57] That's cool. Yeah, I like that.

Robbie Wagner: [41:59] Yeah. So, we should probably pivot to some not tech stuff at some point here.

Chuck Carpenter: [42:05] Somewhat not should we what not?

Robbie Wagner: [42:07] Yeah.

Robbie Wagner: [42:08] This is where I'm going to be really weak. I'm afraid so. I'll do my best.

Chuck Carpenter: [42:12] Okay. Yeah. You don't have another life. It's because you don't have a drinking problem.

Cory Brown: [42:17] The cause of and solution to all of life's problems.

Chuck Carpenter: [42:20] Yes. I'm certain I'd be more productive than Yehuda if it wasn't for whiskey. Unless I find out he drinks a lot of whisky, and then I'll be like, just not that great. What I want to know is where currently lies your obsession with Dr. Pepper.

Cory Brown: [42:35] So I have been drinking Dr. Pepper in absurd amounts since high school. In College, I was drinking two, sometimes three 44 ouncers a day. This is the hard stuff. This is regular Dr pepper?

Chuck Carpenter: [42:53] Yeah. Were you doing, like, Dr. Pepper keg stands? Basically.

Cory Brown: [42:57] Yeah. I had a huge problem. And then I hit 30, and my body was like, hey, all that sugar? Nah.

Chuck Carpenter: [43:06] Yeah.

Cory Brown: [43:07] And so I reluctantly transitioned to diet Dr. Pepper.

Chuck Carpenter: [43:11] Which tastes just as good, in my opinion.

Cory Brown: [43:13] Well, it took me quite a long time to actually grow accustomed to it. I had kind of like Westley in Princess Bride. I built up a tolerance over about seven years dealing with it because aspartame did not suit me well. And eventually, one day, I realized, oh, crap, I don't really enjoy regular Dr. Pepper at all. It's too heavy. I really like to Diet Dr. Pepper. And then almost immediately after, I realized, but I don't like Diet Dr. Pepper as much as I used to like regular Dr. Pepper. So, I'm like, oh, crap. Now I've lost a little bit of joy in life, but I can't go back.

Chuck Carpenter: [43:50] That's it. Yeah. So, there we go. That's where it lies. Like, sometimes, basically, not as much.

Cory Brown: [43:56] No. So multiple times a day.

Chuck Carpenter: [44:01] I can remember on your desk, you having multiple, two liters of Dr Pepper.

Cory Brown: [44:06] Currently right now at my desk at work, but I'm only in there, like, two or three times a week. 32 can case underneath my desk and a little mini fridge that holds six cans at a time. When I got there, one of the perks a lot of places have is they bring in food and stuff, and we got our food from Costco and don't have Diet Dr. Pepper in there. So, one of the first things I asked is like, hey, do you think we can get Diet Dr. Pepper for whatever reason? Reasons I don't understand. The answer was no, because Costco didn't supply it in the way that we did our... I don't know. It doesn't matter. My manager very kindly brought in a case for me, just for me. Here you go. So, yeah, it's still a horrible nightmare.

Robbie Wagner: [44:58] We all have our things.

Chuck Carpenter: [45:00] Yeah, exactly. Clearly, we all have our things. I cracked this. We bought an entire barrel of whiskey. I have, like, 100 and something bottles of whiskey in my house. Right? 126 bottles of whiskey at my house right now. Delivered, like, two days ago or yesterday, I guess. Yeah. Every day starts to meld together when you drink this stuff. So, there's that. And I'm popular at parties now. Parties. I mean, Rand's Leadership Slack. I posted a picture of all these cases of whiskey in front of my house and people were like, I want to go to there.

Cory Brown: [45:39] That's awesome. Yeah. So, I don't have many hobbies outside of this. But one thing I have mentioned earlier that I have started doing and I am kind of passionate. Right word, but maybe very consistent on over the last four or so years, I've been learning Scottish Gaelic and it's weird. I understand that. My wife often tells me why not take a language that people use.

Chuck Carpenter: [46:08] Yeah. Like we get travel there and you could actually use it.

Cory Brown: [46:11] Yeah. Literally, almost anything else. But you pick the one that like 50,000 people in the world actually speak fluently.

Chuck Carpenter: [46:20] So where in Scotland do they still speak it?

Cory Brown: [46:23] So it's still spoken natively in a lot of parts of the Outer Hebrides used in the Highlands.

Chuck Carpenter: [46:29] Okay.

Cory Brown: [46:30] But what's really interesting is Duolingo introduced the Scottish language course several years ago. And those huge amount of people that joined it there's now, I think it's a million. But a couple of years ago it was like 500,000 people were learning Scottish Gaelic, whereas 50,000 people in the world spoke it ten times the number of people who natively speak it are learning it.

Chuck Carpenter: [46:53] That's interesting. I've only been to Edinburgh and I mean, I don't think they speak it there.

Cory Brown: [47:01] The vast majority of Scottish people, you try to go up and talk to them in Gaelic, they'd swear at you and tell you what's wrong with you.

Chuck Carpenter: [47:09] You wouldn't understand what they're saying, especially if they're from Glasgow.

Cory Brown: [47:12] Yeah.

Chuck Carpenter: [47:13] Glaswegian. I don't understand what they're saying.

Cory Brown: [47:17] There's a video I saw a while back.

Chuck Carpenter: [47:20] [unintelligible].

Cory Brown: [47:20] Yeah. I was going to bring that up. With the what's his name? 300 dude. Gerard Butler. Talking to Siri. I think it was what it was. I don't understand.

Chuck Carpenter: [47:40] They always sound like they're almost vomiting.

Cory Brown: [47:42] Yeah.

Chuck Carpenter: [47:45] Sorry for our Glasgow listeners.

Cory Brown: [47:47] Love you guys.

Robbie Wagner: [47:48] There may be some.

Chuck Carpenter: [47:49] There might be. I just offended them.

Robbie Wagner: [47:51] We have some Irish ones.

Chuck Carpenter: [47:53] Yeah. Robbie's like, please don't offend our listeners. We talk about the show notes each time he's like, yeah, I don't know. Can you just not offend our listeners? Yeah. My job in life has been to offend Cory for I don't know what, 14,15 years so far.

Cory Brown: [48:10] But you do it in such a way that you want to be bad, but you can't.

Chuck Carpenter: [48:15] And I'm so charming and he keeps coming back. I don't know. I'm getting older, though. Some would say more handsome.

Cory Brown: [48:22] Somewhat. Is that you?

Chuck Carpenter: [48:23] Yeah, I say it. George Clooney and I are from the same area and I feel like we both just get more handsome with age.

Cory Brown: [48:30] I'm sure that's it. Not to bring it back into tech, but I have made a habit of occasionally speaking at conferences or I should say occasionally people make the mistake of allowing me to speak at conferences. And I've had a habit for several years now of starting every talk I give with a brief introduction to Scott Gaelic. That's literally the only way I get to use it.

Chuck Carpenter: [48:54] Yeah. Is there some recordings you should share that maybe we'll put it in links in the show notes or something?

Cory Brown: [48:59] There are a handful. I've been fortunate enough to speak at UtahJS Conference most of the past six years, and most of those I have a little intro in Scottish Gaelic.

Chuck Carpenter: [49:11] Well, that's how Kent should have known you. If you gave me that hint. That would have helped a lot. I had this challenge when Kent was on, and Cory was like, if you can get him to remember me and say my name without too much prodding, and I totally screwed it up.

Cory Brown: [49:26] Well, I knew you would.

Chuck Carpenter: [49:27] Yeah, that's what I do. I screw things up.

Cory Brown: [49:30] No, there was that. I was pretty sure that was going to happen anyway. But at best, I could describe my acquaintance with Kent C. Dodds as, well, an acquaintance, and not much more that.

Chuck Carpenter: [49:42] He's a man who has so much more time than the rest of us.

Cory Brown: [49:46] Just so much more with his time.

Chuck Carpenter: [49:48] Yeah, well, I mean, you're very dedicated to your craft as well, and I have no idea how he does all those things. I'm pretty sure he uses OpenAI to write most of his content.

Cory Brown: [49:57] I thought you were going to say you're pretty sure he uses opium, and I would have not blinked at that. It's got to be some kind of drug to keep him going that fast.

Chuck Carpenter: [50:06] Wait, we need to keep our celebrity guests happy. So, Kent, I don't know what this man is saying. I definitely never said that.

Cory Brown: [50:14] I'm sure he doesn't. He's high on life.

Chuck Carpenter: [50:16] I'm sure you're going to listen to this episode as you do every one over eggnog, and I never thought.

Robbie Wagner: [50:23] That he just operates on a higher plane than the rest of us. A lot of these people, they get so much done just around a different level.

Cory Brown: [50:33] I like the idea if you don't solve problems, you solve categories of problems, and he's just like solving the categories of the categories.

Chuck Carpenter: [50:40] Right. Yeah. Have you tried Remix yet?

Cory Brown: [50:43] I have. I built a little test app in it. Just because I wanted to know everyone's really hot on this thing. I want to try it out. I've always been a fan of React Router. I think it's a fantastic tool, and this is largely an extension of that. I'm watching it very close. I love to see Next kind of be like, whoa, we got to get off our butts and start seeing some things that Remix is doing is now coming into Next. And I expect you can see the other thing happen.

Chuck Carpenter: [51:09] Right. They're going to push each other a little bit. I kind of enjoy that because I think Next is an incredible tool, and it takes a whole bunch of thinking out of it. You just follow those simple patterns and then all of a sudden you have a full stack app. That's amazing. Add your ORM of choice, API routes. Boom. Done. It's really easy. Except for you have to use hooks. Robbie, I'm sorry.

Robbie Wagner: [51:34] It's okay. I'm in no danger of using NextJS ever.

Chuck Carpenter: [51:39] Right? So yeah, Robbie starting with a new client that is entrenched in Ember for the foreseeable future and they are doing pretty well financially, so I think they'll be around for a while.

Cory Brown: [51:51] Well, I'll tell you what, if you happen to run to a scenario where you get a client and they're like, we use Elm and you're like, crap, we don't have anyone who knows Elm, I would consider moonlighting on Elm.

Chuck Carpenter: [52:02] Okay.

Cory Brown: [52:03] Elm is cool.

Chuck Carpenter: [52:04] People do like Elm. Yeah, it stuck around for a while. I'm pretty surprised. We also want to try Redwood. Tom Preston Warner was on the show, and I think that it's an interesting tool for your pre-seed startup kind of thing. Like, let me get some shit together real quick.

Cory Brown: [52:22] Yeah, it seems to be kind of aiming to be the JavaScript answer to Rails because Rails is really known for like you want to start something up fast and just make it happen and you don't have to think too much about it. Rails is the way to go.

Robbie Wagner: [52:33] We already have that. It's Ember.

Chuck Carpenter: [52:37] Yeah, I was going to say we've.

Robbie Wagner: [52:38] Had it for ten years.

Chuck Carpenter: [52:39] It's hilarious though, but Ember is not full-stack, so that's the differentiator there.

Cory Brown: [52:44] Ember is kind of like the Opera browser of frameworks where it's like everyone likes it in principle. No one uses it in practice.

Chuck Carpenter: [52:56] Except for Apple and LinkedIn, I guess.

Robbie Wagner: [53:00] HashiCorp.

Chuck Carpenter: [53:01] Yeah. It's hilarious that Tom is a Rails guy who basically jumped right to React and ended up making Redwood without even knowing that Ember really existed. He's like the one guy.

Robbie Wagner: [53:14] And all of his marketing is like straight from the Ember docs, basically. But he apparently didn't read them or use Ember ever. But it's all the exact same stuff.

Chuck Carpenter: [53:24] He basically built full stack Ember without even knowing it existed. It's hilarious.

Robbie Wagner: [53:29] But I want to use Redwood to build an app for managing the coworking space. That's a great use case. I'm going to try it out and see how it is.

Chuck Carpenter: [53:37] Cool.

Robbie Wagner: [53:38] But anyway, we're a time here and.

Chuck Carpenter: [53:40] Cory doesn't know we have a coworking space, by the way.

Cory Brown: [53:43] No, didn't know that. That's fantastic though. I love it.

Robbie Wagner: [53:46] Well, we do.

Robbie Wagner: [53:46] I am there now.

Chuck Carpenter: [53:47] Maybe our listeners didn't know 1787, yo. If you find yourself in Middleburg Virginia, first of all, I'm going to say why are you here?

Robbie Wagner: [53:55] Which most people won't.

Chuck Carpenter: [53:57] And then the second bit is why not stop by the cool fox place? Yeah.

Robbie Wagner: [54:02] Is there any last stuff you'd like to plug or anything you want to mention before we end here?

Cory Brown: [54:07] So I'm on things, mostly Twitter. My handle on things is at unique name U-N-I-Q-N-A-M-E I don't engage much on anything and honestly, the response to my why I avoid async/wait has not changed that at all for me, I'm unlikely to engage with anyone who comes at me with anything other than I love you. No, not even that.

Chuck Carpenter: [54:34] Yeah, we want to avoid depression before you chug that whole bottle of nonalcoholic whiskey.

Cory Brown: [54:41] I do enjoy talking to people who enjoy talking. I don't enjoy talking to people who enjoy just not engaging intellectually with anything. Yeah, I have a website 365JSthings.tech.

Chuck Carpenter: [54:56] There you go. You got that?

Cory Brown: [54:57] Yeah, I got that. That's a thing. And nothing honestly, nothing interesting.

Chuck Carpenter: [55:01] People who have listened know that I have this strange obsession with hot ones and so I love how he ends it where he's like tell the people what you got going on this camera. This camera. This camera. Even though this is just audio. Exactly.

Cory Brown: [55:17] Yeah. Only thing I would say further is oh, and I forgot to do this when we poured this. I apologize. Slàinte Mhath. Cheers. And one last thing. Also, one last last thing.

Chuck Carpenter: [55:30] One one more.

Cory Brown: [55:31] Yes, one one more. Whiskey is actually the word whiskey comes from Scottish Gaelic for whiskey which is Uisge Beatha, which means water of life.

Chuck Carpenter: [55:43] Agree.

Robbie Wagner: [55:46] All right. Well, thanks everybody for listening. If you liked it, please subscribe and we'll catch you guys next time.

Chuck Carpenter: [55:55] Thanks for listening to Whiskey Web and Whatnot this podcast is brought to you by Ship Shape and produced by Podcast Royale. If you like this episode, consider sharing it with a friend or two and leave us a rating. Maybe a review as long as it's good.

Robbie Wagner: [56:10] You can subscribe to future episodes on Apple Spotify or wherever you get your podcasts. For more info about Ship Shape in this show, check out our website at shipshape.io.