How to approach a disagreement
As software engineers, there are a lot of things to disagree on: tech stack, syntax, code standard, testing, methodologies, etc. No matter your seniority, learning how to frame a disagreement is vital. It includes both disagreeing with what others have done and have others disagree with your approach. It happens a lot more often than we expect, so if we don't pay attention to our methods, then it is easy to cause stress and tension within the team or between teams. If this continues for a long time then well, then it will create a toxic work environment. As someone who has a consultancy background, which requires people to jump in a new team and start delivering value as well as navigate office politics, I thought this is an intriguing subject for me to share my thoughts on.
When dishing out disagreements
Are you raising a valid concern?
Sometimes, our emotional side can get to us, and we raise questions which aren't related or urgent. It is worth being mindful about the issues you are highlighting and reflect on it before speaking up. If it is already too late, then there is nothing wrong with a quick apology and retract your statement. It is as simple as saying something like "actually, on second thought I am not sure it is relevant. Please ignore me".
Having the gut to admit you are wrong is a good thing, and I, for one, appreciate this kind of behaviour over continue to argue even if you are not sure for argument's sake. It may depend on the company culture, but it is worth questioning if you should remain in a company that penalises you for making small mistakes like this.
It is always better to do the reflection in your head before speaking up, and you don't want to be the person always asking questions and continuously retracting their questions in meetings.
Are you offering solutions?
There is nothing wrong with raising a lot of questions or issues, and instead, it should be encouraged. It doesn't mean the raised questions or concerns must be addressed straightaway. If they are things which can be taken care of later, then create a ticket and add it to the backlog for a later date.
It is also essential to think about some potential solutions when raising issues. Not only does that show you have put thoughts into it, but the extra effort will make people less defensive since the conversation is more about picking the best solution at that point instead of the natural response to issues = who caused the problem.
Compare the following statements:
- Statement 1: "Some bad practices are being used in the codebase".
- Statement 2: "Some new practices are being used in the codebase deviating from the standard. Should we consider adopting a linting tool going forward? I think Eslint is quite good, but I'm sure there are others out there. Maybe we should have a spike on this?"
Are you motivated to get it resolved?
It is often easy to point out problems with something others had done. When you raise a concern, in people's eyes, you are getting yourself involved (unless you are the CEO of the company). Just saying this isn't good enough is not only irresponsible but creates a "you v.s. me" situation, and implies "see, I'm better than you" kind of message. Even if you didn't mean that it is easy for people to get that feeling, from a logical sense, if the issue you pointed out if actually that urgent, then maybe it makes sense for you to act on it as well and not just say it.
Again, compare these statements:
- Statement 1: "I noticed the app error rate has increased by 200% over the last week".
- Statement 2: "I noticed the app error rate has increased by 200% over the last week, who's the best person I should talk to about this? Happy to share my findings, support or pair on this as it is affecting the stability of the site."
Lead by example is always a great way to build team rapport, and everyone will remember it (including your managers 😁).
When dealing with disagreements
Be patient and professional
We all make mistakes, and we need to own up to them. Getting defensive is never a good look, nor is never admitting that you are wrong when the evidence is right in front of you. Being professional means being accountable to your actions, after all that is professional if everyone can go and do things and not worry about consequences? When people raise issues about your work or approach, don't cut people up mid-sentence. Allow everyone to express their feelings and thoughts, then have a healthy and calm discussion about it. It is possible that it was merely some misunderstanding, and after some talk, you both find you agree with each other. Some people might have different ways to express themselves, and others may even have language problems if they are not speaking in their mother-tone.
Give people benefit of the doubt, and assume people are curious instead of attacking you or your work personally. Some people might speak fast or have a loud voice; in both situations, they might not even be aware of it and don't mean harm. So don't react too quickly, and you'll avoid awkward apologies after.
If you are sure someone is rude or aggressive towards you, then consider giving them feedback or speaking with them in private before raising it with the right channels (e.g. manager, HR, etc.). It could just be that person is having an awful day and not being themselves.
Be able to take criticisms
Some criticisms might be misjudged, but it is always important to reflect on feedback and think about what may have triggered the other person to feel a certain way or say what they said. If someone was questioning code quality was it because how you structured your code or how you named everything which made it hard to understand? Just because you are not in the wrong, it doesn't mean there is no room for improvement.
We should welcome critiques, only by knowing what we are doing wrong can we improve the next time. Some even regard feedback, positive or constructive, as a gift. Also, if it is not something you value too much about, the fact the other person wants to open up to you and tell you what they think or how they feel is huge. It shows that they value you as a teammate. After all, would you go out of your way and give critiques to a stranger?
Giving good feedback is difficult, and many people avoid giving criticisms because they don't feel comfortable for one reason or another. As a result, it is probably worth valuing what critiques you do receive.
Finally, just want to say being able to take in criticism isn't the same as accepting abuse. I doubt this will happen to you, but just something to be aware of in the back of your mind. Again, always give people benefit of the doubt when unsure!
No one likes to be told they are wrong, and wouldn't it be wonderful never to make mistakes? Unfortunately, that is not possible or realistic. As a responsible professional, we need to stand by the decisions we've made and more importantly admit we are wrong when presented the facts.
Is it painful to do that? Yes, absolutely. But that is not the reason to shy away from it. Painful experiences are the ones we remember, and this is how we learn and improve the next time. The main take away is to remember not to get yourself into the same situation the next time. Did you over-promise something or were too sure of yourself? Maybe next time leave some room for manoeuvre when making a claim. Was your work not up to standard? Maybe next time get someone to check over it before putting it in front of everyone.
The best way to deflect the shame and regret that comes from mistakes is to be the first one to point out that you made a mistake. By doing this, not only do you avoid someone else wording the situation that's less in your favour, but also takes the worrying out of the equation. The worst part about making a mistake is thinking "Oh god, when will people find out, and what will they do or think?". By openly stating your mistake, you will eliminate that worry.
Unable to have a productive discussion due to fear of confrontations or lack some communication skills is something many people struggle with from my experience. It had made me appreciate even more the "soft-skills training" I received back when I was working for a consultancy.
In a lot of ways, it is all a mindset difference, but it is harder than it sounds because people have often built the mindset into their ways of working and styles of communication. These points I mentioned aren't tricky to do, just requires some self-reflection to identify how and where you need to improve. Or even better, ask for others for feedback!