Ask HN: How to deal with incompetent people

177 points by zldkz5 ↗ HN
Long story short: I've been working in this position for a couple of years with a colleague at the same level as me. We both lead a few product team giving them advice on technical implementation, best practices and architecture.

I've been doing a lot of work to clean up the debt that was accumulated and, meanwhile, I improved the reliability and the efficiency of the infrastructure. I wrote common components and library to avoid duplication and shared it with wiki pages on how to implement certain things correctly.

On the other hands, my colleague, is more focus on building relationships and acting like he's the manager even tho he's not. In a couple of circumstances he event tried to give me orders which is not what he supposed to do. In meetings with our manager he brag on stuff that I did sharing it as a "we did", while when he does something alone (which most of the time asks to me as well) he would say "I did".

Most of the team members know it as they always asks technical informations to me. Most of the new architectural design has been done by myself same as the library that they use daily bases.

This kind of behaviour was ok at the beginning but since our boss left and he got promoted as manager is not sustainable anymore.

So here I'm asking for some advice. I started to look for a new job already, other than that I can't find a way to make my life easier has it might required some time (European market is not that good) and I got a break to travel a bit and clean up my mind.

138 comments

[ 3.7 ms ] story [ 210 ms ] thread
Don't take it personally. Be happy for their accomplishments. Be happy for your accomplishments. Think about how important the "tough" times you are having now will be in 1 year, 3 year, 5 year, 10 years. Control what you can control.
He can control someone taking credit for his work...
Do you offer suggestions?
As the top comment says, information flow at the right time makes all the difference. When you do something nice, put something in your slack channel like "man I finally got this elastic search issues fixed. the search is faster now and it doesn't fail for certain terms` or something like that. a subtle self congratulating message and everyone know you did it.
From my experience which is obviously different than yours, over time these pats on the back do more to divide than unite development teams. Others know who gets stuff done and who doesn't just like you likely know who gets stuff done and who doesn't. The slack pats on the back seem counter productive, almost as if looking for credit for doing your job. The higher up in the organization you go the less important it becomes that you refactored the code to batch load index data where the prototype might have inserted one record at a time. By the time the index is done, the people who use it don't really care how long or how efficiently it was built.
Accelerate your job search, take some time of to decompress, and try again in a new opportunity.
Agreed. You can always try going to his boss to explain it, but that probably won't work out. It just seems like a miserable situation to be in.
Have you talked properly to the colleague in question? It seems like you've bottled up all this frustration for far too long, making this infected, which in turn makes it harder to talk about it.

Even if it's hard, just tell him how you feel. Take it easy (don't start by listing all his faults) and stay objective - as in "When you do ... I feel ...". Be honest and say that you're not sure if you want to stay, and that the situation needs to be resolved so that you can have a healthy working relationship again.

I never tried because we had to work together closely and I didn't want to break the balance. And now I don't know if it make sense since he became my manager.
leave the company.

if the company does not promote meritocracy (in a sense that it gives more competent people more responsibility and vice versa), you are destined to become more and more at disadvantage.

life is too short to spend it fighting a localized idiot. go build something interesting that will benefit mankind.

Spoiler alert: talking about your work is a big part of meritocracy.
I think clavalle's point above is critical. Your good deeds, prowess, etc., have little chance of being noticed absent a willingness on your part to blow your own horn, loud. Now that he is your manager and you are subordinate, any attempt to coerce him to change will only evolve into a wasteful power struggle you can't win. If you are indeed so valuable to the outfit (and thus to him as well), then leverage this value to promote yourself, not necessarily at his expense, but to benefit of all. But -- life lesson: you won't get noticed by dint of talent alone (such notice requires unusually observant managerial staff, often lacking). He is not the solution to your problem: you are.
Terrible advice. Of all people you can talk to, the bad colleague now manager is the last choice! That's how you get backstabbed.
Totally agree, don't talk to the guy, I've tried that before and it doesn't work.
What are his responsibilities as your manager?
(comment deleted)
Since it seems you must work closely with this colleague, perhaps you could look for opportunities to improve together? Maybe taking a training course or attending a talk together or as a team? Maybe you could even give an internal talk on an area you feel is important that they could benefit from?

I would also be careful to assume that your colleague is incompetent. Perhaps the two of you have just very different styles. I once worked with a "solution architect" who would over-engineer every project. Even the smallest utilities would become a "system" with lots of moving parts. Management lauded his technical abilities, but those who later had to maintain these "systems" he created were not as impressed. I could see how he might consider some of the other members of the team "incompetent" because they did not work in the same way.

I never heard anything about incompetence in your description.

Technical debt can build up for myriad reasons not related much to competence.

What I would suggest is not to approach this situation as how you can wall off or otherwise attack this person but, instead as a life lesson on the importance of interpersonal relationships and politics.

Politics are a fact of life. Humans are social creatures. All things being equal, and some ways even when not equal, those that are proficient in interpersonal relations will come out ahead. Grok that fact. There is no escape from it.

