The Elixir Outlaws now have a Patreon. If you’re enjoying the show then please consider throwing a few bucks our way to help us pay for the costs for the show.
(Upbeat intro music)
Amos: Welcome to Elixir Outlaws, the hallway track of the Elixir community.
Chris: This is officially the show.
Amos: I thought we were already in the show.
Chris: No, no that was the pre-show.
Anna: I think you were and then I ruined it.
Amos: Nah, I think we’re just gonna put it all out there.
Chris: Yeah, that’s the pre -show that we're going to offer up to our Patreon backers only.
Anna: Oh, right.
Chris: One-time special offer.
Amos: B-side, just putting it all out there.
Jeff: One-time special level.
Chris: Yeah, exactly, yeah. For five more dollars you get access to all the cut content.
Amos: The outtakes.
Chris: Better yet, the unfiltered stream.
Amos: It's really good. W actually take all that uncut content put it together, so you get to hear “um, uh, um” for like 10 minutes.
Chris: It's like when you get to the end of a really good movie and you get the bloops at the end.
Anna: Although ours aren’t quite as good. But, you know.
Amos: This is true. (Laughing)
Chris: You just get the bloop reel.
Anna: Get Keathley on a day when he’s had way too much coffee.
Amos: We can’t, we can’t release this. (laughing)
Chris: Anna, so why don't you introduce our guest. We have a guest.
Anna and Amos: (simultaneously) We do have a guest,
Anna: And I didn’t even know we were having a guest.
Chris: I, I didn’t either.
Amos: You, you worked with our guest. So, so why am I introducing the guest? You worked with him.
Chris: Yeah, but-
Amos: And you've known him longer than me.
Chris: But this is, but this is your show. I'm just here.
Amos: I- *pfft* - I'm going to write this down. (laughing) What time is it? (narrates) It's 10:44, September 24th.
Chris: (Narrating for Amos) This is my show.
Anna: (Narrating for Amos) This is my show.
Chris: (Laughing) It's your show!
Amos: (still narrating his dictation) With with my fountain pen that Jeff told me to buy.
Jeff: I didn't tell you to buy that one. (Laughing)
Chris: You just said buy a fountain pen. (Laughing)
Jeff: Yup. (Laughing)
Anna: Wait, how did that come up?
Amos: Oh, okay, so-
Chris: - introduce our guest so we can start talking about stuff, Amos. (Laughing)
Chris: (teasing) You're so bad at podcasting.
Anna: That’s not very nice, Keathley.
Amos: Uh, this is Jeff Wise-
Chris: Shh. (Giggling)
Amos: Jeff Wise has joined the, the podcast for the day.
Amos: Uh, here’s what I know about Jeff he worked at Le Tote one point.
Amos: Uh, he, when Keathley’s not around he tells me about how he’s smarter than Keathley.
Jeff: Not true.
Amos: (Laughing) And he used to live in Kansas City.
Jeff: Also true.
Amos: And so sometimes I'll send out tweets and he's like “Oh, are you buying a BMW?” Cause the tweet location will be near a place where he knows there's a BMW dealership. (laughing)
Anna: That's hilarious! Also is he stalking you? Cause that’s really funny.
Amos: Super creepy. (laughing)
Jeff: That was one time and it was, one time.
Anna: Ten times later.
Amos: And so after he was stalking me we, we became pen pals
Amos: And we write letters.
Jeff, Yes, that’s right.
Amos: And we haven’t written in awhile
Anna: That is so sweet!
Amos: I have one sitting here next to me that I need to respond to.
Anna: That is so wholesome, I love it!
Amos: Covid letters.
Anna: I love Covid letters.
Chris: Notable Atlasian critic.
Jeff: Well, that’s also true.
(snorting and laughing)
Amos: You ever used Jira?
Jeff: I did, I did have a conversation with one of their one of their product managers. He reached out to me it was like, “So-“
Anna: -What do you think?-
Jeff: So, what's the deal? Why, why, why do you hate us so much? It's like, well, your UX is terrible. (Keathley laughing). And it's like, yeah.
Anna: What do you say, yeah?
Chris: That’s really the sum total of it.
Anna: He was just like yeah and you're like, yeah, yeah cool, cool, cool.
Jeff: Alright, yep.
Anna: Glad we’re on the same page.
Jeff: Work on it? Yeah.
Chris: That’s not even an agree to disagree it's just agree to agree.
Anna: Right? That's a short conversation.
Chris: Yeah, okay.
Amos: We could have a whole show about that really.
Anna: -Oh my god-
Amos: About how bad Jira’s UX is and now it started to bleed into Trello.
Anna: Oh my god.
Chris: People, people come here for the hot takes and I'm pretty sure, like, saying Jira has crappy UX is not a take
Anna: Is not a hot take.
Chris: That’s, just, no.
Anna: Wait, wait, Keathley, back up. You think people, people really come here for the hot takes?
Chris: No, I'm, not really. I don't even know. I don't even think people come here. This is the, listen, I looked at the survey results and 16% of the entire Elixir community that were polled actually listen to podcasts.
Amos: Sweet! (laughing) And they listen to us!
Anna: God knows why they listen to us.
Jeff: I use Jira, as, as like the yardstick for like we have to make a decision we know is bad, but it's like the best decision that we can make, right? So it's like this is our Jira of decisions. (laughing)
Amos: If we say Jira one more time Atlasian is going to have to pay us royalties.
Chris: Oh, it’s like Beetlejuice, we can summon them on demand? (Jeff laughing)
Anna: I have a friend who just started a new job and its been like two months, and yesterday he pinged me on Slack and was like, “I think I finally understood how to use their Jira now.” (laughing)
Chris: Yeah, yeah. And that's the thing is Jira’s not even Jira, it's your Jira.
Chris: It's whatever company you work at’s Jira.
Amos: Yup. Yeah. Yeah.
Jeff: And what got me is that all of the agile stuff, which earlier on was, was an add on, like it wasn't even part of Jira, right? Jira was just like a nicer Bugzilla.
Amos: I wish we had video. (laughing)
Jeff: Right? -(shrug) But yeah, and and they added all of the agile features but they're not part of the API, right? Like all of the estimates and sprints and stuff in the APIs is like custom field 34.
Anna: And you’re like cool.
Chris: It is just literally a custom field. Yeah, that's great.
Amos: What always makes me mad is when I want to move like a lot of stuff from one column to another and you can, you can click on the, and then like shift click on the bottom and drag it over, but when you click the first one it doesn't just highlight it, it, first it opens it. And so you have to close it first before you can shift click the other thing. And then if you need to like, add something to a bunch of things, and you get into the bulk edit part and you want to add something to an epic, you can't put in the name of the epic. You have to know the epics ID in the database. And the only way to get that is to go to the epic and right click it and inspect the HTML.
Anna: So good. What's wrong with that? I mean, I don’t understand.
Chris: Yeah, I mean it's a very-
Amos: It's an engineer interface.
Jeff: Is this, does this tie into the topic that, like the provisional topic that was sent out of like when is it better to write your own?
Anna: There was a provisional topic sent out?
Amos: (Laughing) When the alternative is Jira?
Anna: Y’all don’t tell me anything. (laughing)
Amos: Sorry, Anna, we’re terrible. (laughing). ‘Cause we start talking somewhere that's not our
Anna: Our Slack?
Amos: Yeah, and that-
Anna: -That is not our Slack for this podcast where you could communicate that?
Amos: I know. It's 'cause we're talking about something else completely.
Amos: I mean, I guess we could just put all of our conversation about everything in the public with you, but like-
Anna: -You don’t need to do that.
Chris: We could communicate at all is what you’re saying.
Amos: It's true.
Jeff: I'm sorry, I didn’t mean to let the cat out of the bag.
Anna: No, you’re good. You’re good.
Amos: There is no cat.
Chris: I wash my hands of this. Okay, here's how this went down.
Amos: Schrodinger’s cat five.
Chris: Here's, here's, how this went down.
Anna: Uh-huh, yeah, tell me. I’m curious.
Chris: I message Amos and I say, “Hey, at some point we should get Jeff on the show. Because that's come up a bunch of times. I really like Jeff, Jeff’s a good friend of mine. We should have him on the show. I like talking to Jeff.” And that, that was that. End of sentence one sentence two was-
Anna: I mean, you could have messaged both of us.
Amos: It was like 30 seconds later and I’m like, “Jeff's coming on.” (Laughing)
Anna: I’m just teasing you.
Chris: And then, second sentence was, “Also I had an idea for a topic. What do you think about talking about XYZ thing?” End of sentence. Then I put my phone away. Then I walked away.
Anna: So sentence three, in the general Slack thing be like, “Hey Anna, we're going to have Jeff on the show we want to talk about this thing, just so you know.”
Chris: I didn’t even know that! I did not know that was gonna happen. (laughing) I could not have communicated that to you. (All three laughing)
Amos: I like how I got into the Zoom call today though Anna, just so you know, is Jeff sends me a link and is like, “Is this the Zoom that you all use?” (Chris and Jeff laughing) So to find out I click it and I’m like, “Yeah that's the one.” (All laughing)
(Anna and Jeff start talking at the same time)
Anna: We’re really on top of our game, in case anybody knew that.
Jeff: You know what, if the Lt notebook has taught me anything.
Anna: Sorry, go ahead.
Jeff: If the Lt notebook taught me anything, it's to be prepared.
Chris: That's true, that's what it said, if I remember correctly. (Laughing)
Amos: Had a little picture of a Boy Scout on it.
Anna: That’s hilarious. So, what's the topic?
Amos: Jeff- uh-
Chris: Uh- oh look at the time! Jeff, you’re the only one who knows what’s going on.
Jeff: So, whose show is this?
Chris: So, what’s going on?
Amos: So, let me look at my chat with Jeff.
Anna: I should have asked, Jeff, actually. Jeff, since you’re the only one who knows what’s going on, what’s the topic?
Jeff: When is it better to write your own?
Anna: Ah. Yeah, okay.
Amos: When your software that you have- when your choice is Jira.
Anna: When your choice is Jira.
Chris: So this is a topic I presented because it's something that, I mean, I talked about this with Jeff a little bit and it's come up recently because of some work that I'm doing at work. And right now we're in the midst of sort of rebuilding a lot of our deployment process, really just automating a lot of stuff that hasn't ever really been automated. That also happens to coincide with a move, you know, just like changes in our infrastructure and stuff like that.
So we looked around at all of the disparate tools that you can use to manage those sorts of things. Like we looked at us we looked at running Spinnaker, or like having somebody host Spinnaker for us if you're familiar with Spinnaker. And like other deployment, like kind of CI CD pipeline-y type stuff. And eventually we just settled on the idea that we were just gonna do it ourselves. And like we just hacked together- I wouldn’t even say hacked, we just like built, a Elixir API using our internal RPC stuff and some LiveView. And we just built deployments.
And it's really just an AWS command, like API's that we’re calling, and all that sort of stuff. But it definitely caused people, some, well there's a lot of discussions about like, “Why are we doing this thing that probably is just like, already done for us?” And we had to really sort of wrestle with that. So I'm curious to see how other people feel about that. Both in the large scale in terms of, “When is it, when is it right, when is it appropriate to build something that big, right? And also potentially something that generic. And all the way down to, like, the small scale of when do I write my own, I don't know, data structure, or when do I use a library?
Chris: You know when do I, when do I just write my own trie meaning T-r-i-e
Jeff: I-e. right.
Chris: Yeah, the tree data structure. When do I write my own circular buffer versus get a library or whatever. Whatever it is. So I’m curious. I'm curious to see what people think about that.
Anna: What caused, I mean as you were wrestling with that stuff that came up?
Chris: I just think, I think there's, there is a belief right, that you can probably grab something that does close to what you want to do and then just use that thing. And then you get, you leverage all of the work from it, like you democratize, or I don’t even want to say democratize, you arbitrage someone else’s time in order to get those immediate benefits, right? You've already, you're using something that, like, has already been proven to work in production, probably. So, and you have to, you do have to sort of justify why you're going to spend your own time to do that. Because you know, time, you only have a limited amount of time and what are you going to choose to spend your innovation points on. And all that kind of, all those sorts of discussions. So those are, those are the like, the, the basis for a lot of those conversations I would say.
Anna: Um-hmm. I'm just curious like, so you said, I'm curious because you said you wrestled with, you were wrestling with it right? But what ultimately let you y’all decide to really run?
Chris: Partially because, I just don't think the problem’s that hard. Like, I actually think, like I mean, I, I don't know. I tend to feel like, I actually just don't feel like there's that many problems that I feel like are that hard. In the, in the space of what we do. Because it's like, we're just calling APIs it's like whatever. We're making AWS do all the actual heavy lifting. So that's part of it.
I also am a pretty big believer in the idea that if you're going to do something that's, like, critical to your system, and I would say deploying software is fairly critical to any company’s delivery system, then at some level you're going to have to become an expert in that thing. And it's been my experience that it's much easier to- end- long- much more fruitful long-term to become an expert in something that you actually own. Because, like, I could go become an expert in, I don't know, concourse CI or something like that, and like learn everything there is to know about concourse CI and then build our entire thing around concourse CI. Or I can become an expert Jenkins, you know, and just get on the Jenkins train and write a bunch of groovy and learn how to do that. Either way you're going to become an expert in it. And if you understand your problem in the tradeoffs that you're willing to make, and you are ready to become an expert in that field for that domain, rather than I tend to think that it's worth your time just to do it yourself. That's, that's, typically how I make that calculation but I think I'm probably slightly in the minority of people who think that way.
Anna: Well, I don't know, I mean I think you brought up some interesting points, right? You said a couple interesting things you were like, “Well, we understand the problem really well, and the tradeoffs really well, right? We have the capacity to become experts in this thing, right? That we're going to live with for a while” Imagine if people are in a situation where like, they don't understand the problem as well and, depending on the timeline they have right, and they don't necessarily have the capacity to become experts in that thing? Maybe eventually right? Then they don't have the capacity to maybe, try and completely build their own, right? Which is when they might lean on something else for what they need. I’m curious, I, I would imagine that, maybe it's not that, I mean every situation is different, but I would imagine there might be some, like, more generic constraints that people can think about when trying to make that decision.
Jeff: I mean, what Chris was saying fits into some of the criteria that, like, I have for when, when is it better to write your own thing right? And the things that Chris was mentioning around like, it's a core aspect of what they do, right? So when there's a clear, to me like when there's a clear competitive advantage or differentiator to writing your own thing right, then, then like yes you should do it. Like as a counterbalance, I've been at places that were very much like “not invented here” and they thought that they were special in all the ways, and then ended up writing all their own things for, for everything. When, in fact, like the things that didn't actually matter to what they were trying to do should have been something else.
Anna: Yeah, that totally makes sense.
Amos: I think as soon as you want to customize something like, when Keathley, when you were talking about groovy and adding stuff to Jenkins, as soon as you want to make something custom you should definitely at least take a step back and think through like “Do I really? Should we be learning how to make plugins for Jenkins? Is that, is that something that's useful to us outside of just Jenkins? Like what, what benefits are you going to get as a team by becoming an expert in something new versus just rewriting that core part in, in something you already know?
Jeff: Part of this conversation is also what, what aspects of your process and workflow do you change to fit the tool or do you change the-
Anna: Tool to fit your process
Jeff: Tools to take your existing workflow process? Yeah.
Anna: But it also depends on, like the constraints in your current process, like, like you said Jeff, right? Like time is a big constraint too, right? Like depending on what you're working on and how much time you have to deliver a thing. Like, you may want to, and you may have a good understanding but if for whatever reason there is a timeline, but, that may not allow you to build your own at that point right? And so that's, like another constraint that is often present.
Jeff: Another criteria I had was you've clearly outgrown existing alternatives, right? Like, you've used all of the things, right? They all, like there's a substantial mismatch in all of those. You now understand the problem very well, you understand why each of these alternatives doesn't work for you and it's more work to, like, shape that thing to your will then to build the thing to fit your use case. I think there's another aspect too, of like, are you, are you writing your own thing to solve a personal or corporate problem, or are you also going to push this thing out into the world, right? Like those are or other criteria.
Anna: Well, say more about that.
Jeff: About about like?
Anna: About whether or not you are pushing the thing out into the world.
Jeff: So, like I think the bar is lower for, for needing to write your own thing for something that’s solving a personal problem or even an internal corporate problem, right? Like if you're looking at releasing another, whatever, another JSON library, like maybe rethink it. Like, most people are, like most people don't care, right? Like we already have, whatever, four or five, like one of them is going to be fine for 90% of the use cases. Like we don't need another JSON library.
Chris: But this one’s in Rust. (Laughing)
Anna: Is that what you’re working on, Keathley?
Chris: No. Absolutely not. (Laughing)
Jeff: His is in Crystal.
Anna: Oh yeah.
Chris: I’m all about Nim these days.
Jeff: But, but I think like if, if you're writing that JSON library to learn, please go ahead, right? But like that barrier of like, doing it yourself versus pushing it out into the world, I think should be a gaining factor right? Like if you're learning, like and part of that is like, “What choices did somebody else make while they were making this that I don’t even know about yet?” That's an important thing right. Like, or what, like what did they try, and it didn't work? Yeah, so you can understand those tradeoffs and like, grow as an engineer, right? And as someone who's, presumably, job is to solve problems. You can learn from, from the battle scares of other folks.
Amos: There's a lot of interesting why’s on APIs that I've run into that people are frustrated with some API and are like “I hate this thing!” and then I frequently say, “Well go write your own.” I had a friend that did a lot of Ruby and he kept complaining about Active Record I said, “Go write your own.” Finally, one day he did it, and then he came back and was like, “Oh. I now know why they did this and this and this, and I get it.” And he did, he did have it open source for a while his library and then he finally one day was like, “This is bad, you should not view this.” (laughing)
Jeff: Don’t use this, use Active Record instead?
Amos: Yeah, and when you're saying use Active Record instead you know you really messed up. (laughing) But like yeah, really understanding the why of the decisions that people make can be-
Anna: Can be hard.
Amos: Can be difficult. Yeah. And then you won't go write your own because you didn't understand the why, and that can hurt later too. So that-
Anna: So how do you get, that's a good, that's a good point right? But sometimes it's hard to know the why, right? Until you really get it and understand you have to like actually spend some time understanding what somebody else’s built. And then sometimes, until you really use the thing, it's hard to- the why isn't immediately clear, right?
Jeff: So, so Chris like, why did you write your own Raft implementation?
Chris: Oh. Dude, I don't even know. (laughing) But looking back on it, I’m like, “What was I thinking?” (Laughing) Partially, I wanted to do it simply because I wanted to do it. Like I wanted to go through that process and, like learn about it, really understand the algorithm. Partially at some point it just became- it started as fun. (Snickering)
Anna: It started as fun. Nice.
Chris: It definitely started, it started out, it, you know, it- We started out friends. It was cool but it was all pretend. Like it was not, like once we got deep, once I got deeper into that I think it almost became, like an obsession. Just getting it to work. Like I refused to give up at some level. But I mean, the actual reasons for wanting to do it where, I mean, partially just see if I could, and then partially it was like, if you could pull this off, which I don't really believe I did successfully to be honest, but if you could pull it off, then you could solve these other XYZ problems or whatever. And then, and so, like, that was all, and those were actually problems that we were potentially going to, like, run up against at work to some degree. Cause that was like back in the Le Tote days. Not that we ever put this into production. I don't think anyone's ever put that implementation into production, and probably shouldn’t. But those, I mean part of it-yeah it was like I just wanted to learn. And I wanted, I wanted it to exist, and I wanted to- yeah, I just wanted to see if I could more than anything
Amos: That one’s a little different 'cause you weren't saying, “Hey company, let's write our own Raft implementation” internally, right? You did that externally, so that was for your own learning. So when's- when do you do that versus like what you are doing now at BR [Bleacher Report]? Where you have a team of-which you told me in our other conversation- three of you?
Amos: So you're taking three peoples’ time at work to write this thing that you definitely are putting into a project, not just, “I'm learning and might put it into the project.”
Chris: Right. Yeah, I think I think there's a, what’s the right way to say it? I mean in this scenario, like, we actually again, going with this scenario, Yeah. We actually do need to do this, right? Like we have to deploy software somehow. It so happens that I actually think- this is, the point Jeff talked about earlier - was a really big part of it. Which was, we have an established workflow, built up over however many years now, that- when it comes to deploying software, and like also verifying that software, to greater or less degree, you know, in terms of running stuff in staging environments, and running stuff in QA, and all this kind of stuff. So, we have a process for all those things. And codifying that process, like automating that process, is actually, I mean, it's going to take work no matter what because it's our process.
So you either pick a thing that's like, so like, you, you go with a tool it's like, so generic right? Like a Jenkins or a, or a, or a Concourse or one of those sorts of things. One of those sort of pipeline-y build thingies. And you just build everything around it, which we definitely still do some of that, or you go in and you just like solve the one problem you need to solve, right? Like, I could go in and probably make code deploy on AWS do all these things. But how much am I going to conform our process to that, to make that actually even happen? And to make it safe, and to make it automatable, and to provide all of the disparate features that we actually need to support, right? You could like, probably, do it all through Spinnaker if I just spent enough time learning how Spinnaker works, do I-
Anna: For those who don't know, what is Spinnaker? For like, our audience?
Chris: Yeah, so Spinnaker is, I think it was built at Netflix. Yeah, yeah, it was built in Netflix originally and it's a continuous delivery, kind of, deployment automation tool. It does a lot. Like that’s sort of underselling the amount of things that it does. It's sort of the Jira of deployment tools. (laughing)
Amos: Does it have the same great interface?
Chris: Actually, the interface is way better. But it is- it's big. It's a big boy. And you have to learn a lot of concepts. And it wants to control- like you need to kind of give over a lot of your infrastructure to it. You need to be ready to use it in the way they want you to use it, right? So ah...
Jeff: And that's not organizational change that, like, y'all are ready for?
Chris: Well, it's not organizational change that I can even write a check for.
Jeff: Sure, sure.
Chris: To some degree too, right? You know, it's like, that's like that's a big check that needs to- that somebody needs to write. And you gotta really sell it. And also you've got to, like, really want to do that. Like you need someone who's going to actually advocate for it to do anything that's that big. And that's just-
Jeff: Beyond like single engineer level?
Chris: Yeah, or even-
Jeff: Or even team?
Chris: Yeah, yeah exactly. You have to have like some zealots, right? For any of these big changes, you know, it's like- Why do you rewrite from one language into the other? It's like, 'cause you have a really impassioned group of people who all want to do it, and then they just won't shut up about it until they do it. And that, you know, that was just not a thing that we were really going to do. We did present it. We presented it as, like, an option. We were like, “We could do this.” Knowing, sort of, the outcome would be, “Nah, we’re not gonna dedicate that, like, that many resources to this thing.” And even then you have to run it, right?
Chris: Like if, you have a Jenkins, like the Jenkins has to stay up.
Jeff: Right, yeah, there's no free lunch, right? Like you're either like, operating your thing or somebody else’s thing.
Chris: Right, yes. Exactly.
Amos: So- or you’re paying them to operate it.
Jeff: Yes, correct. Correct. So for the thing that you're writing, where do you, where do you like, draw the lines? In the bounds of this is what it is, and like this is what it definitely is not, right? Because I've seen, you know, often homegrown things, to fit very specific workflows and problems, then grow and grow, right, over, over time, into things that they were never originally intended to do, and probably should not do.
Chris: Right, yeah. Man, yeah, that's a great question. And it's honestly one that I -
Jeff: This is my show now (Anna laughing)
Chris: Don't have -
Anna: It is. Yeah, this is good.
Chris: This is great.
Anna: Yeah, this is how it works. You're the only one that actually knew we were talking about today, so I’m glad that somebody’s prepared.
Chris: You’re the only one who's prepped.
Anna: I was gonna say, I’m glad somebody thought about, it's great.
Chris: No, it's, that's a great question and it's not one that I feel super- I don't have a good answer for it. I mean this is the thing I struggle with.
Anna: What? Keathley?!
Chris: I just, I just don't. I don't have a good answer for that because it's- I struggle with this a lot when it comes to doing architectural stuff at BR. And the idea of- cause I think the idea of building a system in layers, right? When you talk about architecture, a lot of what architecture is is ripping things apart into their disparate sort of layers and then distilling down a lot of fundamental concepts into, like, a reusable abstraction. And I think that applies to API's and to systems, in as much as that, you can do that also with the whole Conway’s law thing. Like that's also where it gets really tricky. But most people are, or rather, I won’t say most people. In my experience, most of the services that people end up building in their jobs are highly concrete. Like, they’re concrete implementation things, right? They're not really generic things. And, there's always a tradeoff between, sort of, leverage, and performance, and reusability, and all that sort of stuff, and when do you make a thing more general and more custom- which, which, inherently sort of makes it like more customizable, right? Like you can do more but now it's less good at the one thing it was intended to do in the first place, right?
Jeff: Well, and you also bring in all of the problems around like, doing the customization, right? Like are those runtime customizations or they config font, like-
Jeff: Or are they parameters that are sent in? Like, that in itself is its own, its own problem.
Chris: And how do you tune it? How do you make it fast, right? Like that's, that's really, you know. One of the major things that you can do for performance is to make-is to provide tons of limitations. Limitations are basically where you get all your performance gains, in a, in a real big sense right? Usually because just limit what’s possible.
Jeff: Mold around, like, what it’s not doing.
Chris: Yeah, exactly. You just limit the scope of things that it's even possible to do, and then you get all these benefits because you just don't have to worry about those edge cases anymore. And that makes, you know, so then, all that goes out the window. So, then you start trying to figure out where, you know, you draw those lines. Because at some point it's like, you've got a service that needed to store stuff, and if you make that incredibly generic, well, all you've done is build a distributed key value store, you know, like, it doesn't do anything useful on its own. So I think, I think the question of where do you draw the line around this stuff, it does tend to be really hard. At least for me because it's, it's, there’s always a push and pull there.
And I think for us, with this specific thing we basically said, “We're going to be, we're going to, like, provide you updates on what deployments are happening. We’ll provide you status of those things in these clusters and will talk to AWS and deploy your containers for you.” And that's, like, basically what we said was the scope of the problem. But, already there's, you know, “Well, can we do this? Can we like add this to the pipeline? Can we, like, add this part of the thing, you know?”
Anna: And how do you navigate that?
Chris: Just say no. I don’t even navigate it, I just like, put a stop sign out. I’m like, “Nah.” (laughing) “Slow down, children are playing here,” is basically, this basically how I go out there.
Amos: You'd be a really good product owner. That's the key, a, you always start with no and then make them prove to you why they need it.
Chris: Yeah. Well, and, and then it goes back to the idea of like, actually, some of these use cases we probably could solve, but maybe we can solve them in, in a generic way so that we're not solving this problem again. One of the things that we're trying to figure out where, where it goes right, is migrations. So, for database migrations, so where do we put that? We want to automate database migrations. Where do we put that in the pipeline? Does it happen, in dur- you know, do we consider that build? Deploy? Like what, like, where does it work and who manages it? Like what process is going to manage it? And what's going to automate it, right? Those are all questions we’re asking, like, literally right now.
Jeff: And do you have any metadata around those migrations? Like things that you know are going to take a long time, right? Like building an index or something like that, right? You might need to necessarily, like do those things out of band.
Chris: Right, yeah, yeah. And we, and right now, we don't have good ways of specifying that stuff, right. So, you know, right now it's like, there's - a dude (laughing), who like manages some of that stuff. We’re trying to be like, maybe we shouldn’t have just like, a dude, to manage all that stuff. So those are all things that we are, yeah, like trying to figure out. And then, and it, it becomes really tricky- of- where do you start to put those things? And that, I think, that comes back to the architecture idea, in doing, like trying to kind of do less. And I think that the benefit of doing less, too, is it means that if you want to use this stuff, you just kind of have to make like one or two choices, and you have to opt in. And then once you've opted in then you're just using it. Like, there's no more work you need to do.
Jeff: Change your process to fit the tool that was built to-
Jeff: Not change the process.
Chris: Yeah. No, no, no I mean that’s the thing, it’s like, (Anna and others laughing), to like automate migrations would be like- maybe we just have like,
Jeff: No, right, right.
Chris: Maybe we just have like, literally, we look in the container for a bin slash migrate. Shell script.
Chris: And then you run whatever you want to run.
Chris: So if you're talking to a mango you can, you can update your mango and if you're talking to a shell script-
Jeff: Shell scripts or like spreadsheets, right? Like the world runs on them.
Chris: Yeah exactly. Yeah, I mean, like have you ever looked inside of Kubernetes? It’s basically just like shell scripts.
Chris: And some Go glue coat. That's not even a lie, that's not hyperbole.
Chris: There's literally-
Chris: There's a seventh layer of hell in Kubernetes that is just shell scripts. (Laughing)
Jeff: The seventh layer of shell. (All burst out laughing)
Amos: This is why we bring you on. (More laughing)
Chris: How many layers of the hell were there? Were there nine? Or is it seven?
Jeff: I think it's like a dip, right? And I think it’s seven. But you can add your own. (Laughing)
Amos: You can add your own layers in hell. (All uncontrollably laughing)
Chris: The top layer- (laughing) the guacamole layer- is for idolaters- and- people who talk in the theatre.
Anna: Oh nice.
Chris: Down there on the bottom-
Anna: Ooh, let's talk about the bottom.
Chris: Down there on the bottom- with the beans- is- is Judas.
(More laughing, people catch their breath.)
Anna: Oh my god.
Chris: Here, okay, let’s, let's talk about something important. (laughing) What are the layers- (laughing) what are your layers in a 7-layer dip? What’s at the bottom? (laughing) What’s the bottom layer? Is it beans? Or is it meat?
Amos: I think those are interchangeable?
Jeff: I think, I think it's a refried beans, right?
Chris: I think its meat.
Jeff: It’s like, you're gonna use, you're going to use that as, like, a substantial substance. It’s, like, not going to fall apart, right, like-
Chris: -Yeah, exactly right. You need to build your house upon a solid foundation.
Jeff: Yeah. (Anna laughing)
Amos: I'm more concerned about the chip breaking whenever I'm trying to pick stuff up.
Anna: We’re really stretching here.
Amos: So I once heard Alton Brown say that if you're a professional you always stack two chips together.
Chris: Oh, man, oh!
Amos: Cause what if you want to dip a turducken? Your chip should not break. So I always stack two chips.
Chris: I never question anything Alton Brown says, so that sounds right to me. The two chip is a pro move.
Amos: It is a pro move.
Chris: It is a good move.
Amos: You know, when you get that, especially with the community dip, and your chip breaks in there and somebody else is waiting to put their chip in there-
Amos: And you’re like, “Just second I gotta get my chip out.” Then you look like you're trying to hoard the dip, specially in a wedding.
Jeff: Or stick your hand in it.
Chris: Yeah, that's what I do,
Amos: That’s what I do in the wedding sounds, I just put my full hand in it.
Chris: Use a full paw in there. (laughing)
Amos: Sounds like a Midwest wedding. (laughing) Somebody doesn't have their hands in the dip, it is not a wedding.
Chris: I definitely went to Midwest wedding where the food afterwards was like, like mashed potatoes and you just, like, added stuff to the mashed potatoes. I’m here for it, I’m just gonna say-
Amos: Oh yeah! Baked potato bar.
Chris: I’m just gonna throw that out there.
Amos: My sister-in-law had a grilled cheese bar at her wedding.
Chris: Yeah, see?
Amos: So pretty much that you made your own grilled cheese, with whatever you wanted on it.
Chris: I'm here for it.
Amos: Well, you gotta put like-
Jeff: -I mean, were they like varieties of cheeses?
Amos: Yeah, yeah.
Jeff: Like, oh this is a gruyere-
Amos: There was some meat so you could put like some-
Chris: -Like Brie on it?
Jeff: What, meat?
Amos: It's like grilled ham and cheese.
Jeff: You put meat on it like that's a croque monsieur, that's no longer a grilled cheese.
Amos: Fair. But you can’t, you gotta please those people who won't eat vegetables with, or anything without meat.
Jeff: Right. The Midwest? Yeah. (laughing)
Chris: I just I, just had this idea in my head, of like a very fancy, like French chef just being like (with a ridiculous attempt at a French accent) “Oh yes, the, the mashed potatoes are brilliant tonight. Might I recommend just a little bit of bacon on the top?”
Amos: (Also with an accent attempt) They’ve got a hint of garlic. Just a hint.
Anna: You guys need to work on the accent.
Chris: Yeah, my French accent is bad. It's really bad.
Amos: It sounds like a cartoon French accent.
Chris: But, okay-
Anna: Oh, shoot, you guys, I’ve got a meeting. I gotta jump-
Amos: It’s not bad.
Anna: I was glad I got to chat with you all.
Amos: See you, Anna!
Jeff: It was great to see you.
Amos: Upload your audio.
Anna: I will! I’ll try not to forget this time. I’m the worst.
Chris: (in accent) Oh-ho-ho.
Jeff: That's a good point. I'm gonna have to remember to stop to record my- otherwise, like, you'll get my later one-on-ones also. (laughing)
Amos: That would be awesome.
Jeff: So, Alan what, what are your goals for the next six months?
Amos: I'm really good at meeting deadlines I know that. (laughing)
Jeff: Alright, so like, now that Anna’s gone, we can get down to the business of playing GeoGuesser.
Chris: Oh, right, yeah exactly. Are you familiar with GeoGuesser Amos?
Amos: I’ve heard you guys say that you're playing GeoGuesser but I have no idea. I, I had I think, from my understanding-
Chris: Did you miss-
Amos: I missed the GeoGuessr thing. So from my understanding GeoGuesser was, it's like, it shows you some place on Google Maps, or like something satellite image zoomed in, and you're trying to figure out what it is.
Chris: It shows you, so the idea is, it drops you somewhere in the world in Street View. And you, can only, you can't leave Street View obviously,’
Jeff: It's like a virtual abduction.
Chris: Basically, yes. It's a, so, you get virtually abducted and drop somewhere in the world and your goal is, within- well you can play however you want we play within a certain time limit, typically 4 minutes- you need to determine where you are in the world. And the closer you get to where you think you are in the world the more points you get.
Chris: It's awesome.
Amos: I don't think that it would be entertaining on a podcast.
Chris: No, no we're not going to be- that’s the after show that the Patereons can pay for, to get access to.
Amos: Oh, oh right.
Chris: The cut content, right?
Amos: You can watch as the bloops.
Chris: Yeah, you're going to listen to the bloops and watch us play GeoGuesser. Oh man, Geo guesser is a game I have introduced to literally all of my coworkers for the past, I want to say at least a half a decade. It’s so good.
Amos: I’m just waiting for one of the times that it drops you in front of your house you're like, “What?!”
Chris: I've never been dropped directly in front of my house, but I have been dropped very close to my old house in Florida.
Amos: In the Keys?
Chris: Yeah, no like, no-no- no, I, there was one where I was like, “This looks weirdly familiar.” But like, I couldn't place it, and I initially, I didn't actually do too well, but it was- it's the Key that was one Key over from where our like little trailer was in the Keys.
Chris: Yeah, it's a great game, is what I'm getting at. It's a really solid game. You should, you should play it.
Amos: I think I'd be really terrible at it, but I'll try.
Chris: We’ll try it later and we’ll determine how terrible you are.
Amos: Okay, okay.
Jeff: Don't, don't let, don't let Chris Burma you.
Chris: Oh, yeah -yeah- yeah -yeah. That's, that's a thing that happens. Yeah, sometimes I, cause I talk out loud while I'm playing and I, like, tend to gaslight slash, like, like fake out, fake out my opponents accidentally. (laughing) Like I get in their own heads-
Amos: I'm pretty sure it says Sao Paolo. Oh, crap! Did I say that out loud?
Chris: No, I mean I’m just talking typically. And then I’m like, “I don't think this is Burma.” (laughing) And then Jeff is like, “Oh, well if Chris doesn’t think it's Burma, it’s probably not.” Turns out, it's Burma.
Chris: So, Jeff, what’s going on these days? You just gave a talk on TLA plus. A great talk.
Jeff: I did. It was a talk, yeah.
Chris: I enjoyed it.
Jeff: Okay I, I enjoyed being able to pre-record it. Like, that was nice for me. Because I could have my script out ahead of time, and then if we had to evacuate because of the wildfires, like the talk could keep going.
Chris: (laughing) It’s always good to have a backup plan.
Jeff: Right, that's right, that's right.
Amos: Be prepared.
Chris: I’m sure the Code Beam organizers will appreciate the, the level of care that you put in into that. (laughing) That making sure you're talk went off without a hitch was on the top of your bug out plan.
Jeff: Yeah, I mean, so, yeah it's nice now. Most of the, most of the smoke has blown out.
Amos: It’s all here.
Jeff: Great. Just put some meat out and you’ll be fine. (laughing)
Chris: Nailed it.
Amos: Speaking of being Midwest. (laughing)
Jeff: Yeah, its, the talk, the talk was, was good. That was- I had heard about TLA plus from an earlier job working on autonomous cars, which, we were trying to formally prove something so that like less people died-
Chris: Seems important.
Jeff: You would think so, but like, we kill a lot of people with cars in this country and worldwide. So, yeah, we're, will probably continue to, you know -that, that's, that's not my problem to solve anymore. But yeah, and a couple other formal verification things, it's, like, well I haven't actually done these, like, it would be good to like actually dig in. And for things that are important in the world, like have them formally verified, “What does that mean?” Like, yes I did some, like, propositional logic in college but, like, I haven't done any formal proofs of any software I've written ever right. So, what, what, does that entail? And, the I- I read, I read Practical TLA+, like, in the show notes, from Hillel Wayne. And it was, it was good. I had, I had problems with it personally because- I say problems, but like, I had difficulties internalizing it right? It's not, not problems with the text necessarily.
Chris: Oh, right, sure- sure.
Jeff: Right. Because like, I didn't have, I didn't have a lot of maybe, like, the deep distributed systems knowledge for when it, like- when you have multiple, like, processes interacting and doing it in, effectively like a procedural way, how those things might, might work together. Because he presents a subset of TLA+, it’s called PlusCal.
Chris: Which is like, that's the syntax that is readable. As opposed to the standard syntax which is some hot garbage, if I remember correctly (laughing).
Jeff: That’s so-yeah -you know it (audible sigh. PlusCal is, is the Ruby to TLA+’s Erlang.
Chris: Okay. Alright. Fair enough. Yeah, Okay that sounds right. So it is, it is idiosyncratic let's say.
Jeff: Yes, yeah, and at first glance, like, inscrutable and hard to get right because you've forgotten your comma, right? Or you’ve forgotten your, your logical and or, or whatever.
Chris: Typing ‘ands’ as slash backslash is, that breaks my brain every time. (laughing)
Chris: So if you're not familiar enough, if you’re not familiar with math, with like, like logic: the symbol for and is an upward arrow is like an upward “V” basically. And the symbol for ‘or’ is a downward ‘V’. And, I don't- does the does PlusCal model at that same way or is it just the?-
Jeff:- I don't, I don't remember. I don't think so.
Chris: The actual TLA plus syntax, which I don't remember the specific name of, it, it actually uses a slash and then a backslash to model, like “ands” and, and stuff like that.
Jeff: Yeah, yeah and then reversed for “ors”. Yeah. Logical “ands” and logical “ors”.
Chris: Yes, yeah- yeah- yeah.
Jeff: But, but, like once I watched Leslie Lamport's video series about it. Which, like, that, that alone took weeks. Cause it's like you watch one, it's like, it's 45 minutes or an hour of, like, deep material. You can't-it’s not like you can have it on in the background while you're cooking or like you know during an all hands or something.
Chris: A town hall hands, as I've started referring to them? (laughing)
Jeff: Correct, right. I can't, I can't wait till we can have those things in person again.
Chris: Oh, I know! That's gonna be better. I would- I really can't, can't wait to dump two hours of my life in like some sort of boardroom situation.
Amos: I wanna spend the first two hours just shaking everybody's hands, being like, “I know we haven’t been able to, like, shake hands in like a year.” (laughing)
Jeff: Yeah. So, so, the video series, really good, but not not lite material. And what I realized during that is, like they're all just state machines, right?
Jeff: If they had started with that, which, I know they like, I know the reasons why they probably got to the decision of, like, not starting with that right. It’s because state machines are not as prevalent through, through many other aspects of software. But that helped me a lot. It's like, oh, all of this nonsense is just a state machine, and all of the functions in TLA+ in the, like, official syntax, are just about what state you go to next, and what those conditions are.
Chris: Um-hmm. And then, like, rules about having multiple state machines. I don't even know that I could actually adequately describe this, but is it like, you define a state machine and then say, “Now there are three of them interacting”? Or do you say, like, “There is a state machine that encompasses the actions that these things could take”?
Jeff: There's, there's a state machine, that encompasses- it depends, right? So, it depends on your specification, right? And the invariants and temporal properties that you want to specify.
Chris: Um-hmm. Um-hmm. Right. Okay.
Jeff: And so, so you may break that problem down, right? Into those three things, right? And then have a separate, a separate model that encompasses all three. And you have separate specification for how those things interact.
Chris: Gotcha, okay, alright, I think -
Jeff: But like, I by no means an expert. There is a TLA+ conference coming up. I don't- I think it's pretty cheap if not free? Don’t quote me on the free, but it is at conf dot TLA show- link in show notes.
Chris: Yeah, we’ll find a link to it.
Amos: And you heard it here first Jeff Weiss said it's free.
Chris: Yup, he said it’s free. (Laughing)
Amos: You're welcome, Jeff.
Jeff: Thanks. I like how, I like how that was logically indicated. (laughing)
Amos: Speaking of logic-
Jeff: Don't quote me! You heard it here. I mean yeah, like, like all conferences not its virtual so, um
Chris: So we’ll see.
Jeff: We’ll see. We’ll see. But, yeah, so, I gave, I gave that talk. That was not - it is not free, it's part of the International Symposium on Distributed Computing, so-
Chris: -That sounds impressive. That sounds important.
Amos: Thought you meant that your talk wasn't free.
Jeff: Oh, my talk? Well, I mean-
Amos: It will be, right?
Jeff: It's probably up on, it's probably up on YouTube eventually and will be free. But from the broader sense, but it wasn't free for me in, like that it made -it caused some gray hairs. (laughing). It’s like magic, everything has a cost.
Chris: Yeah. Yeah.
Amos: Okay, Raistlin.
Jeff: Well Amos, what, what fountain- bringing it back around - what fountain pen did you bring? Or buy?
Amos: The Pilot, uh, the disposable ones.
Jeff: The Pilot Varsity?
Amos: Yeah, just to, just to try it, try it out for a while. They’re pretty good. They flow pretty well.
Jeff: They- they’re adequate, yeah.
Amos: They sometimes get a little scratchy, and they don’t quite fit my hand very well, so.
Jeff: In that they are too short or they’re too thin?
Amos: Yeah, I feel like, I feel like I roll them a little bit, so- because they’re thin.
Jeff: Oh, like rotate?
Amos: Yeah, because they're thin and I end up rolling them and I feel like if it was a little wider, I might not do that.
Jeff: Some of them, like the Lamy Safaris and a couple others, they have ergonomic, ergonomic grips that are like triangular so that your fingers don't don't- and when you when you hold them it's always in the correct, the correct position.
Amos: That would help a lot.
Jeff: But they are, they are not disposable and they, they are far cheaper in Germany, where, where I started this obsession, than in the US.
Amos: I thought disposable would be a good place to start.
Jeff: No-no, Yeah! Right like it's- it's a, if you don't know, if it's a thing that you, that, like, you don't mind having ink on your hands, then it's fine. Also, things that have the ergonomic grip that are disposable. You can get the Jinhao Makos, which are these cute little pens where the cap is shaped like a shark.
Jeff: And they're, they're 100% plastic but they do have that triangular grip that will hold it in the right place. Also, they are refillable, so they come with a little converter you can put your own ink colors in there.
Chris: Oh, cool.
Jeff: Like, if you want to use a fancy, like, shaded ink or something that's got shimmer in it you can do that. And then-
Amos: I also feel like I wish the Varsity was a little bit longer. I know that I can't really write without the cap on.
Jeff: Oh yeah. Yeah.
Amos: So it was just a little bit longer 'cause it just barely fits.
Jeff: Just a little bit, yeah.
Amos: And I don't even have big hands. So I can't imagine if somebody had big hands trying to use this.
Amos: Keathley’s like, “This is exciting, guys”.
Jeff: Ah, this, is about, uh, pens. I’m just gonna peace out.
Jeff: But no, I like- the writing I like. I like sitting down. I find it very meditative.
Jeff: And, and it, like it forces me to be, to be present. And when I was away overseas for a year, you know- I wouldn't say it's homesick, right, but I certainly missed interaction with folks. And, and, authentic interaction, right? Like it's difficult over Zoom or FaceTime or whatever. And so, just bringing it back to the vintage social media.
Amos: I haven't, I haven't written letters in years, like, including Christmas cards. You know, I, my wife does that. When we do it. We forget half the time. It'll be like, be like, January third-
Jeff: Oh, it’s March, yeah.
Amos: And it’ll be like crap, we should have- all these people sent us Christmas cards. We hadn’t sent anything so.
Chris: So, I don't write a lot of letters-
Amos: But I would really have- like getting letters and actually writing them it's a whole lot better than an email. And I know that, like, I write notes to people that I work with a lot, when I want to show that my real appreciation instead of like an email that just says “Hey, thanks.” Like the bigger overall, big picture appreciation I try to handwrite. So I've really enjoyed writing letters back and forth. And the fact that you can read my handwriting is kind of amazing. (Jeff laughing)
Jeff: I think, I think it's nice too that, like, it has an element of, like, intimacy and vulnerability that, that we don't have, like, in our culture anymore.
Jeff: Either, either, like, as Americans or, or even within software, right? Like, yeah, it’s hard-
Amos: -Yeah, I feel like it's hard in Slack or anything like that, or in email. I can, I can say whatever, and, and hide behind the Slack. But if I'm handwriting it, like, I'm not gonna say that stuff. (laughing) This is way too personal.
Chris: I've been fortunate enough to receive some of these postcards from Jeff and they're always like, very, not to get too, like real here, but they’re always very, very life giving to me, like they provide- and I'm always a terrible friend I don't respond. (laughing)
Jeff: They’re, they’re, they’re like Erlang messages, right?
Chris: Yeah, you may not get one back.
Jeff: They’re one way, you don't know if you're going to arrive, right?
Amos: (laughing) They might come back.
Jeff: There they're all casts. Yeah.
Chris: Yeah. No, but they are, they truly are, like they’re very life giving in a way that I don't- I don't have those kinds of interactions with people, I mean just generally. Like you can have some of that stuff just like hanging out friends but it's a very different experience, sort of. Yeah.
Jeff: Yeah I, I have a couple coworkers who were, who are good friends that we write back and forth a lot. And it's nice to have like a thing that shows you someone gave you that time, right?
Jeff: Where they were thinking of nothing but you, like, during the time they were they were writing. Whether it's postcard, or, like it doesn't, it doesn't take much but it's like, “Hey,” You know. “Like I was top of somebody's mind for, like, at least a couple minutes.” That's a nice, that's nice feeling. And I, you know-
Amos: -Hey kids, eat dinner and shut up, I’m writing a letter to Jeff! (laughing) I can't think about him with your noise.
Jeff: Well, and I, well, I conscripted you, too Amos. During, during the lockdown, right? So-
Jeff: I put a thing out on Twitter that's like, “Hey I’ll write, I’ll write some, some lockout letters.” And one of the community members in Brazil was like, “Hey, sure send me one”. And I looked it up, and since I was in Germany at the time there was no mail route between Germany and Brazil. And so it's like, I can't, I can't send it. So I wrote it. And then, like, seal it up, and then, like send it to Amos. And it's like, “Hey, can you please post this?” 'Cause there was mail delivery between the US and Brazil.
Amos: Yeah, it just like shows up at my house. I get this really nice letter- with an extra job. (Jeff laughing). It’s like yeah. Thanks a lot. And I think about, like if this is a cast, maybe I just never get to it? You know, it's not in my queue. Sorry. Load shedding. (laughing) No, but I sent it on. It, it was pretty neat. Actually, I felt really honored that you sent it to me to help send it on. Little did I know you sent five copies to other people just in case I was worthless but-
Jeff: That’s right. That's right.
Chris: Redundancy. These metaphors go deep.
Jeff: Yeah. It was a pub/ sub, right? Like you just got one of them back-
Amos: Well and I think the letter actually had like a Amos PID band thing going on.
Jeff: Oh, yeah.
Amos: So writing letters is good. Maybe that’s what we should do as our patriotic duty.
Chris: Also be, be awesome to people just generally, you know? Like lookout for each other, K?
Jeff: There's a, there's enough going on in the world.
Chris: It’s a bad time out there right now. That’s what we’ll say about that. Yeah. Just take care of each other.
Amos: (nonchalantly) Jeff is like, “I don't want to leave my house 'cause of Covid, but I'm gonna record this early in case there’s a fire and I have to leave my house anyway.”
Chris: Right, yeah it's- listen, people got, people got’s problems so just, you know, take care of each other. Stay, stay frosty. Stay you know, like, lookout keep keep a lookout for people. Okay we're running. Should we- We should wrap up.
Amos: We ran super long.
Chis: We should wrap this up. Let’s put a bow on this. This is great.
Amos: Well, thanks Jeff for coming on.
Jeff: Oh, it's my pleasure.
Amos: If you ever wanna come back, I’m not sure you're invited. (laughing)
Chris: (laughs snorts): That’s- whoa!
Jeff: (laughing) Well it is, it is your show.
Amos: I was told, I was told this morning that it's my show.
Chris: It is your show.
Amos: So maybe, Jeff, you can come back. Keathley we’ll, we’ll let you know.
Chris: Yeah, that’s fine. Listen, do you think, you think you're the only game in town? There’s a dozen podcasts who would love to have me, ok? (laughing)
Jeff: Don't you know who I am?
Chris: Don’t you know who I am? Do you know who I am? (laughing)
Amos: I’m the other Chris. (All three laughing)
Amos: Alright well, truthfully thanks for coming and talking to us. It was a pleasure having you and we’d love to have you back again.
Jeff: Awesome, thank you. And thanks to Seth for putting it in your-all’s head.
Amos: Oh yeah. Yeah. As soon as he said it I was like, “Yeah, why haven’t we had Jeff?”
Chris: Why haven't we done that? That’s a great idea!
Amos: Seth, you’re brilliant. Thank you for pointing out our inadequacies. We appreciate it.
Chris: (laughing) Continue to do so please.
Amos: Yes, please. And everybody else. And, we’ve already mentioned it enough times so I won’t mention our Patreon! Patreon. Patreon. (fake cough). We have a Patreon. (All laughing)
Chris: (laughing) You’re such a shill! Oh my gosh, alright get us out of here. Wrap it up.
Amos: Thank you all. Have a nice day. Nice talking to ya.
Jeff: Thanks. See ya.