Software is everywhere, and the ubiquity of software raises the stakes in ways many software developers may not realize. Poorly architected software-intensive systems can result in end-user frustration, economic loss, and even the loss of human life. What’s more, modern software is developed under a variety of conditions and environments, some of which are unfair, unsafe, or otherwise hostile. While free lattes are not an inalienable human right, programmers should probably have the right to receive equal pay for equal work.
Beyond a few universal human rights, determining whether a given architectural design decision is ethical is not always a simple yes or no. For example, consider the case of an autonomous drone that finds itself in a situation where any decision it might make results in the loss of human life. A programmer today, right now, might be writing code that will make that decision.
As architects, I propose that we have a responsibility to define the ethical framework within which downstream designers will operate, in the same way that we define other quality attributes.