Table of Contents
One of the biggest myths in the software industry is that great engineering teams are built by hiring great engineers.
They aren't.
I've worked with incredibly talented developers who eventually became disengaged, indifferent and unwilling to contribute beyond the bare minimum. I've also worked with average developers who grew into exceptional engineers because they were surrounded by a culture that rewarded curiosity, ownership and continuous improvement.
The difference was never talent.
The difference was culture.
The toxicity nobody talks about
When people hear the term toxic workplace, they usually picture shouting managers, impossible deadlines, public humiliation and constant pressure.
Those environments certainly exist. But some of the most damaging engineering cultures are far more subtle.
On the surface, everything looks professional:
- Meetings are calm.
- Nobody raises their voice.
- Everyone speaks politely.
- The company presents itself as collaborative and mature.
Yet beneath that polished exterior sits a culture that quietly destroys accountability and discourages anyone from caring too much. It's harder to spot than the loud kind of toxicity, and because it's harder to spot, it lasts much longer.
A simple pull request that revealed a bigger problem
Recently, while reviewing a pull request, I asked a few straightforward questions:
- Why are we passing an empty string to a component that doesn't work without an ID?
- Why is a skeleton component living in a file where it doesn't logically belong?
- Could this conditional be simplified for readability?
These weren't major architectural concerns. They weren't requests to redesign the application.
They were ordinary engineering discussions, the kind that happen every day inside healthy teams.
To make it concrete, here's an illustrative example of the kind of thing I mean (not the actual code from that review):
// Before: the component can't do anything useful without an ID,
// but we pass an empty string anyway and hope for the best.
<UserCard userId={user?.id ?? ''} />
// After: make the requirement explicit and handle the missing case.
{user?.id ? <UserCard userId={user.id} /> : <UserCardSkeleton />}Small, boring, reasonable questions. Exactly the sort of thing code review exists for.
When ownership disappears
What happened next was far more interesting than the code itself.
Instead of discussing whether the observations were valid, the conversation immediately shifted toward ownership:
- Who originally wrote the code?
- Who moved the code?
- Who was responsible for introducing it?
The discussion was no longer about improving the software. It became an exercise in distancing people from responsibility.
And that is one of the earliest warning signs of a toxic engineering culture.
In healthy teams, the PR is yours
In healthy teams, once code appears in your pull request, you own it.
It doesn't matter whether you originally wrote it. It doesn't matter who committed it first. What matters is whether the code deserves to exist in its current state.
- The goal is improvement.
- The goal is quality.
- The goal is collective ownership.
In toxic teams, survival comes first
Toxic teams think differently. In toxic environments, survival becomes more important than ownership. Engineers learn that admitting flaws creates risk, while avoiding responsibility creates safety. Over time, that behavior becomes normal.
People stop asking:
"Can we improve this?"
And start asking:
"How can I avoid being associated with this?"
Here's how the same moments tend to play out in each kind of team:
| Situation | Healthy team | Toxic team |
|---|---|---|
| A reviewer spots a problem | "Good catch, let's fix it." | "I didn't write that part." |
| Old code shows up in a diff | Whoever touches it improves it | Nobody touches it |
| Someone asks "why?" | The reasoning gets explained | The question gets deflected |
| A suggestion is debatable | Trade-offs are discussed | It's labeled "personal preference" |
| Someone raises a concern with leadership | The concern is engaged with, even if declined | "Do it yourself then" |
Death by a thousand compromises
Software systems rarely collapse overnight. They decay slowly.
- A redundant condition stays because nobody wants to touch it.
- An unnecessary abstraction survives because nobody wants to revisit it.
- A poorly organized file structure keeps growing because nobody wants to challenge it.
Technical debt piles up not because engineers fail to recognize problems, but because the culture actively discourages solving them.
The most dangerous phrase in engineering
During the review, one response stood out. A discussion about simplifying code was quickly dismissed as:
"Personal preference."
At first glance, the phrase seems harmless. Sometimes it is. Not every style debate deserves a long thread, and real preferences do exist.
But in many organizations, "personal preference" has become a convenient escape hatch for avoiding technical discussions altogether. Once a topic is labeled subjective:
- No evidence is required.
- No trade-offs are discussed.
- No reasoning needs to be presented.
- No improvement needs to happen.
The conversation simply dies.
How teams go stagnant
Over time, organizations become intellectually stagnant. Code reviews stop being collaborative quality exercises and turn into ceremonial approvals. Engineers stop challenging decisions because experience has taught them that meaningful discussions will be dismissed before they begin.
Everyone stays "productive":
- Tickets get closed.
- Pull requests get merged.
- Velocity charts look great.
Meanwhile, quality quietly declines.
The leadership failure
The most revealing moment came later.
After trying to discuss these concerns with leadership, I received a response that can be summarized as:
"If you care about it so much, do it yourself."
That single response revealed a much bigger problem than any code review ever could.
Leadership is not about agreeing with every suggestion. Leaders are allowed to:
- disagree,
- prioritize delivery over refactoring,
- reject ideas.
Those are legitimate business decisions.
But leaders cannot dismiss the act of raising concerns itself.
- The moment initiative becomes an inconvenience, organizations start teaching people not to take initiative.
- The moment curiosity becomes annoying, people stop asking questions.
- The moment ownership becomes a burden, people stop taking ownership.
And eventually, the company gets exactly what it trained its people to become.
The illusion of alignment
Many leaders mistake silence for success.
Pull requests get fewer comments. Meetings get shorter. Disagreements disappear. Everyone appears aligned.
Photo via Unsplash
But often, what has actually disappeared is engagement.
The most dangerous moment in any company is not when engineers complain. It's when they stop complaining.
Complaints mean people still care enough to fight for a better outcome. Silence often means they have accepted that nothing will change.
By the time leadership notices the consequences:
- The best engineers have mentally checked out.
- Technical debt has been piling up for years.
- Product quality has declined.
- Delivery slows down despite increasing effort.
The organization then starts searching for technical explanations to what is fundamentally a cultural problem.
Photo via Unsplash
Wrapping up
Toxic companies rarely fail because they hire bad engineers. More often, they fail because they systematically teach good engineers that caring is a waste of time.
- Every ignored concern.
- Every dismissed discussion.
- Every attempt to avoid ownership.
- Every leader who responds with "Do it yourself then" instead of engaging with the problem.
These are not isolated incidents. They are symptoms of a culture that rewards compliance over excellence.
Key takeaways
- Culture beats talent. The same engineer can thrive or check out depending on the environment around them.
- Code in your PR is your code. Ownership doesn't depend on who typed it first.
- "Personal preference" should start a discussion, not end one. Ask for the trade-offs.
- Silence is not alignment. A quiet team may simply be a team that has stopped caring.
- Leaders can say no, but they can't punish people for asking.
Once an organization successfully teaches its engineers that caring is pointless, recovering from that lesson is far harder than fixing any bug, refactoring any system or rewriting any codebase.
Originally published on dev.to.

