Coding Blocks - Google’s Engineering Practices – Code Review Standards

Episode Date: May 11, 2020

We dig into Google's engineering practices documentation as we learn how to code review while Michael, er, Fives is done with proper nouns, Allen can't get his pull request approved, and Joe prefers t...o take the average of his code reviews.

Transcript
Discussion (0)
Starting point is 00:00:00 You're listening to Coding Blocks, episode 132. Subscribe to us and leave us a review on iTunes, Spotify, Stitcher, and more using your favorite podcast app. And stop trying to mess me up. I see you guys talking and mimicking me and mocking me as I do this. It's not going to work. You didn't trip me up. I don't know what that outburst was about.
Starting point is 00:00:24 We'll just keep going though. So you can visit us at codingblocks.net. We can find show notes, discussion, and a lot more. And if you have questions and rants, you can be sent to comments at codingblocks.net. So if you speak in a language other than English or any known language to man, then nobody else can try and act like they're speaking like you. So follow us on Twitter at codingblocks or head to www.codingblocks.net and find all our social links there at the top of the page. With that, I'm Alan Underwood.
Starting point is 00:00:52 I'm Joe Zacht. And I'm Michael Outlaw. This episode is sponsored by the University of California, Irvine Division of Continuing Education. One of the top 50 nationally ranked universities, UCI offers over 80 certificates and specialized programs designed for working professionals.
Starting point is 00:01:12 And Datadog, a cloud-scale monitoring and analytics platform that unifies metrics, traces, and logs so you can identify and resolve performance issues quickly. All right, and hey, today we're talking about some Google engineering practices, and we're talking about some Google engineering practices.
Starting point is 00:01:27 And we're going to tell you what that's about in a minute here. But first, we got a little bit of news. And as we do, got to say a huge thank you for everyone at Letras Review. We've got a couple names to shout out here. From iTunes, thank you, Jay Barger, Podcast Devourer. I dig it. And Darachi, thank you so much.
Starting point is 00:01:47 And from Stitcher, we have Diamond C. Wait, Damien? Damien C? Damien C, yeah. That would probably have been a better way to read it the first time. Whatever. We all know that names are hard.
Starting point is 00:02:04 Proper nouns, man. Just all all proper nouns can we do away with them uh we're gonna just go by goods i think wouldn't it be nicer really it could be like star wars the clone wars man you know just like everybody go by a number man i'll pass you don't understand there was a day not that long ago we spent all day trying to figure out why the heck something wasn't working and turned out that the the guids were slightly different there was like one number difference in like the middle of them in the middle i remember that like we spent hours scratching our heads trying to figure out what was wrong and nobody picked up on that one it was like an A was an O or something. They were super
Starting point is 00:02:45 close. I'm saying, let's just go by numbers. You can call me fives. How's that? I'll go by fives. You remember in that case it was the Java library we were using, UUID, you would take in a seed and then generate a number, but then it would like or
Starting point is 00:03:01 two of the bits in the number. So two of them were always off. But we didn't realize because it always looked like we thought two libraries are generating goods the same way but one of them just like always generated the good and then slightly tweaked it so frustrating man it's insane all right so my apologies then to damien for messing up your name and with that let's get into discussing the Google engineering practices. So this was a, uh, I'm like 99% certain that this was something that micro G shared with us in Slack that I've been saving for a while, but, um, it's possible that I might be attributing that wrong, but I thought it was at the time. At any rate, we'll have a link to this document or this set of documentation, basically Google's engineering practices.
Starting point is 00:03:51 There's a lot of great content in here, and we're going to start with code review and their developer guide to how to perform them. So before we do this, are we just totally abandoning designing data intensive applications? We just taking a break from it for a minute. Is this like a Ross and Rachel thing? We're on a break. I think, I think we're on a break because that stuff was deep. So we'll probably go back to it, but yeah. All right. So, so the first question is what is a code review? I don't know. Isn't it one of those things where somebody sends you a link and you just go click approve? Well, I mean, the reason I say I don't know is because depending on who does it can be very different.
Starting point is 00:04:38 Yeah, so we'll probably cover some of that. The definition that they gave on their page was when somebody other than the author of the code examines the code that, I mean, it's pretty simple and that sort of makes sense, right? Sounds complicated. Depending on who reviews it, it can be. Um, so then the next question is, but why? Because I mean, you guys, I know you remember the days when there wasn't any such thing, right? Like you wrote some code and then you deployed it out somewhere. Or you were like, yo, could you give me the link to production so I can copy these files up? You know, there was a day where that was how things were done. I mean, think 20, 25 years ago, you didn't even have commits or pull requests. Like that wasn't even a thing.
Starting point is 00:05:23 You're just like, okay, I wrote some code. I checked that file in and have at it. Trust that I did a good job and then it works. Well, in the days of SourceSafe, remember those, it wasn't even your stuff needs to work. It was just, hey, yo, check it in before you leave so that the files aren't locked so that when I come in tomorrow, I could get them, right? Yep. Yeah. And source safe is exactly what I was thinking of as I described what I was just talking about. Yeah. Yeah. So, so yeah, the real reason here is we're long past those days now, right?
Starting point is 00:05:56 Now the day is, hey, we want to make sure that whatever code is being checked in is actually maintaining or improving the standard of quality of the product as a whole, right? I do want to just go back one moment, though, because there's probably some people who are new to programming that all they know is the wonder of Git. And so they're like, wait a minute, I don't understand why Visual Source Safe was such a problem. So I want you to just imagine real quick for a moment. If you, if, if when you needed to check out code,
Starting point is 00:06:27 then it worked the same way that going to your local library worked. And being that like, if you check out that book, no one else could check that book out until you returned it. And that's the way visual source safe work worked. When you checked out that file, no one else could check out that file and modify it until you returned to the file until you checked it in.
Starting point is 00:06:46 So brutal. It was so brutal. It really was. And that's our 1990s in review. Right. All right, so what to look for then when we do a code review. So we've established that we want to do a code review to keep the quality of our code high and to improve upon it. But when we're asked to review a code, what should we look for? Yep. Yep.
Starting point is 00:07:15 And looking at the list here, definitely it's nice to kind of have a list. I'm just wondering how nice it would be to have a checklist that you kind of were able to go through and and kind of rate this stuff is uh if you don't keep this stuff in mind it can be easy to just kind of look at it and be like i don't see anything obviously wrong moving along so it's nice to kind of have a formal structure for this yeah i mean we'll go through the structure real quick but it is even some of these items though before we get to it i'll say that like even when i've done code reviews, some of these, I'm like, I don't know how much time I would be willing to spend on some of these areas that they, that they asked for. So one thing that's curious is I haven't seen in this documentation,
Starting point is 00:07:54 like how much time they expect a reviewer to spend on a code review. So I think we should do this because I think where Joe is going with this is, and we've done this in the past is maybe as we hit each one of these bullet points, just say how important it is to us, high, medium, or low. Right? And because I think that's a good way for us to just throw in what we feel is important when we're looking at one. Okay. So up first is design. Oh.
Starting point is 00:08:21 Right? Is the code well designed and appropriate for your system? What does this even mean to you guys? Yeah, that's so nebulous. That's such a big one. This is vague. Yeah. Yeah, like well-designed?
Starting point is 00:08:36 Like, wait, I'm supposed to go and rethink and re-engineer? Like, well, you know, you used the wrong data structure here when this other one would have been more appropriate. Like, I don't know, maybe some of those will jump out to you, but this is an example of one of those where it's like, how much time are you really expected to spend on this? Like, oh, you didn't recognize that this was a graph problem and, you know, you should have solved it this way. Like, yeah.
Starting point is 00:09:01 I think this one might be more along the lines of design patterns, right? Did you use an appropriate design pattern? Was this clearly a factory thing? Was this clearly something that should have been a template design pattern? Something like that. So I don't know. I feel like that's kind of the stuff you'd be looking for there. And by the way, so I said I was going to share this on the show.
Starting point is 00:09:21 The irony is when I started reading this, I just did my first major pull request into an open source repository, like a big one out there. And this stuff drove me crazy, man. I put in this stuff that I was like, oh man, this makes it better. This improved the functionality. And I've now got 500 comments back and forth between myself and the people who are maintaining the project. And it's, I'm not even kidding. It's almost to the point where it's like, yeah, I'm just going to let this die because I really don't want to spend this much time on it. Right. But on the flip side, I kind of get that they want to make sure that they're maintaining a high quality of standards going into theirs. Right. So it's, it's a trade-off, but it can be frustrating, especially when you're like, yo, i'm giving you guys something here right like take it be happy with it um but well here's some things
Starting point is 00:10:09 that aren't in other areas is like um maybe you have some stuff hard-coded that should have been settings or maybe you kind of invented a new pattern for settings or something when there's already established pattern maybe you kind of reinvented something that's done like maybe you go out and get uh customer orders and there was already a method for getting customer orders that could have been more appropriate for your use case. Oh, so this is the design.
Starting point is 00:10:30 So I think the important part here is you're basically saying the reviewer has more knowledge of the overall system. And so they can tell you if you're doing something that you design something in a way that wasn't kosher with the way that the rest of the system works. I like that. It was like, Hey, why are you using integer primary keys here when everything else uses goods?
Starting point is 00:10:48 Like why, why break that pattern? Do you have a good reason for that? Well, we're kind of, I mean, I get your point. This is kind of skipping ahead though,
Starting point is 00:10:56 to like picking who should be your reviewer. Right. Yeah. And it would be like, you know, uh, somebody who is the, like the owner that would know would be like, you know, uh, somebody who is the, like the owner that would know, like be able to know, uh, you know, I mean, we'll, we'll come back to it, but
Starting point is 00:11:11 you know, that's kind of where you're going at it with Joe. So, so how important is this design thing to you guys? Like you outlaw, where, where do you rate on this high, low hmm i mean it's definitely not a low uh it is it is tough to like you know for that person to always know like what was the best way to attack the problem so because of that i would say it would rank medium to high somewhere in that range what about you joe i i would say uh i would say hi okay i'm actually high on this one too based off how joe kind of brought this to the front right like why are you not following the patterns of the rest of the product and the code here whatever i think that's super important to keep the complexity of your project down right and, and make developers be able to work in the thing properly. So that one's good.
Starting point is 00:12:06 So we're, we're all basically high or medium high on this one. So the next one that we have is functionality. Does the code behave as the author likely intended is, is the way the code behaves good for the users that are using that code. So functionality, what do you guys think? High, medium, low? I'm going to go high with this one.
Starting point is 00:12:31 I mean, if it doesn't work right, then it doesn't work right. And I've definitely seen code checked in where the equal signs or whatever, it's like checking the wrong thing in some weird case. I'm staying here. High. If it doesn't do what it's supposed to do, then don't let it in the code base. Yeah. I mean, this one goes let it in the code base. Yeah.
Starting point is 00:12:45 I mean, this one goes without saying. This is automatically a hi. I don't think anyone would ever question. It's actually shocking to me that it's even a bullet point here, to be completely honest with you. So you needed to add a button that does X. Did you add a button that does X? No. Okay.
Starting point is 00:13:01 Well, then this doesn't go. Yeah. I don't get it. Well, I mean, keep in mind this is a Google documentation and they did hire Owen Wilson and Vince Vaughn. I saw. There was a documentary movie called
Starting point is 00:13:15 Interns where you can see their escapades trying to get hired at Google. So it makes sense why they would have to spell that out. Did you see that? I tried to watch it. It was not funny.
Starting point is 00:13:29 Yeah. I didn't watch it. I wanted to watch it. I tried to. So next up we have is complexity. Could the code be made simpler? Would another developer be able to easily understand and use this code when they come across it? So what are you guys' take on this one?
Starting point is 00:13:47 Low, get good. Okay. So, so compared to the other two, compared to the other two, I, I would definitely say it's more like a low to medium kind of range.
Starting point is 00:13:59 So, um, yeah. Okay. So we're kind of at yes, yes, yes on this one. I, too, think that this is a low. However, depending on whether somebody was just trying to be clever in what they were doing, you know what I mean? Like, there can be a case where complexity makes sense for performance or things like that, right?
Starting point is 00:14:25 So, I'm things like that. Right. Um, so, so I'm fine with that. And I think that if people don't understand it, then yeah, level up, right. Like be able to understand the code. And I hate it.
Starting point is 00:14:35 I hate being that way, but this one to me is as long as it's not intentionally trying to be clever, which I have seen code like that, then I think this is a low. Yeah. It really depends on like what you're doing. That's, that's complex. And that's why I ranked it like low to me. And like, if you were doing something like really, really complex unnecessarily, so then I might be more willing to, uh, you know, call you out on it. And like, like with the purpose of like, no, no, no, you really, this is way too much.
Starting point is 00:15:06 You know, you need to fix this before we merge this in. But otherwise, yeah, I might be willing to let it go if it's just like, Oh, I wouldn't have done it that way, but whatever you want to factory hammer,
Starting point is 00:15:16 hammer, hammer, or hammer factory, factory factory. You know, what jumps out at me is like the code coders that you've seen where people try and solve a problem. That's obviously, you know, it should have been a 20 line thing and they do it in a single line with 80
Starting point is 00:15:29 lambdas and okay like you went too far that that's that's kind of where where i feel like that's where you can basically say yeah don't do something like that nobody can read it um but outside of that kind of stuff meh yeah what about uh somebody says i don't need to bring in a third party i can uh write a dependency addiction framework just for the little pieces that i need that would be simple and easier to maintain those people get slapped hard that's got to be a different deal there that's more along the lines of design right yeah yeah i i we can't even talk about that. My blood pressure is going to go up.
Starting point is 00:16:08 Um, so this one, the outlaw, I think you should read this one off. I think this one's sort of your wheelhouse here. Tests. Does the code have correct and well-designed automated tests? I would rank this one as high.
Starting point is 00:16:24 I, I, I like the idea that you have Tess with your kit. Yeah, of course, Wink. I definitely also rank this one high. Wink, wink. So I'm on this one too high. And it's funny because I've always known the importance of Tess, but it's definitely been within the past couple of years where it's actually sunk into something that I feel like needs to be practiced.
Starting point is 00:16:50 This is actually something, by the way, that drives me crazy with the PR that I put in the other day is I put one in. And the thing that I did, you can create 500 different tests for this thing. It's dealing with dates. Okay. And so just consider the two episodes that we did on dates and date formats and, and trying to convert from one to another and all that kind of stuff. And so I had like, I don't know, 10 tests in there and they're like, well, maybe you should test more. And I'm like, what's the limit? Like, I don't really know what I'm supposed to do here. But yes, I still, I'll rank this one high, but it's definitely frustrating because there's some things that just aren't that easy to do. You went from zero to 10 and your response is maybe we should have more.
Starting point is 00:17:37 Man, that's where I would have gotten frustrated. You know, I mean, whatever it is, what it is, like I said, they're trying to make sure that their code quality stays good. And, you know, I mean, whatever it is, what it is, like I said, they're trying to make sure that their code quality stays good. And, you know, I'm trying to do my best. So. All right. So we've all agreed on all of them so far. All right. Naming.
Starting point is 00:17:54 Did the developer choose clear names for variables, classes, methods, et cetera? Mike. This one is a low in my mind like I mean if you gave it some awful names this the reason why I gave this one low is like I might call it out and be like wait what why would you name it that
Starting point is 00:18:15 but I'm not going to stop a pull request from being merged in just because you know you use the variable X and I'm like why can't you give it a more meaningful name? Or even if you called some class a helper and I'm like, I really hate the name helpers and managers and things like that. But I'm not going to stop the pull request for it.
Starting point is 00:18:38 What about you, Joe? Yeah, same deal. Some people are really strict about how things are named and get methods should only get. I mean, there's people that are really strict about like how things are named and like get methods should only get and stuff. And, you know, I agree with all that. That's all good. It's all good stuff. I care more about other things more. So I'm going to put this one as like low medium.
Starting point is 00:18:55 All right. I'm going to break the trend here. This one to me is medium straight up. I think like X. Yeah, probably not going to care. Right. But if you have a method name, that's public, that, that things are going to be using, especially APIs, that kind of stuff, I'm absolutely going to hammer you on something that, that is not
Starting point is 00:19:16 clear, right? Like this thing says that it saves, what is it saving? What are you doing? Like, like there will be certain things. So again, this one, it's not going to ring the bell on a bunch of stuff, but if, if it's obvious, then it's a medium for me. All right. All right. Comments are the comments clear and useful. This should be an interesting one.
Starting point is 00:19:41 So this one kind of feeds into an upcoming one in my mind, but for me, uh, like I'm assuming they're talking about code comments, not the comments on the PR. I'm assuming they're talking about comments in your code, right? Yeah. That's what I assumed too.
Starting point is 00:19:57 Okay. And for the most part, I've kind of grown to this style. Like I would prefer you to not need the comments period. Like if you're going to put a comment in there, there better be a really good reason why it was needed. The only comments that I would like to see in it would be summary level documentation comments that an automation tool can pull out and create, like here's an API documentation for you. Those comments, fine with those,, those should be clear and useful.
Starting point is 00:20:25 Yes. But the other kind of comments I'd prefer to not see, you know, they aren't in line in your method, you know, which to me goes back to the naming and why the naming so important. And that's why I made that one a medium. Cause if you have a good name for your method,
Starting point is 00:20:40 your classes, that kind of stuff, your comments should be less necessary at that point. And keeping in spirit of, you know, things that we've learned from Uncle Bob is that if you keep your methods small to where you can just easily look at it and reason about it because it's only a few lines long, then you shouldn't really need a comment in a short method. So outside of public API type stuff, like what you're talking about, things that generate Java docs and that kind of thing, you're kind of a low on this one.
Starting point is 00:21:14 Well, because of the other, because of the summary level documentation, I'm kind of like torn on how to rate this one. So I'm guess, I guess I would call it... Yeah, I guess I'll go with low. Low, sure. Okay. Joe? You know, medium, I don't love comments, so if I see a bunch of useless comments or if I see commented out code, then I'm not too
Starting point is 00:21:37 keen on that. But yeah, it's not the worst thing in the world. There's definitely been times that I've read comments in code and been thankful that they've been there. So I could let that one slide low. All right. Yeah, I think I'm also a low on this one. I think after going through the Uncle Bob thing with the whole comments and all that,
Starting point is 00:22:01 and like you said, smaller methods, all that, I too would rather the code be easier to reason about, but I also do agree. And this is one thing that drives me crazy about most open source projects is sure. They'll put in comments that create your Java docs that are, that are just one step away from being useless because they'll tell you, Hey, there's a variable here. It says file. Okay, it's a file name. Of what? What is it saving?
Starting point is 00:22:27 What is this? Or it'll be a method named like get customer ID, and the documentation says returns the customer ID. And you're like, really? Of what? Yeah, yeah, totally. So if you're doing public API stuff, I would probably bump this up higher. But in general speaking, I would go low here.
Starting point is 00:22:48 Well, I mean, like by public API, though, you really mean like if it's summary or Java doc kind of documentation. It doesn't mean that it has to be an API that's made available to the public. Yeah, yeah. That's what I mean. Exactly what you said. Okay. All right. So next up, style.
Starting point is 00:23:06 Does the code follow our style guides? I'm sure that we might be all over the board on this one. If you have a published style guide and you've gotten people to agree to it, then it better fit the style guide. If you don't have a style guide, then no one gets to say crap in my opinion. You don't get to enforce your personal style preferences unless you've all agreed as a team to go with one okay so this i think the way that this thing is worded assumes that there is a style guide so does the code follow our style guide so in this case how important is this to you when a pull request goes in hi okay this google absolutely has a style guide and they link to it in this, in this article.
Starting point is 00:23:47 So what about you outlaws? Is this a high, medium, low? Um, well, okay. So here's the thing.
Starting point is 00:23:58 Like personally, if I'm reviewing it, it's kind of like a low. And the reason why I say that is because you can catch this with automation tools to where you don't have to like, I don't have to like memorize the style sheet, the style guide in my head. And then,
Starting point is 00:24:16 you know, look, cause I've definitely had pull requests that I've submitted to other repos before this. Like, Nope, you didn't follow the, uh,
Starting point is 00:24:24 the style guide. So it got rejected. And I'm like, Oh man, what did I. Like, nope, you didn't follow the style guide, so it got rejected. And I'm like, oh, man, what did I miss? And then, you know. So I'm kind of like, for me as a person to look at this one, I look at it as low. And I think you said medium, Joe? I said high.
Starting point is 00:24:37 You said high. If you have a style guide, yeah. I'm sorry. So I hate, like, if your code base at all looks the same, like, I remember a time when we had a bunch of variables that were named me and JavaScript to represent the scope. And regardless of whether or not you like that variable name, it was there everywhere.
Starting point is 00:24:52 And one person came in, decided they didn't like it, and so they did self. Right. And this particular framework made a lot of use of that. And you would see self, self, self. And so you always knew when you were looking at their code. And so it was just annoying to me to see, like, oh, the function here above it is me. The function below is me.
Starting point is 00:25:10 Everywhere in this code is me. The function in between is self. So, yeah, I don't know. It felt like a big F you from that person to say, you know, like, I'm not doing it your way. This is the way I like it, and I don't care about you. But hold up. You just said you were low on this a second. No, so he was like you said you're high all right yeah my bad yeah i'm a high if if one person or a minority of people are flouting the accepted rules and i think
Starting point is 00:25:33 it's yeah not cool okay so on this one then i'm probably splitting the difference i'm a medium for for both the reasons that you guys said. So one, there is automation tools, especially for typed languages that can catch most of that. And it will actually fail the build. Right. So from that regard, I shouldn't be looking at the PR if it hasn't passed the build. Right. My opinion. Don't send me the pull request until this thing's passed the build.
Starting point is 00:26:02 So that's one. On the other side, though, there probably are some tooling, like, I don't know, SQL. I'm not sure if there's a bunch of style guides that are enforceable for things like SQL, that maybe it's not. But here's where I'm toward, and this is me being a jerk. Like, if somebody makes a style guide and they tell me that you have to do Hungarian notation, I'll be like, no, I'm not doing it, right? Or the type where they put the type at the front of a variable, like, I'm not doing it. Right. Or, or the type where they put the type at the front of a variable. Like I won't follow it. I refuse to. Wait, that is Hungarian notation there, right? Is that Hungarian? Yeah. Like I, I will try and sneak in and change the style guy,
Starting point is 00:26:35 but yeah, so I'm probably a medium on this one. I think it's important that people follow at least with the conventions that have been set. Yeah. Yeah. Yeah. And that's a, yeah, I guess it's important that people follow at least with the conventions that have been set. Yeah. Yeah. Yeah. And that's, yeah, I guess it's if everyone doesn't agree on the style guide, then that's kind of a different story. Right. I mean, at some point you just got to, you know, commit and move forward, but still.
Starting point is 00:27:01 And then the last one that we have here, documentation. Did the developer also update relevant documentation with whatever the code was that they wrote? Hardly ever. No, no they don't. Maybe it's important, but they don't. But how important is this to you? I guess if it's a public API or something, if that's really what we're talking about, then it's super important. So if the documentation matters at all, then it's probably very important. So it's a high to you in some cases. If the documentation matters, which so rarely does. Yeah, it's a tough one.
Starting point is 00:27:31 What about you, Outlaw? I'm going to go medium. I mean, like it really is going to vary by project. If your project already has good documentation that is being shipped with it, then yes, you would need to update it as you change things. But more often than not, like the projects that I'm working in, you don't have that luxury. So this isn't a thing. This doesn't come up.
Starting point is 00:27:59 Because it's not like the developer is shipping the documentation with it, is my point. Right, right. The apps that we're writing, the code's not being used developer is shipping the documentation with it, is my point. Right, right. The apps that we're writing, the code's not being used. The application's being used. So it's a different thing. For me, this one's tough, right? Like if I'm writing something as a developer that other developers are going to use, this is a high to me. Because this is where I feel like Microsoft kills it.
Starting point is 00:28:23 Like they are so good. If you go to a Microsoft documentation page for how to do some code, typically they'll have the code there. They'll have the syntax. They'll have the variables. They'll even have some nice human written descriptions of what they are. And then they'll have some examples. That, to me, should be the standard that everybody should shoot for when developers are going to be the consumers of the documentation. Oh yeah.
Starting point is 00:28:49 They've set the bar high. They set the bar super high. And that's where I get frustrated with open source projects in general is like, there's this, we're building something, you know, go dig through the code and figure it out. Right.
Starting point is 00:29:00 And I mean, it, it raises the barrier of productivity to extreme levels when you're digging through tons of java code or tons of c-sharp code to figure out how to do something right so so to me this one's a high depending on on who the consumer of that documentation is did you know that google also has a big guide on technical writing no same website no yeah i'll put a link in the show notes cool so so you were a high on this one yeah i was a high on this one all right so i've been taking some notes here and uh my my uh oops
Starting point is 00:29:42 wait where'd i go? Lost my mouse. I, you were like a little bit more optimistic about like, Hey, we all agreed on these than I was. And by my count, we didn't. So looking through it now, uh, wait, that can't be right. Google, you messed me up. We matched on like five of them. I want to say five of the eight or something. No, no, we did.
Starting point is 00:30:08 Really? We only, we only all agreed on three of them. We agreed on functionality tests and comments. We all said we were all basically the same. I think you had said like medium high or something and we were like, hi. Oh, so you're making those distinctions. All right. Well, yeah, because that counts, right? Well, we were supposed to choose three. You went and changed the rules on us. Well, yeah. Refer back to the functionality
Starting point is 00:30:36 and whatnot. Our style. See? See the style. I was like, no, forget it. I will use self. And that was really awkward when you were talking about me there, Joe. Yeah, we only agreed on functionality where we all agreed that was high, tests where we agreed high, well, I was going to say it was always two to three, but there were two of them that we all completely disagreed on. Uh, so the, the ones that we, the three of us completely disagreed on were naming, uh,
Starting point is 00:31:17 where you, Alan was a medium, Joe was a low to medium and I was a low. And then style was the other one that we all three had a different opinion on. So Alan, medium, Joe, high, and me, low. But the other ones that we didn't agree on, it was usually like two of us were on the same side and somebody else was the odd man out. Cool. So the next up we have is how you pick the best reviewers for the code.
Starting point is 00:31:49 And this one's interesting. And I mean, I think we all three do do similar things on this, but the first is get the best reviewer you can. And that basically means someone who can review your code, who has the knowledge and can do it within the given timeframe. Right. Yeah. Yeah. I think that's, that's something I definitely, uh, am a big believer in. So I don't like the idea of throwing it out and just saying anybody,
Starting point is 00:32:17 but I mean, don't get me wrong. I do that all the time, but I, uh, I try not to, if it's anything less than, you know, if it's anything more than trivial. Right. Yeah. I mean, that's the thing is it really depends on what the pull request is. If it's a pull request that is really minor, then I don't care. Let everybody get a little bit of understanding into how the system works, even if it's a part that they're not, you know, intimately familiar with, right? You know, if it's something, if the pull request is something simple as like, you know, you, I'm trying to think of something like really simple, but like maybe you renamed a variable, for example, like Alan didn't like my previous one.
Starting point is 00:32:57 And so, yeah. Or there was a typo. Yeah, sure. There was a typo in the UI. And so you correct that. Then fine. But when it's a decent pull request where it has functionality in it, then I definitely go after a reviewer who is most knowledgeable in that specific area or maybe most recently familiar with it because code evolves too.
Starting point is 00:33:23 So the person who might have been like the original author and, and owner of it, you know, two years ago might not know squat about it today. Right. Right. And this is, this is one of the things that they point out here.
Starting point is 00:33:37 So the best reviewer is the one who can give you the most thorough review. And to your point, that may just be whoever's most recently been in the files, right? Not, not the original creator or whatever. It's kind of on you. Now, one of the things that they said about this, and this was interesting, I didn't dig into it, is they said this may or may not be somebody that's in the owner's file. So it sounds like they have some sort of cataloging of where they put people who are the owners of certain portions of a system right
Starting point is 00:34:06 and and i know the three of us have talked about this with the companies that we've worked with over time because on big systems it can be sort of a pain in the butt to find out who uh hey who owns this over here and and if you got 50 people on a team that's a lot harder than if you've got three people working on a team. Right. So, which way everyone's like, nah,
Starting point is 00:34:28 not me. I'm busy. Right. Right. So I don't know. I didn't, I didn't dig into that one, but that is interesting that they said it may or may not be something in the
Starting point is 00:34:36 owner's file. So, you know, you kind of got to go find basically what they're getting at is it's sort of on the person who coded it to go find the right person to do it. Like when Outlaw said that, or I think it might have been Joe said, you know, sometimes I'll just throw it out there and be like, hey, whoever approve it. And what we're talking about is like maybe you're on a system like Slack or Hangouts or Microsoft Teams, and you'll just throw a pull request link out there and be like, hey, somebody go look at this, right? When it's something more important than it's not, Hey, let me throw this into a public lobby.
Starting point is 00:35:08 Let me throw this to Joe Zach because I know that he worked in this code last week. I need him to look at it. Yeah. And their next point here too, is that like different people might be needed to review different portions of your changes. And this one actually hits close to me, like, you know, close to the heart for me, because it's actually a pet peeve I have with, um, so, you know, we use Azure DevOps and I love Azure DevOps. There's a lot of things that I love about Azure DevOps. It's it, it, you know, it, it makes a lot of things in your life simple, right? But one of the pet peeves that I have is that you can set up a policy so that when you do want to create a pull request into a particular branch, you can say, hey, the pull request will require X number of reviewers before it can be approved
Starting point is 00:36:02 and merged into that particular branch. Like let's say you wanted to merge into master, right? And you know, you might, you might say, okay, fine. Let's say you have to have some kind of a branch policy on it to exist. And, but if you do have a branch policy, then that means that you as the creator of the pull request can just say, Hey, you know what? When all of the branch policies have been met, auto-complete my pull request and merge it into master, right? All of that sounds great and wonderful, and it is. But where it falls apart, in my opinion, is in the case where it's like, okay, let's say that I know that I want to have multiple people review this pull request because it touches a couple different pieces. And so maybe I want to have multiple people review this pull request because it touches a couple different
Starting point is 00:36:45 pieces. And so maybe I want somebody who's, you know, more familiar with the data portion of our application and like, you know, the rules about like how we how we get to the data, what data is available for what reasons, like, am I even adhering to the standards of like, how you know, I'm accessing the data. And then maybe there's like a, you know, somebody else from like a front end tier that I want to have review some of it and some of it from a middle tier. Cause you know, as full stack developers, we we're, we're committing pieces that touch all parts of the system. Like that's kind of in our job title. Right. Right.
Starting point is 00:37:20 And, and so you might want to have like in that case, three, three different reviewers. Well, if you have a branch policy that requires fewer than that, you can't, as the author of the pull request, say, hey, do not automatically merge my pull request in unless all of these people that I suggest approve it. Because if any one of them rejects it, I don't want it to automatically be approved. But instead what happens is let's say that the policy was two people are required to review it. And if they, if they approve it, then it automatically gets merged in and I have a sign and I want three people to review it. Well, the first two to review it, boom, it's done. And then the third person comes along. It's like,
Starting point is 00:38:04 well, why did you even ask me to look at it? It's already merged in. Yeah, basically what you're saying is you can't override the behavior on a single PR. You set the policy for that branch, and that trumps everything. And that does kind of stink because I've definitely run into that before. You could turn auto-merge off, but I like that. Well, you can. Yeah, right.
Starting point is 00:38:23 So that's the alternative, right? That's how you get around that lack of ability to override is instead you say, well, I just won't turn on auto complete, right? But now that's kind of, I don't like that either because then it's like, hey, what if I want to give this thing to you and I'm going to be out of town and I'm going out of town, right? Like I want it to be able to auto complete whenever it's ready and agreed upon. Right. Yeah. It's definitely a shortcoming of the tool. The last thing that they mentioned here that I think is important. And I think all three of us probably do this as well is if the best person isn't available because they're swamped,
Starting point is 00:39:00 they have other things that they need to do. You should still CC them on whatever the CL is, which by the way, in all of this stuff, we're talking PRs. So pull requests, that's sort of a get term, I think more or less, maybe it's a more standard universal type term, but in the documentation, they refer to everything as a change log. So a CL. Change list. That's right. Um, so they're just saying that,
Starting point is 00:39:28 Hey, if, if you can't find, like if Michael's not available, I should still CC him on that change list so that he knows what's happening. And, and maybe he can't do anything before the thing gets merged in, but he might have some thoughts that you might go in and,
Starting point is 00:39:44 and after the fact, go in and change those things. Right. So it's a good practice. People used to put the changes like at the top of the file. Those are awful. I hate. Yeah.
Starting point is 00:39:57 You have like this long header file of people maintaining it. Like, you know, we added this or whatever. Yeah. August, 2016. Yeah. Michael touched this file to add blah blah i hate that it's but if your changes it like encourages you to do changes in one file rather than multiple because it's just kind of weird to
Starting point is 00:40:17 right add a change to support something yeah and you add that in 10 places yeah it's annoying yeah not a fan you don't want to be the one jerk that like breaks the chain like you see like oh man this thing goes back to like 1997 i'm gonna be the one that uh doesn't add to the top here you gotta buck the trend man yeah i've actually been that guy yep same so i guess i would have broken the comments and style portion and documentation of uh what to look for in my code review. Those are highs, man. Guilty.
Starting point is 00:40:50 All right. So next up they have is this section called in-person reviews. And I thought this was kind of interesting. Like they said that, like, hey, if you pair program to somebody that would have been qualified as somebody to have done a code review, then you can consider that code reviewed. Don't worry about it, right? That can be merged in. See, I didn't agree with this one. Did you? Oh, I totally do. I completely do. I see it so biased.
Starting point is 00:41:16 But again, it's if the person was qualified, like not just pair program with anybody, but if you were the creator or the owner of a chunk of code and you're pairing with me, then you should be giving me constant feedback during that pair programming thing. Right? Here's the reason why I don't, here's the reason why I thought this one was, um, well, I didn't agree with this one is because it's kind of like saying, Hey, you're the owner of it. Nobody has to review your code. You're the owner. No, but you got two people working on it at the same time.
Starting point is 00:41:50 Right. So, so let's pretend that one of those is an intern that's just starting and you're mentoring him and now, and now he, yeah, you're pairing with him, but you're the owner of it. And now it doesn't have to be reviewed because you're quote the owner. I still think that like, even if there were the two people and even if one of them did happen to be the owner, as you suggested, it should still go to an unbiased set of eyes to take a look at it. I can see that. I think that that's more of an edge case than the norm. So, yeah, I see your point, but I'd still say that on a large portion of the time,
Starting point is 00:42:32 this would probably be okay to merge in. Yeah, totes. I'm fine with it. No. Outlaw trusts nobody. He's got a trust nobody policy. All right. Yeah, yeah yeah and then the other one was um you can also do reviews and this one was really interesting because i've never done this you can do reviews where the reviewer can ask questions and the coder is only allowed to speak
Starting point is 00:43:00 when answering those questions so the coder can't go in there and be like, hey, let me show you everything I did. They have to keep their mouth shut until they need to answer a question. It felt like a very rude way to say it. Yeah. Where it's like, you only speak when you're spoken to, sir. Like, uh-uh, uh-uh, I didn't ask a question. Stop it. Simon didn't say.
Starting point is 00:43:23 That's right. But I kind of like it. I kind of like it because that almost puts the reviewer in the mindset of, I need to understand this stuff on my own. Can I understand this by going through and looking at it? And then if I need to ask a clarifying question, I can. Right? And so instead of somebody leading the witness, the witness can go through and find out what they need and then inquire about the things that they need some additional info on. Now, the three of us, though, have worked in it from the opposite form where like for a code review, you would have a reviewer and then you would walk that reviewer through and say, like, here's what I did here.
Starting point is 00:44:03 Here's why I did this change. And, you know, that way the person reviewing it doesn't have to like spend their afternoon trying to reason about what you did, why you did it or whatever. You could just like walk them through it and then they could immediately go like, hey, wait a minute. You know, why didn't you just use like a Bellman Ford algorithm here or, you know? They might come at it with their infinite knowledge. You should probably just get three different reviews and take the average of the approval. It even kind of makes sense to have two different people implement the work and just pick your favorite, maybe even more. If you got those Google dollars or whatever. Google dollars.
Starting point is 00:44:46 Oh, man. If you got those Google dollars or whatever. Google dollars. Oh, man. This episode is sponsored by the University of California, Irvine Division of Continuing Education. Maybe you've heard of this thing called Python. Python is one of the fastest growing programming languages and UCI's Python Programming Certificate Program will prepare students for opportunities in web development, data analytics, core software development, and a wide range of scientific and mathematical applications.
Starting point is 00:45:12 Students will learn programming concepts including programming styles, idioms, libraries, data structures, data retrieval, processing, visualization, and networked application program interfaces and databases. UCI certificates in data science, predictive analytics, and machine learning will prepare students to gain the necessary skills to land the job in data science. Additionally, those interested in predictive analytics and machine learning will learn to improve and optimize business performance. If you're looking to become competitive in the global marketplace, advance your career, or start a new one, UCI has the resources to support you on your new path. And let's face it, right now is an awesome opportunity to take advantage of remote learning. Registration is now open. Visit ce.uci.edu slash codingblocks to learn more and reserve your seat.
Starting point is 00:46:07 That's ce.uci.edu slash codingblocks and reserve your seat today. Okay. All right. Yeah. Go on to the bathroom. I got this.
Starting point is 00:46:17 Yep. Yeah. You guys take a break. Don't worry. Don't worry. All right. It's just us. So I got us crypto jacked. Don't worry. All right. It's just us.
Starting point is 00:46:29 So I got us crypto jacked. We got ransomwared. It's a bit of a problem. And this is Joe, by the way, being silly again. Allah and Alan are out of the room. And I made a big mistake. And the only way to get me out of this is with more reviews. If you can go to cuttingblocks.net slash review,
Starting point is 00:46:55 that helps us find more people. More people means more money. More money means I can pay off this ransomware and get my WordPress back. So I'd appreciate it if you go to codebox.net slash view and hook us up because yeah, everything's good. Yeah, everything's fine. Everything's fine.
Starting point is 00:47:15 Okay, good. We ready to do this? Yeah, yeah. WordPress is great. Let's do this. WordPress? Did you have a pull request? Survey says.
Starting point is 00:47:28 That's my line, sir. Oh, yeah. Sorry. Continue. All right. So with that, let's get into my favorite portion of the show. Survey says. All right.
Starting point is 00:47:43 So a few episodes back, we asked this very important question to just find out, like, how much are you like, Mike? And the question is, do you leave your laptop plugged in the majority of the time? And your choices were all the time. I don't care about the battery or no. I try to maintain my battery's life expectancy by neither fully charging it nor discharging it or no, but not because I care. All right. Let's say Joe goes first. Which one do you think is the most popular answer and by what percent?
Starting point is 00:48:31 Okay. So I remember that McDonald's won the French fry contest. Based on that, carry the one. I'm going to say all the time. I don't care. And I'm going to give it, time. I don't care. And I'm going to give it, oh, I don't know, 30, 40%. 30, 40. What?
Starting point is 00:48:53 30, 40. 30, 40%. All right. Very good. Does that mean 35%? Like, I need a percent. What's the number? I'm sorry.
Starting point is 00:49:00 30, 40%. You did it again, sir. I got that. We're good. Because I'm going to go ahead and I'm going to also jump on this bandwagon of nobody's like Mike. And they're going to say all the time, I don't care about the battery. And we're going to go with 41%. So it trumps his 30-40%.
Starting point is 00:49:19 Okay. Yeah. All right. So Joe goes with all the time with 30, 40%. And Alan goes with all the time with 41%. And the winner is... It's Alan. Of course it is.
Starting point is 00:49:41 Wow. It's probably like 70% is my guess. It was 68%. is. Wow. It's probably like 70% is my guess. It was 68%. Oh, yes. My people. Wow. How many people actually did what Outlaw does, which is, by the way, I try to maintain my battery's life expectancy by neither fully charging or discharging it. How many did this?
Starting point is 00:50:05 5%? No. Six. It was, it was more than that. Gosh, it was, I don't know.
Starting point is 00:50:15 8%. Shut up, man. Don't judge me. But you know what? That 8%, they're there on top of it. They're a really smart 8%.
Starting point is 00:50:27 All right. Let me give you guys a little story behind this. Oh, geez. Here we go. So Outlaw, who is the— Outlaw lines up his battery before he puts the— Yeah. Before he salts it. so in all truthfulness like he is the most meticulous about maintaining this stuff right
Starting point is 00:50:50 but we've both had the same like macbook pros for years with the companies we've worked with and his turned into a rocking chair well before mine did meaning the battery swelled did all kinds of nastiness right i don't know that i had ever unplugged outside of bed like but yours was swollen too in fairness the difference was i i had mine repaired two years later mine started to swell so while you baby yours i abused mine and treated it like every person should treat their computer. And mine went a lot longer before it turned into that swollen rocking chair. So, yeah, I'm sure there's some truth to this actually saves your battery a little bit. But I'm of the opinion I don't want to think about it.
Starting point is 00:51:39 And I'll just buy a replacement when it's time. So, you know, it's funny. My wife hates stuff not charging. It drives her nuts. Like my phone isn't 100% it's time. It's funny. My wife hates stuff not charging. It drives her nuts that my phone isn't at 100% all the time. So she's constantly going behind my back and plugging stuff in. Actually, I am more like outlaw. I'm not strict about it, but if I'm done with something, I unplug it. I don't need it charging.
Starting point is 00:52:02 So I'm constantly somewhere between 20% and 80% most of the time. Really? Oh, man. There you go. Dude. You don't see my phone right now. Boom. You want to guess what the percent is?
Starting point is 00:52:13 Coding blocks. 66% is in this category. 84%, actually. Mine is 100% and plugged in. Because that's what it needs to be. I don't want to think about it. My wife is constantly, I'm like, where's my phone? I know it's on the couch.
Starting point is 00:52:29 She's like, it's plugged in. Now you're welcome. That's not what I wanted. I wanted it on the couch. Oh, man. Wait, wait, wait. You have a Nintendo Switch. Do you charge that to 100%?
Starting point is 00:52:41 No, actually, I do the same thing. Actually, just right before we were coming up, she came up here and she asked for the switch because she assumed that it wasn't in its proper place charging. And actually it was for once. That's awesome. She doesn't even check there first anymore.
Starting point is 00:52:57 She just automatically asked me because who knows? It could be anywhere. For the record, my phone is at 92%. Yeah. So 66 percent of coding blocks follows my rule of thumb by not the eight percent of the people eight percenters right here no no no but i'm talking about of of the host 66 percent of this crew followed eight percent of the rest of the world who decided to vote on that. You know, I mean, I'm just saying.
Starting point is 00:53:27 We're a very smart crowd. And, yeah. Hey, listen, when your computer stops working, you'll know how to find us. I'm going to come steal your battery because I know it'll have been treated right. Well, you won't be able to. I'm sorry. Apple glues them in. I know.
Starting point is 00:53:45 God. I know. God. All right. So how about for this survey, for today's survey? I thought this would fit well with our topic here. Do you always include new or updated unit tests with your pull requests? I see Joe winking. It's like really painful to watch him drive. It doesn't look like he's really practiced at it.
Starting point is 00:54:14 Winking does not come natural to you, sir. Nope. All right. So your choices are, yes, of course, not a psychopath. Or not with every pull request, but more often than not. I mean, what kind of psychopath has the time to do it for every pull request? Or lastly, no, I rarely include any tests with my pull requests. My friends think I'm crazy.
Starting point is 00:54:42 Did we ask a question about how many people unit tested it was like 20 percent yeah nobody nobody so we're good we're gonna get 100 of those 20 that answer these questions well or hey hey give them some credit though they that that that uh survey was a long time ago they may have grown personally since then and now they do a lot more unit tests. You don't know. That's true. You know what? I am actually stunned that Joe Zack, the king of having a 40% – saying that somebody is going to win with 40% of the vote when there's two answers, calling out our math abilities.
Starting point is 00:55:24 Okay. You're going to talk to me, Mr. Babillions? Hey, these things need to scale. That's right. That's all there is to it. You can't argue with internet scale. Oh, God. We have a true or false question.
Starting point is 00:55:41 I'm going to go with true and 30%. Pretty sure I won that one, just saying. Joe, Zach, you have some epic moments that have been recorded for the internet. Your math and your cheese dust are definitely up there, sir.
Starting point is 00:56:03 Yes, they are. Although, we've gotten some interesting tips on how to get the best Dorito out of the Dorito bag. Oh, really? Yeah, Jamie from Gaprogman from the.NET Core show, his brother actually had a really nice tip for
Starting point is 00:56:19 laying the bag on its side and then souffle-ing it open with an interesting kind of knife or something in order to vertically be able to uh sift through and find the best no but dude that just that's such a mess then what you're gonna do assuming you don't eat the entire bag in one sitting like that creates another problem you're assuming you didn't. I only eat the best chips. Dude, Joe, I remember you actually posting a picture on Amazon about some Lays chips that you bought. It was amazing. I remember this.
Starting point is 00:56:57 It's still up there. It's the top review for that one, by the way. Oh, man. I want to go back and find it. What was it again? It was cheddar. It's cheddar and sour cream chips on Amazon. Let's see if it's still the top review.
Starting point is 00:57:12 Oh, the rating has dropped. So just for people who are not familiar with this, because I'm sure nobody is. I don't know that we've ever talked about it. He was probably one of the first people ever to buy a bag of chips on Amazon because who doesn't do that at the grocery store? But he was worried that when they came, they were going to all be crushed up. That was the concern. You got the UPS guy kicking the bag of chips around.
Starting point is 00:57:38 That's going to be a problem. So his review, take it away, Joe. I'm not having a good time finding because there are like several different like ways of, I don't know, just the way they have, there's like 20 different kinds of chip now for this kind of chip. Well, yeah, the whole point was he basically took a chip out of the bag. He's like, they're not broken at all. See this chip. And he had it like next're not broken at all. See this chip? And he had it like next to it. Was it your hand or your wife's hand?
Starting point is 00:58:08 It was Sarah's hand. Yeah. So I've never gotten chips delivered before. I always got them from the grocery store. And I was worried that it would be all broken. But man, they weren't. Every single chip in this bag that I got was perfect. It was like perfectly round.
Starting point is 00:58:22 Everyone was giant. Yeah. And one of them I put in my wife's hand, it was the size of a potato. It was the whole chip. You would never get that at a grocery store. UPS did better than the grocery store ever did. This was right when they...
Starting point is 00:58:35 Oh, I found it, Joe. You did? I did find it, yeah. That's awesome. This was right when Amazon first started delivering food, if I recall. We need this link. This has got to go in the show notes. Here it is. I just sent you guys the link.
Starting point is 00:58:48 Oh, wait. I'll put it in the show notes, though. That is amazing. So that I can remember to. Oh, then you guys can see my other reviews. Yeah, this should be interesting. We might have just opened up Pandora's box. I don't see it.
Starting point is 00:59:07 Do I not see my own reviews? Yeah, no, no, no. You go to scroll down to all customer images and then you can scroll down. Yours is toward yours is like one of the first like seven or eight pictures. You know, so you got to scroll down to the bottom of the list and you'll see this giant chip in a hand. Man, there are so many pictures of this. Yeah, I think that, I think Joe said, he was a trendsetter here. How do you not see this?
Starting point is 00:59:36 Really? I'm actually trying to get to, this is ridiculous. I gave you guys the link, right? I'm going to, oh, most recent. You can't go to, you have to go to all reviews. Yeah, yeah. No, just click on see all customer images. Oh, here we go.
Starting point is 00:59:50 And then scroll down to the bottom. Yeah, yeah. Click on see all customer images. Scroll to the bottom of that. And then it's on the second to bottom row. Or at least on my screen it is. You'll see this gigantic chip being held in an open palm. Yeah, man.
Starting point is 01:00:05 Look how big that is. And he says, we saved it for a while. I like how Joe still gets excited about it. Look how big that is. Look at this. Flawless execution. This is from 2013. That is amazing.
Starting point is 01:00:23 Yeah, man. Well, if you look, the new reviews aren't so kind, man. I see people talking about bugs and chips and people complaining about them being broken, man. This is at the prime. This is at the peak Amazon period, 2013. This is back when I still worked for them. That's all you know. Today's episode of Coding Blocks is sponsored by Datadog, the unified monitoring platform for real-time observability and detailed insights into Docker performance.
Starting point is 01:00:49 Enhance the visibility into your container orchestration with a live container view and easily detect clusters that are consuming excess resources using an auto-generated container map. Let's face it, guys. Like, in a Kubernetes kind of world today, you want to know what's happening inside your pods. You want to know what your containers are doing and you need a tool like data dog so that you can easily see what's going on. And it's hard, but that's okay because out of the box data dog collects critical metrics from each Docker container. So you can get immediate visibility into aggregated and disaggregated service-level traffic. So try Datadog today by starting a free 14-day trial and receive a Datadog t-shirt after creating just one dashboard.
Starting point is 01:01:35 Visit datadoghq.com slash codingblocks to get started. Again, that's datadoghq.com slash coding blocks to start today. All right. So now we are back with how to do a code review. And I guess this is where the rubber meets the road, right? Wow. We talk a lot. It's already an hour. Oh my gosh. Yeah. Oh yeah. So we'll try going any faster with that kind of talk, sir. Yeah.
Starting point is 01:02:11 I just, I looked down and saw the numbers. I was like, wow, that's crazy. All right. So we'll try and, uh, try and blow through these.
Starting point is 01:02:16 Not really, but whatever. Um, so first is the standard of a code review. And, and we said it at the very beginning. What, what is the purpose of it is to make sure that the quality of a code review. And we said it at the very beginning. What is the purpose of it? It's to make sure that the quality of your code is improving over time.
Starting point is 01:02:31 Always. This is where those, what were they? The standards that we reviewed, like what to look for. This is where that list of things come into play. Because there's going to be a set of trade-offs. And that's why when we were ranking things like low, medium, high, it's like, well, would I block a pull request for this? Like, I don't know, maybe, maybe not.
Starting point is 01:02:52 And this is why. Yeah. The first bullet points hilarious to me because developers actually need to accomplish a task. It's so true. It goes back to this PR that I have into the open source project. It's like, man, like, I don't know how many times I want to go back and forth. And I'm not trying to throw stones at these people that are trying to, you know, ensure that my pull request is perfect.
Starting point is 01:03:16 But it's also like, man, you guys are going to wear me down to the point where I'm just going to abandon it. Right. Like, I'm just not going to deal with it. And that's, you know know i hope it doesn't come to that but you know whatever yeah i mean if the reviewers are are difficult to work with like they're overly critical then you're just de-incentivized to bother right you ever see a bug in uh github and you like start reading through the comments and you see that someone's fixed it and there's a pull request and you click the link and it's never been merged.
Starting point is 01:03:48 There's like six comments going back and forth and it's never merged. You're like, oh, no. So frustrating, too. That's more often than not, too, especially on really big projects. I know that the three of us have been working with Kafka and Elasticsearch. I can promise you there's been so many bugs that you go out there, you search, it comes up in a PR, and it's just been sitting there for months. And it's like, really? Like somebody did the work.
Starting point is 01:04:14 I think that's the one thing I would say to anybody that manages an open source project. project, yo, if you expect people or want people to help improve your product, you better be willing to jump on and look at those things. Prioritize it, right? Yeah. I mean, there was some project recent, I don't remember which one it was now, where like what you were saying, there was a pull request and this one had been sitting out there for like a year that had gone unmerged. And it was like, well, if you want it to work, you just got to check out that particular branch.
Starting point is 01:04:50 That's ridiculous. Because then it's a pain over time to maintain your local version of that thing, right? Because you need the latest changes they've done, but you also need the side PR that was never done. It's ridiculous, right? Yeah. Not a fan. Go ahead. It's still the duty of the reviewer to make sure that
Starting point is 01:05:10 you're recording and you don't want to record the product and create it over time. Move them right along. It's still the duty of the reviewer. So it's just speaking to the responsibility of the reviewer. Obviously, no one wants the health of the product to degrade over time. I also like getting my code review because then if there's some sort
Starting point is 01:05:28 of problem with it and anyone wants to point the finger at me i can be like well i approved it so i mean he sucks too so you like being able to have a finger to point at somebody yeah i'm taking you down with me that's awesome that's not how get blame works, sir. Yeah, I feel like, who wrote this crap? Well, you approved it. And they do mention here, too, again, the reviewer still has the ownership and the responsibility to make sure that they're ensuring a high-quality standard, right? And it's a tradeoff, right? It's a balance. You can't expect your pull request to go in perfectly every single time. On the flip side, the reviewer should balance out even if the changes aren't perfect. Because they go on to say there's no such thing as perfect code.
Starting point is 01:06:28 There's better code, but there's no such thing as perfect. So when you're reviewing a pull request, don't hold it to some unachievable standard and say, well, I'm not going to let you merge it in until it's perfect. Yeah, I completely agree with that. Yeah. They also say here reviewers can actually reject a set of changes even if it's quality code, but they feel it doesn't belong in our system.
Starting point is 01:06:55 This goes back to the functionality thing that we all said was a high for us earlier. Like, why would code be – now, maybe somebody wrote some code thinking that it should belong over here, but really it should have been in some other layer. Right. So I totally get that. So maybe that's what it is, right? Like maybe you did something in, in the data layer that really should have been in some sort of reporting layer or something like that. Right? Like I can get that and I could see totally rejecting it being like, yo, this, this is not something that you do here, right? You need to take the same code and port it over here. And I ran into a problem I had with a JavaScript package a while ago where I was trying to do something with it. And it turned out that the code I was using had like a built-in minification step, which is just kind of weird. And I was bringing in this package for something else, and I already had a minification step. So I was doing this extra work, and there was a problem with the way they minified. So I sent out a pull request and tried to add a flag to disable.
Starting point is 01:07:55 Like, this package really shouldn't be doing minification 2. You know, like, it's just not appropriate here. And I never heard back on it. I don't know what happened there but um yeah it was just uh it was a weird decision where maybe somebody needed to do that and rather than using two packages they tried to kind of shoehorn it into someone else's project it was just a weird weird problem and it had downstream side side effects that weren't good and then later if people are using other tools for minification or whatever it is uh other tools that are better and you know whatever and if you can't separate that stuff out of your program
Starting point is 01:08:28 then you've you're going to get replaced right uh going back to the to the quote that outlaw liked a second ago that one of the other things that they mentioned is reviewers should not seek perfection they should just be seeking constant improvement. Is the product being improved? Is the code quality either improving or, you know, maintaining status quo or whatever. Here's where there was another idea that they had in here that I really liked though. So they say that, you know, this doesn't mean that as a reviewer, you have to remain silent. You can still point things out. But if something is just like, maybe not a showstopper, but you're just nitpicking on something like,
Starting point is 01:09:09 hey, this is something where you could learn and improve upon better, then they suggested prefixing the comment with the word nit, N-I-T, so that the developer of the change list could see like, oh, this is one where I don't necessarily have to do this change in order to adjust the pull request so that they like it enough to approve it and merge it in. Right. But it's still something that they could like know that like, OK, hey, you know, when I if I get around to it, like this is something I can learn from. I like it that they have a standard for what they prefix it with. However, I hate the word nit.
Starting point is 01:09:48 Because it feels like when I hear nitpick, it automatically sends off almost like overly... I don't know the way to put it. It's almost like... It's exactly what nitpicking is, right? It's picking at little things that shouldn't matter that much. And I, and I feel like typically if it's something worth putting a note on a pull request, it shouldn't be a nitpick. It should be, Hey, yo side note, you know, what you did here is fine, but you know, maybe consider doing this because it would overall improve things and it's more in line with what we're doing. Right.
Starting point is 01:10:24 So I don't know, Yeah, but you need something. You need some kind of identifier there so that the other developer knows that like, hey, this comment isn't critical to your pull request getting merged in. Right. Yeah. I think I always put, hey, this isn't a blocker, but blah, blah, blah, which is obviously a lot longer than the word knit. But in typical Google fashion, though, they needed to compress that. So they compressed it into three letters, which is knit.
Starting point is 01:10:52 Right. I actually love that they didn't even call it knit pick. They just used knit. It's just knit. Right, yeah, knit. And if you think about the size of their repositories, that might matter. That's absolutely true. Yep.
Starting point is 01:11:08 The next one that's, this one's sort of funny to me because we've all been in these situations, but they basically say any code that worsens the quality of the product shouldn't be allowed in unless it's an emergency situation. And that's – go ahead. Well, I'm going to take us down a little tangent here because then it was like, okay, what constitutes an emergency? Right. And they actually – you've got to love Google.
Starting point is 01:11:37 They actually document what constitutes an emergency and what doesn't. Nice. And so quickly they say that it's a small change that either one of these situations is true. And again, small change I think is important here. It allows a major launch to continue or it fixes a significant production bug impacting users or it addresses a legal issue or it patches a security hole. Those are the four things that in Google's mindset constitutes an emergency.
Starting point is 01:12:20 Now, the things that they say do not constitute an emergency, I love these because these are awesome. You just want your change in sooner rather than later. Or you've worked hard on the feature for a long time and you just want to be done with it. Or the reviewers are either away or they're in another time zone. Or here's our favorite, because it's Friday and you want the code merged in before the weekend. Yeah.
Starting point is 01:12:50 Or your boss says that it has to be merged in today because of a soft deadline, which they actually go and define what are soft versus hard deadlines. Or lastly, what doesn't constitute an emergency is that rolling back causes test failures or breaks the bill so the boss one is really interesting to me because half the time emergencies not defined here are emergencies because the powers that be have told you we have to have this in today yeah i found that one super interesting. And so I'm like, wow, that's a – How many times have we been in a place where our boss has been like, that's got to get in today.
Starting point is 01:13:33 And you're like, I don't know, man. Google says your definition of emergency doesn't count. You're wrong. I mean, we've all at some point during our career had a situation where that's come up. So, you know, yeah. And now I just want to be like, I can't wait for the next time for it to come up. Be like, Google says. I like it that it's this well-defined because it does make it to where at least a developer can have the confidence to be like, I should not do this.
Starting point is 01:14:06 And you can point to it because it's a policy sort of, I guess it's a policy by Google, right? At least if you work for that company, you'd be like, no, we can't do this and this is why. Now, here's the thing too, though, like in fairness, the one about your boss is the way they actually worded it was like, they were just saying a manager says this. And I was kind of like interpreting that as like,
Starting point is 01:14:30 okay, but you know, if it's, does that mean like a manager above you? So then technically they're your boss at some level, right? Uh, if they're higher up the tree than you,
Starting point is 01:14:41 like, so I don't know if they mean like a boss, a manager who's maybe a peer, like, yeah, he's technically a manager, but he's a manager of other people and just, you know,
Starting point is 01:14:51 happens to be one of your peers or he's some manager. I don't know. Yeah. That one's harder to say, but, but still, I think that's a nice defined set of rules as to what constitutes calling something an emergency and allow it's a nice defined set of rules as to what constitutes calling something an emergency and allowing some bad code to go in.
Starting point is 01:15:12 Or some maybe not even bad code, just not up to snuff code, right? Yeah, code that doesn't necessarily live up to the quality of the rest of it. There's four situations that they allow it to go through. And they make sense, too, right? They do. And they make sense too, right? Like, I mean, if you had some major legal issue where it's like, hey, you can't use this library because of X, Y, and Z. And you're like, okay, well, we just got to like cut it out real quick. You know, you just got to, it might be gross how you do it, but you got to get it done because, you know, you don't want some GPL license affecting your code, for example. Right.
Starting point is 01:15:47 So the next one that we had up was mentoring, which I thought this was good. Code reviews can be a great tool when you're actually mentoring people. I know I've used it this way. I'm sure you guys have too. Like if you have an intern or you have somebody that's newer to the organization, it's absolutely a good learning process, right?
Starting point is 01:16:06 Like, hey, you have a ticket you're working on, you guys put it on the thing, and then, you know, it's easy to go in and look at that and be like, hey, I like what you did here, but be aware that this is actually something that affects these other two things over here that you may not have known about, right? By the way, mentoring, though, it doesn't have to be like,
Starting point is 01:16:23 you know, someone who's, it doesn't have to be like someone who's – New, right? Yeah, it doesn't have to be like the Jedi Master and the Padawan. It could just be like I'm new to this area of the code or this technology or this stack, and somebody else who's spent some more time in it could help you along the way. You guys, there's only one pull request that I absolutely remember from, from all my years doing stuff. You guys remember when Vlad joined us at Amazon, we had him on long time ago talking about a spectacular, right? But he looked at,
Starting point is 01:16:57 he looked at a pull request. He's like, these variables are being boxed. I never heard anybody ever referred to the technical term of basically taking a type variable and throwing it into an object before. I never heard anybody use that term. And we had just done that episode not too long in the past. Yeah, we all
Starting point is 01:17:17 looked up over the wall of our cubicle and were like, what did you just say? Right? Okay. Only pull request I ever remember. A lot of you out there, we miss you. Yeah, we do. He's actually working for AWS now.
Starting point is 01:17:34 He's one of their architects, I think. Oh, nice. Congrats. Yep. Cool. All right. So, the principles... Am I going or are you going? You guys can't go silent right after you both say it. Why don't you got to say something?
Starting point is 01:17:50 You got to write a random back off period and then try again. Oh, okay. That's how it works. All right. I'm going to go. Oh. All right. Technical facts and data overruled opinions and preferences.
Starting point is 01:18:05 All right, Alan, take it. So, principles. Technical facts and data overrule opinions or preferences. So, that's pretty sound. Good advice there. The style guide is the authority. If it's not in style guide, it should be based on a previous coding style. Otherwise, it's personal preference. Assuming that you have in style guide it should be based on a previous coding style otherwise it's personal
Starting point is 01:18:25 preference assuming that you have a style guide i i would not be surprised if most places don't have style guides i'll probably create one's a good idea well no but i mean this is covering either if you don't though right because like they say if you don't have have a coding style then it would if there isn't a style guide then it should go on the previous coding style. So in the example that Joe gave earlier of the me versus self, if everything else was going with the me variable, then, and you come along and you're like self, self, self, then it should technically be commented in the pull request to be like, no, no, no, this should really change. Right. Yeah. I think having a style guide though is a nice thing, right? Being able to point
Starting point is 01:19:12 developer, especially when you get to teams that are bigger than just a few people, right? And then that way everybody gets on the same page. So you're not going through the pull request telling people to do things, right? You can basically tell them before they ever do some of this stuff, hey, here's a style guide. Go look at it. You know what's nice is that if you don't have a style guide, you can just go find somebody else's. Every language has one. You can just go find it and if there's multiple competitors or people
Starting point is 01:19:33 disagree on which one's the best, just have a vote and pick one and just move on. Yeah, but I don't know about you guys, but I've definitely been in situations where I've had team members where there is a style guide that we have agreed on that is like, say, you know, let's say, for example, Microsoft's like, hey, here's the style guide for this particular language or whatever. And everybody agrees like, yep, we're going to follow the Microsoft style guide for that. Right.
Starting point is 01:19:59 And then you have team members that don't follow it. And you're like, hold up. We have a style. We've agreed on this style. Please follow this style. And then repeatedly the developer is like, eh. Every time you comment on it, you're like, okay. At what point am I doing my part as a reviewer to let you know that we've agreed on this standard and you're choosing to ignore me every time I say it?
Starting point is 01:20:21 And that only happens if it ultimately gets approved by somebody else. Right. And this goes back to what you were talking about with the problem with some of the tooling where it's like, Hey, if anybody hits approved, then it's in right. If, if it was truly blocked,
Starting point is 01:20:33 like, yo, no, you will fix this, go to the style guide. Then I guarantee that kind of stuff stops. So it's almost like a cultural type thing that you have to enforce, which sometimes can be harder.
Starting point is 01:20:43 Yeah. Well, let's go find the one other person that agrees with me and then I get them to approve all my pull requests. And that happens in a team based, you know, environment. Yeah,
Starting point is 01:20:52 that definitely happens. Yup. Yup. There, there are people that I've worked with in my career that, you know, I never saw their, their pull requests cause they would never bring it to me.
Starting point is 01:21:02 Because you're very thorough and they don't want that, right? Yeah. I don't know that that's why, but I just, I wouldn't get it. Yeah, that's basically it. The next one is the reviewer may just request that the code follow the existing code based pattern if there's no style guide, which is kind of
Starting point is 01:21:20 what we just said. So, you know, it's all fine. This next one's fun. Yeah, they have a whole section on like resolving conflicts. And at first I was like, oh, they're, you know, I'm here's stupid me and my stupid get mind. And I'm like, oh, merge conflicts. I know all about this. That is not the type of conflict they're talking about, sir.
Starting point is 01:21:39 No, they're talking about fistfight conflicts. Yes. Yes. So, yeah, if there are conflicts between the coder and the reviewer, which this will happen, if you do this long enough, it will happen. They should first attempt to come to a consensus based on the information discussed here in this guide that we're discussing, as well as what's in the change list author's guide or the reviewer's guide. Now, we haven't gone into all those. That'll probably be the next episode where we dive into some more of this stuff. So basically, look at what's allowed, look at what you're supposed to do and try and come to agreement on that, right? Take the emotion out of it and use the facts that are available. If the conflict remains, it's probably worth having a face-to-face to discuss the issues
Starting point is 01:22:25 and then make sure notes are taken and put on the code review for future reference for other readers of that pull request, right? So, hey, Joe, Zach, I don't like your code changes. You and I are going to talk about it. We're going to make some notes. We're going to put it on the PR and hopefully that resolves it. And if it does, we'll hit approve with the comments on there and everything's good. Right. If however, you still have it come to a consensus, then it's time to escalate. And, and what they say here is actually what I've seen happen in the past is you'll basically escalate it to a larger group, right? At that point, you're not trying to be a one-on-one type thing. You're going to get the opinion of the team and potentially a team lead or somebody that's a principal or lead in that group to sort of weigh in on the topic. And then that way, it's not me versus Joe Zach.
Starting point is 01:23:16 It's, hey, what is the entire group as a whole thing should happen here? A different kind of mediator pattern. It really is. Honestly, and you know, what's funny, like, and I know that you guys have seen this because we've all been through like the Amazon interview loops and that kind of stuff.
Starting point is 01:23:31 These are the type of questions that come up in the HRE type of things, right? Like, Hey, when you have a disagreement with somebody, how do you handle that? Right. And,
Starting point is 01:23:40 and honestly, this is the path that you're supposed to take in general terms, right? Talk to the person. If you can't resolve it, then raise it up to the larger group a whole. And then that way it's not a me versus them. It's a, you know, what does everybody agree upon here? And it takes the bite out of it or it should.
Starting point is 01:23:57 Yeah, I'm going to need some more specifics on that. What was the date that it happened? What did your manager say? How did you feel about it? Star. Welcome. And by the way that it happened? What did your manager say? How did you feel about it? Star. Welcome. And by the way, it is funny. I don't know about you guys.
Starting point is 01:24:11 Developers tend to be very tied emotionally to the code that they write. And so it can very much be that if you reject a pull request that somebody's put a lot of blood, sweat, and tears into, that emotions can run high and this stuff can happen, right? And it may not be the intent of the reviewer to take somebody off. And it's also probably not the intent of the coder to have ticked somebody else off. But when you've spent hours and hours and hours doing something that maybe you weren't even that fond of doing in the first place, it's really easy for people to get electrically charged on these things. I mean, it makes sense though. I mean, like this is,
Starting point is 01:24:55 this was like you thinking like how to solve a problem and then somebody else comes along and be like, no, I'm not good enough. Right. I mean, depending on how they approach that response, it can definitely set you off. You're like, wait, wait a minute. Yeah. Yeah. I'm not good at managing other people's feelings. Like, I can't even manage my own, you know? Don't put that on me.
Starting point is 01:25:17 Like, we got a conflict. It's time for paper, rock, scissors. And you said it wrong. It's rock, paper, scissors, man. How do you say paper, rock, scissors paper scissors man how you say paper rock scissors what game are you playing i've never heard this what hey we're gonna google this that wait paper i bet it don't even come up with anything rocks rock paper scissors wikipedia no it's a different game, man. You're hurting my head, dude.
Starting point is 01:25:45 Put in a pull request. I'm going to deny it. I thought it was just Rochambeau, though. Maybe like... I'm going to Rochambeau you for it. Yeah. Yeah. Which I don't understand how that's a thing either, by the way.
Starting point is 01:25:59 Isn't that the French version of it? Is that what it is? I would think so. I don't know how to spell any of it, so I couldn't tell you. But at any rate. All right. So the last little bit we have here, and this is super important, especially if you have a fast-changing code base. Don't ever just let a pull request or a change thing sit around because the coder and the reviewer can't come to an agreement.
Starting point is 01:26:24 Because all that does is hurt the product as a whole, right? I mean, we've all seen it happen and pull requests sit out there for a week or two. And by the time that you want to actually hit commit, so much stuff has changed that people have to go back in and modify the code to make it work again. So it's a waste of time, right? So you need to try and come to agreements quick and escalate things quickly if they need to be, but don't just hold things up. Yeah. Just merge it. That's the real lesson here. Just merge it.
Starting point is 01:26:57 And that is why I said my pull request to Joe. That's right. I don't like it, but one, two, three, four, let's be able to thumb war. All right. Well, that's right i don't like it but one two three four let's be able to thun more all right well uh we will have uh plenty of links to this uh set of documentation in the resources we like uh maybe even a link to uh joe's chip review which yeah i mean you never thought you needed to review a bag of chips until... I know, but you saw how big it was. You see Joe's review. You think I'm going to sit on that one? That was a miracle.
Starting point is 01:27:32 All right. So with that, we head into Alan's favorite portion of the show. It's the tip of the week. I totally forgot we still had this section. How about that? What? All right. All right. All right.
Starting point is 01:27:46 Well, it looks like I'm up first. So just today, my buddy over at Yala Coding YouTube channel, which you should follow, streamer, awesome. He sent me, you know, I've been doing streaming challenges online every day at LeetCode. Somebody went through and did a speed run on them. And I believe it was his first time uh doing them and he solved all 30 of them in one hour wow and uh this guy is a programming uh like a competitive programmer uh he might even be in high school maybe a prodigy i don't know but uh he uh he competes he uh does himself on youtube doing like coding challenges for basically like
Starting point is 01:28:23 uh google contest facebook contest all sorts of contests, Facebook contests, all sorts of contests and he wins quite frequently and we'll put the videos up online of him doing these kind of coding challenges and he also has quite a few tips on like how to kind of program at that level which is like a whole other kind of set of skills. He just
Starting point is 01:28:40 blasts through hard problems so you can see him like in the speedrun videos of watching like he kind of scrolls through and is like, okay, XOR, blah. And then he spits out the code, moves on to the next problem. He's like, okay, this is – he kind of classifies the problem, knows how to get there fast, and goes there. So obviously he's got a lot of time in there and just really good at it. So it was just cool to see someone solving problems at that level and just to kind of see how he approaches the problems. Dude, I'm going to watch that.
Starting point is 01:29:06 Yeah, it's cool. That's awesome. When you guys were in college, did you ever do any of the ACM competitions? No. I found out about it right before I quit. And I took one class and I was like, oh, this is really cool, Program Challenges. And now I still like Program Challenges. Wait, no, I mean like, did you
Starting point is 01:29:22 actually compete in the competition? Not as a class. No, I didn't know that they had it, but then when I mean, like, did you actually compete in the competition? Not as a class. No, I didn't know that they had it. But then when I took the class, it was like the only class that was scheduled, like fitting up my schedule was a class called problem solving. It had never been offered by the school before. And I was like, well, whatever. I need an elective. So I took it.
Starting point is 01:29:40 And the guy's like, hey, yeah, I'm the programming team coach here. And I was like, we have a programming team? We have competitions? Anyway, so it was like this class is kind of I'm the programming team coach here. And I was like, we have a programming team? We have competitions? Anyway, so I was like, this class is kind of based around just writing code quickly. And that was my favorite class. And it just turned out. Oh, wow. That's cool.
Starting point is 01:29:54 I wish we had that. So I did the ACM competitions twice while I was in school. And my team did horrible in it. But it was more like, you know, we would be in like a C++ class and the teacher would be like, oh, hey, by the way, there's this ACM competition coming up in like next week. And we would like to be able to send a team to it. Is anybody interested in going? And it was like really afterthought. It wasn't like a class devoted to it like what you're describing. So, yeah, I mean, that would have been interesting to see like how
Starting point is 01:30:26 i might have done had there been a class for it but yeah that's all yeah it was really cool and yeah there was um at the time i've been working i worked all the way through college uh and uh i uh you know i was like oh i'm already i've been coding for years like this class is gonna be no problem and then there was one guy on there who was on the programming team and he just kind of did this stuff for fun and man he was just like every problem we had we had like three hour lab he's just like and then just hanging out and do different things and have fun with i was like crap mom maybe i guess i don't know how to do this as well as i thought i did yeah it was really interesting because like uh you know like i said like we were at in a c++ class at the time and both both times that i, it was the C++ team that went.
Starting point is 01:31:09 And so we would go to these competitions and we were coming at it from trying to solve things in C and C++. After school, I later worked with a colleague who turned out – it turned out coincidentally that he and I competed against each other. And each year he was on the winning team when I went and they used Java. And so there was just a whole different mindset of the way they attacked the problems. And like, even as coworkers, like I would look at his code and like his way of approaching something was just like radically different. Like I'd be like, Hmm, now this is going to pad, this is going to fail my pull request, you know, or, uh, you know, code review of your code. Cause like we just had such
Starting point is 01:31:52 different styles about it, you know? Um, yeah. So it was interesting. That's cool. You know, what's really crazy is that kid probably, or I don't know if it's kid or not, but that guy probably makes more money than everybody else that we know, winning competitions, doing these things. The competitive programming guy? Yeah. I think he's still in high school, maybe. That's awesome. It doesn't mean that he doesn't earn more than us.
Starting point is 01:32:15 There are kids on YouTube that are like eight years old making more money. It reminds me of the episode that Outlaw turned me on to of the Darkneck Diaries, where people would go and do the competitions at, what's the security conference? Oh, Black Hat? Black Hat, yeah. They always have competitions, and it was just crazy. People stayed up 48 hours working on these things. Maybe we'll find a link and put that in there, because that was a really fun episode to listen to. Yeah. All right, Outlaw,. Yeah. So anyway,
Starting point is 01:32:45 all right, outlaw your turn. So I have two for you. And I wanted to say that this first one I found, this was mentioned in our Slack channel. Probably there's probably a good chance that this was micro G that said it first, but I saw angry Zoot talking about it. So because of what our current new normal is,
Starting point is 01:33:13 Microsoft Build event is usually a big deal to get to go to that, right? It's usually a costly endeavor and it's a pretty big deal if you get to go, but this year nobody gets to go. Uh, and so they're doing everything digitally online and free. So I'll have a link in the show notes, but the, um, if you're following along register.build.microsoft.com May 19th through the 20th, uh, for the Microsoft build and following suit and Apple with the WWwdc conference june 22nd will also be free this year so i'll have a link to that one and that one is unfortunately a much longer uh url so i'm not gonna bother to read that one a little bit a little bit yeah that's really cool all right so my turn since i was clicking through to those websites.
Starting point is 01:34:06 So in the vein of this show and in vain of the pull request that I put in that I've now had a very lengthy back and forth on, this whole thing that we talked about or that Outlaw mentioned at the beginning with styles is he doesn't care that much about them because you can automate them. So if you're doing Java development, which is basically what I am now, is a Java slash sometimes Kotlin slash sometimes any kind of developer, I'm doing Java, there's a thing called check style for Java that you can basically build into a pipeline, and it's what in the world? Yeah, it's a link to our Zoom, so just join in on our call right here, and we'll have this link in our show notes. Hold on a second.
Starting point is 01:34:49 Well, I'll find the right link. Yeah, that's all jacked up. But there's a link below it, so I don't know if that's the link you're looking for. No, that's a separate one. Or if this is like an Obi-Wan thing and this is not the link you're looking for. Man, that's so ridiculous. So this thing is called CheckStyle. I'll get the real link in there. I mean, it does link to a CheckStyle plugin for IntelliJ.
Starting point is 01:35:09 That's the second link. So that's what I was going to say here. I got the real link back in there now. So CheckStyle is on SourceForge. And then there is a plugin for JetBrains that I couldn't get to work. But assuming that you can get it to work, it will actually set it up so that if somebody has put in their project, the check style file that basically tells it what types of endpoints you're allowed to do, how much space you have to have between braces. It goes super
Starting point is 01:35:35 granular before you actually go try and commit and compile your code. It will actually throw errors for you in the compiler so that you can go back and fix that stuff before you go in and put it in pull request and do all that other kind of stuff. So this is, this is one of the things in the Java world that is the equivalent of what outlaw was talking about. And there's all kinds of things out there for different languages, but this is one that I found and it's a, you know, it's pretty neat. It seems to do a really good job of things. Like it can get as granular as the order of your imports in your Java. You have to put these certain types of imports up above these other ones and all that.
Starting point is 01:36:12 Pretty neat stuff. Yeah, it's nice to be able to have that in for a tool. When I was talking about being able to do this inside of a pull request, I was thinking of the one that came to mind specifically was the Python Black library for the code format, the uncompromising code formatter, as it's called. Interesting. Yeah, I know this one is
Starting point is 01:36:33 built into the Maven build that was used on the open source project, so it worked both locally and when you put in your merge request up on GitHub, it would also run the build up there and fail it if any of those check styles were failing. So, yeah, I mean, again, there's tons of these things out there,
Starting point is 01:36:52 but it's worth knowing about and possibly getting them in your pipeline because then instead of developers arguing about tabs versus spaces, you can let the tools tell you that you did it wrong. Yeah, that it was supposed to be spaces. And then. Right. Whatever. Tabs.
Starting point is 01:37:10 No. Spaces. Okay. All right. Well, so hope you enjoyed this episode. And in case that a friend happened to share a link to this episode or whatever, if you haven't already subscribed to us, we'd appreciate it if you would. You can find links at the top of our page for
Starting point is 01:37:30 iTunes, Spotify, Stitcher, all your favorite podcast apps. And if you have a favorite that's not, that we aren't aware of, that you couldn't find us on, let us know and we will make sure to rectify that issue. And as oh wait, did we do the beg before?
Starting point is 01:37:45 I don't know. I think I stepped away. No, Joe did. Yeah, when you guys were in the bathroom together. Yeah, we weren't here. You guys were in the bathroom. That was weird. That was awkward. So yeah, so you can find some...
Starting point is 01:38:01 If you haven't already left us a review, we would greatly appreciate it. You can find some helpful links at www.codingblocks.net slash review. My lawyers say I'm illegally allowed to still say that. And while you're up there, do definitely check out our incredible show notes, our discussions, and get involved. And Joe? Hey, follow Twitter at Twitter. CodingBlock's head up to the page that has the top at the feedback questions,
Starting point is 01:38:34 rants, and Slack. I don't know if he had a stroke, if I had a stroke. I'm not sure what happened. So I'm playing competitive Overwatch right now. Oh, all right. I got like 10 seconds. What's up? What do you want?
Starting point is 01:38:50 No, no. Go back. Go back. Give me a review of something. I'll stamp it. No problem.

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