Live data from Hacker News

Looking at Our Nitpicks

datto.engineering

21–30 of 36 posts

Re: Looking at Our Nitpicks

#21

I think I’ve reached the point where I simply don’t mention most nits. I’m most business software it just doesn’t seem worth it. If the code works, isn’t utterly obtuse, and abides by automated formatting etc, then is the nit really worth it? Granted I’m probably biased towards high churn SaaS apps, which is what I work on.

An old DBA once said to me, "You only have so many keystrokes before you die. Don't waste them."

Somethings are not worth the taps.

Re: Looking at Our Nitpicks

#22
The teams i'm on have a rule about nits, "only fix nits if you are going to touch the code again". So if there's a misspelled word in a comment or a formatting/code conciseness cleanup, it can be ignored unless there are other actual bugs to fix.

It works out pretty well, the marginal cost of fixing the nits is very low when there's other changes to be made, so they get done. If they aren't addressed because there are no actual problems with the code, those things will get addressed later. (all the members of the team tend to take cleanup passes occasionally when they aren't feeling up to the deep work stuff but still want to do something productivish). The net effect is the codebase stays reasonably tidy without feeling bogged down in the "bureaucracy" of nitpicking.

Re: Looking at Our Nitpicks

#23
post #16

Engineers work to deliver business value and commit the code that flawlessly delivers that value the very first time. When colleagues go to review the code, they are edified in its reading and quickly approve the merge request. There is no need for feedback because the code was perfect. I strongly disagree with the premise of this article. I look at code review the exact same way as I would look at the first draft of…

I'll often do the "first draft" as a design doc with an API sketch or a quick prototype that I'll post in chat or email to the team but not actually "mail for review" per the tool. That way I get early feedback that I'm going in the right direction for a code change. When it comes time to actually get approval to check in, then I try very hard to get it right. I put on my code reviewer's hat and review on my own code…

> I'll often do the "first draft" as a design doc with an API sketch or a quick prototype that I'll post in chat or email to the team but not actually "mail for review" per the tool.

Yeah, we do a database & api design review before anything is actually coded. If you don't get that right you might have to basically start all over.

Re: Looking at Our Nitpicks

#24

Earlier quoted context omitted.

I saw that too, but if there is a "real" difference in returning equal things, then it could indicate a way bigger problem in the design.

If you're using a language where there is a difference between value-equals and instance-equals, it could cause a very subtle bug by changing this code if the result of it was relying on an instance-equals later on.

I agree it can introduce bugs, my point is relying on that is probably a design issue somewhere else.

Because even in the first, you are relying on the order of max being the same everywhere it matters.

Re: Looking at Our Nitpicks

#25

Earlier quoted context omitted.

If you're using a language where there is a difference between value-equals and instance-equals, it could cause a very subtle bug by changing this code if the result of it was relying on an instance-equals later on.

I agree it can introduce bugs, my point is relying on that is probably a design issue somewhere else. Because even in the first, you are relying on the order of max being the same everywhere it matters.

Maybe. If it’s usage were in the scope of the current PR, I might suggest a fix like this. But if it might introduce something subtle, I probably wouldn’t suggest it or I’d ask if they had considered changing it as well as if there were any subtle issues to worry about.

As someone who works in a multimillion line codebase that sees millions of executions daily since 2005, these are real issues and saying “it’s a design issue somewhere else” doesn’t exactly fly because that “somewhere else” may no longer have a team maintaining it.

Re: Looking at Our Nitpicks

#26

Very well written, and funny too. I wish there was a way to automate some of the lower buckets too. Things like "project consistency" (see his "12 buckets"), for instance, are incredibly important to me personally. IMHO, code should be written so that there is no visible personal style, so that newcomers and new engineers are able to follow what's going on regardless of who wrote it. A human can easily determine if t…

> IMHO, code should be written so that there is no visible personal style This seems reasonable at first but depending what you mean by visible personal style can get you into the weeds so fast. You can end up creating a process where no minor, specific improvements or experiments are tolerated unless they can be justified as generalizable improvements for the whole org. > , so that newcomers and new engineers are ab…

> This isn't actually related to the first thing? There's some overlap sure but for the most part whether it's in camel case or snake doesn't affect my ability to comprehend it.

This isn't about camel case or snake case. It's about the overall structure and look and feel of the code. When you know that public functions are at the top, constants are in a certain place, and where package-level comments are; and when you know that important abstractions and models are defined in one file, and their implementations in separate files; and so on.

Basically, it's the combination of all the tiny things that make code look and feel like they belong.

This is similar to when people say "this is not idiomatic Go". What I'm saying is pretty much "idiomatic for this project/company/product/team". Write it so that it matches the rest of the project. That helps people navigate and read your code, which is the most important thing.

Re: Looking at Our Nitpicks

#27
post #16

Engineers work to deliver business value and commit the code that flawlessly delivers that value the very first time. When colleagues go to review the code, they are edified in its reading and quickly approve the merge request. There is no need for feedback because the code was perfect. I strongly disagree with the premise of this article. I look at code review the exact same way as I would look at the first draft of…

I'll often do the "first draft" as a design doc with an API sketch or a quick prototype that I'll post in chat or email to the team but not actually "mail for review" per the tool. That way I get early feedback that I'm going in the right direction for a code change. When it comes time to actually get approval to check in, then I try very hard to get it right. I put on my code reviewer's hat and review on my own code…

     I'll often do the "first draft" as a design doc with an API sketch or a quick prototype that I'll post in chat or email to the team but not actually "mail for review" per the tool. That way I get early feedback that I'm going in the right direction for a code change.
That makes sense for some types of changes, but it's too high-level to address the actual well-factored nature of the code, which is one of the main things I'm thinking about in the "second draft" of my code. Nobody's design doc is going to address "what's the right set of helper functions to extract here?" or "what's the right way to structure this logic to make it the most readable?". Design docs are great and they're super important for bigger changes, but they're often completely orthogonal to "is the actual code that implements this design doc readable and maintainable", which is the biggest question I'm seeking to answer in code reviews.

This is also completely orthogonal to "do I have tests for this", "have I run the linter", etc. Certainly there are types of readability problems that running the linter or writing tests for your code can catch. Having focused changes with test coverage is only one part of making sure your code is long-term maintainable by the rest of the team.

Re: Looking at Our Nitpicks

#28

Engineers work to deliver business value and commit the code that flawlessly delivers that value the very first time. When colleagues go to review the code, they are edified in its reading and quickly approve the merge request. There is no need for feedback because the code was perfect. I strongly disagree with the premise of this article. I look at code review the exact same way as I would look at the first draft of…

On the flip side, though, I think it's important for the code that you send to other engineers for review to be at least kind of polished, because otherwise you risk just wasting other people's time.

If you get feedback on your code that you already knew about, you wasted someone's time, and I think that's inefficient and a little bit disrespectful.

But I definitely agree that code review is very much a drafting process. It's just that you need to walk a line.

Re: Looking at Our Nitpicks

#29
post #28

Engineers work to deliver business value and commit the code that flawlessly delivers that value the very first time. When colleagues go to review the code, they are edified in its reading and quickly approve the merge request. There is no need for feedback because the code was perfect. I strongly disagree with the premise of this article. I look at code review the exact same way as I would look at the first draft of…

On the flip side, though, I think it's important for the code that you send to other engineers for review to be at least kind of polished, because otherwise you risk just wasting other people's time. If you get feedback on your code that you already knew about , you wasted someone's time, and I think that's inefficient and a little bit disrespectful. But I definitely agree that code review is very much a drafting pro…

I get where you're coming from, but if a friend asks me to look over an important email that they're planning on sending to their boss, I don't think of it as "wasting my time" if the email has a bunch of grammatical errors in it. Instead, I'm happy that I'm able to help them by applying a fresh pair of eyes to the problem, since they've probably spent a really long time working on the actual content of the email and haven't had the opportunity to step back and consider . It's just an efficient division of labor. In the same way, code review is a great opportunity to let someone who wasn't involved in the actual writing of the code approach the problem & solution space with fresh eyes, now that you've done the hard work of translating the solution into something that actually works.

And code reviews are even more collaborative then that. When I'm looking over my friend's email, it's still ultimately their email and there are types of feedback that it would be inappropriate to give. But when you're contributing to a shared codebase, it's more like a novel that's been co-written by multiple different authors—obviously you want everybody on the team to be able to have input and feedback into what the "collective style" of the project is going to be.

Re: Looking at Our Nitpicks

#30
post #3

> Strive to be intentional, focused, and sparing in our reviews. I get this but I prefer the opposite. By over communicating your preferences, asking questions, leaving “if I follow this correctly” comments, and generally not holding back, you create lots of chances for discussion and knowledge sharing. And you’ll catch more bugs. This is especially true when a junior dev is involved.

Imo, the code review is not the place to over communicate your preferences. Do it on developers meeting. Do it in a chat. Do it on standup. Don't do it in random code reviews where people unlucky enough to get you as reviewer have to deal with different expectations then anybody else and spend hours discussing your personal preferences - without any real impact on general codebase because other reviewers and coders have different preferences.
Post reply on HN