While 2020 has been a messy year for all, today we get into the Thanksgiving spirit by celebrating the top things in tech that we’re most grateful for. Show producer William Jeffries opens the conversation by highlighting his love for test-driven development (TDD) — he also talks about how he implements TDD into his coding workflow. A godsend to many, we then discuss GitHub’s squash and merge button and how it takes the frustration out of many projects. Reflecting on how work-from-home has become the new normal, we express our gratitude for remote pair programming software like Tuple. After touching on the joys of listening to music while pair programming, host Michael Nunez discusses his enjoyment of teaching interns his old tips and tricks, and how this forces him to re-examine how he codes. From having a team that communicates well to having a respectful pull request culture, we share our appreciation for working on good teams. Near the end of the episode, we recognize the value of automation apps like Zapier before touching on how it’s becoming easier and easier to get into programming. Grab some turkey and tune in as we roundup some of our favorite things in tech.
Key Points From This Episode:
- Introducing today’s topic — the top things in tech that we’re most thankful for.
- Why William Jeffries is thankful for test-driven development.
- Hear how William has implemented TDD in his coding process.
- Being thankful for GitHub’s squash and merge button.
- How pair programming apps like Tuple allow you to collaborate on code from a distance.
- The joys of listening to music while distant pair programming.
- Why Michael Nunez is thankful for interns and the chance to pass on his coding habits.
- Reworking old code to give reviewers a better impression of your work.
- Expressing gratitude for having a team that communicates well.
- Exploring lower barriers of entry into coding and coding-adjacent practices.
Transcript for Episode 183. Things in Tech We're Thankful for
[0:00:01.9] MN: Hello and welcome to The Rabbit Hole, the definitive developer’s podcast. Live from the boogie down Bronx. I’m your host, Michael Nunez. Our co-host today.
[0:00:09.3] DA: Dave Anderson.
[0:00:10.1] MN: And our producer.
[0:00:11.3] WJ: William Jeffries.
[0:00:13.6] MN: Today, we’ll be talking about the things in tech that we are thankful for.
[0:00:17.7] DA: It’s that time of the year — or slightly after that time of the year, I guess.
[0:00:21.0] MN: Yes. If you're listening to this, know that I’m still eating leftovers. Whenever you listen to this, weeks later, years later, I’m still having those thanksgiving leftovers.
[0:00:31.3] DA: So much turkey. Sorry William.
[0:00:34.8] WJ: In Korea — we did a Thanksgiving in October here in Korea.
[0:00:39.0] MN: Man, you got like double whammy on Thanksgiving bro.
[0:00:42.3] DA: Is it like Canadian Thanksgiving, you had it in October?
[0:00:45.7] WJ: Yeah, we could do a whole episode on Chuseok, it’s a whole thing.
[0:00:52.3] DA: Things we’re too sack for.
[0:00:55.3] MN: We’ll definitely have to record that one but we got to talk about things that we’re thankful for in tech. 2020 has done quite a lot of damage to the year leading up to now and —
[0:01:06.9] DA: — Yeah. But, there’s that exercise in gratitude, right? You know, like keeping a gratitude journal, just really trying to remind yourself that it is just a wonder to be alive right now. What a time to be alive.
[0:01:22.0] MN: I mean, 2020 makes it a lot more harder to put that pen to that pad but we’re doing it. And we’ll continue to do it. There’s quite a few things that you know, everyone, we’re going to talk about the things that we’re thankful for in tech. And I imagine that as other people reveal what they’re thankful for, what’s going to inspire us to be even more thankful for other things which I’m looking forward to. Does anyone want to kick us off first on — what are they thankful for in tech?
[0:01:54.3] WJ: I’m thankful for test-driven development.
[0:01:57.0] MN: This guy. Oh yeah, TDD, always there for you but we’ll talk about it.
[0:02:02.1] DA: Extreme programming.
[0:02:04.6] WJ: TDD has been keeping me sane. Lately I’ve been — normally you do your regrade refactor and then you commit, like, all one. But lately I’ve been doing like a red commit and green commit and a refactor commit to really force myself to be strict about TDD. And it has, it’s led me to start actually running the full test suite on every commit and that’s been really helpful. Because then, I check on GitHub and CI has run and the commit that’s labeled as green is actually red and I’m like, I actually broke a test somewhere else in the code base. And I wouldn’t have caught that because when I’m TDD-ing locally, I just run the current test file because the whole test is just in one.
[0:02:55.7] DA: Is your code come in and message, like, “This definitely works” and then you just push it up?
[0:03:02.9] MN: Bro, those are the best command messages. I do have a question, you say you write the test and then you commit and then you make a pass? And then commit?
[0:03:12.1] WJ: Yeah, I write so the first commit message is red, colon, test that the foo returns the bar, or whatever. And then the second commit is, green, colon, you know, implement the foo returns the bar. And then third commit is refactor colon I don’t know, extract a method from foo for clarity or whatever.
[0:03:36.6] MN: Right.
[0:03:39.2] DA: That sounds very festive too because you’re just like, “Red green, red green.”
[0:03:42.9] WJ: Yes.
[0:03:45.4] MN: Just in time for the holidays bro.
[0:03:49.0] WJ: It feels very festive. Although, you know, it does mean that if you're not squashing then when you merge those commits, you then have red commits in your history. Which is maybe not ideal.
[0:04:02.9] DA: Yeah, maybe YAGNI like you don’t really need those as a record of the progress. It’s kind of cool like having the refactor commits I guess.
[0:04:13.8] WJ: It makes code review a breeze because you can go through a commit by commit and it’s very modular.
[0:04:20.4] DA: Right, also I guess —
[0:04:23.0] WJ: — And it also gives you proof that your tests fail, as reviewer, you can tell that the tests would fail if the implementation were not there just by looking at the commit history.
[0:04:30.9] DA: Yeah, also like, it’s like a bit — put your money where your mouth is. Where someone can look at it and be like, “Oh, this guy TDDs huh?”
[0:04:44.7] MN: You said that you squashed the commits though at some point or no?
[0:04:47.9] WJ: I mean, some projects — this is another thing that I’m thankful for is the squash and merge button on GitHub. Squash and merge button is clutch because if you are making baller commit messages, it gets rid of them all. And then it’s like one commit that is the full ticket that you just implemented.
[0:05:09.4] MN: — “This will work, this one’s got to work, I bet it’s this one.”
[0:05:14.2] DA: Home run, calling the shot. I go back and forth on that because like there’s like you were saying about like a discipline to structuring commit that is really good to practice. But then it’s nice to, like, just to have that as a fail safe against all of the heinous things that may have happened while you were struggling with CI or whatever. But then, if you go to a project where they don’t do squash and merge and then you're just yamming on the button to bring the PR into the main line of work, then you end up with a whole bunch of foolish commit messages there forever.
Which I have definitely left somewhere in this world. I don’t know which project it is but I definitely have let a little bit loose.
[0:06:06.3] WJ: Yeah, I had that same problem and so I started trying to manually squash before merging. And it made me so much more grateful for the squash and merge button. Because if you manually squash and then you go to merge and you're like, “Wait, I have to change this one thing.” Then you go and you change that one thing and then you have to re-squash, and then you go to merge and you're like, “Oh wait, there’s just one more thing” — and then that happens eight more times.
[0:06:35.9] MN: Yeah.
[0:06:37.3] WJ: It’s like, all of this squashing is so painful. With the button, it just automagically does it for you.
[0:06:43.3] DA: Yeah, that’s true. You could like do atomic commits and just let them live on there. Although, if they’re just all like, “Fix the lint,” then that’s not good I guess. Cool with that.
For me, the thing I’m most thankful for is, first of all, I like the ability to work remotely because not everyone has that ability.
But then, above and beyond on top of that ability is all of the wonderful software that’s been coming out that we’ve been talking about for remote pair programming and other things.
[0:07:18.8] MN: Surveillance too, I’m kidding. No surveillance apps, that’s not fun.
[0:07:26.1] DA: Yeah, I hope not, I don’t know.
[0:07:30.0] MN: Yeah, I mean — but you mentioned that — the ability to pair program. Are you using one right now that you use with your team?
[0:07:36.9] DA: Yeah, I’m still using Tuple, we talked about a couple of other options in episode 177, according to the tattoos. So you can check that out for some alternatives but I’m still on team Tuple.
[0:07:52.5] WJ: Yeah, shout out to Tuple. Although, I will say, I am grateful for Screens. So for providing some competition because I think that was a motivator for Tuple to release a video feature.
[0:08:08.6] MN: Interesting.
[0:08:10.2] WJ: — The camera feature and I think that having more players in the space will lead to better features in all of the products.
[0:08:18.5] MN: Right.
[0:08:19.3] DA: Like more awareness, more market penetration. Assuming that, you know, the market is everybody who collaborates on software now. And collaborating on software is the best way to write software. So you should collaborate more, especially since we’re so distant, it’s really nice to be able to work with people in a way that isn’t a Zoom meeting. But very specific to the needs that programmers have.
[0:08:50.5] WJ: I’m grateful for the ability to listen to music while pairing without bothering my pair because everybody is remote now.
[0:08:59.4] DA: That’s so interesting, how do you do that? I remember talking about that. Should you put music on, you could put some light piano music on and like — for the pair station. But now you don’t have to care.
[0:09:14.6] WJ: Yeah, sometimes I pair and my pair does not know that I’m secretly listening to Bobby’s Techno Mix.
[0:09:22.5] MN: Man, I don’t know how you possibly pair listening to that because I would just drive all the time. Not listen to my pair and just go — literally.
[0:09:35.7] DA: Yeah, no rules.
[0:09:38.9] MN: No rules, just fast pumping techno and Red Bull, like, “You watch me code now.”
[0:09:44.9] WJ: Yeah, although, you do have to keep the volume on your music low enough that you can hear your pair easily.
[0:09:50.3] MN: Not with that playlist baby, you just go.
[0:09:52.6] DA: You know, I never thought about this, this is what totally spice up my meetings too, you know? I could just have a little music on in Retro or something. It does kind of like change the ambiance a little bit. We talked about, like, doing design sprint. And having music for that makes a big difference because it just kind of helps you loosen up and think and change the mood like lower the pressure a little bit.
[0:10:19.8] WJ: Do you ever secretly put on, like, the Darth Vader march?
[0:10:28.8] MN: Certainly one meeting — you know it is going to go bad, you just play that in the background. Put it a little too loud and put your headphones right to the microphone. “Oh no that’s nothing — that wasn’t me, sorry.”
[0:10:40.2] DA: The Dual of Fates getting jammed up, okay ready for the fight. Can do a black flip with my double light saber or something, I don’t know.
[0:10:49.8] MN: There is a few things that I am grateful for. So, right now I am working with an intern at Stride. And what’s really interesting is me having to defend, like, the certain quirks that I may have in terms of my design patterns that I have instilled — I mean that I have gained over the past 10 plus years of developing. And it’s like, “Oh yeah, that’s a silly thing that I do” that I am just going to continue to do it again and you’re going to learn it now and this is how I feel.
[0:11:21.1] DA: It’s the Bobby Maneuver. You learned the Bobby Maneuver now.
[0:11:57.5] DA: I feel that way too. I have paired with a friend of the show Jacob O’Donnell and he is perfectly fine with mutable variables and they just like —
[0:12:07.0] MN: No, yeah. No mutable variables here bro.
[0:12:09.2] DA: I was like, “No man, you could make it beautiful — pure function.”
[0:12:12.4] WJ: What about in test though? If you are doing just tests and you want to have setups.
[0:12:18.2] MN: No, if just to see like if you want to have, you do a let at the very top before each set it up like that kind of stuff that’s fine but you know but then —
[0:12:24.5] WJ: Yeah but if you are in production code, no. No let.
[0:12:26.8] MN: No but hear this. This is the example quirk that I have. Inside the test, the initial let block before each will have the thing that I instantiate with the let. But in my test, if I am going to overwrite it, I have to do it with immutability. Like, I do the spread operator when I am updating the object that is mutable in the first place. It is really, really weird stuff. So even though —
[0:12:52.6] WJ: — So I think that, I think, is good practice.
[0:12:55.2] DA: Wait but wouldn’t you just do it as a mutable, then, in that test setup and copy it?
[0:13:02.2] MN: Yeah, no, that is what I am saying. So do a bit of both at the same time. It is just like — that, for one, is one of the things that interns are really interesting because they’re going to ask, why, like, “Why do you do this? Why should I do this? Why am I picking up this practice?” And it’s like, “That’s just what I do man. This is what it is, I put the let at the top but I’m treating it like a cons down here and that is what we are doing.”
[0:13:25.2] DA: Right.
[0:13:25.6] WJ: Oh yeah, okay. So you’re just saying that it is redundant.
[0:13:28.4] MN: Yeah, that whole conversation of ‘why do certain things’ is really, really interesting. And I think the other, going back to what you mentioned William about doing the squash button on GitHub, I am also very passionate about Git history. So I use — I am so thankful for the Git Rebase-I because you can do really powerful things on like, “Oh, I have a web commit, like, what do we do with these three whips that we do the thing? Yes, let’s fix that all up. Let’s pretend that we did this the best way we could have the first time we did it.” Just constantly changing the history so that it looks as pristine as possible, I love doing that.
[0:14:07.1] DA: Yeah, he’s like “Precious young soul, no one needs to know we didn’t get here on one.”
[0:14:12.7] MN: Yes, exactly like, “Hey, we’re going to pretend like we did the most graceful elegant code as possible. There was a whole lot of whips in there but we got to fix all of that up. We can’t let anybody know, it’s a secret for the both of us.” And that’s how — and so when someone else reviews the code that’s like, “Look how beautiful we’re writing. This intern is great, we should hire him.” Like that’s why I wanted to do that. I want it to feel like that.
[0:14:32.4] DA: Top dollar.
[0:14:32.9] MN: Oh yeah and I think my last one, now I am hogging it. What is really great right now is the feedback that I get from my team when it comes to the pull request that we make. Because you know, you may work on a team and you may have a person who’s like a tech lead who, when they review your code, they hit you with that request change button. Bang, now you have to go and make those changes. You got to wait for Bobby to approve them again, like, that kind of deal.
I don’t have to deal with that and I think I am so thankful for the team that I am in right now because we’re all communicating to the best of our ability, about things that we could do to fix the code. And it is not like passive-aggressive. I don’t know if anybody has ever felt that way during a PR.
[0:15:14.1] DA: Yeah, totally just nothing but constructive comments and good feeling. And I think if there’s not a lot of friction to releasing the code, if it is easy to change it and the stories are reasonably sized. And you’re just doing a real quick turnaround, then I feel like those are things that kind of breed that kind of a situation in your pull request culture. If it takes you two weeks to do a pull request, then people are going to get a little snippy probably.
If it is like a real big deal to do a release, which is a bad thing in itself, then you’re going to get other bad things. But it sounds like you are doing it right.
[0:16:00.3] MN: Oh I’m trying baby for 2020, got to end on a good note. That is what I am doing here.
[0:16:05.5] DA: You have one thing going.
[0:16:06.4] MN: Yeah, we’ve got a couple of things going right now. Yeah, I am really thankful for those things.
[0:16:11.6] DA: Okay, do we have time for one more?
[0:16:13.3] MN: Yeah, I think so.
[0:16:14.1] WJ: Yeah, go for it.
[0:16:14.6] MN: Just do it because we got to be thankful now.
[0:16:17.2] DA: So I have been thankful for automation, like, particularly things like Zapier, which is a tool for wiring together different APIs from services with no code, kind of a block-like approach. You just kind of go through and wire things together.
[0:16:42.1] WJ: Is it Zapier? I thought it was Zay-pier. Have I been saying this wrong for years?
[0:16:46.9] DA: Oh I don’t know, not sure. Hit us up if you work at that company that starts with ‘Zap’ and then ends with ‘i-e-r.’ Or it is maybe more of a regal sounding ‘Zay-pier.’ Yeah, let us know if we are saying it wrong. But yeah, I was talking about it with a colleague of ours who isn’t a programmer and he was showing me all of the cool stuff that he put together with this tool and I was like, “Dude, you are a programmer.” I love this kind of like lowering the barrier of entry to doing programming-like stuff.
And I get a lift from it because I can put together things that make it easier for us to put on the podcast. And you know maybe one day we’ll talk about this and how a lot of different odds and ends things are automated for us so we can be as lazy as possible and virtuous as possible as programmers. But I am thankful that there is more and more space for people to contribute with this kind of low-code, no-code automation kind of world. It’s amazing.
[0:18:05.9] MN: Yeah, no that is pretty dope to have individuals still contribute to this type of automation. Because people would often say, “Oh programming is hard, like, I don’t fully understand it.” And then have all of these different systems that are in place to make their lives easier. That is pretty much some of the things that we do as well as developers.
[0:18:25.0] WJ: This reminds me that I am grateful for all of the resources for people who are just starting out getting into programming. Because it means that I have all of these friends who get into programming because they find tools like Codecademy or freeCodeCamp or whatever. And then there’s this other line which we can connect. It’s like, “Oh you code now. Let’s do some code together.”
[0:18:50.6] MN: Yeah, it’s awesome.
[0:18:52.3] DA: Everybody get in here.
[0:18:53.8] MN: Everybody codes, let’s get this coding thing down. That is a good amount of things to be thankful for and —
[0:19:01.3] DA: Sufficient and good.
[0:19:03.2] MN: You know I am thankful for all of those things. All those things were spot on. I am sure we may have missed quite a few and I am really curious to hear — what would other people be thankful for. There’s a lot of things that are happening in the tech space right now, I’d be really curious to hear those things. And to I wonder what I am thankful for those things too. You know where to find us, you know where to find me. I am probably going to be having my leftovers that’s for sure. We are talking about I’m going to whip up some food right now.
[0:19:28.3] DA: Yeah, tweet at Mike and he’ll send you a photo of his leftovers, I guess.
[0:19:33.7] MN: I’ll definitely put it, yeah. Tweet at me and I will show you what leftovers I am currently having right now.
[0:19:41.5] DA: Is that invasive, like, too much in your life?
[0:19:44.6] MN: No, don’t worry. Hey, if I get a tweet I will show a plate.
[0:19:51.3] DA: I’ll match that. I’ll match that gift.
[0:19:53.8] MN: Do a matchup photo. William, you got to get on this. You got to show us what meals you’re having. If they tweet at you, you gotta show a meal.
[0:20:03.7] WJ: Mine are not going to be much less like comforting and full of Thanksgiving goodness and much more full of weird octopuses and stuff.
[0:20:12.3] MN: That’s fine. The people are for it, people love to see it.
[0:20:16.3] DA: Love it, I want those rice cakes, those spicy rice cakes.
[0:20:19.3] MN: So good.
[END OF INTERVIEW]
[0:20:22.3] MN: Follow us now on Twitter @radiofreerabbit so we can keep the conversation going. Like what you hear? Give us a five star review and help developers like you find their way into The Rabbit Hole and never miss an episode, subscribe now however you listen to your favorite podcast. On behalf of our producer extraordinaire, William Jeffries and my amazing co-host, Dave Anderson and me, your host, Michael Nunez, thanks for listening to The Rabbit Hole.
Links and Resources: