16

I'm having some trouble dealing with a talented, but difficult & overly-critical coworker, and could really use some advice.

I have worked with -- lets call him "John" -- for a little over a year on a very small engineering team. He joined the team about a half year prior to me.

John is one of the most intelligent engineers I have ever met, and has very strong technical skills, however socially he can be quite abrasive and blunt/rude -- not only to me, but to other employees as well. I know this is the case because I have witnessed it, and my manager has even discussed with me John's abrassiveness in the past, telling me that John is "working on it".

In contrast, I am not nearly as skillful or quick of an engineer as John, however (at the expense of tooting my own horn) feel I have great soft skills, and always try to create a supportive and positive environment for myself and my coworkers. I like being around people who are happy and supportive of one another while we make cool things.

One point of contention between us is that John comes from a very strong CS background, with a heavy understanding of algorithms and the complete stack. I'm on the opposite end, from a mostly-design background, and my undergrad, while programming-focused, was comparable to a 4 year web-dev bootcamp. More broad than deep. We're both working together on a handful of fairly complex web applications.

Most of John's abrasiveness comes in the form of bluntness, snide, or dismissiveness. because he understands a particular problem, whether that be algorithm or api or what-have-you, he acts like it should be easy/trivial for everyone. He is very critical during my code reviews, and while not pointing out stylistic differences (we have that covered with linter rules), he just nitpicks the crap out of my work. All the way down to the point on micro-optimizations of extreme edgecases that are just not relevant for the web app we are building.

Conversely, if I try to critique his code with the same granularity, he writes my comments off as "unnecessary", "pre-mature optiizations" or some other handy-wavy "I know more than you" type comment.

I've tried for a long time to not let this bother me, but it is. We recently hired a third engineer to our team (lets call him Mike), who is equally as sharp as John, but fortunately not as abrasive. But now I feel like the odd one out. The two are/were friends prior to Mike joining, and both are way more lenient on each others code reviews than on mine. Frankly I feel like im being picked on, these two guys are friends and are way harsher on my work than each others. They will contradict me in meetings with our manager/other departments, and make me look bad, but never do it to each other. They will implement features and practices without consulting me, that I don't understand as they are more hardcore about CS, and that makes me feel more confused with the product.

I know im a good engineer because all my performance reviews are glowing, but my coworkers are really turning this from something that excited me in the mornings into something I dread.

What can I do to restore some equality and balance to my team?

  • John definitely sounds like a real jerk—sorry you have to deal with this. Does he make the same sort of derisive remarks to other people on your team? – AffableAmbler Mar 15 '18 at 1:46
  • "pre-mature optiizations" Did you mean "pre-mature optimizations"? – uR2die4 Mar 15 '18 at 4:30
  • 1
    Possible duplicate of How can I deal with a difficult coworker? – gnat Mar 15 '18 at 4:49
  • "I know im a good engineer because all my performance reviews are glowing" who is making your performance review ? If it's your boss that don't even look your code, you can shine while leaving a technical mess for others. Since Mike is not as abrasive, you could try to ask Mike to have John presenting better his comments. For instance why removing "pre-mature optimization" and "unnecessary" code ? Because it impacts heaviliy on the readability and maintenability of the code. – Walfrat Mar 15 '18 at 8:35
11

First of all I want to recommend against psychoanalyzing John, I.E. you shouldn't assume things like that this behavior comes from a place of insecurity on his part or otherwise try to deduce the root of why he is acting the way he is. This isn't particularly productive and your focus should be on how you should respond and not on what he is doing wrong or why (I am mainly addressing other answers here).

That said, if you are truly confident that you are a good engineer then you should incorporate this confidence into your interactions with John. Regarding your code review: you should make sure that your code is entirely up to the highest standard that you can achieve. Then, when he nitpicks your code, it will either be the case that a) you have a justification for why the code is the way it is, or b) you don't have a justification in which case you should consider his advice in accordance with how good you think his recommendations are.

If the former case is true (you do have a justification for your code being the way it is) you should make your case and defend yourself with the confidence that your way of doing it is right. You don't have to accept his answer just because he has more experience with the specific technology / software / etc. you are working with; you only have to (or rather should be expected to) accept his answer if he is correct in his assessment and you genuinely can't reason why it should be done your way better than he can.

