A lot of it has to do with communications. The times I (as a programmer myself) have witnessed how companies we asked to write software tackled it was eye opening in a negative sense.
As a freelancer my process involves a lot of observation, asking questions and planning. Usually when I go into the details more questions emerge and whom to ask better than the people who do exactly this daily? Sure sometimes their process is a bad abstraction, they chose because they did not knew better and thus not worth putting into software. But before you decide that you gotta ask whether there are reasons why it was done that way. I see my task as a programmer to make peoples lives easier, by finding elegant abstractions for their problems, that are at the same time, reliable, adjustable, encourage correctness, avoid problems and so on.
Now most software companies I interacted with from the other side did none of the things. They rushed to gather the specs, asked some questions in the beginning and were out of the door to start way too fast, with some things they just assumed without confirming. Then crickets and then something half broken comes around that you need to beat into shape in an exhausting back and forth, where again you have to be the person with the questions.
If it is exhausting for a person with software development experience to be your customer, how bad will it be for people who have no such experience.
Now there are of course exceptions also in such companies, but in my experience that is mich rarer than it should be.