(Adapted with permission from An Introduction to Software Engineering Ethics by Shannon Vallor and Arvind Narayanan.)
Ethics in the broadest sense refers to the concern that humans have always had for figuring out how best to live. The philosopher Socrates is quoted as saying in 399 B.C., “the most important thing is not life, but the good life.” We would all like to avoid a life that is shameful and sad, wholly lacking in achievement, love, kindness, beauty, pleasure or grace. Yet what is the best way to achieve the opposite of this – a life that is not only acceptable, but even excellent and worthy of admiration? This is the question that the study of ethics attempts to answer.
Today, the study of ethics can be found in many different places. As an academic field of study, it belongs primarily to the discipline of philosophy, where scholars teach and publish research about the nature and structure of ethical norms. In community life, ethics is pursued through diverse cultural, political and religious ideals and practices. On a personal level, it can be expressed in an individual’s self-reflection and continual strivings to become a better person. In work life, it is often formulated in formal codes or standards to which all members of a profession are held, such as those of medical ethics. Professional ethics is also taught in dedicated courses, such as business ethics. It can also be infused into courses such as this one.
Like medical, legal and business ethics, engineering ethics is a well-developed area of professional ethics in the modern West. The first codes of engineering ethics were formally adopted by American engineering societies in 1912-1914. In 1946 the National Society of Professional Engineers (NSPE) adopted their first formal Canons of Ethics. In 2000 ABET, the organization that accredits university programs and degrees in engineering, began to formally require the study of engineering ethics in all accredited programs: “Engineering programs must demonstrate that their graduates have an understanding of professional and ethical responsibility.” Professional engineers today, then, are expected to both learn about and live up to ethical standards as a condition of their membership in the profession.
But the average computer/software engineering student might still be confused about how and why this requirement should apply to them. Software engineering is a relatively young practice and compared with other engineering disciplines, its culture of professionalism is still developing. This is reinforced by the fact that most engineering ethics textbooks focus primarily on ethical issues faced by civil, mechanical or elecrical engineers. The classic case studies of engineering ethics depict catastrophic losses of life or injury as a result of ethical lapses in these fields: the Challenger explosion, the Ford Pinto fires, the Union Carbide/Bhopal disaster, the collapse of the Hyatt walkway in Kansas City. When we think about the engineer’s most basic ethical duty to “hold paramount the safety, health, and welfare of the public,”3 it is clear why these cases are chosen - they powerfully illustrate the importance of an engineer’s ethical obligations, and the potentially devastating consequences of failing to live up to them.
But software engineers build lines of code, not cars, rockets or bridges full of vulnerable human beings. Where is the comparison here? Well, one answer might already have occurred to you. How many cars or rockets are made today that do not depend upon critical software for their safe operation? How many bridges are built today without the use of sophisticated computer programs to calculate expected load, geophysical strain, material strength and design resilience? A failure of these critical software systems can result in death or grievous injury just as easily as a missing bolt or a poorly designed gas tank. This by itself is more than enough reason for software engineers to take seriously the ethics of their professional lives. Is it the only reason? What might be some others?
Consider the following: The software development and deployment process in the Internet era has some peculiarities that make the ethical issues for software engineers even more acute in some ways than for other types of engineers. First, the shortened lifecycle has weakened and in some cases obliterated software review by management and legal teams. In the extreme, for Web applications like Facebook, it is normal for individual engineers or small groups of engineers to code and deploy features directly, and indeed the culture takes pride in this. Even where more traditional development practices prevail, at least some deployments like bug fixes are shipped with only technical (and not ethical) oversight. At any rate, engineers at least retain the ability to deploy code directly to end users, an ability that can easily be abused.
All of this is in stark contrast to say, a civil engineering project with a years-long (or decades-long) lifecycle and multiple layers of oversight. Nor does such a project offer a malicious engineer any real means to obfuscate her output to sneak past standards and safety checks.
Second is the issue of scale, perhaps the defining feature of the software revolution. Typically the entire world is part of the addressable market. Of course, it is scale that has led to the potential for individual engineers to create great good, but with it naturally comes the ability to cause great harm, especially when combined with the first factor above.
Often, in today’s world, engineers must grapple with these questions instead of relying on management or anyone else. Finally, the lack of geographic constraints means that engineers are generally culturally unfamiliar with some or most of their users. The cost-cutting imperative often leaves little room for user studies or consultations with experts that would allow software development firms to acquire this familiarity. This leads to the potential for privacy violations, cultural offenses, and other such types of harm.
For example, people in many countries are notoriously sensitive to the representation of disputed border territories on maps. In one recent example, an error in Google maps led to Nicaragua dispatching forces to its border with Costa Rica. Google then worked with US State Department officials to correct the error.
On top of these considerations, software engineers share with everyone a basic human desire to flourish and do well in life and work. What does that have to do with ethics? Imagine a future where you are faced with a moral quandary arising from a project you are working on that presents serious risks to users. In that scenario, will you act in a way that you would be comfortable with if it later became public knowledge? Would it matter to you whether your family was proud or shamed by your publicly exposed actions? Would it matter to you whether, looking back, you saw this as one of your better moments as a human being, or one of your worst? Could you trust anyone to whom these outcomes didn’t matter?
Thus ethical obligations have both a professional and a personal dimension. Each are essential to consider; without a sense of personal ethics, one would be indifferent to their effect on the lives of others in circumstances where one’s professional code is silent. To understand what’s dangerous about this, consider any case in human history when a perpetrator of some grossly negligent, immoral or inhumane conduct tries to evade their responsibility by saying, ‘I was just following orders!’ So personal ethics helps us to be sure that we take full responsibility for our moral choices and their consequences.
But for professionals who serve the public or whose work impacts public welfare, a personal code of ethics is just not enough. Without a sense of professional ethics, one might be tempted to justify conduct in one’s own mind that could never be justified in front of others. Additionally, professional ethics is where one learns to see how broader ethical standards/values (like honesty, integrity, compassion and fairness) apply to one’s particular type of work. For example, wanting to have integrity is great – but what does integrity look like in a software engineer? What sort of specific coding practices demonstrate integrity, or a lack of it? This is something that professional codes of ethics can help us learn to see. Finally, being a professional means being a part of a moral community of others who share the same profound responsibilities we do. We can draw strength, courage, and wisdom from those members of our professional community who have navigated the same types of moral dilemmas, struggled with the same sorts of tough decisions, faced up to the same types of consequences, and ultimately earned the respect and admiration of their peers and the public.