Lets say he rejects your merge request for some truly inconsequential and utterly nitpicky reason. Something like "you should use periods in your comments rather than colons." An engineer's time is extremely valuable, especially for a good engineer as you are confident you are. You shouldn't be expected to have to devote time to such an insignificant change just because he likes it better that way even though it doesn't add any value to the project if it is one way over the other. You should, then, voice this concern with him. Assuming he is not a completely disagreeable person, it will register with him that he probably shouldn't waste your time with such nitpicks.

The same logic in the context of meetings. If he calls you out for something, defend yourself. Don't sound too desperate, as though it is very important to you that you be perceived positively, but rather just make it clear that a criticism was openly made of one of your design decisions and that you thus feel it necessary to defend that design decision. Don't ever go on the attack, e.g. by trying to knock him down a peg like he seems to do to you. Even if you could reliably identify a potential means of doing this it could still backfire on you if he defends his decisions with confidence. Instead make sure all of your work is in order and that you are prepared to defend your decisions.

The bottom line here is to a) have confidence, and b) project confidence. This is actually a rather challenging endeavor that takes a lot of practice, and so it is far easier said than done, but you should work on it a little every day. In cases where you fail - perhaps he calls you out in a meeting and you fail to defend yourself - do a sort of after action report and ask yourself how you could have defended yourself or how you could have better prepared yourself for having had to defend yourself, etc.

  • Having and projecting confidence is generally a good thing to do, but in this scenario, that could provoke confrontation with John who is already acting aggressively. Getting to understand John's behavior will help the OP deal with him more productively. Quite simply, sustained dismissive or sarcastic overtures are always a sign that something is very wrong and those things are never OK. It might be that John needs to be put in his place with a strong challenge because he's a jerk, but much better to develop a positive cooperative relationship and that requires finding out what's wrong. – Angelo Mar 15 '18 at 23:18
  • My psychoanalytical aside (that I readily admit should be taken with a grain of salt) was really intended to provide a framing narrative to the actions: they have some ultimate reason, but that reason might not make sense in relation to the events being discussed, not be entirely reasonable, and either way can’t be undone, certainly not by an outsider. You outline some good strategies for the OP to set and stick to some boundaries around himself and his work, which he has a right to defend. To that however I can’t help but add: John might end up not liking that either until he gets used to it. – millimoose Mar 16 '18 at 2:04
  • 3
    And speaking of psychoanalyzing, depending on how available this is, OP might also benefit from going over this with a workplace psychologist in a few sessions - they’re specifically trained for this, and the time and confidentiality would allow to discuss the incidents as they happen and without the constraints of an online forum. – millimoose Mar 16 '18 at 2:09
  • @Angelo If you have and project confidence in yourself, and this causes another person to react aggressively, then that is entirely on them. There isn't really any direct reason why acting confident in yourself, in and of itself, would cause another person to react aggressively. Being confident is not the same thing as being disagreeable or yourself aggressive. It is true that being dismissive or sarcastic is not okay but that is almost solely because people might not have confidence in the ideas being sarcastically dismissed, but as OP stated they have confidence that they are a good engineer – Garrett Gutierrez Mar 16 '18 at 18:02
  • @millimoose True John might not like it, but I think the more important thing to ask is what he might do about it. Sarcasm or dismissal would not longer be at this disposal, so he would either have to tend towards resolving disagreements maturely or elevate them to a level that impacts either his or OP's performance. The latter is a combination of very unlikely (I think) and something that would reflect more negatively on John's behavior than OP. – Garrett Gutierrez Mar 16 '18 at 18:15
4

I am going to post a different view on this. What your reviewer is doing could also be considered "tough love". Have you considered using the reviews to improve your skills? I realize this is not easy, but getting to the point behind the critiques will likely teach you quite a lot. That doesn't mean simply doing what is put in front of you, but asking for reasons behind the comments, and following that logic to see where it goes.

Once you're able to discuss the points of the review at a similar level, I would expect reviews to become more lenient, like for his friend - if my take on this is correct, John is not critiquing his friends work as harshly because John knows the lessons he is trying to get across have already been learned.

While snide remarks and sarcasm are not helping, and definitely something John needs to work on, I would advise not to pass up this opportunity. I've been in similar situations, and managed to come out with a better understanding because of it.

If John still ends up being a smart a**, that's him losing the opportunity to better himself, but I think you should take away from this what you can.

  • reviews are the place to train people - that's what training is for. also, "saying someone sucks" isn't really a training technique. nor is contradicting them in front of others. – bharal Mar 15 '18 at 19:27
  • The content of the remarks and the emotional charge behind them are two different sides of this. The question isn’t about the former, it’s about the latter, said charge being clearly an aggressive one and it should be understandable why it’s a problem. Put simply: John seems to be attacking OP, consciously or not. He’s doing so using the substantial issues as a weapon, but that doesn’t excuse the attacks. – millimoose Mar 16 '18 at 1:09
2

I know you haven't said much about your side of the interactions, but that might be a crucial element. You've said you praise when they've done good stuff, and mentioned that you've tried assessing his code the way he does yours, but there isn't a great deal of info on how you deal with him the rest of the time. You've admitted you're not the same style of programmer he is, so going toe to toe in code reviews isn't going to be your best strategy. By doing this, you're just confirming his superiority. Similarly, you've said your co workers slate you in meetings but it's not clear how you respond. It sounds like he doesn't have a great deal of respect for what you do bring to the table- possibly because he doesn't realise what that is (some people only recognise talent when it mirrors what they do!). I'd suggest starting to bounce stuff back at him a little, with your perspective. For example, if he is overly critical of a piece of work unnecessarily, go back and say 'thanks for your input, but for this project I don't think that X is as important as y. Can you explain why you feel this is so important?' If you keep things polite but firm and push back in a way that makes it clear you're not just doing stuff that he thinks is wrong, but are doing it for specific reasons, he might start to realise that actually, although you don't work the same as him, you do have skills.

Similarly, I think it's probably important to start politely disagreeing in meetings when he pulls you apart. Something like 'I'm sorry you disagree with that method/how I've done that, but the functionality that we wanted is present' or similar means that he'll come across as overly pedantic, rather than you incompetent. If he pushes further, you can always say something like 'that's an interesting method. If you feel it's essential to implement that, could you show me why it's superior when we redo the code?'.

It might also be worth having a chat with Mike about the meetings. Something along the lines of 'hey, I've noticed you seem to be a lot harsher on my work than John's. Is it because you have similar working styles, or is it something about my work in particular?'. You should do it in person, at a fairly informal time- water cooler, drinks after work etc, and make it conversational rather than accusatory. He might be just trying to fit in with his friend and not realised how much it's affecting you, or could possibly give you some concrete advice in a less active way than John would. It might also break the dynamic of being ganged up on if he has to justify their behaviour.

Finally, if nothing changes, the management is aware John's abrasive but are doing little about it, it's making you miserable and your performance reviews are glowing, it might be time to look around discreetly for something else. You know you're good, you just need to be in a better team- see what else is out there!

1

The fact that John has some distinct strengths in his skills and chooses to "punch down" on your weaknesses and even use sarcasm against you, points very strongly to two possibilities and maybe a 3rd:

  1. John is replicating the behavior of mentors in his past. Many people get treated to "trial-by-fire" at some point in their careers and end up feeling that this is the way to behave when the tables are turned and they're in any position of authority. John himself might call this "tough love" (see @bytepusher's answer). It's very far from love, but that's how people often think.

  2. John is insecure and this is a defense mechanism. As @millimoose indicated in his comment, whether or not he has reason to be insecure is beside the point. Emotions drive such behavior. It is childish and wrong, but a way to deal with feelings of inadequacy within oneself is to make another person feel even MORE inadequate. Acting smug and dismissive is a common way of compensating for insecurity of status in the organization or even lack of self-confidence.

  3. It could just be that John is "an asshole." I think that is the least likely possibility.

Unless things become intractable, I would refrain from taking this to management. John will likely put on an "objective" demeanor and try to weasel past accountability and point to you as the problem. He will then become even more malignant to you.

The best way to deal with this, regardless of possibilities 1, 2 or 3, is to somehow get John on your side by gaining his trust. You do this by building rapport and showing your human side. To do this it is really important to maximize face-to-face time with John. Interaction by email, pull-requests, or code-reviews are not a good way to build trust. You can't tell John in a code review in front of everyone, "Hey, I didn't appreciate that sarcasm!" You can pull him aside at the water-cooler and ask "I detected some sarcasm in your remark earlier, that hurt, what's going on man?" It will lead to difficult conversations, but there is a good chance to make progress if John knows he won't "lose face" by interacting with you.

You might try to praise John's work in areas where he demonstrates expertise and good behavior. Try to defer to him when you can as a way to show that you're not trying to edge-in on his work. It sounds kind of ridiculous, but lots of adults lack the ability to understand how they're being perceived by others, it's a mild developmental defect-- to some extent you (and other people-savvy folks) need to use strategies similar to what you might use on a child or petulant teen.

  • Thanks for the reply. I'm doubtful he feels threatened at all by me. He and I both know he knows our product and general programming better than I -- I freely admit this to him, a he has more experience. He's also the "point man" on our team for product questions, most people in the org seem to just go to him ( and not me ) to get answers. Which I'm also OK with. But I feel like his standards are too high and unreasonable for a collaborative environment that doesnt consist of clones of him, which is what his expectation seems to be. – didgy Mar 15 '18 at 1:14
  • Additionally, I do try and complement / congratulate him when he does something cool. I do that to the whole team ( IMO part of building a supportive environment ). The only "compliments" I get from him are dripping with sarcasm, ie "wow good job implementing those radio buttons" (for a feature that we both know was trivial). Anything I code of real substance, he is incredibly harsh on. – didgy Mar 15 '18 at 1:16
  • 1
    @didgy - Speaking as a person with that acts (out) like John now and then, I’ll second the educated guess that John’s aggression may be a form of defense of a wounded self-esteem. Logically, he might have no sound reason to feel threatened by you; however facts have little to do with a primal reaction like this. Neurotic behaviour evolves in response to threats over time - brains rewire slowly, which means that what used to be a more-useful-than-not defense mechanism remains even when the threat that provoked it is no longer around. (And this said mechanism becomes maladaptive.) – millimoose Mar 15 '18 at 2:56
  • 1
    As for what to do, “not letting it get to you” is your strongest tool, least likely to backfire. You mention your performance reviews are great, so it seems that ultimately John’s belligerence doesn’t affect you negatively in your career? Don’t derive your sense of worth from him, and it’s neither your place nor your responsibility to change his behaviour. For a long-term solution, my opinion is that whoever in management - i.e. not his target - feels personally closer to John or Mike should consider gently nudging John towards a therapist; unfortunately social stigma makes this also tricky. – millimoose Mar 15 '18 at 3:05
  • @didgy, I clarified my answer a bit with some insights from millimoose. – Angelo Mar 15 '18 at 11:47
-1

I don't think the problem is what you say it is.

" They will contradict me in meetings with our manager/other departments, and make me look bad, but never do it to each other. They will implement features and practices without consulting me, that I don't understand as they are more hardcore about CS, and that makes me feel more confused with the product. "

I would go nuts if someone contradicted me in meetings with a manager/other person. It would be both professionally and personally insulting. I suspect that is the real issue you're facing, rather than boring code reviews.

To that end, you need to escalate to your manager. Tell him/her that when John does this it negatively impacts how you feel about working in the team, your motivation and rattles your self-confidence. Ask him/her for help, because you're not enjoying the workplace.

Ok, so now that that is getting paid attention to, you want to deal with the code reviews.

Are your code reviews in person? And if so, why? Seems like a titanic waste of time - just do them in everyone's spare time online using fisheye or crucible or whatever it's called.

The best thing about this is that you can just ignore people's comments. And you don't have to spend an hour all together looking at code minutia.

But the real issue seems to be the knowledge disadvantage you're at, compared to your coworkers. I'd suggest that, in place of the meeting time that you have to do code reviews, you do knowledge sharing. Don't worry, there's always compiling time to check other people's code.

Ask them to go through their code with you - go into a room, and get them going over it with you. They don't really need to consult you to add features - but they should be sharing what they're doing with you in a way you can understand.

  • Thanks for the reply. Our code review is via github, you comment on the open PR. Im unable to merge in my code until a coworker approves it, so the code review blocks me from finishing my work. if its not satisfactory to my coworker(s) standards, nothing I write gets merged in. Nothing I can do about it. – didgy Mar 15 '18 at 1:03
  • 2
    A bit of a tangent, but I’m getting the hint that your code review might be in a cultural failure mode - the point of them at the process level shouldn’t be merely “only perfect code gets merged in”, but also supporting knowledge exchange. They’re exactly where a junior is supposed to be able to ask a senior “I don’t understand this thing you added, can you give me a quick explanation?” If this doesn’t happen, you might find a resource supporting this and bring that up to the project manager, who should have the authority to influence process like this. – millimoose Mar 15 '18 at 3:12
  • 1
    (And possibly sneak in measures against the belligerence while the above is being implemented.) – millimoose Mar 15 '18 at 3:13

Your Answer

By clicking "Post Your Answer", you acknowledge that you have read our updated terms of service, privacy policy and cookie policy, and that your continued use of the website is subject to these policies.

Not the answer you're looking for? Browse other questions tagged or ask your own question.