Skip to main content

Conflict Resolution in Engineering Teams: Data-Driven Approach

· 10 min read
Artur Pan
CTO & Co-Founder at PanDev

Two senior engineers at a 60-person SaaS I mentored stopped speaking for seven weeks. The cause, by their accounts, was "a personality clash." The cause, by the data: engineer A had merged without review into engineer B's service 23 times in 8 weeks; engineer B's review queue had grown from 4 PRs to 31 in the same window. Each had a legitimate grievance neither could cleanly articulate. The moment their EM put the two numbers on a slide, the fight ended — not because anyone won, but because the dispute stopped being about the other person's character.

Most conflict in engineering teams isn't about personalities. It's about process gaps, priority mismatches, and workload inequities that people can't see from inside the conflict. A 2022 Harvard Business Review study on team dysfunction placed "ambiguity about who owns what" as the #1 driver of interpersonal conflict on knowledge-work teams. The resolution isn't better feelings — it's a shared picture of reality. Data is how you build it.

{/* truncate */}

The four conflict types on engineering teams

Flow: Type A Code review disputes → Data PR stall. Type B Ownership conflicts → Data commit overlap. Type C Priority conflicts → Data task-completion spread. Type D Workload conflicts → Data hours distribution. Resolution: data-first conversation. The four common conflict types. Each has a distinct data signature in Git/PR/IDE activity.

Most interpersonal friction on engineering teams reduces to one of four underlying conflicts. They look the same from inside — "I can't stand working with X" — but resolve very differently.

TypeWhat it looks likeData signature
A — Code review disputeLong re-review cycles, passive-aggressive commentsPR stall time, review-round count per PR
B — Ownership conflict"They keep touching my code without asking"Commit overlap on shared files, cross-author merges
C — Priority conflict"They don't understand what actually matters"Task-type split per person (feature vs infra vs fix)
D — Workload conflict"I'm drowning while they're coasting"Hours distribution, weekend-work pattern

Diagnosis first, technique second. The wrong technique on the wrong type makes the conflict worse.

Type A — Code review disputes

Surface: "X keeps rejecting my PRs" / "Y writes unreviewable code."

Data to pull:

  • PR stall time by author × reviewer. For each merged PR, time from PR-open to merge, broken down by reviewer involvement.
  • Review-round count. Average number of re-review cycles per PR between the two engineers.
  • Comment density and tone. Count of comments per 100 lines of diff. Tone can't be quantified automatically, but density often proxies "friction."

A healthy pair sits at 1-2 review rounds per PR and a stall time close to the team median. Conflict pairs often show 4-6 rounds per PR or stall times 2-3x team median.

Resolution conversation:

  1. Show the two numbers to both engineers separately first
  2. Ask each: "What would have to change for this number to halve?"
  3. Joint meeting to agree one concrete change — usually either stricter PR-scope discipline (smaller PRs) or a pre-review chat norm

Don't ask "do you have a conflict?" Ask "what's slowing your work?" Data reframes it from feelings to workflow.

A short example

Two engineers were stuck at 4.2 review rounds per PR. After data conversation, agreed: PRs over 400 LOC require a 10-minute pre-review call. Within 6 weeks, rounds dropped to 1.8. The "conflict" resolved because the cause (PRs too big for async review) resolved.

Type B — Ownership conflicts

Surface: "X keeps touching my service without asking" / "Y gatekeeps everything."

Data to pull:

  • Commit overlap per shared file. Which files in the last 60 days have commits from both engineers? Which files are "owned" by one (80%+ of recent commits)?
  • Cross-author merge events. How many times did engineer A merge into engineer B's owned files without engineer B's review?
  • Task-to-file mapping. Were the cross-author changes driven by in-scope tasks or ad-hoc decisions?

