Software engineers are an opinionated bunch. We hold unreasonably strong opinions on how code should look, read, be styled and where it should go. Hell, we can't even talk about tabs and spaces without rising to violence.
This isn't a bad thing. It is important that we feel strongly about the ideals of software development, lest our codebases descend into madness. The bad part about our strong opinions is when they cloud our ability to entertain other ideas. They leave us striving to be right instead of striving to be better.
Which bring us to the point of this post: it is human nature to think we are right. Unfortunately for us, it is the nature of building a product that we are so routinely wrong.
Products are humbling things, you see. Over the life of a successful product, nearly every line of code will be rewritten at some point. Nearly every word of copy will be A/B tested out of existence. Nearly every design decision will be changed and changed again.
If we define "right" to mean "this will never change", when it comes to building products, we are universally wrong.
So how can we succeed?
Building a great product is a balancing act between having a clear vision about a target and having a wide perspective about usage. You drive toward a goal while understanding and supporting the wide range of how your current customers utilize your service. The idea that this vision could come from a singular person is not realistic. Instead, it is up to the team to collectively focus that vision and expand that perspective.
This requires a lot of communication. That goes without saying. But for those communications to be successful, it requires checking egos at the door. Otherwise, we risk having a loudest-voice-wins approach to our products.
My guiding motto to keep myself from slipping down this slope was actually a statement i made in an interview.
"I'm not afraid to be wrong as long as it gets the conversation started."
Only after i said it did i realize the value in the line. It is helpful for me because i really like being right. Lacking something to hold me back, i'd be tempted to argue my opinions up and down, others be damned. Instead, i view my role in discussions as being the one who asks the hard questions or the questions no one else is asking.
I've broken my bad habit my making a conscious effort to bringing a unique approach to our team's talks.
You may be the quiet person in talks. If you are, i encourage you to voice the opinion that you spend your time thinking about. You may be the loud person in talks. If you are, try to make a point to spend an entire conversation where the only input you bring is to ask others questions. By changing our behavior in discussions, we stand to let a different perspective rise to the surface.
For our products to succeed, we need to think about ideas without ego or bias. No customer will ever see a feature and think, "this is wonderful, i bet this was Ben's idea!". Customers are won or lost by the quality of our execution, not the volume of our voices. We can only achieve that by separating our personal bias from problem solving.
tl;dr: Products are hard to design. Very hard. To stand the best chance at success, ideas should stand on their own merits, not on the egos pushing for them.
... and the correct answer is tabs, by the way.