Good. Now that unpleasantness is out of the way. On to how to cope. Scratch that, /thrive/, in an environment of people doing people things when you are a technical person.

First, information. That is the lifeblood of many systems and politics is no different. Simply make sure important information is conveyed to the right people at the right time.

You use the example that this fellow was able to take credit for your work. Had you passed the information of what you were doing and why it was important to the right people, he would have simply looked foolish to try to take credit.

It can be uncomfortable, to toot your own horn, but it is necessary. Additionally, it can be important to the organization. Assuming you are creating value, it is important that decision-makers know that so they can make the correct decisions. Don't feel bad. Toot away.

Building relationships is critically important in almost every human endeavor. Get good at it. It is a skill like any other.

The target of your annoyance became a manager because he built up those skills and made it known.

Build your skills and make it known. It is just that simple.

Yes I agree with you, the point is that being technical person doing a technical job I thought that the value that I create will talk more than the nonsense of some people. As I like to act first and share later, but there are people who talk but don't know how to act properly.

I can build this skills as you said, true, but in my position now it would be impossible to get a promotion as the available spot has been taken already.

(comment deleted)
Unless you can make the leadership recognize the greatness, there’s no difference between ridiculously shitty code that works, and beautiful, well-organized code that works.

Since you’re already in the position where you seem to lead the technical efforts of the team, where would you like to go from there?

There is a difference of course though and it's important to market to non-technical people that readable, maintainable, and tested code really does lead to lower costs for the company in the future.
> there’s no difference between ridiculously shitty code that works, and beautiful, well-organized code that works.

Unfortunately that's not true. If "shitty code that works" requires three days to be understood in order to make a small change that became a delivery issue and three days in a problem that can be solved in one hour are $$ that somebody is paying. In addition "shitty code that works" most of the time has scalability and performance issues sooner or later you need to address if you don't want it to implode.

> where would you like to go from there?

I can also keep staying in this position, I just don't like to have a manager that I'm not even proud of. And, by the way, I'd like to be in a position where decision making is more stronger also in a business perspective. There are a lot of ridiculous choices that some people makes that are not very effective in some ways let alone make data driven choices. As the organisations today claims to be "agile", most of the time they're not at all. They just use a new word but act as old school (long feedback-loop just to give you an example)

I had a cat. The cat would do stupid stuff while I was away and when I'd get home I'd get angry and smack the cat with a newspaper. Then someone told me: the cat is like a small kid: if you punish it after more than 5 minutes, it doesn't associate the punishment with the "crime".

People outside your team won't understand your reasoning. They'll see code working one day and a random failure a long time after that, which might or might not be related to the previously working code. They're just like my cat.

If you want to act for "shitty code", act before it's in production. Afterwards it's very hard to dislodge. And even harder to pinpoint the blame, as the author will definitely protect his back, ethically or not.

I'd take the experience as a lesson in human interactions :)

> Unfortunately that's not true. If "shitty code that works" requires three days to be understood in order to make a small change that became a delivery issue and three days in a problem that can be solved in one hour are $$ that somebody is paying. In addition "shitty code that works" most of the time has scalability and performance issues sooner or later you need to address if you don't want it to implode.

I think you might be missing their point. From the perspective of a programmer, yes, these things are true. Code SHOULD be Good and Right™, and that is very easy to see and grok from a programmer's standpoint. But to a manager? These things usually have to be stated explicitly, and that isn't entirely the manager's fault. It is easy and pervasive in the industry to write crappy code that works for a variety of reasons (time constraints, incompetence, poor decisions from on high, etc...). Even the best managers have some degree of "out of sight, out of mind" because they rightly delegate the responsibility of making sure the code works AND minimizes tech debt to the developer. It doesn't become apparent to them (and by proxy, the business) that the code was poorly written until the shit hits the fan.

Also, it is unfortunate that you have to leave that job. In my experience in the industry, being able to go back and fix tech debt like you are describing is very uncommon.

Has I said in another comment it was made out of request by the manager and director. They asked us to clean the code since we were experiencing issues due the volume. Without the changes that we were asked for today the company could not even be able to sell their product online.
> there’s no difference between ridiculously shitty code ...

I side with you on this because of something I see often: At the end of the day what the CIO (a purchasing manager or the budget signer) asks about is who killed the fire for the day. When you are the good fireman, no one wonders about the quality of hose you used ..

>I thought that the value that I create will talk more than the nonsense of some people.

Nope. Silence is always less noticeable than noise.

Evil prevails when good men do nothing. Also, nonsense fluff prevails when good work isn't spoken of.

You have a professional duty to make sure nonsense is crowded out by important information. No one is going to do that for you.

Follow the rule of three...tell people what you are going to do and why it is important. Tell people what you are doing. Tell people what you've done. And not just anybody; decision makers.

It is no one else's job to tell people who influence your life of your good works.

No one has time to dig through everything you might have done to hold up the shining examples of your work. And now you have someone above you that might actually be interested in seeing it kept buried so it is even more critical that you do that interpersonal information transfer yourself.

