I’ve been a professional software engineer for just shy of half of my life. Along the way I’ve had the opportunity to work with a ton of different people and personalities.
A common theme with most developers is that they really like to do things their way. This tends to result in combativeness over code feedback and just a general “you’re wrong, I’m right” mentality.
I’ll save you the trouble on calling me out, I know I’ve been that guy, especially in the early days of my career. Fortunately, I’ve tried to drop the dogmatic opinions and strived to be more of a “go with the flow” type.
If a team I’m joining has collectively decided on a best practice, I assume they have already put a ton of thought and debate into the topic before they ever came to that conclusion.
Often times the things that have been agreed upon are fairly trivial and/or could be handled by a tweak to my editor configuration. I don’t always agree with stuff, but I know there are more important battles that can be fought (reads: I disagree and commit).
That’s not to say that I don’t try to shift the tides from time to time, but I do try to make sure that I understand the reasoning that went into something first.
It’s always good to approach these conversations with kids gloves on. This is especially true when the battleground is either a chat room or over email.
That said, nearly every damn time somebody new joins a team, they ask the infamous question:
Why would they do it that way?
Some times it’s sugar coated with the even more infamous line, “I’m not trying to be a dick but…”, that somehow has the magical power of absolving the next statement of all of it’s grit and aggression.
To answer this age old question, the reason that something was done a certain way is because it made sense at the time.
I know, shocking.
Rarely do people go out of their way to purposefully fuck a system over. Decisions get made, usually they are discussed ad nauseam before hand, especially if anybody has any apprehensions about the approach.
That doesn’t mean that the code is perfect or the approach is ideal. It means that at some point in history with a particular version of the team, that was the best solution.
If you were asked today why you did something a certain way 5 years ago, would you try to justify things? Would you utter the words “well at the time…”?
“Because I was young and stupid” is a catch all for so many of people’s bad decisions yet for some reason the same logic never seems to be applied to engineering teams.
That’s not to say that you shouldn’t question things either. It’s healthy to ask questions and to wrap your head around different parts of a new system.
Questioning things early will give you a sense of whether or not the team is moving their system forward or just doing things “the way they have always been”.
You can usually get a feel for this as early as the interview process.
Just don’t be a dick about it.