Back home

The Importance of Healthy Criticism in Software Engineering Teams

Conflict avoidance helps in social settings, but it can hurt engineering teams. Here’s why healthy criticism is essential for building better software.

The Importance of Healthy Criticism in Software Engineering Teams
Carsen Asterino Carsen Asterino

Thu Mar 05 2026

We spend the majority of our adolescence and later formative years learning how to properly interface with others. The ability to conform, compromise and prosocially adapt is a trait that kept our ancient ancestors alive for thousands of years. We can look back, with clear eyes, and say that the selection of those traits were critical for the development of a modern, polite society.

Yet there is no shortage of natural human behaviors that are over-expressed in the world we see today. Many negative traits immediately come to mind, tribalism, pride, in-group bias. But it’s easy to miss the overexpression of prosocial traits, like conformity, conflict-avoidance, and deference. All of these traits, in a casual, social setting, would not only be well-received, but would actually increase the amount of value and depth of that interaction.

The key point is that these traits must be evaluated within their context. In a social situation, the valuable metric is prosociality and camaraderie, which is distinctly different from the setting of a software engineering team, where scalability and performance are some of the key metrics being valued. What strengthens one domain can negatively impact the other.

When building a team whose sole purpose is to produce high-quality code, creating a culture of healthy disagreement is extremely desirable. We’ve all been in technical meetings where team members are suggesting design choices for implementing a new feature, but there are several long seconds of pause, waiting for criticism, after a member of that team finishes their proposal. These seconds are almost always hesitation, no one wants to step forward when the potential consequences could result in social friction.

The most valuable ideas in technical conversations come from spirited disagreement, where both sides have a genuine interest in coming to the most effective solution and have an actual interest in listening. This seems unintuitive for us initially, why would we want to have disagreement within a group of people when, in almost every other domain in life, disagreement results in negative consequences? In reality, the reason is fairly obvious and comes down to collective intelligence. Groups that openly challenge ideas explore more possibilities than individuals thinking alone.

Therefore, the critical lesson for people managers and team members alike is to apply principles that increase the willingness for disagreement, more technically, we need to optimize for the metric of the domain. The prescription to this problem is potentially as long and complex as the entire evolutionary history of humans, but it can be distilled to a few simple principles.

Separation of Identity from Output

It’s natural for us to connect our own value to the quality of our ideas, an overconnection here can lead to insecurity and resistance to sharing opinions. Likewise, if another team member is concerned about hurting another’s feelings, they’re much less likely to provide feedback. A culture that fosters the separation of identity from output will always outpace one that doesn’t. In practice, we can centralize focus on the code rather than the coder.

Normalization of Disagreement

From the outset, mature disagreement should be commonplace. It’s important that upon team creation, leaders should express their disagreement and opinions about proposed ideas, not about the people themselves. This will set an example for others to follow in time. Concretely, this looks like explicitly inviting counterpoints, thanking objections and making “stress testing” of ideas part of the process.

Praise Intellectual Flexibility

In healthy disagreement, changing your mind should feel effortless, it should not reflect poorly on the person changing their mind that they’re doing so. Ideally, changing your mind should be fostered to be an action that is a status-positive behavior. To reinforce this, the moment someone changes their mind it should be socially rewarded. Without this, people will defend their ideas to save face rather than in the interest of the product they’re helping to produce.

Healthy disagreement is not a trait that emerges naturally, it is something that requires constant attention. Deliberate cultural signals are important to foster this culture, eventually these signals will become more natural and less performative. Team members will begin to assume positive intentions of their colleagues and be more willing to mirror their disagreement. When engineering teams separate identity from output, normalize disagreement, and reward intellectual flexibility, criticism stops becoming a threat and turns into an important tool for discovering better ideas.