Healthy shared ownership shows bidirectional edits with review. Pathological patterns: one-way incursion (A commits into B's service 20x; B commits into A's service 0) or gatekeeping (A requires re-approval on changes that have nothing to do with A's service).

Resolution conversation:

  1. Draw the service-ownership diagram explicitly (even if informal before)
  2. Agree on the review rule: does cross-service change require owner review or just notification?
  3. If workload on the "incursion" was driven by emergency, discuss whether the staffing is right

Code ownership has to be an explicit team decision. Implicit ownership is where type-B conflicts live.

Type C — Priority conflicts

Surface: "X always picks the glamour work" / "Y does nothing but refactor."

Data to pull:

  • Task-type distribution per person over last quarter: % feature / % refactor / % bug fix / % infra / % on-call response.
  • Strategic allocation vs actual. If the team agreed "30% refactor quota this quarter," who hit it and who didn't?
  • Correlation with career path. Refactor-heavy engineers may be signaling for senior/staff promotion; feature-heavy may be signaling for high-output recognition.

The conflict is often about fairness of the work mix, not about the work itself. An engineer doing 80% refactor feels undervalued when promotion talk centers on feature shipping; an engineer doing 80% feature work feels like they're doing all the "real" work while others "just refactor."

Resolution conversation:

  1. Show the distribution (by person) publicly to the team
  2. Ask the team: "Does this match what we agreed to?"
  3. If not — either the agreement was wrong, or the staffing is wrong
  4. Name which work is career-compounding and make sure every engineer gets a share

Priority conflicts resolve when the team agrees (publicly) what mix is desired, then tracks it. Not when individuals argue their preferences.

Type D — Workload conflicts

Surface: "X works nights and weekends, I don't" / "Y never responds on Slack."

Data to pull:

  • Coding-time distribution weekly, per engineer.
  • After-hours and weekend work hours.
  • PR throughput and review-completion rate.

Healthy team: weekly coding-time median within 20% range across engineers, after-hours < 5% of total, weekend work rare.

The hardest conflict type: often one engineer's self-story is "I work harder" and the other's is "I work smarter." Data reveals the reality is usually neither or both.

Resolution conversation:

  1. Show the weekly distribution and after-hours pattern
  2. If the hard-worker is logging 55-hour weeks, ask the EM: is this the expected load? Can we add headcount or cut scope?
  3. If the "coaster" is actually shipping equivalent output in 35 hours, that's a pattern to protect and learn from, not punish
  4. If the distributions are similar but throughput gaps are real, the conflict is type A or C in disguise

The burnout signal. If after-hours work is > 15% of total weekly hours for either engineer, the conflict is a symptom of a burnout pattern — fix that first.

The data-first conflict conversation template

Run this template when you spot any of the four signatures:

StepWhatPurpose
11:1 with each engineer separatelyHear each side's self-story without contradiction
2Pull the relevant data behind closed doorsIdentify which type (A/B/C/D) applies
3Share the data with each engineer separatelyRemove defensive reflex
4Ask "what would make this better?"Let each propose
5Joint 30-min meeting, data on screenAgree ONE concrete change
64-week check-inVerify movement, not perfection

The key inversion: most managers start at step 5 (joint meeting) with emotional data. Start at steps 1-3. The joint meeting is the easy part once the data exists.

The numbers that matter across all four types

MetricHealthy range (weekly, per engineer)Warning threshold
PR stall time (median)8-48 hours> 96 hours
Review rounds per PR1-2> 3
Cross-author PR %10-30%< 5% or > 50%
Coding-time variance across team< 25% (coefficient of variance)> 50%
After-hours hours< 5% of total> 15%

These are anchors. When any metric lands in warning territory between specific pairs of engineers, a type-A/B/C/D conflict is likely forming — address it before it becomes the "I can't stand X" conversation.

How PanDev Metrics surfaces the signal

PanDev Metrics segments IDE and Git activity per-person and per-pair. For EMs, the useful view is the pairwise activity matrix: for each engineer pair on the team, their PR stall time, review rounds, cross-author commit overlap, and coding-time difference. When one cell turns warning-colored, the EM has a data-backed reason to open the conversation before it surfaces as interpersonal complaint.

We also track weekly focus-time and after-hours patterns — the two signals most predictive of type-D conflicts. The burnout detection patterns are the same underlying signal, interpreted at the individual level instead of the pairwise level.

Common mistakes to avoid

  • Waiting until the complaint reaches HR. By then, the data has been obvious for months. Watch the matrix quarterly.
  • Using data as evidence against one person. Data resolves conflict when it's shared with both engineers, not about one. If you present data as "here's why engineer X is the problem," you've made the conflict worse.
  • Confusing correlation with causation. A review-stall pattern might be caused by PR size, not personalities. Ask before concluding.
  • Skipping the 1:1 step. Joint meeting without individual prep turns into a debate.
  • Expecting resolution in one meeting. The pattern took months to form. A 4-week check-in is where you verify the fix is real.

The contrarian claim

Most engineering-team "personality conflicts" are actually process failures in disguise. Teams and managers over-index on EQ and under-index on measurable workflow friction. When you fix the process (PR size, ownership clarity, priority agreement, workload balance), the personality conflict often disappears — not because anyone grew up, but because the underlying friction went away. The rare case where it's actually about personality is the minority, not the majority. Don't start the conversation there.

Honest limits

We can see pairs of engineers' Git and IDE activity. We cannot see their Slack DMs, their body language, or the 15-year dynamic between them if they worked together before joining your company. Some conflicts are irreducibly personal, and the data won't resolve them — it'll just tell you that the work patterns look normal, which means the issue is elsewhere. Combine data review with 1:1 conversations; neither alone suffices.

Our dataset on pairwise conflict is observational, not experimental. The four types above are inductive categories from customer conversations + our own observations across 100+ B2B companies — not a published taxonomy. Use them as hypotheses, not certainties.

Ready to see your team's real metrics?

30-minute personalized demo. We'll show how PanDev Metrics solves your team's specific challenges.

Book a Demo