I've taken this approach with one of our engineers, and now we have a huge pile of "small things" that has created some pretty serious technical debt.
My perception is that they don't try to understand what I'm pointing out, and come up with rational for how they have it. I think I have a lot to learn.
- Is this a component that every engineer is going to interact with and that will stay with the company for decades?
- Can this technical decision be reversed easily? Either in the sense of an individual commit revert, and/or in terms of a series of code changes?
- Is this change likely to remain isolated to this part of the codebase, or will the pattern infect or be copied to other locations widely?
It's super challenging -- and also intellectually rewarding when you can master it and gather team consensus and alignment.
One of the most exhausting failure modes that I've had to deal with is deciding not to decide. Some people will build elaborate Rube Goldberg machines so that they "can change their minds later" but in fact what they've done is decided that choices are now everybody else's problems.
There's a whole hell of a lot of rewards to having the maturity to be able to say "I was wrong" and move on. Writing code in a way that you could rework it to use a different library to accomplish the same thing is making a reversible decision. Creating a rules engine to let a config file make the choices and leaving a cartesian product of states (75% of which are invariably illegal, which you are just supposed to know) is definitely, definitely not. Just pick something, man.
Something I've noticed is that acquaintances will be nice to you universally, but actual friends know when to broach subjects that may not be considered "pleasant" or "nice". Don't give your friends "acquaintance-level" code reviews.
Technical debt isn't always avoidable, but I sure know the difference from when teams are heavily invested in pair programming vs not.
Good pair programming is hard to ingrain in a culture though.
In fact you reminded me of the technique right now to check the responses and make sure nobody else had already said this!
This was my excuse to not be thorough when giving feedback in code review, when I was last in a position to do so, while on the Windows accessibility team at Microsoft. I told myself I was on a mission to make Windows more accessible, and there was no time to delay new features or fixes over inconsequential things like coding style or even code organization, as long as it worked.
Edit: At least I didn't use that excuse when responding to coworkers' reviews of my PRs.