Ask HN: Why do such strong opinions exist in our industry?

42 points by tcbasche ↗ HN
Namely, why do opinions tend to completely trump evidence for technical decisions? E.g. choosing new trending frameworks, a language that _wasnt_ used on a previous project that failed, choosing a cloud provider based on gut-feeling etc. etc.

Is this because it's so easy to get started with new tech? I'd be interested to know what people's experiences are like.

48 comments

[ 3.3 ms ] story [ 103 ms ] thread
The trending frameworks might be because we usually get tired of working with the same technology over and over again. The moment of learning something new is always exciting and once it wears out I guess that starting with "the new thing" recreates that feeling momentarily so we start rationalizing about it. There is also in my opinion the big problem of being able to do the same thing with many different tools, it always generates this kind of conflicts of which one is better, but at the end of the day, any tool can be "the best one" depending on the team.
I find the opposite. I would far rather develop in a language / framework that I am familiar with, knowing that I will be making the correct decisions.

I doubt it is only me, but every first attempt with a new language is a fairly crappy effort, as its a learning experience. I prefer to be solving the problem at hand rather than having to google something about the framework every half hour.

I think you have to follow the money. When people have invested a lot of money into something, and loan payments are due every month, people tend to "make decisions" like "we are going with xyz framework" or "we've always used java so why migrate".

Once this decision is made at the top, the middle managers and aspirational employees believe in the upper echelon's dogma because their jobs depend on it, and going against the organization might = getting fired.

Conversely, when you look at self organized teams that are just making a hobby project, they tend to go with "we will do whatever we want to do given the reality of the tech landscape".

Strong opinions exist in any industry. However, few industries have as many things going on (and actively vyying for your attention, whether for $$ or mindshare or otherwise) as software.
If you go deep in a niche you're going to learn things. Those things may be contrary to the standard thinking. But in turn if you're right they become the standard thinking.
I don't know if it has to do with the CS background of people, but i find it baffling too (physics background). A TON of decisions are given very little thought or justification even though it should not be hard to measure stuff. It borders or being similar to management.
Although it's sometimes not hard to measure things, often the measurements don't generalize. Today's measurements may be invalidated by future software upgrades, or just variety in the platforms where the software runs.
(comment deleted)
There’s no single source of truth. Experiences are posted on social media and forgotten.
What evidence exists that definitively says JavaScript is better than perl? Or golang is definitively better than python.

There is no definitive evidence.

You can't even prove that rust is definitively better than assembly language.

Hence where no evidence exists, decisions without evidence are made constantly.

You also need to realize that this not baffling. Collecting hard scientific evidence for every freaking detail is incredibally hard and time consuming. It's part of why the medical industry moves so slowly to get medicine out.

In fact any problem with the word design means that you are working on a problem with no definitive evidence pointing to a definitive solution. You are literally designing a possible solution out of thin air. There's a whole segment of people who do this, they are called ux and ui designers and a large portion of the the content they spit out is not evidence based at all.

What evidence exists that definitively says JavaScript is better than perl? Or golang is definitively better than python.

do people bother to gather the evidence though? like perhaps performance, number of bugs per coding day, quantity and quality of output etc.

Is evidence helpful?

At our workplace, it's clear that Cordova hybrid is worse than maintaining both iOS/Swift and Android/Kotlin, in terms of bugs, development time, hiring/retention cost, user experience. But we still do it.

Sometimes it's just that there's less unknowns involved. A bug in Cordova might take a week to fix. A bug in Android or iOS might take 1-2 days. Statistically it would be a no brainer. But bugs are dreadful things and there's the possibility that it could take much longer than usual or go unnoticed.

You can't really say one piece of evidence is better than another piece of evidence unless you can quantify it in a meaningful way.

Agile points are an example of something quantified in a way that isn't meaningful, while performance timing on an algorithm can be meaningful. Many things in programming languages like a for loop vs. recursion cannot be quantified meaningfully.

Some people do. Check out the works of Victor Basili and Barry Boehm.
You make an argument for empiricism, which is only one way of evaluating the truth of arguments. For example, mathematics traditionally doesn't involve empirical study: It begins with a pragmatic premise instead, like "assume the following..." and then proceeds to expand on that assumption or find its inherent contradictions.

One of the "crises of mathematics" is that computerized proofs by exhaustion, by applying brute force to find all possibilities, make the field more empirical in nature and hence subject to experimental error.

When pragmatic arguments are used to create a premise like "this design will work best for the software", the question that needs asking is whether all stakeholders can buy into the most core assumptions, and whether all assumptions retain conceptual coherence when taken together. If the UX designer, the developer, the product manager, and the end user agree on a pragmatic theory, and all theories in play align without issue, there isn't an problem as to whether it's "really" true - and with software, the concepts and data are thoroughly enmeshed in pragmatic thinking from the very beginning: numbers are modelled to limited ranges or precisions, strings are encoded according to arbitrary mappings, and so forth.

> One of the "crises of mathematics" is that computerized proofs by exhaustion, by applying brute force to find all possibilities, make the field more empirical in nature and hence subject to experimental error.

