And one of the big things that tech people often don't ask themselves is: "Does arguing over this really matter?"
"Winning" an argument almost always costs you some social capital, so save your arguments for the things that are genuinely important.
If you've said the "right" answer, people still want to argue, but it doesn't affect you then sit down and shut up. Sometimes you have to let people make a mistake so they can learn.
If they're really smart, not only will they learn they were wrong but they will remember that you were right but didn't beat them up about it.
Yes, it's possible that the OP is accidentally being a bully by insisting on getting their way every time. But it's also possible that everything the OP is saying is true, and the other party really is objectively wrong. Do you agree it's possible the OP is right?
I personally have encountered a situation where a tech lead repeatedly doubled down on idea that was objectively deeply flawed, but they had a lot of political capital, so management told me I just needed to "give in". Other engineers agreed with my assessment in private, but weren't willing to say so publicly.
My point is that both of these things can be true. By insisting you always get your way in any dispute, you can be a bully even if you are always "objectively right".
How do we know who is "objectively right"? Both sides believe they are, right? Have you never realized later you were wrong about something?
> I personally have encountered a situation where a tech lead repeatedly doubled down on idea that was objectively deeply flawed, but they had a lot of political capital, so management told me I just needed to "give in". Other engineers agreed with my assessment in private, but weren't willing to say so publicly.
I will say again that I am not suggesting that anyone lie about what they think, or say one thing publicly or another privately, or not share their true assessments publicly, or that this is a good culture where people think they need to.
I don't think we have enough information about OP's situation to say for sure. I agree that many disputes are highly subjective, and there's no way to say who's objectively right. But I also think there are cases where, after listening and understanding both sides, it's pretty clear which side has a better argument.
Objective reality does exist! People are sometimes bad at judging what's objective, especially when emotions run high; but it's not impossible. And, if the question is important, then finding the objectively correct answer is better for the success of the project.
That that point you need to choose, which you value more highly: correctness and finding the best technical solution, or maintaining as much team cohesion and not "stirring the water" too much.
So, if it's not your head on the chopping block, but a public decision about how to do things (ideally documented in an ADR - architecture decision record, with an author attached), just roll with it and indeed "give in". Ideally with some of your concerns documented, as well as a few prepared suggestions for how to deal with the eventual fallout and how to fix some of the things that might go wrong.
On an individual level, yes, that's the choice I had.
But on an organizational level, it's possible to do much better! In a healthy organization, tech leads listen to feedback and evaluate it with an open mind, and are willing to acknowledge that they're wrong. If they don't do that, then a healthy organization removes them from their position. In my case, this particular tech lead had a long history of being toxic, but the manager refused to fix the problem; this was a case of organizational dysfunction.
I don't know the details of the OP's situation, but I think it's possible they're running into something similar: Their coworkers aren't listening to valid points, and management isn't holding them accountable for being open-minded. If the org considers this behavior normal, I'd consider that a form of org dysfunction.
That's not what my point was about, however. I am not going to state "python is better than C++" just because someone wants me to say it, or back down from something I know is a fact, like "writing a file to disk is a complicated process." And I'm ready to quit over that.
You shouldn't, quite the opposite - you should be able to express your concerns freely or at least make them known in whatever form of a "paper trail" is available. Better yet, if you are able to provide examples of what might go wrong with a particular technical choice and how to address it.
> ...or back down from something I know is a fact, like "writing a file to disk is a complicated process."
This is where things get a bit more complicated, though.
If you disagree with an approach that the team or certain members might pick, to the point where it blocks progress and they're not intent on budging their own views either, then clearly work cannot continue.
In those situations, there are just a few ways how things might go:
- neither you, nor them concede, work cannot continue until an external intervention
- one of you concedes, work continues, good decisions are made and there are no problems down the road
- one of you concedes, work continues, bad decisions are made and there are problems down the road
So the only option for work to get done, is for one of the people to give in. Since sometimes you cannot always control difficult people yourself (with the resources available to you), it feels to me that giving in to sub-optimal choices is the only option in those cases, short of quitting.> And I'm ready to quit over that.
This is also a valid choice, though it also probably reflects how hot the job market is in your country, how important having a job is at the present moment, as well as your tolerance or emotional involvement in the project.
Some might jump around various companies until they may or may not find the environment that they're looking for, others might have to temporarily tolerate some bad engineering until another project comes along, others end up feeling miserable when the culture is all bad. I guess it varies quite a bit.
We can go ahead writing your file-based persistence layer, and I"m fine supporting and maintaining it too. But I won't say that "it's simple".
You know, even MongoDB GridFS or binary blobs in RDBMSes could be less problematic options, rather than dealing with inodes, maximum file path lengths, file name constraints, storing metadata, maximum files in a directory and eventually having to build a system for having a tree of nested folders to work around those (a bit like what Ruby on Rails ActiveStorage does with uploaded files out of the box, for example).
That's what I meant with . I am happy to write `fwrite(foobar)` and get the project going, but it's not simple, and there might be very valid reasons to not do just `fwrite(foobar)`. If you don't want me to even mention these, then I'm out.
Otherwise, I will fully engage. I'm really a pragmatist when it comes to getting stuff done. Anything getting shipped is better than nothing getting shipped, and I will maintain it for as long as it needs to.
What one person considers arguing is not always considered arguing from another's perspective. (I don't want to label the sides here because I think definition varies neurodivergent or not)
From the examples given it sounds like the author views the conversation as a beginning middle and end before they can make a judgement, but the person asking them the question is only expecting the end part so theres a misunderstanding.
Generalising here body language is different in autistic people, tone of voice, social cues and manner of speaking, depending on how well that person can mask might affect how their attempt to understand the problem is perceived.
I've never understood why people go along with things they disagree about. It seems people often beat a good argument with the threat of retribution if we dont play along. Doesnt sound like a recipe for well thought out actions or incentives.
And because I know I might be wrong even though I don't think I am, I've been mistaken about that before, that's literally what being wrong is. Sometimes when I'm wrong I am not going to realize it for days/weeks/months. So why fight it to the death? Only when the consequences seem especially vital, not every damn time!
I am still not advocating pretending to think something you don't. You do not have to pretend you agree with the other person or lie about what you think. But I am advocating some humility. (I definitely do not always exhibit it myself, for anyone reading this who knows me; I do consider it one of my faults; I am writing here as a reminder for myself too).
I actually think it's important to set up a culture where everyone doesn't have to agree -- we all acknowledge we will sometimes embark on a course of affairs that everyone doesn't agree with, and you don't need to pretend you agree. People will disagree, and sometimes we still need to move forward. I actually fully agree that a culture where people have to pretend to agree in order to move forward is dishonest and harmful. And that's generally the real-world outcome of expecting nobody ever to "go along" with something they disagree with.
I like this angle, I'll try to observe if it's actually happening in my context :)
The cost of choosing washing machine A is that it breaks at some distant time. The cost of arguing about washing machines is wasting an hour every week driving to a laundromat and paying $10 a wash, plus the hard-to-quantify strain on your relationship, for an argument you might not even win. In this situation, the hidden third option of dragging out a conflict that you might not even win could end up more costly than choosing a bad option, even if you're right.
In software this happens a lot. You burn opportunity cost trying to argue for a perfect solution instead of aligning behind a flawed solution.
I fully agree that in a romantic relationship there is far more at stake than any single choice.
But I've found the professional world to work far differently. For starters people only stick around jobs an average of 18 months (whereas marriages get about 7 yrs). And there is far more at stake to having your choice selected in an argument at work -- promotions and subsequent pay increases are worth 10s-100s of thousand. Submissive people are frequently looked over for promotion and may miss >5 years of promoted working years.
perfection was never in the discussion, but good (ie high quality) is. When I see someone arguing for a bad solution (ie both high risk & total cost of ownership expensive) it's there's actually a lot on the line. This risk factor scales with the size/brand of the business. Look at the pie in the face one company wears[1] for a security breach, whereas another gets to demonstrate their security forward posture[2]. The former likely has lost millions to a ~million dollar choice[3]. Whereas the latter has increased their brand value to the same choice.
But the person who argues without end for what they think is right is often ostracized and disparaged. This is something very broken in American culture.
[1]: https://www.twilio.com/blog/august-2022-social-engineering-a...
[2]: https://www.bleepingcomputer.com/news/security/cloudflare-em...
[3]: 8k workers by $125 -- yubikey + cost of training ~$1M .
If only they were all that way.
If someone tells me their blender is the best washing machine, this may turn into a painful conversation. A long one. Possibly an embarrassing one. But I’m here for it. That’s a fucking blender, and I’m not going to call it a washing machine even if that’s the last decision I make here.
It would be great if all of these situations were as sane as picking between two valid options. Sometimes there’s a valid one, and, well, pick your expletives for the other one.
In software this happens a lot. Entire teams spinning plates because someone confused authority with experience.
Sometimes the worst case outcome isn’t very bad and will be quickly uncovered.
Sometimes you acknowledge that though you’re sure you’re right, there’s the possibility that you are not.
One thing I dont understand is why American culture is such that it's better to play nice to the group detriment than to work hard to everyone's benefit? It's like people would rather smile on a sinking ship than suffer the journey to excellence.
[1]: for example I've warned my employer once that an implementation was brutally inefficient and will cost both opex and velocity, but they told me "what's your solution" to which I could only reply "give me a week to design it like you gave the principal engineer and I'll give you a better solution". They laughed and said they dont have a month. The choice has cost the business >$1M in excess PaaS fees and has had multiple subsequent major projects to attempt to remediate the costs (granted the opex costs have come down significantly since multiple rounds of refinement). But the point still stands -- I roughly knew a better path to not need 6+ months of refinement, and save >$1M in opex overspend, but they wouldn't spare the time and disparaged me for not being a team player.
When you know you know better it's best not to submit. Perhaps it's worth realizing it's a bad culture though.
It especially works better when there's too much ambiguity to proceed aggressively in any direction no matter how confident you are.
It usually more accurately reflects the group's appetite for risk, creates psychological safety, and reduces the social costs of failure.
People also understand that "correctness" is often subjective and not boolean in nature, so insisting their opinion is in all ways the most correct would be silly.
It is though. It's a way of saying "maybe I'm wrong, and we're going to act this out by pretending that I am". This means that whoever put pressure on you gets their way, which motivates them to do it again. That is toxic.
While I don't think this is a ridiculous take, it is a rather uncharitable one. I'd think the only reasonable time this should be believed is after it has shown itself to be a pattern.
> There is more to life: I am an engineer; I like solving problems. I embrace fairness and open intellectual exchange. This matters to me a whole lot more than getting promoted. Plus, "giving in" does not preserve peace—it simply appeases bullies and makes the workplace toxic.
OK, yes, but, how about: "I am still not convinced, BUT I realize neither of us are going to convince the other one right now, and I've been wrong before, let's try it your way this time."
This is not appeasing bullies and making the workplace toxic. Sometimes insisting on arguing everything out forever every time you think you are right is what is in fact accidentally being a bully and making the workplace toxic. (And I have definitely been that person; I am not to my knowledge autistic, although some people have wondered sometimes).
I think people can mean either one by "giving in", I am wondering whether the OP, in rejecting "pretending I agree when I don't" is accidentally being the person who "always insists on getting their way every time".