You are a business, and like a business there is no worth in a product that the people who are in a position to buy don't know about. You're going to have to market and sell your value to the people that are buying. All of the time. Make it a habit. Your co-workers are competitors...don't expect them to sell your product for you. (though, keep in mind, part of your value-add is cooperating in your value-add chain so don't take this analogy too far).

Honestly, this is stuff that took me way too long to learn. They should teach it in engineering school. Hell, they should teach it in secondary school, for that matter, since there is really no one who is not running a business even if it is a business of one.

Cannot agree more, this is a life lesson that should be taught in school. Especially in medium/large companies where you got rewards like promotions, bonuses and so on, then your colleagues are competitors. Pretty much like politics, the one over promising and under delivering wins over the quiet one that delivers.
exactly how much to promise is an art form

over promising and under delivering isn't a sustainable model

under promising too much and you won't get the chance to deliver

there's a sweet spot somewhere in there, which can be sometimes tricky to find

Is it a poem or you're just missing capital letters and punctuation?
just missing capital letters and punctuation (maybe stream of consciousness posting isn't the way to go)
Are you aware that it's difficult to get your message from such form and some people might ignore your posts?
I guess that's a risk, opaqueness was not my intention, thank you for the heads up.
...if everyone is over-promising & you're confident in your delivery, all you need to do is "promise" something between what is expected & over-promised in order to "under-promise".../ ,,, ... ,,, ...
> Follow the rule of three...tell people what you are going to do and why it is important. Tell people what you are doing. Tell people what you've done. And not just anybody; decision makers.

An interesting corollary: Find out what's bothering decision makers. What're their annual or quarterly (or whatever) goals? If you know what those are - not only can you say "Hey, by the way, I did what I'm being paid to do, but, by the way, it helps to address that thing that's been bugging you."

This is excellent advice. This is one thing I've found myself struggling with as (like the OP), I have had this naive idea that the work will speak for itself.

Often, when you do good work and are good at what you do, it actually looks like your job is easy, even when you are busting your ass to get results!

Some of the best engineers I remember working with did the over-communicating stuff you advise and I remember it was always very clear what they were working on versus other people. They also had a knack for communicating the work in the simplest terms for everyone to understand.

I find this prevailing mentality incredibly troubling and the one truly broken thing about North American culture. Taken to its logical end, it is the underpinning root cause of all that ails the U.S.

In short: “I did it all myself” is always a lie. It could only ever be true if babes were left in woods since the time of birth to fend for themselves, and even then, debatable.

Really? It seems pretty easy to fall into a group dynamic where one person gets the technical debt dumped on them while the other handles the non technical aspects. This is because it is easier to not communicate and just do everything yourself than to explain to someone who is less technically motivated, for whatever reason. When you slow down and try to explain stuff over and over, until at a certain point as the gap increases it feels like the other person is either incompetent or taking advantage of the situation to reduce their own workload.
I've been reading a book on nonviolent communication[1]. It's been helping me rethink how I approach work conversations and communicate what I want.

Putting it into practice has been tough, but early results have been good. I'm less likely to get angry, and while I still am not necessarily getting what I want all the time, I feel like I'm getting more clarity and direct communication around why not.

[1] https://en.wikipedia.org/wiki/Nonviolent_Communication

I thought that the value that I create will talk more than the nonsense of some people

The value you create doesn't talk about you except to people who know you're the one who created it.

The root problem is that there are too many idiots in management positions; they can't see through all the bullshit. Also, there are too many dumb investors; our entire global economy runs on dumb money. Don't waste your time trying to create value; let other people create the value and focus all your energy on capturing that value.
Ok, but ... How are we supposed to agree with your position when you waste time giving such valuable free advice?
My background is value creation. I'm still new to value capturing. I have decades of bad habits to unlearn.
When's the last time you went out of your way to discover if and how someone else has done well?

Now, when's the last time you went out of your way to discover if and how someone screwed up?

The difference is just how people are wired. We are all kind of dumb.

As a fun exercise, track down someone responsible for having made your life better today, find out exactly how they did it and give them a piece of your mind about it.

I have spent my entire career in your area and can say with 1000% confidence that "the value that I create will talk more than the nonsense of some people" is something that EVERYONE assumes to be true when they start but EVERYONE realises is 100% incorrect after a few years in the industry.
(comment deleted)
This is an excellent break down of OP's situation, which seems very common in tech.

> make it known

This was the hardest "part" of working in a company for me to understand and execute on, especially when reporting to a non-technical supervisor. The thing is they simply don't know where to look or what to lookout for to give us accolades. It isn't as hard as we make it out to be, either. It can be as simple as "I made the common components for the WidgetMaker uniform through out the system, increasing reliability and improving maintainability. This will help us avoid an outage during peak WidgetMaking season so we can continue to make Widgets and operate smoothly", which isn't at all horn-tooty, but gives credit where due.

Even technical managers have hard time understanding technology they are not familiar with.
If you can't beat them, join them. My current thinking is that the only way to make the world better is by helping to make it worse; things will not improve until there is total collapse so make it happen faster.
"Let us do evil that good may result"? No thanks.

And if you understood what total collapse will mean - the incredible human cost of it - you would not propose it even as a constructive step.

>> the incredible human cost of it

It's a cost I'm willing to accept... So long as that human is not me ;p

Or short: It's not what you do, it's what people think you do.
Or: Don't expect people to read your mind or go searching for why you might be great.

To understand why, ask yourself 'When's the last time I went out of my way to discover if someone else did well?'

> I never heard anything about incompetence in your description.

I was rushing trying to explain two years in a few words. You might not know what happened is such long span. To give you some ideas of why I said incompetence:

- my colleague doesn't know yet how our infra works

- he has no clue of the application architecture has he still make unforgettable mistakes after two years

- in any architectural meeting where we have to discuss about something he got missed, and, when he's there, he will suggest an open source tool to do so even when it doesn't fit our needs

- in any meeting when somebody ask something to him, the first answer would be "just go in google and search for a library to do x, z, y" even when the question is very architectural specific and domain specific

- even after we implement something he still want to find an open source or SaaS to use for no reason, not understanding that we have a lot of integration cost that he doesn't even understand

- he only had front-end (only in small-sized companies) experience and less than 6 years of total experience when he was hired (he joined right after me, I was not the interviewer) and he never lead a team before.

I worker in multiple context during my career; mainly enterprise and consultancy and I had team leading experience before the role.

> he brag on stuff that I did

> when he does something alone ... he would say "I did"

> he got promoted as manager

Act like the stereotypical manager, get promoted to manager.

I mean, he’s already functioning at the level he is aiming for, so might as well make it official.
(comment deleted)
> I've been doing a lot of work to clean up the debt that was accumulated and, meanwhile, I improved the reliability and the efficiency of the infrastructure. I wrote common components and library to avoid duplication and shared it with wiki pages on how to implement certain things correctly.

What's the business case for this?

Required by our ex manager and director to cleanup the debt and increase delivery time. And, it was urgent since we were having performance issue.

Pretty much I don't like to do stuff for the sake of doing it

You can't change what has already happened. And trying to change that will only cause more trouble.

Inform somebody higher up about this. Do it more subtly instead of name calling. Usually people sitting higher up will take this into consideration on future decisions.

Have you spoken to Manager’s manager and requested for a change as you & your current manager were peers earlier & do not want him as your manager?
It can take a while in an organization before people learn whether someone is really competent; especially if as you say the individual in question is particularly good/charming at convincing others that they are effective or a necessary part of the org.

If you trust your employer and management chain enough, then you can use the normal reporting loop to file concerns and notes along the way - just try not to get emotionally involved as it could become difficult to separate your observations from your personal opinions.

Even more so don't let this person pressure you or change your decision-making in ways that could undermine your position.

And certainly, if the organization fails to take care of things, then it may be time to move on and find somewhere more progressive and healthy. It's the sign of a failing environment if it can't identify and deal with individuals who claim overdue credit by using others' contributions.

The time to speak was when the liar was claiming someone else's accomplishments - to contradict them clearly and immediately. After that it's much harder to recover.
Bluntly? You're letting anger and resentment cloud your judgment. Your colleague is clearly not incompetent. He just has different goals from you. He probably wanted to shift from a technical role to a managerial role, and he succeeded. That's not incompetent! And that's probably because he recognized his talents are better with people than with technology. So be happy for his success, rather than resentful of his perceived incompetence.

It seems to me like people skills are a weak spot for you. That's not unusual in our industry. But leading and managing people, sorting out the relationships to make large project work, that work is just as essential as technical skills are. Nothing big ever got built by a bunch of grumpy, resentful introverts.

Rather than hating his "incompetence", try to recognize him (and others like him) as valuable allies. Find ways to work together, to let them deal with the frustrations of relationships, and let you focus on the technology. Create a mutually beneficial partnership. If you can't learn to do that, to trust the "people persons", you're going to find yourself in this situation over and over again.

How can you work together or respect someone that takes credit for you work? This guy is a snake, it's not about being introverted.
Are you sure we're getting a complete story here? The OP is what writers call an "unreliable narrator". We're seeing this through his very emotional lens.

It's quite possible the other person did a lot of the "people" work that enabled the code to be written and distributed. In that case, it's a "we", not an "I", and focusing entirely on "I wrote the code", ignoring how it fit into the organization, is dismissing someone else's well-deserved credit.

If the OP is an unreliable narrator, then you shouldn't assume the guy isn't a snake, either.

I have seen the case you're wary of: a technical, but poorly communicating, employee that resents the success of a well-meaning, less technical but better communicating coworker.

I have seen good people like that, and I have seen snakes that pull the "we/I" as in the OP's story.

Never attribute to malice what can be explained by stupidity.

Generally, I don't see a lot of these "snakes" out in the real world, but I see a tremendous amount of misunderstandings, resentment, and righteous indignation. As I told the OP elsewhere, we're all the hero of our own stories, and everyone we disagree with is a villain. But ask the villain, and they think they're the hero. It's human nature. We don't want to admit that we might be wrong, that the people we disagree with might be right (or at least, the disagreement is not founded in malice).

So when I see situations like this, I rarely see snakes. I see misunderstandings that can be addressed with better communication and a good dose of humility.

Stupidity and malice can often be two sides of the same coin. I once worked with an individual who shot down a project idea, but then executed it in secret for two weeks before revealing it as his pet project. After confronting him, he initially did not understand why this was deceitful. It took 3-4 conversations before he finally understood and sincerely apologized. He felt he was simply being competitive and that everyone did these types of things.
My work buddy did this.

I'm pretty sure this was simply because he thought it couldn't be done, and I just put the niggling thought in his mind so he tried and was successful.

Weirdly enough he was the introvert and I less so, and I got the promotion. No hard feelings on either end, as far as I know. We all have our quirks.

Not OP or in this chain, but I'm surprised you say this (Rarely see snakes.)

I have nothing to complain about. I've done very well career wise, and have no reason to beef with any of these people. But at the same time, I've concretely seen individuals lie outright, blackmail, threaten, insult, and bully their way to success. That you say you rarely see this makes me raise an eyebrow. I've gone through the "maybe I'm just seeing evil where there isn't any" thought process many times, but after watching multiple instances of negative actors take advantage of others while I was a disinterested third party, I can't but have conviction. People will abuse others when it serves them and they think they can get away with it, and in situations where power dynamics, visibility and relationships (so soft, highly non-fungible elements) drive your career, someone in power can get away with a LOT, even via only subtlety misaligning incentives.

Let me be clear, this is not some dominating majority of the population, and one should not start seeing enemies around every corner, but I've seen enough that instructing a junior engineer to watch out for those who would seek to take advantage of them seems very pragmatic to my eyes.

Oh, I've seen snakes too. But I've seen people imagining that those they disagree with are snakes about 100x as much (or more). And if people don't get past this idea that everyone they're at odds with is a malicious, incompetent cheater, they can wind up being a simmering pot of bitter paranoia as they get older, unable to see the good in others.

People who let bitterness rule their lives are far, far more common than actual snakes.

Assuming my observations are correct (I may be wrong, I'm often wrong), then what is the pragmatic advice to give? "Be wary of snakes!", or "Be wary of your own human desire to be the hero of your own story and make everyone you disagree with the villain"?

To me, this is a variant on the Pragmatic Programmers' advice that "SELECT isn't broken".

I'm not quite sure if you meant it as an example of ineffective advice or not, but the "be wary of snakes" advice is quite close to what I give my mentees, although tailored to my predictably Munger bent of "be wary that other people's incentives often don't align with yours." (As a note, I think we're using the word "snakes" for purpose of context consistency, it's not a word I'd usually use when discussion the actual behaviors here since it paints the conversation a very specific way)

I think perhaps the issue here is that I'm coming at the discussion from over-correcting the opposite direction; I was raised with very much a "people are All Good(TM)" outlook, regularly being fed the "Things get better after highschool/people grow up" line as a child. I've found that these both gave me ineffective priors for navigating adult life, largely due to that if you assume people are acting with your best interests at heart, you may be less inclined to look out for your own best interests yourself, or at the very least how other people may be compromising it, consciously or not.

Framing it in terms of incentives also has the wonderful side effect of circumventing a lot of they "are they malicious or just self-serving" question since it hops right to "how do you fit your success into whatever equation everyone else is trying to route into"; my inquiry of whether they were TRULY malicious is usually made post-factum (or given sufficient evidence)

As a final statement (and to couch my own incompetence with tone over the internet, please don't let any of this come across as a You're Wrong!), I'm not sure I'd agree with your statement that people with bitterness outnumber those who would manipulate others, at least in my work context. In the lense of my "incentives" stance, both are continuums of behavior, but the bitterness continuum is counter-productive to career advancement while the "manipulating incentives" continuum is productive, so I'd logically expect to see more of the latter. (I guess the real crux here is "when does it become malicious," but that's a whole separate discussion)