I would not describe using computer aided proofs as "more empirical in nature". Generally such proofs are held to the same standard as human proofs; there is not any "experimental error" that is not present in normal proof review.

> When pragmatic arguments are used to create a premise like "this design will work best for the software", the question that needs asking is whether all stakeholders can buy into the most core assumptions, and whether all assumptions retain conceptual coherence when taken together. If the UX designer, the developer, the product manager, and the end user agree on a pragmatic theory, and all theories in play align without issue, there isn't an problem as to whether it's "really" true

If your definition of "best" is something measurable in the real world, it doesn't matter what pragmatic theory is agreed upon. Only the systems that "really" achieve the best state are the best. Systems that rely on agreed upon assumptions, but fail to achieve their promises are not relevant.

In simple terms, philosophy and mathematics doesn't matter if it fails to match reality.

> Namely, why do opinions tend to completely trump evidence for technical decisions?

Because evidence that isolates the effect of the technical choices under discussion from all outside effects and is directly and unambiguously applicable to the context in which it needs to be applied basically doesn't exist for most technical decisions in our industry.

The evidence which is clear tends to be on questions which are distant from business value, the questions the get directly at business value tend to have unclear/ambiguous evidence.

Wisdom takes time. Effort and time. A certain striving few are willing to maintain.
Perhaps confidence, warranted or not, gets more attention (including upvotes and reshares) than being justifiably cautious about drawing a conclusion? In theory this will both reward confidence and make it appear like most people are doing it.

It seems tough to avoid. You need a system, and we don't really have one yet.

We had a term where I used to work - Promotion Oriented Architecture. In most places progress in the engineering org chart is heavily influenced by delivering software for complex usecases. Unfortunately IME most developers correlate complexity in the problem domain to complexity in the solution domain. This becomes a very strong driver for adopting novel solutions, even when a simpler one would have sufficed.

A second factor is the difficulty in measuring success. Once a solution is adopted it is very hard to demonstrate the opportunity cost incurred by not selecting a simpler solution. And the costs themselves may not be evident until long after delivery. And since measurement is hard, the lack of data also makes it difficult to articulate effective counter arguments to gratuitous complexity

I like to refer to POA as Resume Driven Development, pairs nicely with TDD IMO.
There's too much going on in this industry. Nobody knows everything. When a question comes up (Angular vs React? Lisp vs Haskell? C++ vs Rust?), there are very few people who know both sides really thoroughly, even for a question that only has two sides. So we wind up with opinions, because nobody knows enough to do otherwise.

And if you don't know both sides, you're judging a side that you know less well against a side that you know better. That is, you're judging your experience of X against your opinion of Y. When you're talking to someone who knows Y better than X, you can get fireworks.

Hmm, so are you blaming the incompetence of the majority of people in the field?

Also, I can't help but draw parallels to this other discussion [1] where people claim that veterans in the programming community have to "live" with python because beginners adore the syntax.

[1] https://news.ycombinator.com/item?id=20672051

> Hmm, so are you blaming the incompetence of the majority of people in the field?

I interpreted it as being an issue that there are so many options that being an expert in the relevant two so you can can make an educated decision is uncommon.

This is probably somewhat unique to programming. There are easily more than 25 programming languages that would be important to know trade-offs between in any given programmer's career. And in each, there are competing libraries and frameworks. Woodworking is the only other profession that comes to mind for having so many competing tools.

It's not incompetence, and you don't know what's going on either. None of us do. Most developers I've worked with know less than me, and I don't know a fraction of all the things to be learned out there.

Most people only have deep experience with their special niche, because it's a lot better to hire a "PHP developer" than a computer scientist if you actually need PHP maintained. That creates incentive on both sides for specialization of labor, and it decreases the number of people that have deep and current experience in many things.

And more common tech means easier to hire workers, which gets the job done faster. It doesn't make sense for me to add Rust to a project, because now I have to both do the project and learn Rust. Plus I'm going to have trouble finding Rust programmers to maintain it.

You can't teach this stuff in schools, because it changes too fast. The best we've come up with so far are those hacker bootcamps that try to ramp you up on what's hot right now so you can at least start to get in the game with the highest chance of success.

No. I'm blaming the size of the field.

Do you thoroughly know all the web frameworks? Does anyone? No.

Do you thoroughly know all the major languages? Does anyone? No.

Is that because everyone is incompetent? No.

As an analogy, there was a time when a "renaissance man" could know much of the world's (or at least Europe's) knowledge. Then, in the late 1800s, there was a time when one person could pretty thoroughly know most of physics. Those days are over. Physics is too big. Even the best people know one area deeply, and nearby areas fairly well, and are sort of familiar with the rest of the areas.

So it is with programming. It's too big to really know it all. You can't. Nobody can.

Because this isn't an engineering discipline, there's no science, it's all pop culture. Alan Kay:

Computing spread out much, much faster than educating unsophisticated people can happen. In the last 25 years or so, we actually got something like a pop culture, similar to what happened when television came on the scene and some of its inventors thought it would be a way of getting Shakespeare to the masses. But they forgot that you have to be more sophisticated and have more perspective to understand Shakespeare. What television was able to do was to capture people as they were. So I think the lack of a real computer science today, and the lack of real software engineering today, is partly due to this pop culture.

Basically everyone roots for their favorite team.

I would say it's more closer to fandoms than pop culture.
(comment deleted)
In my experience a lot of people who post on hn have a shallow view of how technology relates to a diversity of people who use it. Most are coders for a company who make web apps, or business applications or have been in coding long enough to develop esoteric affectations for LISP. Every time I see an incredibly strong worded opinion I get the impression they've never stepped outside working with a computer company driven by a 'demand' for a 'product'.

Just look at the comments of this thread right now. https://news.ycombinator.com/item?id=20672051

Yeah I was just reading that and thinking the exact same thing. Lately I've been thinking 'man, Elixir has been getting some traction' until I realised I'd only really read that on HN in the comments sections.
Software developement is an unconstrained field. Computers can do almost anything you dream up. You don't need expensive tools, space, raw materials, or lots of people to make it. Contrast with building a car, where strength of materials, wear and tear, safety requirements, etc. make the design space kind of small.

In other words, there are fewer decisions that can be resolved by "option A is the only way to meet constraints x, y, and z simultaneously."

Similarly, you have a better sense of the cost of different materials in a car, but pricing React vs Vue vs jQuery is a lot fuzzier. Especially since software may or may not get extended whereas a car doesn't get updated a lot after being purchased.
It's not true, we have a plenty of constraints: memory, cpu, battery consumption, latency, etc. We also have complexity constraints, i.e. how qualified our teams, which technologies, they know, etc.

IMO, many combinations are just impossible, just like in mechanical engineering, and even worse, complexity is often much higher.

I think many programmers work on projects where computer hardware limitations have little impact on the code design.
Because it's art moreso than science or engineering, thus much less subject to constraints like physical limitations.
Compared to the constraints of the physical world, the universe of computability is essentially limitless.

On top of that, there are almost zero objective facts in the field. Faster and smaller are about the only factual statements that can be made about computability. Everything else is an opinion. With no physical truth to disprove wrong opinions, people get accustomed to putting forward passionate arguments without every worrying about being proven wrong.

Finally, it usually takes significant effort to even have a few sample cases to compare opinions when it comes to coding. And usually it's not under scientific controlled environment.

There are no two decades long arguments about "does a ball roll down a hill". Noone is taking a strong opinion against. Before it would get that far, someone would just put a ball on a hill and see the end result. You can't do that with software, the problem space is too large and there is no little bearing to an objective way to measure to results, or they often aren't generally applicable.

Programming is (in a lot of cases) a "personal endeavour", as generally 1 computer has 1 keyboard for 1 person to use. This typically means it's a personal experience to program software, which can have a stronger impact on you. Some experiences in programming are really good others are really bad...

"Strong opinions come from strong experiences."

Dunning-Kruger effect.
(comment deleted)
I think its also worth looking at how people usually learn computer science.

In my limited experience, most programmers learn real world software development using the internet.

Some might learn CS theory in formal education, but most real world tools and frameworks are just taught by random people on the internet, or worse, giant corporates that have business interest in promoting the use of X. (Flutter, React, etc.)

Internet cannot possibly provide the scientific temperament and rigour that formal education in say, Physics, is able to provide.

The general consensus among the public seems to be that internet has made CS education highly accessible to the masses. This is of course, very convenient for countries like India, where higher education is often unaffordable and unpractical.

What's not so clear however, is whether this is enough for a real engineering discipline to exist.

This makes sense to me, as a dev from India who's currently learning a variety of technologies.

I could never afford college, so I took it upon myself to learn whatever I wanted from the Internet. It is astounding how rich the resources for CS are, if you know where to look on the web.

Going back to the topic at hand, I often find myself being defensive and supportive of stacks I use and learnt about. When I dig deeper, I find myself at a lack of words, regarding why I like React or Python. It mostly boils down to "I like x because I know x". I often don't have reasons backed by technical knowledge.

Many times I've not given a certain language/stack a chance just because I heard/read one guy write something negative about it online.

I see my error and will try not to be blindly biased.

To be fair Stack Overflow's voting system generally appears to work well for selecting the best answer.

Reddit on the other hand seems to dish out fairly crap advice on a regular basis for the subs I subscribe to (not that all Reddit advice is bad, just that bad answers don't get the same down voting that SO answers do).

Network effects and platform thinking create a high sense of urgency: time to market is considered crucial.

This in combination with a high level of innovation means there is a big risk perceived in taking the time to truely evaluate and test new technologies.

And in the end, because most of this is venture capitalist driven, long term effects are not really important: a road to a rewarding exit (ipo or company purchase) is what really drives most investment decisions.

There are multiple reasons why strong opinions exist.

But at least one of them is quite valid. We have a lot of garbage in our industry. People perceive that correctly and call it out. Simple as that.