I am a retired test engineer, not a computer scientist. I certainly make no claims about my wonderful code. The fly in the ointment is in a world of management’s unrealistic desire for fast, cheap and good there come a day when budget and contract management shouts, “Shoot the engineer, ship it!” expecting a new budget for a revision. At best you can only pick two. In that environment you can do what you can to make your code as clean as possible but the focus is on as good as I can make it before the firing squad arrives. I only worked with one computer scientist in my entire career. Testing electronic hardware required knowledge other than computer science. Not that a computer scientist couldn’t learn that, it’s just that for many people writing code, it’s a just tool. Your reason #1 is huge.