The ethics of software engineering is a topic that I mentally return to pretty often. This is in part because of the recent revelations of automated cheating in the automobile industry, but also in the face of frequent greyish-going-on-black areas in the software industry in general. You know the ones I’m talking about: The ones where you wince and tell yourself, “someone should probably do something about this.” That someone is you.
I don’t mean to say that software engineers are always completely to blame for anything their company makes them do. Sometimes, as @DanielaKayB writes, it is very much possible that management can obfuscate a task so much that the individuals doing the coding could not reasonably have realised the impact of their code.
My conclusion: it is quite possible to take Project Cheatmode apart to a point that the single modules are so small that their purpose is obscured and don’t raise red flags for the individual programmer. Also, it is in everybody’s best interest not to tell your programmers the truth about Project Cheatmode.
That doesn’t mean, however, that the people who create the code are absolved of any wrongdoing whatsoever. “I was just following orders” is not a valid excuse – not in software development, not anywhere. Software engineers still have the moral obligation to make a reasonable gander at finding out the impact of their work on society and the world around them.
It is my opinion that every software engineer should have a general idea of which behaviours they will tolerate from fellow engineers, clients and superiors, and which they will not. They should also spare some thoughts on how to appropriately react to transgressions.
The following are my limits, sorted from bad to worse. Note that usually I won’t go to the nuclear option all at once, but I am willing to go that far if really necessary.
So thats my list. It’s probably not complete, but it gives a general idea where my ethical compass is pointing. I’m not arguing that everyone should accept the same ethics, even if I wish everyone did. I am also not an expert on normative ethics philosophy, and I realise that humans, by their very nature, are flawed.
(I also realise that sometimes people are stuck in a bad situation where there is no “good” way to proceed. Sometimes your knowledge is outdated. Sometimes your family situation or geographic position doesn’t allow for a job change. Although I’d say that, especially in the software industry, these inescapable situations are probably less frequent than they seem. Most of us software engineers are enormously privileged in an industry that can’t get enough of us. Maybe you can’t quit tomorrow, but you can begin looking around to see if there’s a better fit for you.)
That being said, the one thing I do not accept is ignorance regarding your choices. If you see someone violating what is generally regarded as the default set of ethics or you violate it yourself after being told to, I will not allow you to hide behind the usual excuses. Yes, someone else could have done it, but you did. Yes, doing X will only harm a few people, but these people will be harmed by you.
These decisions are never easy, and they are never clear-cut. You might lose some friends, you might miss out on opportunities to make money or advance your career. But in the end, you will sleep more soundly.
I know I do.