Working with Difficult Coworkers in Software Teams: Beyond Textbook Solutions
A field guide to engineering-specific difficult coworkers, from code-review blockers to ghost colleagues, with practical strategies that work for each archetype.
Generic workplace advice about difficult coworkers fails on engineering teams because the friction has technical roots. A blocked deployment, a code review that turns into a 47-message naming debate, or a teammate who vanishes during an outage are not personality clashes you can resolve with the standard Pessimist, Passive-Aggressive, and Know-It-All playbook. The behavior is amplified by code ownership, review authority, and on-call pressure.
That mismatch produces archetypes the management literature does not cover: the perfectionist blocker, the technical purist, the ghost colleague. Each one needs a different response, and that response is usually a process change; direct confrontation is rarely the first move.
Five Archetypes in Engineering Teams#
The Perfectionist Blocker#
A 10-line function comes back with 47 comments, working code gets a rewrite request because “it could be cleaner,” and a deployment waits on formatting inconsistencies. A common version: a senior engineer spends three weeks optimizing a utility function that saves microseconds on a feature used twice a month, while the rest of the team waits for approval on critical bug fixes. Review cycles get longer and sprint velocity drops; junior developers start avoiding pull requests, and deployment cycles stretch from days to weeks.
Channel their perfectionism into architecture reviews, where the scrutiny is genuinely useful. Defining “good enough” criteria for different types of changes puts a natural boundary on how far a review can go. Time-boxed reviews and templates that focus on functionality over style stop the cycles from stretching indefinitely, and coding standards documentation gives the instinct somewhere useful to land.
The Technical Purist#
A technical purist rejects pragmatic solutions in favor of “pure” ones. They oppose third-party libraries on principle and insist on building everything from scratch because vendor solutions are “impure.” A tech lead insists on writing a custom authentication system instead of using Auth0, arguing “we can’t depend on external services.” The reasoning is ideological: every outside dependency reads as a compromise. The feature that should have taken two weeks ends up taking three months to implement.
Business context belongs in every technical discussion, along with a cost-benefit analysis on the custom build. Purity has value on greenfield projects and gets in the way during maintenance work, so rotating the purist between the two matches the instinct to where it helps. Architecture decision records that require justifying a choice beyond personal preference force the discussion back to the trade-off itself.
The Ghost Colleague#
Urgent Slack messages go unanswered, critical meetings get missed without notice, handoffs arrive with minimal context, and “deep work” is offered as the justification for all of it. During a production outage, a mid-level developer is unreachable for four hours: no response on Slack, email, or phone. When they finally surface, the defense is “I was in flow state and didn’t want to break concentration.” The rest of the team had been fighting fires while they worked on a personal side project during business hours.
Explicit availability windows and communication response times replace a vague expectation with something the team can hold someone to. When one person goes dark, buddy systems cover the critical responsibilities they were carrying, and escalation paths keep the team from stalling while waiting for them to resurface. Regular check-ins should ask about collaboration patterns, not only technical deliverables.
The Credit Vampire#
In an all-hands meeting, a team lead says “I implemented the new authentication system” when it was a three-person effort spanning two months. Teammates’ contributions get minimized in public, and the junior developers whose growth goes unrecognized start considering other opportunities. The counter is procedural: attribution requirements in documentation and presentations, recognition practices that name individual contributions, and attention to who presents the team’s work in meetings.
The Micromanager Peer#
A peer with no formal authority behaves as though they own every decision. A senior developer pings the entire team every time someone commits code, demanding explanations. They join every architecture discussion uninvited, challenge decisions already made by the appropriate owners, monitor Slack constantly, request status updates, and insert themselves into every thread and decision-making process, including the ones outside their area.
Ambiguity feeds this behavior, so clear ownership boundaries and explicit decision-making authority matter here. Escalation paths that bypass the micromanager let other team members act without routing through them. Understanding the difference between peer feedback and directive communication clarifies how much authority the person actually has.
Where the Cost Shows Up#
The impact of difficult coworkers lands in engineering-specific places:
- Sprint completion slows when work queues behind one person’s approval
- Review cycles stretch when a problematic reviewer sits in the path of every change
- Meeting efficiency drops when one participant monopolizes the discussion
- On-call response times increase when a teammate is unreachable during an incident
Turnover carries its own bill. Replacing a departing developer costs hiring time, onboarding, and months of ramp-up, and that load falls on the team that is already strained. High-performing developers often leave first, creating knowledge drain.
Then there are the workarounds, which stay in the codebase as technical debt. Teams sometimes implement elaborate deployment processes to avoid getting reviews from perfectionist blockers, or duplicate functionality to avoid depending on code owned by unresponsive teammates.
What Remote Work Amplifies#
Remote work changes how difficult behaviors show up and how far they spread before anyone notices. Text-based communication removes emotional context, which makes passive-aggressive behavior more potent: emoji reactions turn into subtle disagreement, and strategic delays in responding create bottlenecks that frustrate entire teams. “Camera off” policies let people disengage from difficult conversations, time zone differences get weaponized as excuses for missing important decisions, and technical difficulties become a convenient way to avoid accountability.
Tracking down an unresponsive remote teammate is harder too. What used to be a walk to someone’s desk becomes a multi-channel investigation, and the cost of communication failures multiplies without spontaneous conversations to fall back on.
Some of what gets labeled difficult is a mismatch in communication style. A developer pushing for rapid advancement can read as “pushy,” and a colleague who emphasizes experience and process can read as “gatekeeping.”
Code Review Battlegrounds#
Code reviews should be collaborative learning experiences, but they often become venues for ego battles and technical superiority contests. The shapes repeat:
- Personal attacks disguised as technical feedback: “This is terribly written code”
- Perfectionist nitpicking on cosmetic issues while ignoring functional problems
- Passive-aggressive suggestions that require complete rewrites
- Public humiliation through overly detailed criticism on simple changes
Guidelines that separate the code from the coder give a reviewer something concrete to point at, and review templates that ask about functionality, maintainability, and business impact keep the discussion on the change itself.
Friction at the Product and Design Seams#
Engineering teams don’t operate in isolation, and the hardest cases often sit where Engineering, Product, and Design meet. Product managers who don’t understand technical constraints can become demanding and unreasonable, while engineers who dismiss product requirements as “not technical enough” create adversarial relationships; estimation battles often reveal that both sides are technically correct but fundamentally misaligned on priorities. The same cycle runs with design, where mockups arrive without technical consultation and the requirements get dismissed as “just aesthetics,” and both sides settle into blame.
Regular cross-functional sessions where constraints and requirements are discussed before work begins keep both sides in the same conversation.
Documenting the Behavior#
A written record of observable impact is what a conversation or an escalation can rest on. “John is difficult” gives nobody anything to work with. “John’s code reviews average 15 comments per 10-line change and extend review cycles by 5 days” describes something that can be checked, discussed, and changed. Keep the skills gap separate from the attitude question while you write it down: some “difficult” behavior comes from impostor syndrome or from expectations nobody made explicit.
From there it is ordinary engineering discipline applied to people, with retrospectives and health checks supplying the data: form a hypothesis, run the experiment, measure the result, adjust.
Deciding When to Escalate#
Most difficult behavior never needs formal intervention. Handle it peer to peer while the cost lands on team productivity and not on individual well-being. The same holds when the root cause looks like miscommunication or unclear expectations, when the person shows willingness to acknowledge and change, and when team dynamics still respond to process changes.
Escalate when:
- Behavior creates hostile work environment or harassment
- Peer intervention has been attempted without improvement
- Multiple team members are considering leaving because of the individual
- The behavior violates company policies or legal requirements
Getting a Baseline#
Start with anonymous team surveys about interpersonal challenges. Questions as plain as “What behaviors on the team frustrate you most?” and “What would make team collaboration more effective?” can provide valuable insights. Write down the current team metrics alongside them: sprint velocity, code review cycle times, meeting efficiency, on-call response rates. Those become the baseline for measuring improvement.
Guardrails, Then Structural Change#
Meeting guidelines with strict timeboxing come first, with visible timers and rotating facilitation to prevent monopolization. Code review templates focus discussions on business impact rather than personal preference. Communication expectations belong here as well: explicit response time requirements, availability windows, and escalation procedures for when team members are unreachable.
Once those guardrails hold, layer in structured retrospectives that put team dynamics on the agenda alongside technical processes, and peer feedback systems where team members can comment on collaboration patterns. Team working agreements that name the behaviors you’ve identified as problematic work best as living documents that change with the team. Rotating leadership roles distribute authority further: different team members facilitate meetings, lead technical discussions, and mentor junior developers, which cuts the chances that one person monopolizes any of it.
Signals Before the Breaking Point#
Sprint velocity trends, code review cycle time, and meeting attendance patterns catch friction before anyone names it directly. A sudden velocity drop, review times that climb while first-pass approval rates fall, and people quietly skipping meetings tend to point at the same root cause: an unaddressed team dynamic problem.
At the individual level, response time to team communications tracks engagement and collaboration willingness as well as code commits do. Whether review feedback produces better code or just longer arguments says more than counting comments. On the intervention side, fewer escalated conflicts, better satisfaction scores, fewer unplanned departures, and whether high performers choose to stay are the outcomes worth tracking.
Where the Standard Playbook Backfires#
Trying to change difficult people through logic and reasoning rarely works when it ignores their underlying needs. Prioritizing being “right” in a conflict over being effective creates more problems, and so does avoiding a difficult conversation in hopes it resolves on its own. Overly complex processes built to route around a root cause backfire the same way, adding overhead to what is often just a communication style mismatch.
Company culture’s effect on individual behavior gets underestimated too. Someone who seems “difficult” in one environment might thrive in another with different expectations and support structures. Working agreements set on day one of a new team’s formation, before problems have a chance to surface, prevent many of these problems outright.
Many “difficult” behaviors stem from fear or insecurity, so an environment where people can admit mistakes, ask questions, and disagree constructively is the prevention side of the same problem. Not everyone is comfortable raising an interpersonal issue in a group setting, which is why 1:1 time, anonymous reporting, and peer feedback need to exist alongside the retrospective. Making collaboration an explicitly valued and measured part of performance reviews puts weight behind all of it.
When Archetype Handling Stops Working#
Archetype-based handling works while the behavior is a pattern you can name, the person is willing to adjust, and the cost lands on productivity instead of on someone’s well-being. Under those conditions, documenting the behavior, changing the process around it, and measuring the result gets most teams back to working order without a formal escalation. When the situation matches the escalation signals above, that default stops applying: those cases need management and HR involvement.
References#
- What Is Psychological Safety? - Harvard Business Review (opens in new tab) - Amy Edmondson’s foundational HBR article; the psychological safety framework underpins the “prevention over cure” approach to difficult team dynamics.
- Crucial Conversations: Tools for Talking When Stakes Are High - Crucial Learning (opens in new tab) - Patterson, Grenny, McMillan, and Switzler; techniques for opening a high-stakes conversation without triggering defensiveness.
- What People Get Wrong About Psychological Safety - Harvard Business Review (opens in new tab) - Nuanced treatment of when psychological safety interventions work and when they do not, including the difference between skill gaps and attitude problems.
- Understand Team Effectiveness - Google re:Work (opens in new tab) - Project Aristotle research; psychological safety as the top predictor of effective team behavior, including handling interpersonal conflict.
- U.S. Employee Engagement Sinks to 10-Year Low - Gallup (opens in new tab) - Gallup’s 2024 workplace research; engagement data showing how unclear expectations and disengagement spread through teams.
- Drive: The Surprising Truth About What Motivates Us - Daniel Pink (opens in new tab) - Pink’s autonomy, mastery, and purpose framework; foundation for understanding the underlying needs that drive difficult behaviors.
Related posts
A field guide to spotting, managing, and resolving conflict in software teams, with practical frameworks and early-warning systems that turn friction into performance.
leadership · team-management · best-practices +4
Unclear role expectations quietly drain software team productivity; here are proven RACI, swim-lane, and escalation frameworks to remove the waste and lift performance.
leadership · team-management · best-practices +4
How Arnold Mindell's Deep Democracy principles transform technical decision-making, build psychological safety, and ensure every voice strengthens architecture.
psychological-safety · team-management · team-dynamics +4
Turn adversarial product-engineering standoffs into collaborative delivery with Deep Democracy principles that surface dissent and reduce burnout.
product-management · engineering-management · team-dynamics +4
Stop asking who wrote the legacy code. Separate responsibility, accountability, and blame, and make inherited code owned rather than orphaned.
engineering-culture · leadership · team-management +3