It's not so much I think "All people are good", as "All people are incompetent", and "All people are the hero of their own story". And people are very, very poor judges of risk, generally - how many people are more afraid of terrorists than car crashes?

This dovetails into your last paragraph, by way of saying that the fact that paranoid behavior is counterproductive is in no way inhibiting paranoid behavior. People believe it works. What people believe is far, far more important to them than what actually is. We engage in counterproductive, even self-destructive behavior all the time. And not just the "incompetent" people, but everyone I know. We are all stupid. (fwiw, I do not consider "smart" and "stupid" to be opposites, but rather different qualities that happily coexist. Just because you're smart doesn't mean you aren't also stupid.)

This is also aggravated by the human distrust of those who are different. How many employees think their managers are ignorant fools at best, and actively malicious at worst? A majority, probably. How many of those people really have a good understanding of their manager's job, and the pressures and conflicts the manager deals with? Not many, I'd wager. This is the root of racism, nationalism, and other forms of tribalism, if you think about it. Those feelings are irrational, but they're common as dirt.

This view of humans as stupid rather than malicious was reinforced for me recently, when I read Factfulness, by Hans Rosling (which you should definitely read!). Rosling, a doctor/professor/world health expert, tested thousands of people with basic multiple-choice three-options questions regarding well-documented facts on the subjects of poverty, global health, and the link. What he found was that every audience, no matter how smart, well-educated, caring, or involved in the field, actually performed worse than random chance. Start on his questions, without reading his book first, and you'll find yourself doing worse than if you'd just pulled letters out of a hat. Don't feel bad, the same is true of UN leaders, CEOs, med students, etc. Rosling went on to identify ten different thought patterns that lead us to misunderstand the world, even the most basic facts about it.

Read it, and then look around the corporate workplace, seeing it through Rosling's eyes. You'll see very few snakes and a tremendous number of idiots.

I’d suggest imagining what the story would look like from the other guy’s point of view, and I bet there would be no malice, no ‘mustache-twirling’ antagonism. It would be about how he always wanted to be a manager, and found a project with a strong technical partner who had no managerial aspirations. How he successfully managed upward and helped to coordinate and keep the project on track. Then at the end, after the success, he got the management role, his partner got to show his technical mastery: everyone got the result they were working toward.
>Generally, I don't see a lot of these "snakes" out in the real world

You don't seem to understand why the term is "snake" in the first place. Of course you don't see them. They're hiding in the grass, and you're not going to notice them until you step on one. That doesn't mean the people around you aren't getting bit.

To be fair, the OP said whenever the work was cooperative the person said "We", not "I", which I think is an improvement on snake.

I'm not saying it's great, but it also sounds like the OP needs to be more proactive about speaking roles in meetings when it comes to value of their practices, why things were done, etc. Now, would I work for a person if I hated them? Nope. Would probably be out of there.

In terms of "How can you!?", this stuff happens all the time all over the place and people work together. I think you can work through it with colleagues - it's not easy, but it's important if you think the mission / company are worthwhile. Otherwise, you're just going to dig deeper "into the box" on the credit thing and it won't be a good reflection on your work.

> It seems to me like people skills are a weak spot for you.

That's not true as I always hangout with the people in different teams, and, we get along pretty well. I just don't do kiss-ass to my boss and I don't take advantage out of situations.

> Find ways to work together

We worked together for two years on daily basis. And I overcome a lot of bad behaviours but I can't stand to report to him

If you don't want to quit the team/job, then I would recommend trying to adopt the viewpoint that regardless of your manager's shortcomings (we all have them) at least they understand your value as a technical resource.

However, if this:

> I can't stand to report to him

remains true... the only solution in the end that will leave you with day-to-day satisfaction is to leave the situation. It sounds like you are aware of this.

Life is not always fair but in general it is consistent.

If you can't stand to report to him, then you find another job, or at least find another department within your company so you're not under him. And it probably wouldn't hurt to talk about this conflict with other managers you do trust at the company (if you don't trust any of them, the problem almost certainly isn't them).

I've been in your shoes - a peer got promoted to be my manager when our old manager retired. We were okay as peers, but very bad in a hierarchy, and I eventually got fired. I should have just quit instead.

Still, though, I think you're letting resentment blind you. It's easy to be the hero of your own story, and for anyone you're in conflict with to be the villain, but that doesn't mean it's right. We're all unreliable narrators.

Try this exercise. Repeat after me... "I may be wrong. I am often wrong." This is my mantra. Recognize your own fallibility. Try looking at it from the perspective of "What if I'm wrong?" It solves a lot of problems (or leads to the correct solutions). And the more you do it, the easier it is. Consider my earlier point, that what he did isn't incompetence - not if his goal was to get out of technical and into management. And since he's apparently good at those people things, he might well be recognizing where his talents are, doing the right thing for himself and the organization.

Consider also a telling bit of evidence in your response to me - "we worked together for two years on a daily basis". If that's true, is it also true that you did all the work and he unfairly claimed credit? What was he doing, if he wasn't writing code? Is "kiss-ass" a fair assessment, or an resentful interpretation of his useful work? Try to stop being angry long enough to consider that.

This is not likely to work out well for you. You disliked the guy when he was just your coworker, and now he's become your manager and you have this seething resentment ("I can't stand to report to him"), which I'm sure he and others can see. It can be difficult transitioning even to having a teammate you like become your manager, and the fact that you dislike him puts a 10x multiplier on that difficulty. A situation where you resent, distrust, and dislike your manager is not sustainable and in a lot of companies will end with your removal if you can't truly get over it. Assuming that you can't see yourself working happily with this guy as your manager (which, to be clear, I think is perfectly reasonable on your part), you could try to transfer to a different team if your company's big enough, but I'm guessing most likely this will end with you leaving the company either on your terms or theirs.
Nothing big ever got built by a bunch of self-centered loud mouths either. And these are typically the types that find themselves in these roles.

I think you're making a big leap saying "let them deal with the frustrations of relationships". Nowhere in OP's post does he mention disliking people. In fact he seems proud of the fact that people come to him when they have questions. You need more than pure technical acumen for people to feel comfortable coming to you.

Situations like these are complicated, and I'm not sure there's enough information to make a judgement one way or the other. I do think taking the "high road" here is not always the best course of action. If you're more interested in the success of your team or your product, you will remain ripe for being used by those more interested in their personal success. It's a toxic circle that's hard to escape once you find yourself in it.

My advice would be to heed the red flag and look for work elsewhere. If you are being leaned on as heavily as you feel, then it will likely become apparent once you move on to greener pastures.

This guy right here is one of the few comments in this thread that "get it". OP seems genuinely interested in the success of the team, where as who he's talking about, seemingly at least, is interested in his own success - this isn't bad, but it generally goes against the grain of building a team of happy campers.

As @eriktate said, you either make some noise because you care, or you realize that the people above this person don't understand what makes great technical leadership actually great, and you leave.

The OP never made the case that the person was incompetent though. I'm not seeing any red flags other than the OPs resentment. I understand where he's coming from. It's a struggle that many technical-minded folks go through in a business environment. When "I just wanna build cool stuff" clashes with "How do we manage resources efficiently to meet the deadline?"
That isn't the case here, I think you're conflating the two. Building cool / cool stuff doesn't clash with meeting deadlines, knowing how to do both / when / how to compromise is vastly more useful than being either one of those two extremes.

The more people in management that care about building well engineered products and that treat humans like humans and not resources the better off we are as a community.

> Nothing big ever got built by a bunch of grumpy, resentful introverts.

Well, the Linux kernel did, but I think for the most part you are correct.

I am not sure he is a people person. He probably has good rapport with higher-ups but if people routinely bypassed him to take advice from OP that means he is clearly not valued by others in team. Once OP leaves his tech incompetence would be shown up and would lead to more devs leaving the job. These are the kind of 'people person' who hamper productivity and eventually lead to team dissolution. Although I agree he is clever enough to jump ship before that.
I would like an answer to that too. I'm the youngest member of my team so the older more 'experienced' teammates are really good with politics.

We have a new project coming up and I basically was the one implementing the initial architecture, I showed them how to use the linux terminal, gitflow.

I am the dev with the fewest number of bugs reported, they are always on meeting about issues. They take the most visible, interesting features.

Yet during meetings, people talk to them more because they are older, so they basically take most of the credit.

What should I do in that case?

I recommend reading So Good They Can't Ignore You, by Cal Newport.

And more broadly, learn how politics are played.

Divide et impera, I'd say. Get a backer, someone that sees your values: your manager, your manager's manager, one of the senior devs. If you have 3 people in a room at work, there's bound to be at least 2-3 (hidden) conflicts. Figure out where they are and benefit from them: get your backer to help you with your task and when you present it, present it as being team work. While you're the person actually presenting. Your backer will... back you and you'll be able to stay a bit in the spotlight and you could use the exposure.

Or just find a sane work environment, which one is easier.

How come people don't know what work you are doing at the company (thus allowing your colleague to take credit for it)? That's probably what you should try to address.

I'd start by writing emails detailing such or such feature you are working on, how it improves the system, etc. Maybe ask for feedback, or ask general questions to the business owner. Maybe suggest using some issue tracker where you could document over time what you are doing via comments, issues, etc. I'd expect your colleague might be the kind to distort truth, so such record is a good point of reference to set things straight.

Not only that would be good for you, since people will know that you are improving the system, but it will be good for the company since they'll know what's going on. They are lucky you're actually doing your job because another employee could have been slacking off and they wouldn't even know it.

If you are able to discern his motivations, you can probably have faith that others will, too.

The extent to which your ego is bound up in taking credit, having a certain reputation among your colleagues, etc, is the exact extent to which your coworkers behavior can "get to you".

Always the best advice is: do your job to the best of your ability and don't worry what anyone else is doing. Others will notice. And if they don't, then perhaps its not the kind of place you would want to work, anyways?

(comment deleted)
I toiled like you seem to be for a long time, cleaning up technical debt, and writing well-architected (but very time-consuming) code. I learned a few things (things I have to remind myself of often, when I too feel the anger rising at people who don't place the same priority on those things):

The business is almost never paying to you clean up technical debt. They are paying you to generate revenue (or save costs). Period. It could be the best architected system in the world, but if it takes 4x as long to build, and the "quick and dirty" version can ship and generate revenue earlier, then that is the way the business will want to go (even with an elevated error/loss rate). My takeaway: If you do not intimately understand exactly how what you do each day makes the business more money, or saves the business more money, then you need to pause and figure that out.

Nobody gets credit for building a system that never goes down. It does not speak for itself (much as I would like it to). As others have pointed out, it's critical to communicate the value (see point above) of what you are doing, and communicate it to the people who matter.

Dealing with Humans (incompetent and otherwise) is actually what most of us get paid for (or at least it's a big share of why we get paid). Dealing with bureaucracy, red tape, incompetence, things taking too long, etc... Sometimes I wonder why I have to wait for others who are slow, don't they realize how much money is being wasted?! But it's true, the human component of our jobs is the main reason why we haven't already been replaced by others/computers. Relationships trump even adding business value (point 1 above): if you are difficult to work with, but add value, you will still be marginalized (or even let go). However on the flip side, if you are great to get along with but do little-to-nothing, you may not thrive, but you will survive.

> They are paying you to generate revenue (or save costs).

One of the senior engineers in my company once told me, "business is the dog, technology its tail", not the other way around. While I later argued with a completely different set of engineers that the analogy isn't great, the gist of the idea remains valid: we shouldn't be building beautiful technology just for the sake of it. Rather, we should be building technology that will serve the business best, while balancing out short-term and long-term gains.

> Dealing with Humans (incompetent and otherwise) is actually what most of us get paid for

This is so true as well. I often realize that the problems I solve at work aren't exactly rocket-science. However, I have learned a bit about effectively interacting with humans, and that is probably more important to my company than my pure technical skills.

I didn't have any of these skills and I am still learning. However, I'd HIGHLY recommend the following "The 7 Habits of Highly Effective People: Powerful Lessons in Personal Change" for anyone wanting to learn soft skills.

You don't get to do it right until version 3.

You write version 1 quick and dirty to get it out the door fast. Version 1 is written to acquire customers. You write version 2 to patch over all the problems of version 1. Version 2 is written to retain customers, but it ends up as an unmaintainable mess.

In version 3, you finally get to throw out the old code base and take the time to write clean, architected, maintainable code. Version 3 is written to attract and retain developers. Once it reaches parity with version 2, you can do the "Big Migration", and then start adding features. Version 4 and up are all built on 3, but barely anyone ever gets that far.

Note that this won't match up with the version numbers written into the software. You can't do anything about those, because marketing and management tells you what they have to be. Anecdotally, most software projects never progress past version 2, no matter how high their marketing numbers go. This is because version 3 does not directly add to the bottom line. It adds to developer productivity, and if the company cannot measure the value of developer productivity already, there will never be a business case for it. We all want to work on version 1 or version 3, because version 2 is a never-ending nightmare slog of one problem after another, but version 2 is that gaping hole that businesses will just keep throwing their money into, forever. And version 4 is easy and boring, where the only hard work is in upholding the process that is keeping the less experienced coders from cluttering up the place.

OP's mistake was in writing version 3 before telling management why that would be a "Good Idea That Saves Money" and seeking their mandate, and in not owning the successful completion as a major accomplishment. OP's current manager always understood that people run the company, not the code. That's not incompetent; it's a competence OP doesn't currently understand.

There's so much wisdom in the post.

>The business is almost never paying to you clean up technical debt. They are paying you to generate revenue (or save costs). Period.

So true. Once you're in enterprise nobody cares that you wrote the connection pool yourself (which I did and nobody gave a darn). I did 5 years in enterprise and decided that was enough for a lifetime.

>Nobody gets credit for building a system that never goes down.

This happened to me. I designed and wrote a subsystem that is used by every GM dealership around the world and that thing never went down meanwhile my colleagues project was always down yet folks from the other team were the ones that got promoted.

This is of course only your side of the story but it sounds like he's way better at office politics and elbow tactics than you are. When you were at same level in the org I would have just cut him off from the critical information flow and communicate directly to the superiors. Now that he's your superior you cutting him off can backfire where you're the one causing the trouble and not being a "team player". Anyway, you can bet that he'll continue to take the credit of the work that his team will be doing, fast forward 10 years and he's probably a C level exec while you're still a SWE. Just the way the world works.

My advice is to a) leave asap, b) simply ignore him as much as possible while you're stuck there.

Just leave, find a place staffed with competent people
Just find another job... life is too short...
(comment deleted)
You talk about not getting enough credit but want to be a manager. It's not a good trait to have as a manager and you will suffer even worse.

A new shared dependency is worse than duplication. Sometimes developers get carried away about doing it the right way and don't understand the trade-offs you need to do to make it tick. FYI - I am a fully hands-on manager.

If you truly aspire to be a manager you need to understand that tech side alone doesn't cut it.

It was required by our ex-manager and director to do so. As we were re-inventing the wheel in any application. If you're a fully hands-on manager you should understand the value of having strong common components that can be plugged in an out.

If you don't think so, just use a plain language without any framework, module, library or third party component and let's see who target the release date first.

We are paid not to build beautiful or robust software, but, first, to deliver faster and without headache. Decoupling stuff and avoid redundancy is a huge benefit and we experienced it dropping down the delivery time by at least 20%.

You are missing the point here. No one is doubting the usefulness of reusable code or common components.

Its about developers spending time on what they think needs to be refactored due to the engineering itch on an already functional and maintainable code. Most times by doing it they can be introducing instability to the whole system. In a larger code base with handful of engineers and teams it becomes a bottleneck to make quick changes since it can break others stuff so too much interaction and policy around it and so forth.