The Changelog: Software Development, Open Source - Pair Programming and Ruby (Interview)

Episode Date: May 22, 2013

Adam Stacoviak, Andrew Thorp, and Steve Klabnik talk about pair programming, distributed teams, workflows, Ruby and more with Avdi Grimm....

Transcript
Discussion (0)
Starting point is 00:00:00 Welcome back, everybody. This is The Change Log, where members support a blog and podcast that covers what's fresh and what's new in open source. This show is hosted by myself, Adam Stachowiak, as well as Andrew Thorpe. Say hello. Hey, how's it going? And we're also joined by our fellow Change Logger, Steve Klavnik. Hey, how's it going? And we're also joined by our fellow changelogger, Steve Klavenick. Hey, everybody. And you can tune in live to this show like you can today.
Starting point is 00:00:31 It's Tuesday at 5 p.m. Central Standard Time right here on 5x5. You can check out the past shows we've recorded at 5x5.tv slash changelog. And this is episode 90, and we're joined by Avdi Grim, maker of Pair Program With Me, and Ruby Extraordinaire. Welcome to the show, Avdi. How are you? I'm doing great. Thanks for having me. So where do we kick off this call? I mean, I know we've got kind of a huge docket of things to talk about. Maybe for the uninitiated, somewhat introduce yourself. You're a podcast yourself, a writer, and all sorts of stuff. Where do we begin with you?
Starting point is 00:01:04 Well, I'm a hacker. I'm a hacker. That's me. I'm a hacker. I've been working a lot with Ruby for the past several years, many years. But I don't know. What else do you want to know? I'm a family guy. I've got lots of kids. Why don't you give us a little bit of insight into some of the work you've done with Wide Teams and Ruby Rogues and that kind of stuff? Okay, so that's the broadcaster side of my life. I have been doing a podcast of my own for the past few years. It's called Wide Teams. It's at wideteams.com. And it is dedicated to dispersed teams, remote workers, people that are working geographically
Starting point is 00:01:53 removed from the other people that they're working with. And the goal there has just been to kind of collect stories from people, find out how people are working on dispersed teams and, you know, what special strategies they have to make it work and what tools they're using and what they like about it, what they don't like about it, all that stuff, mainly just to sort of, you know, connect people like that and, you know, help us learn from each other because I was working remotely and there just didn't seem to be a lot of resources when I got started. Yeah, those resources are kind of plentiful now. And I remember two years ago-ish when I started my full-time remote job, it was difficult to find any kind of resources out there to help me just know what would make my life easier.
Starting point is 00:02:45 Right. me just know like what would make my life easier right so looking at some of the stuff you've done um you know with wide teams specifically um and now you know even a little bit more with with the idea of pairing and and remote pairing and things like that man it would be nice to uh to have these resources at my disposal when i first got started a few years ago um i love the name man why teams is such a perfect name for distributed teams. I mean, where did you come up with that? Thanks. Same way I come up with all my naming ideas. I go for a long walk.
Starting point is 00:03:16 Go for a long walk. What about your Twitter bio? How many questions do you ever get about that? I mean, do people think you're a demon or a daemon? Yeah, so that's 80% angel, 10% demon, and the rest is hard to explain. Actually, I don't know if anybody's ever asked me about that, but it is a reference to an Over the Rhine song. Nice. First here. I stuck in the sort of the eunuch's spelling of demon just, you know, because nerd.
Starting point is 00:03:51 See, I was thinking you were really just playing on the fact that you know what a demon is, and you were hoping that maybe nobody else did, but anyways. So the resources on Y-Team. So you started this podcast how long ago? You know, I'm not even sure. I'd have to look, but it was a couple of couple years ago um actually probably more than a couple now yeah we're on you're on episode 81 now so however long ago it was you've definitely uh you've definitely gone into the depths of distributed teams with some of these people here i see here on the front front page you have ernie
Starting point is 00:04:22 miller of living social um i got a chance to hear him talk at – I want to say it was Ruby – it was Big Ruby Conference in your job? And it's not money. It's not – he even went as far to say it's not the people you're working with because you'll find people that you love to work with at a lot of places. And to him, what he said, the absolute most important thing about being happy in your job is being happy at your job, wherever that might be, whether you're driving, working from home, whatever it is. And he's obviously a remote worker for Living Social. And so he was saying, you know, kind of what we're going to echo here today, which is that like, if possible, the idea, the ability to work from the comfort of your own home is tremendous. And you kind of hit on it when we chatted a little bit earlier, Avdi, with, you know, you love that you can work from home because that means unlike the traditional business mindset that comes out of the Great Depression and on in America, we as workers, as people that are in the workforce, get to spend more time with our family.
Starting point is 00:05:37 And to me, that's something that makes up for any level of financial compensation that you could find. Yeah, it's a huge deal and exactly, you can't really count it up in monetary terms. Here's a question for you, maybe to kick off this conversation. Are you part of a distributed team right now? I can't really say that I am. So, I mean, I was part of many different distributed teams for years, but my job has recently changed kind of dramatically. My job description is now, I guess, screencaster primarily because I launched Ruby Tapas, which is my screencast service. Yeah, that's awesome. screencast service and it became popular enough that I was able to devote myself to it full time.
Starting point is 00:06:26 So, um, that's kind of a, a one man gig. So I'm not, I'm no longer, you know, working with other freelancers on a job or, you know, working as part of a distributed startup or, you know, any of the other things that I've done. Yeah. So for those of you that don't know Ruby Tapas, and you can go to at rubytapas.com, the description of it, like many of your projects is just perfect as short screencasts of gourmet Ruby. Yeah, it's awesome. And so these are some, you know, some great resources. It's very, very affordable. I highly recommend them. My question is, how much of an influence did Ryan Bates and Railscast have on you when you were starting this? Well, I mean, people like Ryan Bates, you know, I mean, well, particularly Ryan Bates,
Starting point is 00:07:14 really broke ground. He's a pioneer. Yeah, I mean, I think the influence there is the fact that he was there and just made it clear that it's possible to do a professional screencast and to do that as your job, him and others. I suddenly had a brain fart, but somebody help me out here. Well, Ryan, I think he was a pioneer in terms of like just leading the way i mean he was one of the very first at least in the ruby spectrum doing screencasts and he did it very simply right like he was just breaking ground on like how simple it was he had this de facto template for all of his you know all of his screencasts and i think he'd even gotten uh ruby hero in 2009 not so much that, but just his impact to the community. To kind of hit on a few other ones that you may
Starting point is 00:08:08 have heard of, you've got PeepCode. Yeah, absolutely. Rails Best Practices and RailsTutorial.org, those guys. And Gary's Destroy All Software when it existed as well. And my short-lived project,
Starting point is 00:08:24 Watch.Steve, which no one forget no one knows about which is amazing that's what i always tell people is like if you're gonna try something try it because if you fail no one will ever know or remember anyway so like i totally did this a couple years ago and no one cared and so it disappeared off the face of the internet and now no one knows so gary bernhardt was a big inspiration for me as well. Cool, cool. Yeah, this is – it's cool. I mean to see – so you're not – I don't know how – what's the best way to say this? To do screencast, to get to some level of credibility is the right word.
Starting point is 00:09:01 But at some point you have to prove to people that the code you're writing is good code. What you're doing is quality stuff, and you call it gourmet Ruby. So what do you think it was that – because for me, I think the first time that I ever heard of Avdi Grim was probably when I read Exceptional Ruby, which is a tremendous book. Thank you. How do you think – what do you think kind of gave you a little bit of that credibility? I don't know if notoriety is the best word, but just the ability to go out and start to sell your – what ultimately isn't even necessarily a product.
Starting point is 00:09:37 It's your sharing knowledge. So what do you think got you to that point? It's just an incremental process really. I mean I think it's probably similar for anyone. You start to write things here and there. I started to blog, you know, a while back, long around 2006 or 2007. And, you know, I found that people seemed to like some of the stuff that I wrote. And eventually I got around to doing a talk or two. And that's where Exceptional Ruby came from, was I did a talk and then I was like, wow, I've done all this
Starting point is 00:10:04 research about exceptions. It would be cool if I could kind of recoup some of the time somehow. So I turned it into a book and people like that too. So it's really just like the confirmation of the market. People buy something. People don't seem to hate it. People don't ask
Starting point is 00:10:19 for their money back and they actually say nice things about it and eventually it kind of breaks through my assumption of I'm just another dumb programmer that maybe some of the stuff that I have to say, not everybody knows. Before we get into what I think the meat of the show is going to be with pairing, I have a question for you. What do you think about, what are your thoughts on being an exceptional master? What are your thoughts on exceptions as control flow?
Starting point is 00:10:49 I'm not a fan. So would you do Exceptional Ruby as a talk before you actually wrote the book or no? Yeah, I did. Okay, so would you get that question often when you would talk on exceptions? I think a few people probably ran that by me. I think I did make a point, if I recall correctly, I think I made a point of including catch and throw even in that talk. I was actually, I got to use that transformation just the other day. I was working on the discourse code base, and I submitted a pull request converting an exception used as control flow
Starting point is 00:11:27 into a throw and catch, which is sort of the approved Ruby way of doing that. Right, right. Cool. Yeah, I think that might come out of my Java days back in college, but that's a question that I think I've had many long arguments with developers on it. So for a non-local return in a language that doesn't have something like throw and catch or continuations or anything like that, sometimes it's the only thing you can do. Do we need to give some background to some of this context just for those who may not be Uber Ruby developers
Starting point is 00:12:01 but want to kind of catch up with what this means? Yeah, go ahead, Avdi. Whydi once you explain um uh which part so you get exceptions what's this method of catching and throwing okay so uh a catch and throw in ruby is a construct that's actually very similar in implementation to exceptions it's it's another way of sort of tossing something up the call chain and it unwinds the call stack until it gets to something that can catch it. So it actually, you know, describing it, it sounds a lot like exceptions and it is, but it's specifically intended for non-exceptional cases. It's specifically intended for the case
Starting point is 00:12:36 where you want to, you know, just do an early termination, but you need to kind of do it non-locally. The circumstance that I saw this in most recently was a SACS parser, which, of course, is you hand the parser off to, or you hand an event handler class that you write off to a parser, and the parser then calls event methods on that event handler that you wrote. And at some point in the one I was looking at,
Starting point is 00:13:02 they realized, okay, we're done now. We don't need any more XML. But how are you going to tell the parser that? There wasn't any way to tell the parser yet. Parser, okay, stop pulling data. Stop going through. We don't need any more. Just end it here.
Starting point is 00:13:19 And so they were using an exception. They were raising an exception up the call stack and then catching it higher up. And using throw and catch is a bit nicer in Ruby for that. It's cleaner. It actually looks better. There's less code on the page. You don't need to define a special exception just for it because you're throwing a symbol instead of an exception. It's just generally better looking.
Starting point is 00:13:43 Down into the rabbit hole, Adam. Yeah. i'm there with you i'm so right there with you honestly it's kind of neat though i mean because it seems like um it might have came about as like a hack but it's a good technique a good method and it's you don't really have any other way to get around it but it's a good way to use contracts and ruby to achieve your goal yeah well it's one of those cases that you almost never need. I mean, I would hate to see a code base that was using them all over the place because that would be really scary. It doesn't seem like it's the most reliable way, but... Every now
Starting point is 00:14:12 and then you need to break through a layer of somebody from your software through a layer of somebody else's software back to your software again, and that's where those sort of non-local terminations come in. Gotcha. And the notion or the concept of an exception is very old. It's not anything new to Ruby or anything.
Starting point is 00:14:29 So that's an argument. That's a debate that has been had for years amongst developers. So I think it's going to continue. I think throw and catch specifically, I think they may have originated in like a Lisp scheme or something. I'm not certain. Yeah. Cool. uh like um scheme or something i'm not certain yeah cool so okay so to kind of get to the topic du jour um to keep up with the gourmet ruby oh yeah i caught that i'm with you uh okay so
Starting point is 00:14:56 one thing we want to the thing we kind of want to get to is is pair program with me um and why don't you give us an introduction it's a like i i think the best way to describe it um abdi instead of calling it a product necessarily it's more of a movement or more of an idea yeah is kind of building a community so why don't you give us some insight into what it is where we can find it and where you'd like to see it go okay well let me let me start off with a little bit of history um i've i'm a big fan of pair programming. I'm going to – should I assume that most listeners are familiar with pair programming or should I introduce that? Why don't you go ahead and introduce it?
Starting point is 00:15:32 Yeah, I would definitely say introduce it. Pair programming is the very simple idea of programming – not programming solo. Instead, sitting down with somebody else and programming. So it's not exactly groundbreaking, but it was part of the original extreme programming practices and probably one of the most controversial of them. Partly, I think, because a lot of programmers like to think of themselves as solitary beasts,
Starting point is 00:16:04 and partly because there was a perception that, well, if you take two programmers and you put them in front of one screen, then you're going to have your project speed. But it turns out that it's an incredibly effective technique for many, many reasons. Number one, it's kind of constant code review. I mean, code review has been found to be one of the most effective ways of avoiding bugs that we know of, and pair programming is a way to always be code reviewing. It's a great way to retain
Starting point is 00:16:39 focus. I've found that when I'm pairing with someone, I stay focused and I don't get distracted nearly as much because who – your pair probably doesn't want to pair with you on Twitter. So you kind of feel like I should probably stay focused on the task at hand. You don't know the kind of developers I pair with. Do you like pair every other word on a sheet or something? Careful, Angelic could be listening. Write this. Yeah,
Starting point is 00:17:13 you know, so it's one of the big benefits that I like about it is the effect on morale. You know, I've found that sometimes I'm having a bad day, sometimes I'm working on a piece of code that just bums me out and I really don't want to touch it and I don't want to deal with it, but I have to. And having somebody to deal, to go through that with you can be
Starting point is 00:17:37 a huge pick me up. And gosh, there are so many good things about pairing. Pairing keeps you, uh, pairing makes you smarter. Um, programming alone, you can do some really dumb stuff I've found. Like, um, let me give you an example. Uh, recently I was writing some, working on some backend code for Ruby Tapas. And I was basically trying to pull some data out of the shop front service that I use. It's a third-party shop front service called DPD. And earlier, I had actually worked with them to define and, like, to get a feature rolled out, which was that you can sign up to the Ruby Tapas videos as an RSS feed in iTunes or Miro or a bunch of other programs. And I'd actually worked with them on that.
Starting point is 00:18:35 I'd sort of laid down what the RSS format should look like for it and all this stuff, and then I'd moved on. So later on, I was working on some back-end code, and I was working alone some back-end code, and I was working alone, not pairing with anyone, and I was working on pulling data out of their website, and it was just basically screen scraping because they don't have an API for this stuff yet. And I had finished all this really complicated screen scraping code
Starting point is 00:19:01 when I got into a conversation with somebody on Twitter about the screen scraping code when I got into a conversation with somebody on Twitter about the screen scraping code. And they said something about, well, it can't be that hard parsing the RSS feed to get that data back out. And this huge light bulb sort of crashed down onto my head as I realized that I had been sort of blindly screen scraping information that was in this RSS feed that I had helped define. That is the kind of stuff that happens when you program alone, or at least when I program alone. And it's not just that either. I mean, if you think like, if you're a developer and think about, you know, oh, this problem before and it might not be the best, most efficient way to do this, but here, let me just copy and paste this code.
Starting point is 00:19:50 Well, you're not going to do that if you have your colleague watching over your shoulder. And just to kind of real quick, to fill in a gap, in case anybody doesn't understand the concept, I don't think we actually said it, but when you have two people in the same room pairing together, typically there's one person that is actually sitting at the keyboard doing the typing and another person that's watching, that's like, you know, looking over your shoulder and you're talking about what you're doing. He's watching what you're doing, pointing out things as you do them, if they're incorrect, kind of a idea. Yeah. And there are a couple of different, I mean, there are different models of it. You have sort of classic navigator driver pairing where basically the navigator is sitting back, hands off the keyboard, but they're actually doing most of the thinking.
Starting point is 00:20:31 They're telling the driver what to do, what to code. Driver is responsible for actually getting it onto the page, making sure that they don't make too many typos and hitting the button to run the tests and all that stuff. And the navigator is kind of freed up to sort of wave their hands and think, and, uh, maybe look up documentation and stuff like that. Um, and they may, they may well switch off periodically. Um, you know, traditionally if, if like the navigator ran out of steam, they might switch around, switch around and, you, and maybe the driver says, oh, I think I know what to do here, and so they switch off.
Starting point is 00:21:09 And then there are other things like ping-pong pairing, which is a method of pairing that works well with test-driven development, where basically one person will write a test, and then the other person has to make it pass, and then they keep going back and forth like that. And sometimes it's less defined. It's more organic. It's just two people sitting there and trading the keyboard off as they see fit. Some people actually set up desks. If you're co-located, they actually set up desks where there are two keyboards plugged into the same machine.
Starting point is 00:21:48 And I've noticed that with remote pairing specifically, the more organic style is what kind of seems to fit. And that we're talking to each other as we're looking at – we're sharing a screen with Wiimux or something. And as we're looking at that, we're talking to each other. And you kind of just have to get a feel for the other person and how the other person works. And so me and some of my coworkers, as we do it, if I notice something and I know how this person works, I know when it's appropriate for me to jump in and type something and to back out. And it just kind of happens naturally for us. So I think that tends to be – what do you think? I think that tends to be more common with remote pairing.
Starting point is 00:22:28 I don't know. Because it is hard. I think it depends on the technology you're using and the kind of connection you have. I mean, so I've actually done a fair amount of – quite a bit of remote pairing using screen sharing and um that tends to be less of an organic handing the keyboard back and forth kind of thing just because uh most screen sharing software has latency that's high enough that it's really impractical to type if you are on the remote end right um so it partly depends on what kind of technology you're using so So what happens whenever – I mean it's great if you're in that situation when you're sitting in the same room. But what happens – and I know some of the answers to these questions, but I'm just kind of curious from your perspective.
Starting point is 00:23:16 And the reason why we're having you on the show is to talk about this deep pair programming topic. But what happens when you're not? And obviously you've got answers for that because you do the podcast, Why Teams? You've talked about this heavily. How does the situation change when you're not face-to-face? You're not in the same room. I think the truth is that it doesn't change a huge amount.
Starting point is 00:23:36 Obviously, there are some technical hurdles. There are various technologies to bridge that gap. Like we said, there's screen sharing. Another very popular technique is to use some form of Tmux to share a terminal. And the nice thing about sharing a terminal is that it's very low bandwidth, and so it actually becomes practical for somebody remote to type on your screen because they don't have to send that
Starting point is 00:24:05 very many you know that many bytes um and there are various i mean there are sub categories of that there's hosting it on a like a shared machine in the cloud versus hosting on somebody's own machine stuff like that so you mentioned vmux and tmux i mean how much andrew you think we should explain some of these things because i I don't want people to assume. Well, we can link to that kind of stuff in the show notes. Yeah, we can. I want to say that I actually don't find the technology all that interesting. We're at the point where it's totally possible, and that's kind of all I care about. Right.
Starting point is 00:24:37 I mean, it's constantly progressing. We keep having new stuff. There's a new screen sharing service called Screen Hero, which is kind of cool because it's really, really fast. And you each get your own cursor, your own mouse cursor on the screen. And there will be more interesting tools in this space. But in the end, it's more about what you do with the tools. Right. And real quick, the technical hurdles involved are typically hurdles you have to jump over once.
Starting point is 00:25:06 And once you get over those hurdles, you don't really have to deal with them anymore. Yeah, pretty much. So we don't need to focus too much on the tools because that can be different for everybody. So to kind of move on – again, we'll share all that stuff in the show notes. But to move on from this to pair program with me, so now we kind of have an idea of what pairing is and so yeah, it's beneficial. So go ahead. Yeah, I mean, so I I'm a big fan of for all those reasons, I'm a big fan of pair programming. And then I did something kind of crazy last year for like the latter half of last year, I stopped, I kind of stopped doing traditional consulting work, which is what I've been doing for a while. And I became what I think of as a consulting pair programmer.
Starting point is 00:25:49 And basically what I did was I took appointments with people to pair program remotely for two hours at a time. That's what I did for my job for probably like six or eight months. And it was awesome. I really enjoyed it. And, you know, a lot of people seem to really get a lot out of it. And at the end of that, that sort of came to an end. I still do that. I still do open source pairing sessions. But I'm not doing that as my job anymore because, like I mentioned before, Ruby Tapas really took off.
Starting point is 00:26:19 And so I made that my main focus. But, you know, coming out of that, I just felt like I wanted more people to have that experience, especially more people who maybe are not part of a team, a co-located team, where they get to pair program every day. I really wanted to see more people who are isolated or who are living. Maybe they're in a city, but it's not a big tech hub city, so they're not around a lot of other programmers, or they're like the only programmer on their team,
Starting point is 00:26:55 or for whatever reason are not getting a chance to pair program. I want to see more programmers benefit from the experience of pair programming. And so I decided that I kind of wanted to just basically start a movement. And that's kind of where – so the URL is pairprogramwith.me. Yeah. There's a couple of these out there, but it seems to be that – and maybe this is because of people like Steve Klabnick who – I don't think you've said a word yet, Steve. I've said one or two very briefly, but yeah, staying out of it.
Starting point is 00:27:33 But Steve has kind of embraced this, and I think we have some of the more – without trying to sound like a suck-up – some of the more well-known Rubius in the community that are starting to embrace this concept. And I think that that will help this to move forward. So pairprogramwith.me again is the URL. And the idea is that you can basically, you're just, there's nothing special that's necessarily happening with this project. This is just making it, this is helping you to get an idea to share with the world that you are available to pair. Yeah. I mean, the website is almost incidental. Um, you know, I wanted some sort of focal point. Um, but when I launched it, it had a badge and nothing else. So it had a badge you could put on your site. And that's, you know, the badge says pair with this
Starting point is 00:28:25 says pair program with me. Um, or maybe it says pair with me and he said, but anyway, pair with me. Um, but you know, it's, it's kind of like the, it's kind of like the badges that you see on some websites that say fork me on GitHub. That's, that was kind of my inspiration. Um, and, and that was really all I launched with. And, and that's, that's when i kind of kick things off with a talk um at ancient city ruby um a couple months ago and yeah i mean it's it's really it's an idea the idea is uh you know number one pairing is awesome number two you don't need to be in the same room to do it um and number three all you really need to do is ask um i guess, you know, for me, the biggest thing is sort of inspiring a culture where we ask each other, hey, do you want to pair on this? And half of that is
Starting point is 00:29:12 the asking. And half of that is having an environment where it's okay to say that, you know, having an environment where it feels natural to say that. And so I kind of wanted to get people to start putting this badge up just to kind of put a welcome mat out, to make it feel like, yeah, it's okay to say, hey, would you pair it with me on this? And I think that the one thing that you find, especially in the Ruby community, and I've spoken to some Python guys, and this is, I think, in every community, but in the Ruby community, one thing that you find in especially in the ruby community and and i've spoken to some python guys and this
Starting point is 00:29:45 is i think in every community but in the ruby community one thing that you find and when we had our uh a few episodes a few episodes ago we talked about get tip and one of my concerns for a project like that is that you have all these rock star ruby developers that get together and this is just a way for them to to make each other feel like even more of rock stars right and so the whole idea behind pair pair program with me we need to say ppwm we need to say you can just say pair with me the whole idea behind pair with me is kind of taking that barrier away right so this is like if if you're a i don't know ruby rock star i don't know what to call yourself but if you know you kind of know, hey, I have some clout. Like, I work on some bigger projects.
Starting point is 00:30:27 You know, like Steve, you work on a bunch of stuff. You're on the, you know, do Rails contributions. You do a lot of stuff. If you make this known to the general public, then you're bringing that barrier down a little bit. And you're saying, hey, like, you might look at me as a Ruby Rockstar, but I'm available to help you learn, to help you solve a problem, to help you do whatever it is that you need to do. That doesn't necessarily even mean that every single – like Steve Klabnick is not my coworker who I'm going to reach out to every time I have a problem to fix my problems for me.
Starting point is 00:30:59 But it does say that you are making yourself available in cases where you're needed and if you have the time and if you have right you know whatever i mean like i said i i do open source pairing sessions um and um and those have been those have been really neat for me and and what i really like about them is you know those are free sessions obviously and and uh they've they've often been times when I get to work with someone who's really new to programming or new to Ruby or new to whatever technology we're working on. And it's a fantastic experience. I highly recommend it to anybody who's kind of advanced at what they do because it's just – you get to experience that – vicariously experience that thrill of learning something new, that, oh my – wow, I didn't know you could do that. That's amazing. You get to experience those moments all over again. It's like we forget that there was a time where you had to learn what it meant to assign a variable. Yeah. I mean, I fear that maybe sometimes people might look at the idea of pairing with a newbie and think, wow, that's going to be tedious. But the truth is it makes you feel amazing. And so I guess really like my biggest call is out to people who are kind of in that position of, you know, knowing knowing whatever whatever language they work in, knowing it pretty well, being pretty good at it, you know, maybe being seen as as a guru or a master or whatever.
Starting point is 00:32:38 I would love to see more people in that position kind of put up the welcome mat and say, yeah, come on, pair with me. It'll be fun. Um, I think it, there's a lot, I've seen a lot of people, you know, who are, who are newbies who feel like, um, you know, these people are unapproachable, you know, their, their programming heroes are unapproachable. And, um, you know, I, I think we all know. Well, I guess the newbies don't know. But, you know, we're not unapproachable. I try not to be unapproachable. I don't really think any of the people that I, you know, see at a lot of the Ruby conferences are remotely unapproachable. And, you know, we're all just programmers. People still think there's like sauce like i so
Starting point is 00:33:26 i've done a couple of these sessions a lot of these sessions now i wasn't actually even an obd's talk i just saw him tweet about it i was like sounds good tweeting and then i was like oh i have like 15 appointments this week now which is awesome looks like i'm pairing and it went real well and i actually did yesterday and today as well um random pair with me stuff as well but um i had somebody literally say to me like hey i'm real sorry that we keep writing this code and this test fails and then like it's taking a while to get it to pass and i was like i don't know what you think i do all day i run my tests and they fail and i try to fix them and they don't work and then i run them again and then they fail and so like you know it's all we're all just programmers it's not it's not a big deal um but you're steve klabnick
Starting point is 00:34:02 you don't have to write tests everything works that comes out of your fingers stupid so this is actually what happened to me obviously said earlier like you know when you feel really bad about code it's great to pair with things um and so actually that's what i did today um assuming it passes a little bit of review i'm going to commit this to rails later today but like um so i found a regression in rails because of the readers of the rails for an action book found a discrepancy between like beta one and r RC1 and so I figured out what it was and I got a failing test and I tried to fix it and it didn't work and I was like wow this feels really stupid like basically just when the password confirmation is nil or empty string don't worry about it which like super trivial and not complicated but I couldn't get my freaking test to pass and so i
Starting point is 00:34:45 ended up like tweeting finally like hey i'm feeling really dumb could somebody pair with me on this and we paired and i thought we got it working but it turns out we didn't so today i did the same thing i was like hey is anybody interested in like working on this bug and so finally after two pair with me sessions i've managed to like the the diff is like a three-line diff or something it's not even complicated it's just that like talking with someone is so helpful um you know and what's hard is different based on time and how you're feeling and all that other stuff too so so how how concise do you think the topic needs to be so if you if somebody reaches out to you and says hey can you pair with me on this how exact does that topic need to be before if the topic is too broad right there's too big of
Starting point is 00:35:24 a learning curve for somebody that you don't know to maybe want to get involved. So how exact on a – that specific instance for you, Steve, you were like, here's the test. This is failing, and I can't figure out how to get it passed. That's pretty specific. You don't need to understand anything else other than what you're doing. But if somebody comes to you and says like you know hey um i need to i need a shopping cart like that you know what i mean like that that's too broad to to be able to really sit down at one time and say let's work on that together so where do you at obvi and steve maybe where do you
Starting point is 00:35:54 consider the kind of the sweet spot with like how precise do you need to be with the with the thing that you're trying to work on um i don't know. I haven't really thought that hard about it. I try to avoid... If somebody approaches me and is like, I want to make a new Facebook, then I'm going to say, hey, can we sort of contract the scope a little bit?
Starting point is 00:36:23 But it's kind of, I don't know, it's one of those organic things. It's each, I think each pairing session kind of works out its own parameters. I don't have anything specific on scope, but I just like limit it to time. So I'm like, oh, I only have one hour. I only have two hours.
Starting point is 00:36:38 And then, you know, if the goal is to learn, then you can get two hours worth of learning, regardless of whether the scope is huge or small. So I find that's much easier in terms of also with people's scheduling and expectations, you know, that it's not going to last, like, longer than a particular amount of time. So that was one of the things, yeah, the other day was like, hey, I have a call in an hour and a half. So we can work on this up to that amount. But, like, you know, I have this other hard boundary. Yeah. With your interests and some of your skill sets,
Starting point is 00:37:06 that means that typically I'll get an hour to two to build a hypermedia API with you? Yeah, basically. I haven't done that with anybody yet, but, you know, that would be fun. Mostly it's been Rails and Rescue so far is what I've done most of my pairing on because people are very interested in, like,
Starting point is 00:37:20 how to work on Rails, and then, like, it's the same as any other Ruby project. You clone it, you run some tests, you write a new one, you make a pass. But I mean, obviously it's a big project. So, you know, that can be complicated. To be perfectly honest, and maybe I shouldn't let this on, but I've had, I mean, I've had pairing sessions that kind of just devolved into answering questions or having a conversation. And that's good. I mean, because what, so Kenneth writes on a show a few weeks ago,
Starting point is 00:37:47 talked about in Python, and we have this in Ruby too, like you can read all the books you want, but there's this set of tribal knowledge that you pick up as you go and as you do things wrong and as you read other people's blog posts and you watch Ruby Tapas
Starting point is 00:38:01 and there's this tribal knowledge that isn't necessarily in any book, right? It's hard to just teach all of Ruby in one book. So for newbies to come to you and they might have a very specific problem, but if it kind of breaks down into just like a question and answer and education session, that's good because that's an opportunity for you to share that tribal knowledge, to share like this is best practice. This is what we tend to do in this world. So here's some insight. And, and I mean, who knows if that's, if that gets the, the, the Ruby newbie, the, uh, most confidence that they can have to, to continue on it, that's probably the best use of that time. Is it not? Yeah, absolutely. And that's one of the biggest reasons that I kind of got this started was the idea of just spreading ideas, spreading knowledge, what I think of as kind of mimetic diversity, diversity of ideas. And I think that pairing does that better than anything else.
Starting point is 00:39:03 And it's good for us as programmers. I mean, having a wider, getting to learn from a wide variety of other programmers' experience, I think, you know, makes us well-rounded, makes us better at what we do, gives us more tools in our toolbox when we're confronted with a problem. It's just all around good. If I could jump in here real quick on the, on the notion of approachability and some of the, I guess, potential of like having a,
Starting point is 00:39:33 and we have this question here at the end of the show and I'm excited to hear what your answer is, Avi, but like, you know, you have your programming hero and you want to maybe, you know, for some you might just have a problem you want to solve. Like for example, what Steve and Andrew were mentioning earlier. But how is this breaking down the barrier, breaking down the wall of actually getting to pair with your programming hero? Well, I think the ideal scenario for me is maybe that programming hero puts out a Pair With Me badge or tweets Pair With Me. And you say, hey, can I do you know, tweets pair with me and, and you say,
Starting point is 00:40:12 Hey, can I do it? And they're like, sure. Um, you know, I think that's kind of the ideal scenario because it's, it's the lowest barrier to entry for somebody who might feel a little nervous about asking. Um, but, um, you know, in general, I, I'm sorry, go ahead. Well, I was gonna say it's a lot easier when you're invited than if you're trying to, you know, come knock on the door of a stranger. Yeah. But, I mean, something else that I'm trying to encourage. Yeah. You know, something else I'm trying to encourage is just to is that I think I mean, I could be wrong on this. One of the questions that I've asked people when I've talked about this is, basically, if somebody came to you and said, hey, I really like what you're doing.
Starting point is 00:40:53 I love what you're doing with Project X. Could we pair sometime? I ask that question, and I usually see a lot of... Or I ask, what would you say to that? Would you say yes to that? And I usually see a lot of hands go up when I ask that question and I usually see a lot of – or I ask, you know, what would you say to that? Would you say yes to that? And I usually see a lot of hands go up when I ask that question. You know, I think that most people are pretty open to this kind of thing. And so I think that if you have some way of reaching that programming hero of yours, you know, if they put their contact form up somewhere or if they make their email address available or if they're just out there on Twitter or something, if – I think if you politely say, hey, I really like what you're doing with such and so.
Starting point is 00:41:36 Do you think we could – do you think I could pair with you sometime? The worst thing that can happen is they ignore you. Yeah. It's true though, because I think that the fear of your, you know, people are afraid of the program, their, you know, whoever they would consider to be one of their heroes. And it's probably this self-made, you know, delusion that you have that they're going to, you know, treat you like you're an idiot. And it's kind of the whole crux of open source. And it's kind of what we preach to people is, you know, just ask because the community, while there is, you know, and again, I've seen this far too often where somebody will commit a pull request to some, you know, repository and say, hey, this is something that I would like
Starting point is 00:42:18 to do. What do you think? And they just get a response like, this is stupid, you're doing it wrong, and it gets closed. That does happen. obviously. It's unfortunate, but it does happen. But that's not the norm, right? Normally, when you submit something, even if it is something that's pretty questionable, the responses you'll get typically will be more like, OK, well, did you think about trying this way? This is what we tend to say is a better solution to that problem. And that's the norm, right?
Starting point is 00:42:45 So people are afraid of submitting their code. People are afraid of the world seeing their code because they're afraid of the response they're going to get. Typically, that response is a lot more positive than what they expected. And it's more encouraging than anything to get you to contribute more code. So when people finally break the wall down and start contributing to open source, you find that their contributions jump because they get encouraged about the response they're getting rather than fear of being treated poorly. Right. Yeah, and something that I kind of want to get into doing more is if I just don't have time or if I've got a huge backlog, I'd like to actually do more sort of referring people out. I'd like to, if nothing else, be kind of a nexus where people can say, hey, can I pair with you? And I'll be like, well, I really can't right now, and I've got a huge backlog of pairing requests.
Starting point is 00:43:38 But here's somebody else that you might enjoy pairing with. So I guess that kind of brings us to a good place then. Pair program with.me. So it's a Rails app, which for what it is might be a little heavy-handed but um yeah does is that is there a future is there would you like to see something like that maybe like a i don't know like a queuing system or something where you can maybe say hey i'm available right now and um then somebody else can come and say okay this person's available let me ask them like is there anything like that you would like to see there there are a bunch of young sites out there
Starting point is 00:44:09 um along those lines and i've tried to list most of them on pair program pair program with dot me see i have trouble saying it too um uh and i don't know like so, so the idea, I mean, the idea with the site is basically to be kind of a community owned thing. I mean, most of the stuff that's happened since I put it up has been pull requests that people submitted to me. And I think, you know, I've definitely talked to some of the people that are involved with it about something along those lines. I have some concerns about that it would be easy to make something that actually wasn't as useful as it seemed like it would be. I know that I don't want to get into the rabbit hole of scheduling because that's a huge mess. And I'm a little concerned.
Starting point is 00:45:05 What I don't want to do is build a system that winds up sort of reinforcing circles. Like you were talking earlier about sort of like the circles of experts all pairing with each other. And I wouldn't want it sort of reinforcing that or kind of leaving people out in the cold if they put just the wrong tags in their post or something like that. So I think it requires a lot of thought to be genuinely useful. But I certainly – I do expect that site to kind of expand and offer more features for, you know, more, more ways of finding people to pair with as time goes by. So then you're kind of leaving it open, right? Yeah, it's a true open source project, you very, very open. It's not it's not like I have a master plan for that site. I have a, you know, milestones or anything like that. You know, the idea was, I wanted to get
Starting point is 00:46:00 the idea out there first. And I wanted to then, you know, and attract some people to the cause and, you know, see, see what, you know, what other people felt like would be the most useful things to have there. Like, I think pretty soon, um, uh, there's going to be, it's a small thing, but I'm going to put like a little widget on there that, that, um, shows all the people tweeting with hashtag pair with me. Um, so at least you can go there and see like who's available right now. Yeah, I think that's good. I think we, you know, while the trend in open source has been to kind of have that, you know, BDFL on each project and that's, that's neat and all for somebody to have this master
Starting point is 00:46:36 vision and this is where the project's going to go. And I'm just using the open source community to leverage other people to help me get it in that direction. That's, that's cool. You know, that, that, that's definitely a useful, you know, one of the many applications of open source. community to leverage other people to help me get it in that direction. That's cool. That's definitely a useful – one of the many applications of open source. But I think what's even more unique and what I think should – what I would like to see grow is the idea that I'm just starting this ball moving and I want to see the community get behind it and take it wherever it wants.
Starting point is 00:47:02 And for me, the idea is – I want the idea to always be paramount. I mean the site is incidental. The site exists – it exists to support the idea, but ultimately it's – I don't want this to become like a technological problem to solve. It's not a technological problem to solve. It's a cultural problem. It's a cultural opportunity. It's a cultural opportunity to enable technical
Starting point is 00:47:27 problems being solved yes you know you said the word culture there and i'm we andrew mentioned this might have mentioned this earlier but uh so we he and i work in a distributed team at pure charity and we have a back channel it's also known as our hip chat so our our actual water cooler at pure charity serves as a water cooler here for this show for those that work with us actually listen to the show but uh beverly nelson i think you you might know her but she mentioned in our chat room she said 80 of her friends at ruby friends uh is is about bringing them into the culture not so much the coat and i think there's a lot of magic to what you know she said you guys are talking about
Starting point is 00:48:03 culture there i think it it becomes not so much uh oh I know Ruby well you know more better than you or you know I've got more experience it's really about just getting involved you know regardless of your of your level of activity and whatnot but just jumping in and that's probably the hardest part too about open source is you there's just this this huge intimidation that you have a bunch of assumptions before you're involved that this is how it's going to be and it's not at all really how it is and we're a lot more friendlier than people might think. But I think that's with that, is I started putting some of my pairing sessions up on
Starting point is 00:48:49 Google Hangout on Air. And I didn't really announce it or anything. I would be working with someone and I'd be like, hey, do you mind putting this up as a Hangout on Air? And then whoever happened to be around could tune in and watch us.
Starting point is 00:49:06 And I recently did one of these actually with one of my co-Ruby Rogues Josh Susser and put it out there and got a lot of really good feedback from it. I think some of the feedback that I think was most interesting for me was kind of the
Starting point is 00:49:23 the way watching was kind of the, like, um, the, the way watching it kind of took the, the magic out of it. Like, you know, took the, that aura of, you know,
Starting point is 00:49:35 the thing that those coders do is different from what I do. Um, and, you know, I think that if we, maybe if, if, if I,
Starting point is 00:49:44 and maybe others put some more of our pairing sessions up like that, um, other programmers can look at it and say, oh, wow, that, you know, basically the stuff they do is the same stuff that I do. And, and they make the same boneheaded mistakes and they sit waiting for their tests to pass. And, and, you know, and sometimes, sometimes they spend an hour and write three lines of code and, um, and it's not, you know, and sometimes they spend an hour and write three lines of code and it's not, you know, there's nothing magical about it. There's nothing unique about it. We're, you know, we're all just doing the same stuff. I think that's kind of something that Steve said, not so much said with his words, but that we're all doing the same stuff.
Starting point is 00:50:23 Steve, didn't you, for a while there, weren't you Vimeo-ing, if that's a word? Like basically just you hacking by yourself, but you were just hacking on Hackity, I believe, and you were sharing that on Vimeo and people were watching like, oh, yeah, he does the same thing I do. Or you would actually have your own commentary in there and you were just talking to yourself. Yeah, it was with hilarious results. So I didn't fully appreciate how to properly mix my audio, or I didn't notice that the audio was mixed poorly. And so there's one of me fixing a bug in RubyGems with Kesha louder than my voice.
Starting point is 00:50:56 So I tried to provide commentary, but instead it's just blasting Kesha. I wasn't sure. I thought it was something hilarious too, but I wasn't able to recall. Yeah, it was something hilarious too, but I wasn't recalling. Yeah, it was pretty good. So I would like to get back to doing a little bit of that, but it's just one of those things
Starting point is 00:51:11 where I did it a couple times and it was fun and people liked it, and I just haven't done it since because I haven't done it since, not because of any specific reason. Sometimes you've got to break the mold, man. Do something a little different. Don't follow the same rhythm and the rhyme.
Starting point is 00:51:28 It's also just funny because you're like when you're like recording your screen you're always like terrified that something is going to happen like what am i going to type or am i going to get like an im message that should be private or like you know how is this going to work out so that's also real fun too um but uh yeah you know i mean i think it's good uh just in general that was what i was trying to show with rubGems is that, like, you know, RubyGems is a particularly terrible code base due to its history and et cetera. And so, you know, watching, like, here's how I tackle this kind of bug, you know, you could totally do it too was definitely, like, the point of that. I was like, I don't do anything but just run the tests and cuss over and over and over again.
Starting point is 00:52:01 I can't imagine if I'm pairing with somebody and I am from my wife pops up reminding me to get the rash cream or something. That would probably be the worst thing ever. That seems bad. I just noticed on pair program. I know. Somebody might think that you're human or something. Yeah, I don't want that, man. They are supposed to like – I'm supposed to be a demigod of programming or something to them. Just kidding.
Starting point is 00:52:22 Hopefully everyone knew that. On pair program with.me me i just noticed the header you say pair widely pair often is that a uh shout out to the idea of wide teams a little reference to wide teams there that's the second uh last week we had docker on and they had a number they had their on their frequently asked questions they went numbers one two three four five and then to 42 so this is the second little uh nugget i found in the uh products you're so you're so keen man you know that's right so confident ruby another book that you are writing still i mean it's in betas i mean you're still writing it's in beta which means that I've pronounced it content complete after taking Kent Beck's advice to get it to 150 pages and then just stop.
Starting point is 00:53:12 And so it's – I'm still editing the crap out of it, but it's content complete. And this book, again, stemmed from a talk that you've been giving yeah um actually i think it was the first talk i wrote um which i called confident code and uh it's it's all about writing methods that tell a coherent story uh sort of a narrative style of of writing methods is how I think of it. And a lot of that involves writing code that sort of confidently progresses forward without a lot of tangents and diversions and provisos book of patterns that are strategies for making your code more confident, for telling those stories more coherently and isolating the error handling and dealing with input in such a way that you don't have to be uncertain about it in the midst of the method and stuff like that. Yeah, it's a – where can you – I couldn't find it anywhere other than on your store. Is there anywhere that... If you go to ConfidentRuby.com,
Starting point is 00:54:34 you'll actually... Actually, I think that'll redirect you to the blog post where I first introduced it. And so that's probably the easiest way to get to it. You can also find announcements about it on my blog, which is devblog.avdi.org. Yeah, we'll have this. I found the link. We'll have the link in the show notes.
Starting point is 00:54:52 For those of you who listen to the podcast, head to 5by5.tv slash changelog slash 90 to see all the show notes and links and everything else. So don't be lost. So, Avdi, what are your uh engagements planned for the future that you already have set up i keep meaning to put together like a an actual list of them um let's see uh next one up i know is going to be um uh yeah name god uh the one in DC Arlington not yeah oh gosh
Starting point is 00:55:31 it's Ruby Nation Ruby Nation thank you my mind wanted to be like Nation Ruby and then I was like no that's not right yes Ruby Nation and in just like a couple of weeks. And speaking of Ruby Nation, you gave this confident code talk there, too. Yeah, I guess I did. I'm doing a I believe I'm going to be doing a talk on coding and joy, basically.
Starting point is 00:56:03 Little little bits of Ruby that just make me happy, uh, this time around. So, um, yeah, that'll be fun. And then,
Starting point is 00:56:10 uh, after that, um, several others, I think, uh, well, I'm going to be going to Pittsburgh,
Starting point is 00:56:15 steel city, Ruby. Um, love Pittsburgh. Woo. Stack. Adam is from Pittsburgh. Originally born and raised in the Pittsburgh area.
Starting point is 00:56:24 So that's uh steve where are you at i mean i live in santa monica now but um i i lived in pittsburgh my entire life before moving to los angeles so there you go i thought so so everyone everyone on this chat has some connections to pennsylvania that's that that has happened in pretty much every chat that i've ever had i found it's weird It's weird. It's six degrees of Pennsylvania. Yeah. So you'll be at Steel City Ruby. When is that?
Starting point is 00:56:53 On the date that it is on, yes. Yeah, it doesn't matter. August, middle August sometime. Awesome. So for those of you who are new to the show and those of you that have listened, you'll know, we ask all of our guests these two questions. The first one, Abdi, is for a call to arms. And I guess in this case, you could give us a specific call to arms for pair program with.me, if you want.
Starting point is 00:57:19 Yeah. Or just kind of what you would like to see the community do around this. I don't think it's going to come as any surprises at all. It's just go out there and pair with each other. Go ask. If you have somebody that you've always wanted to learn from,
Starting point is 00:57:36 go ask them. If you have some time in your day that you would be working on open source or something anyway, welcome that out there. Put that badge on your blog. Put the day, you know, that you would be working on open source or something anyway, put that, welcome that out there, put that badge on your blog, put the, you know, hashtag pair with me on your Twitter feed if you do the Twitters. Make yourself available. I think you'll find it incredibly rewarding to pair widely, pair diversely, pair more
Starting point is 00:58:01 often. How do you feel about pairing on more conceptual, like if somebody's a Python developer and you don't have Python experience, pairing conceptually on an idea, how do you feel about that? I think it still totally works. Just the other day,
Starting point is 00:58:16 I paired with somebody on some.NET code, some C Sharp code, and granted, I have done C Sharp before, but it was years and years ago and I was totally rusty. And it didn't matter. I just basically had them be the driver.
Starting point is 00:58:31 It could have worked either way, but it worked. That was nice just because they already had their whole environment set up, and they had their IDE, and they knew the key bindings and how to make the tests go and stuff like that. But it was fun because I actually got to teach them something about C Sharp. Not because I knew it, but because I just sort of like basically figured that a particular library call had to exist and looked it up until we found it. And basically it was using a more functional approach to solving a problem than they were used to.
Starting point is 00:59:09 Maybe as an attachment to your call of arms, I have a couple ideas I can share with you on the fly. Maybe start a wiki page for those who, on the PPWM repo you have on your offer user, maybe a wiki page that says, hey hey i'm open for pairing and or moving this to an org and maybe having just a project for issues where you can kind of allow issues to coordinate the community potentially just an idea yeah yeah that's a good thought actually we've we we have started using the the wiki a little bit on the the page for it. Gotcha. It says, welcome to PPWM.
Starting point is 00:59:49 I'm just messing with you, man. Just one thing. I did want to give a shout out. This is a community project, but at the bottom, I noticed you said the design was done by Chris Radford and the badge was done by David Browning. So kind of wanted to give them a little bit of a shout out for getting in on this thing early with you.
Starting point is 01:00:08 Yeah, yeah. And they totally deserve it. Much gratitude to both of them and to everybody who submitted a pull request. All right. And our last question, if you could name a programming hero or, again, somebody in the idea of distributed workplaces or wherever you might think what would who would you say your hero would be um so i could obviously name any number of amazing programmers that have influenced me and then i look up to uh but i think i want to give a shout out to Angela Harms.
Starting point is 01:00:51 Because she's been doing some talks in the Ruby community lately. Well, in the programming community lately, not specifically the Ruby community. She's, I guess, maybe more part of the Agile community, you could say. I think that would be her background. It seems right, yeah. And she has been, she talks to programmers about compassion. And
Starting point is 01:01:14 she does it in a way that's effective and really is eye-opening and I think heart-opening. And I think that's wonderful. And I think it's much needed. Uh, so, so yeah, I'm going to say Angela harms. Uh, did she, I want to, like, I remember there was something like a radical something that she did or that I remember seeing her name on.
Starting point is 01:01:39 I'm actually not sure of like any of the, I don't recall any of the specific titles of her talks, radical love or something like that. But yeah, no, I definitely have – well, it's not RadicalLove.org. It's something that she did. But yeah, or at least I remember hearing her name with. But I agree with you. I think that there's something inherent that we need to see in this community and it's it's it's the idea of like i don't know just acceptance of people in this community and you can get bogged down in what you know the ruby
Starting point is 01:02:14 drama or whatever we we call it where um you just you get on and you follow some of the big names in the ruby community and it's there can be a lot-calling and a lot of just trash going back and forth. And I don't know if maybe that's what you're hinting at, but I would like to see less of that and more of just people genuinely respecting each other in the community. Well, you know, not just a Ruby thing. It's just a programmer thing in general.
Starting point is 01:02:37 I think we have a culture that's very rationality-centric, very logic-centric. In theory. Yeah, in theory. You know, very often. Yeah. In theory, we believe it to be. And of course, we also believe ourselves to be very logical. And I think a lot of, you know, a lot of times, you know, we think that solving a problem boils down to being the most rational person in the room. And I think the stuff that she's talking about will challenge that. And I think it'll challenge that in a good and important way. Yeah, that is true. I mean, I think it begins with
Starting point is 01:03:12 you, right? It begins with us as an individual to be different and to act differently. So don't be a hater. Repeat after me. We are all different. Somebody's got a... We're all... Yeah. Somebody's got... Nobody? The response is, I'm not.
Starting point is 01:03:38 Gotta be some Python fans in the audience at least. Yeah, hopefully somebody will get it. I don't know this has certainly been a definitely been a fun chat avi i definitely appreciate you taking the time to come on this show it's it's a fun conversation uh you're always invited back certainly appreciate all that you're doing in the community and what you've done with uh pair programming and just lifting that up and sharing what that can be and just starting the movement, as Andrew mentioned before. Definitely thanks to Andrew and Steve for coming on the show.
Starting point is 01:04:13 What a great show you guys put on today. And thanks to you for the listeners out there listening live. This show does broadcast live every Tuesday at 5 p.m. Central Standard Time. You're on 5x5. If you want to check out our backlog, you can go to 5x5.tv
Starting point is 01:04:29 slash changelog. This is episode number 90, so you've definitely enjoyed it. But let's close this one out and say goodbye. See y'all later. Bye. Bye-bye.

There aren't comments yet for this episode. Click on any sentence in the transcript to leave a comment.