Lean in and embrace the chance to learn and get better.
Disagreements are a natural part of being a software engineer. Whether it is code reviews or designing new systems, there is more than one way to do things and often there is no clear “best” way.
We often shy away from conflict, but constructively embracing differences of opinion, head on, increases learning and helps us build better systems.
That sounds great in theory — but how do we do it in our everyday work process?
One way to facilitate constructive conflict is, when there is disagreement have each person state their level of certainty that they are correct and their estimation of the long term impact of the decision.
For certainty use a scale of 1% to 100%. For impact use 0 to 10.
Breaking a disagreement down this way does two things. First, it opens everyone up to being more persuadable. By estimating certainty you are admitting, your opinion is not fact. This frees you up to be persuaded. It is no longer, “I am right and you are wrong” but rather “I am 60% sure I am correct but there is a 40% chance I am wrong.”
It is much easier to change your opinion when you have already admitted you may be wrong. When everyone does this it sets a much different tone for the discussion that follows.
Second, you may discover some disagreements are not that important. If you value something as a 3 on impact and someone else values it as a 9, then it may make sense to go with the person who values it higher. Often you can find ways of doing some reasonable horse trading that makes both sides happy — I get the things I value most and you get the things you value most.
When the team has dramatic differences on long term impact, this may indicate a strong personal preference but it could also reveal there are deeper issues some team members see but others do not. This is often a great chance to level up the team and spread knowledge.
This technique will help you triage your conflicts and eliminate most of them quickly and in a way that builds team cohesion instead of destroying it.
There will still be some issues everyone feels are high impact and can not agree on. There is no magic bullet here. But often the momentum from resolving the easier conflicts along with the openness created by admitting uncertainty will create a dynamic in which everyone is more engaged in finding a better solution rather than defending their own ideas.
So next time you find yourself in a coding conflict — lean in and embrace the chance to learn and get better.