But there are another part of computer science and engineering dealing with fuzzy requirements or unknown problems. I don't see any better way to explore that area except trials and errors and the scientists and engineers have to face possible charges of "piss-poor", unethical, criminal and evil for the consequences of their solutions.
I feel that you have a very clear dichotomy of moral system. Unfortunately I deal with fuzzy things daily and see the harms of dichotomy in creating new stuffs and burning through money without any fruit of labor. It is easy for you to improve existing technologies because you can define criteria for improvements. But it is so hard in underfunding web startups that you can't expect in advance what a new solutions will be to users unless you make it and test it with them.
If I need someone to preserve and maintain existing software systems, because specifications and use cases are well defined, people like you are well fit for the task. But if someone has a new idea to solve a new problem that no one solved before, I would rather to see an unsophisticated solution first to test against the problem and start from there, and I am ready to rewrite the system when the problem becomes clearer.
I'm not suffering from an absolutist morality here - I'm pointing out that there are consequences to piss-poor engineering, and it is necessary for engineers to take the viewpoint of those being hurt rather than that of those trying to make money selling the product; because after four hundred years of training engineers, that's the best way we've found of preventing disasters. And the same should be true of developers, because just as civil and mechanical engineering before it, computer and software engineering are increasingly forming an integral part of the infrastructure we live our lives in.
You seem to hang up at the concept that it has to be perfect from the first time from your writing.