I learned to program at an interesting time. Computers were changing from these things that scientists did in big clean rooms to something your dentist kept his appointments on. In popular culture, there wasn't a standard definition of programmer aside from just somebody tinkering with the computer to make it do things.
I took some classes later in my twenties, which I found mostly useless. Programming was a simple job of finding a person, asking them "what's the problem?" then making the computer do that. Although there were plenty of experts -- the tech industry grows experts the way my garden grows weeds -- for the most part you just made it up as you went along. Neither you nor the person you were helping had any idea of how this was all going to work out, and that was just fine. It always worked out, and you always got paid. Mostly.
It was a sucky time. I do not seek to glamorize it in any way.
But the simple, naive stupidity of the time made for an interesting point in history to be alive. I firmly believe that there was something very, very important there. Something we're losing.
To illustrate what I'm talking about, let's perform a thought experiment: what happens in your profession where while doing the work as your profession describes it you realize that the world the client describes does not exist.
Guy walks into his doctor's office and says "Doc, I got shingles. The doctor runs some tests, tells them nope, you got simple Chicken Pox. See here, the test results." Guy walks into his lawyer's office, says "That no-good bastard totaled my car! We should sue him for everything he's got!" Lawyer does some studying, says "Nope. The world you describe exists, your car was totaled by him. But the conclusion you draw, that we can sue him? That's not happening. It is unlikely in my opinion that such a case would be successful."
The reason you are a professional is that people describe stuff to you that they are unable to evaluate to their own satisfaction. If the guy knew doctor stuff, he wouldn't need the tests. If they guy knew lawyer stuff, he'd know his case is weak. Professionals have skills that allow them to evaluate the world differently, more in-depth in their area of specialty.
Now, let's say you're a coder working on a four-year project that has around three million lines-of-code. Guy comes in and says "Hey, I'd like a report of all of our vehicles, their VINs, and monthly mileage." The details here do not matter, so don't go there. Let's just stipulate that he has a reasonable business question.
Now you go and take a look at stuff in the code. You can't do it. Can't happen. There are various reasons this can happen. Perhaps you have a cyclic causal relationship somewhere. Perhaps various data originators don't agree. Perhaps terms are defined different ways in different place (Hint: they always are. Analysis impedance mismatch begins the second you stop talking and start coding) Again, the details do not matter. Let's stipulate that the code was written over time as a perfect match to the problems being presented and solutions desired.
Whatever the details of this mismatch, at this point something very weird happens: you have to explain to this guy that no, he cannot have the simple thing he asked for, because his world is logically inconsistent.
Everything he understands about the universe is true. You don't have some special knowledge of what he wants that he doesn't have. (Don't argue. I know many times coders do. Not the point.) What you've done, though, is logically translate his description of how the business works, what's in his mental model, along with the descriptions from the other business folks, into this formal mathematical language. And they've described themselves into a corner.
Thesis: in coding, as opposed to any other discipline, you can find out that all of the things are true, nothing was lied about, you're not some super expert that has arcane knowledge, but the relationships described are logically impossible to exist. This is a completely different kind of "but you're wrong" discussion to have than is found in any other profession.
If the lawyer helps you out, he tells you something about law you didn't know about. You probably don't care. But the coder tells you that's it's your own mental model of the things you think are important that is inconsistent. Has nothing to do with his area of expertise, coding. It's all on you, dude.
My friend Greg yesterday posted in a Discord chat:
"The word "essay" comes from the French verb "essayer", which means "to try". An essay, in the original sense, is something you write to try to figure something out. This happens in software too. I think some of the best programs were essays, in the sense that the authors didn't know when they started exactly what they were trying to write."
We think of programming today as something we tell the computer to do, but that's a very small part of a hugely important concept in civilization. Programming should be telling us a lot more than we're telling it. We've got it backwards. We're doing it all backwards.
Our profession does structured analysis in a way no other profession has ever done. The only other ones that come to mind are mathematicians, geometrists and the like. But then, for them the "world" as presented and found illogical is not really related to anything at all, while with coders all the pieces actually exist in life. So when you find something that doesn't work in coding, you're finding a spot where conflicting meanings happen, each of which is correct. That's a much more profound piece of thing to provide a client than something like "you're probably not going to win this case" or "Nope, you don't have mono, you have shingles" or whatever. This isn't a matter of I know more than the client. This is a matter of finding universal human blind spots which, for this particular client and social definition group, exists at least in this way (no doubt you business guys are being illogical about many more things, but here's one thing I found for you that you'll need to clear up.)