Worst: A conversation with this boss-colleague of mine would go like this:
Me: There was an urgent bug yesterday, and I fixed it.
Him: That bug was within my major commit last month. Did you fix the bug because you think I am incompetent and can't fix the bug myself?
Me: Oh, no, it was an urgent bug ticket submitted to our team, so I went ahead and fixed it.
Him: So you are saying I am useless to the team.
Me: No-no, I don't think you are useless. Quite to the contrary. You were busy doing another ticket yesterday. You know what, maybe you are right, and I should have waited and reconsidered before I fixed the bug.
Him: Oh yeah? You are being passive-aggressive now. Your behavior is very toxic and is disruptive to our team dynamics.
Me: I am sorry you see it that way. Could you tell me what I could have done differe...
Him: I am downgrading your performance review, and you would be getting a lower discretionary bonus this year.
This ended up costing me a five-figure bonus deduction.
Since then, after rising through ranks, I too became a team manager. Thanks to this lesson, I know how not to treat my team members.
Transparency leads to trust, but also can be abused. Be transparent in incremental steps, so that you still build trust with those that are trustworthy, and so you aren't hurt too badly by those that aren't.
Failures of people are as often due to the environment they're in as they are the people. That can be useful to not judge colleagues too harshly, and also to remind yourself you are good and capable when you find yourself in a job/role where you're unable to function.
The way to build successful products is to care about them. Stakeholders that seek to explain problems they're trying to solve and why the matter will get results; stakeholders that try to dictate solutions to dev will not. Seek out places that recognize the devs job is the 'how', and the rest of the business' job is the "what".
People who say "we're one team" and "it's not us vs them" are to be avoided. If the groups they're talking about were truly one team, such statements would not need to be made; making them is trying to band-aid over issues and misalignments rather than address them.
Be kind. Even useless assholes can become allies if they see you going out of your way to be kind to them.
I learned from my worst colleagues: don’t assume that anyone will protect you from toxic or abusive people. You must be willing to protect yourself. When people come for you and your project, either be willing to throw down (metaphorically) or be willing to walk. Bad people often don’t have bad careers, and there is no justice.
My worst colleagues were the exact opposite. They didn’t listen to anything that they were advised and then when the project failed they tried to pin the blame on me. Luckily the rest of the team vouched for me so nothing happened but it left a bad taste in my mouth. There really isn’t much to learn from scumbags since it’s obvious you shouldn’t be a scumbag.
What did he teach me? He taught me that when I'm sufficiently pissed off, I can be vindictive. I retaliated more than once by doing mostly harmless things like sticking a floppy disk in his PC so it wouldn't boot, and then not helping him fix it so he could do his job (that should date this for ya...). He wasn't computer savvy, and I let him stew in it. That made me ashamed of myself later, and I have never taken the low road again. So he taught me something about myself, and I changed for the better because of it. I still vehemently dislike him and what he did, but that was a long time ago.
To buck the trend, I'm going to add a few "hard skills" lessons I've learned from managers.
From the best: "Every if statement is death" was an adage of one. He encouraged me to think deeper about whether conditionals were really needed, and at what place they were needed. That mindset helped me write clearer and more easily testable code.
From the worst: In code, "brilliant" solutions are like poems: they're beautiful, they're terse, and they pack a lot of meaning into each line. To mid-level engineers, they have an intoxicating appeal, because they seem like a good way to flaunt their talents. But more often than not, what is really needed is the code version of ordinary prose: straightforward, with a preference for clarity over succinctness, easy for others to understand, easy to edit, and with fewer surprises and deviations from convention than a poem. Your goal should not be to impress your code reviewer with your cleverness but to impress the person who needs to maintain your code three years from now.
From my good managers I have learnt the value of shielding working employees from excessive meetings and bureaucracy, and trusting people to work out their own solutions while assiting and supporting them.
However, I have learnt so much more (direcly and indirectly) from my bad managers. A couple of examples:
From the manager that everone described as "he is very good technically, ....", I had to quickly learn how to smooth relationships, negotiate with, and jointly arrive at solutions with other parts of the company after my manager would bang his fist on the table, yell about having told them the correct way to do things previously and that the current problem is all their fault before storming out of the room.
From the manager that quickly grabbed full credit for anything and everything done by his team, even when he had zero involvement, I learnt how to be more considerate in making sure I gave out appropriate credit (both internally and to clients) of the people that I worked with.
Worst: If you slather a sub in the hottest sauce available from Firehouse subs, and eat it as a way of proving how tough you are, you can be rendered useless as an employee for the next 36 hours. Very nice guy. But strange in a way not typical to engineers.
Some of my colleagues recognized the transition from student employee to professional, but strangely enough, my own boss never made the mental transition. She continued to treat me like a student in a number of degrading ways, offering condescending advice about preparing for my future and so on. I say this with a 20-year hindsight. I look back at the relationship and still think it was degrading. Within a year I applied to a different department where I got a fresh start and immediately was treated as an IT professional (though junior, of course).
I learned from this that some people are always going to see you like they first saw you. Your mother is going to always see you as the adolescent with the messy bedroom, even when you're 40. Your student job boss is always going to see you as a student.
Not only does your sarcasm need a tell, you need to have previously provided enough evidence that you're not actually an asshole. Otherwise, someone can be sarcastic all day, but no-one's really sure whether they're trying to be funny, or actually offering genuine asshole views coated in the plausible deniability of "sarcasm" for those who don't agree.
"I really can't tell if you're joking" is the first warning flag.
Worst: That pretending you know what you are doing, never asking questions if you don't know what you are doing and having no sense of humility will lead to your demise.
Also memorable was in one of my first contract roles from another, excellent, contractor, "Spend half the day on their stuff, and half the day on your own work. You don't want to raise their expectations."
To clarify that last bit of advice: a contractor should be capable of getting all of the day's work done in half the day (they are good at the job and they don't have to deal with the permanent employees' extra duties). The other half of the day may well be speculative work that the contractor wants to try out that will benefit the company but the management would never be able to say yes to if you asked for permission. Or it may just be real programming.
From the best : the value of small talk and forming personal bonds with EVERY person you talk to.
The second one took me a while. We were both leader of team that worked together and things were going great.
I noticed that his team would kill for that guy.
And also that he always seems to know someone that could help. In OPS, in IT, in sales, in the competitor … everywhere.
And then I started to notice the small talk, the jokes, the patience … that makes that guys a nice person to work with.
And then I also noticed that he was leading both of the team, without that being very obvious. And I was not even mad about it. Everybody was exceeding target, we all got a nice bonus that year while having fun, why ruin it ?
I learned a lot from that smooth operator. ( all of that come on top of impeccable technical acumen. That play a role, too )
Policies only matter if the people in power want them the matter. If they like you, they will break policy to benefit you (like early promotions). If you're not their favorite, they will break policy to your detriment (like basing your review on points completed after telling you not to record a bunch of work in stories throughout the year).
That you don't need to actually improve to be promoted. Being a 'yes man' is the easiest way to get promoted.
So, I asked my boss at the time for my own area. He said no.
That frustrated me, and I decided that the best thing to do is to grind some knowledge out of the situation. No better revenge than personal success, right? I slowly became an expert on every little makefile, shell script, Cron job, any little utility program I could get my hands on, I tried to understand it and improve it.
After a few months of this, I went to sysadmin and made a request along the lines of "I'm so-and-so, I work in DBA, I want to interview for this department, and if I I'm more knowledgeable than someone here, I'd like to challenge for that position, and I want my own workspace."
This was ~15 years ago now, it was a bit easier to get away with having one's head up one's ass back then.
Anyhow, I ended up with a role there, and 3yrs later I was the director for that department.
My cubemate never left. I'd still smell his food when I walked through that part of the building to my lunch break. I guess nobody got the last laugh, but I felt proud of myself for realizing I could improve my worth just by working hard at it and using the resources available.
Edit:
I thought of another one. Maybe six months before covid kinda jumped off, a young woman interning for me told me I don't drink enough water and challenged me to drink something like half my weight in lbs, in oz of water everyday. I've been doing it nearly every day since, and it's truly been impactful. Wish I'd done it at her age. My sleep is better, I feel more energized, and I dropped a few pounds before covid came. They came back. But nevertheless, hydration is a big deal.
Worst: The more confident someone is, the more likely they are to be full crap. But - just because you don't like someone, or they're full of crap doesn't mean their wrong and/or you can't learn from them anyway.
When I became a reviewer myself I resolved never to be like this. If I didn't like something, I would always indicate what change I was expecting for the next review to pass and also why the change was necessary - what specific problem was being addressed. If I didn't like something but couldn't say why, then I taught myself to not say anything at all, typically because it was a cosmetic difference in my preferences vs. the authors. I also realised that a really good technique was to have a quick chat with authors before they had done too much, especially to make sure we all agreed on the aim and purpose of the doc, and my review criteria - to avoid me introducing unexpected hurdles at the last minute. This became a good way of turning the review process into an iterative learning process for junior authors.
I learned to run code without re-reading it from a bad coder. I used to spend a few mins reading code I'd written to double check it. Then i worked with a guy that just would run code, it would error, my heart would jump, but the world wouldn't explode. So I do that too nowadays a little bit sometimes. Just run the code after writing it without rereading it. It's scary but works 85% of the time. thing is you can run code twice and let the console tell you the issue often quicker than you reading it carefully. (be careful with this tip.) .i.e there's a time to do it and a time not to. i.e. if your changing some css block, you may not need to reread it 5 times before refreshing the page. but if you are about recursively rm some dir then maybe check.
Worst: Sucking up to people and repeating competent people's advice can get you a looong way up to being a C-level while the competent people remain at the lowest levels of the hierarchy.
Worst: The people who talk about others will talk about you
Worst: Don't tell employees you pay them so they shouldn't have to use Google.
From best colleague: 10x, 100x, 1000x... developers are real. I also learned that making bold, controversial claims will yield respect dividends in the future when they turn out to be true. For one of my past startups, I was working closely with the CTO who was at least a 10x or 100x and some of the stuff he was saying seemed to defy a lot of the industry practices at the time. I didn't take what he was saying very seriously at first, but over the years, I ended up discovering that essentially everything he said was true and lead to huge productivity increases. It had a big impact on me to understand that software development is a craft which can be mastered on a whole different plane beyond what the vast majority of developers can imagine. I consider a lot of his teachings to be 'trade secrets' and I try to pass them on to other developers I care about (especially open source collaborators).
Worst colleague taught me to be loyal to people and not to companies. You can be friends with people, but not companies. Friends will reward loyalty and sacrifice, companies just want you to think they will.
Bests: Hide your ambition the lazy will try to block you. The ambitious will try to remove you.
Worst: Stay in your lane.
Worst: but it's amazing how long a person can last without doing much at all!
And it was solved in one go.
Worst: be open to integrating the solutions of other teams, that may conflict with your own. Purity of your solution is irrelevant if others have gone in different directions already.
Kicker: these lessons were learned from the same person.
From outright jerks: learn to let go. You can’t control everything, you don’t know everything, and you need to take a break from work to get some perspective.
From my favorite colleagues: put humility and service to the customer first. Be selfless with junior people. “We step out ... seeking only peace and friendship – to teach, if we are called upon; to be taught, if we are fortunate.”[1]
1 - https://www.unf.edu/~n00006757/astronomylectures/Voyager%20M...
My most annoying/disappointing colleague, who I was fooled into hiring into a senior position, taught me many, many lessons .. but the most positive was that speed to market trumps attention to detail 9 times out of 10. Seems obvious now!
Best colleagues I have had would point out something to be fixed / improved, and immediately suggest a tentative solution. Worst colleagues would just blame others (major red flag) for any issue they encounter, and never put energy in solving them.
Worst: Fire them all really really quickly. People that are bad after week 2-4 will never not be bad afterwards.
Worst: Giving the benefit of the doubt for more than a few times will inevitably end in a disaster if the person is beyond redemption. The easiest way to recognize somone who cannot be helped and their work cannot be salvage is to look for persons that don't accept help and act like their work is perfection.
Worst : Many of the co-workers/ department heads etc. etc. have moved ranks above me exponentially and yes because of their hard work. Congratulations to them. But sometimes if I have to reach out to them or they need to reach out to me, they address me as "Sir". "Hello Sir, How are you Sir?" I feel terrible and I feel like they are mocking me for being a looser for not having achieved as much as they have.
Worst: some workplaces allow the negative workers on the team to get away with anything.
There is a deadline or finished software, never both.
If you were a CEO once, people will hire you as CEO again, even if you were horrible.
Some tasks like interviewing and writing exams are distinct skills you can learn and might have nothing to do with the actual work you're required to do in a job.
From bad colleagues - Protect your direct reports from the organisation (politics, snatching away of bonuses etc.) - Junior reports cannot function without a clear task. You need to handle the org and make sure they get it. (this was summarised in a great article - "context down, information up" - https://jacobian.org/2021/apr/19/the-fundamental-purpose-of-...) - Respect everyone and mentor juniors who look up to you. - Don't accept leadership positions if you can't actively play office politics.
Worst: be competent, be rude, don't collaborate
Worst: Good people can sometimes land in the wrong role. Change conditions before passing judgement.
Best: Focus on the project and making it good. If you are correct in your ideas then good. If you are wrong but the project is better then good, everyone wins.
Worst: "perception is reality", coming from a COO that had no idea about technology and what people do but they were second in command and making a lot of decisions.
It taught me that you have to play the game and sell your accomplishments so that upper management sees you. You do not have to market yourself but do not complain about not getting credit for the amazing things you do if you do not sell yourself.
Best colleague: Knew how to time manage. Knew what was priority and what wasn’t. She also knew half her job was managing her boss’s expectation. She was never late for any work because she knew how to manage up.
Worst colleague: A programmer that played more political games and sucked up to the boss than work. I mentioned his code was not up to par multiple times. The boss ignored me because the other colleague loved sucking up to him. He kept on talking behind my back. After I left, they couldn’t launch a product for 1 full year. Turns out I was the only one lifting the entire team.
Worst: Letting toxic people get away with insults because they're good at their job.
* Be supportive and non-judgemental, not dismissive.
* Really listen, hear the other person out and validate them, even if their concept or idea sounds dumb. Personal goodwill combined with strengths in the domain go a very long way.
* Be willing to share, explain and help others understand things that are new without treating someone like a dummy.
* Be thorough, systematic and organized, and keep working to improve ourselves, our systems, and our efficiency.
* Take the effort to make personal connections, and more importantly, to nurture and grow them.
* The past is the past - though some bad stuff may have gone down, look to the future, to how we can build and grow.
* If things are not working out, make changes, get it working, and don't be afraid to cut my losses and change track.
* Take responsibility for growing myself, I am accountable for my career and well being, invest in myself for the medium-term and for the long-term, keep learning and make sure it's something strategic. Time is always limited and there are a million things where I can waste time. Figure out what gives me the best ROI and invest there. These are the sort of time and energy investments that take time to bear fruit, and when planned and executed strategically they are well worth the effort.
Worst:
* There's a huge laundry list here, and I'd rather not go into the details. Others have covered this.
I regret looking back at my worst moments.
He didn't double-task and constantly check his computer, phone or read/sign papers. I had his full attention while I was there.
It's an attribute that stuck with me.
Best: they believe others are capable of achievement, and they offer help
Worst: After hiring people, act as if they are trying to damage the franchise on a daily basis, give them very little responsibility, remind everyone the place only runs because of the boss's efforts and genius. Give juniors no path for monetary or career advancement.
Worst: some people will put all their effort into the performance of working but never actually work. You risk your own job calling it out because their speciality is hiding their incompetence.
As an overall observation, the happiest colleagues I've had have been the ones who are good at their jobs and care about producing good results, but also know when to let go, and to decouple their jobs from their personal lives. They were on time, did their jobs well, were good colleagues and always helpful.
Clock in, do good work and be proud of it, clock out.
Some people want to go for the high risk/high reward 70-hour week stressfest, and they always seem to be worse off for it, to try and be in that 0.1% who succeed in the struggle. That's their choice, but it comes at a too high cost.
Worst: two here...
If something's hard to understand, it's probably just done poorly.
You may outpace others. Just help them as you can.
Best colleague: Talk openly. Engage in discussions. Conversation about conflicts and criticism is good.
Worst colleague: Don’t engage. Shitty people are just shitty people.
Worst: almost no business deliverable is one tenth as important as the people telling you to give up your time, strength and sanity in order to achieve it will tell you that it is.
Heaven is other people.
From the best: "Ambition is the will to try what others won't."
Best: always be curious. When you spot a bad idea, be especially curious about the parts that will go wrong. Most of the time, people will figure it out and change course without a conflict.
Its very common for people to come to you with a suggested solution rather than telling you their problem.
Can't count how many times I've been assigned to build feature X, and upon further digging realized it will not solve the requester's problem or won't do what they think it will.
Life is too short. Or, to put it another way, life is too long.
* If you screw up, acknowledge it without passing the buck, take responsibility for it (works best if you have already worked out a mitigation strategy and timeframe to implement and can communicate this effectively)
Worst: a programmer with a huge ego. He was extraordinarily defensive about his work and this made the whole team unproductive.
Worst: Code should be designed for users, not any individual engineer's philosophical preference.
From the best: abstract only when needed.
Worst: Apparently knowing how to use excel efficiently isn't better because manual calculations prevent errors.