To whom are software engineers obligated?

(Adapted with permission from An Introduction to Software Engineering Ethics by Shannon Vallor and Arvind Narayanan.)

Before starting this experience, please read What do we mean when we talk about ethics?.

The NSPE’s paramountcy clause asks engineers to recognize that their primary professional duty is to ‘hold paramount the safety, health and welfare of the public.’ But who exactly is this ‘public?’ Of course, one can respond simply with, ‘the public is everyone.’ But the public is not an undifferentiated mass; the public is composed of our families, our friends and co-workers, our employers, our neighbors, our church or other local community members, our countrymen and women, and people living in every other part of the world. To say that we have ethical obligations to ‘everyone’ is to tell us very little about how to actually work responsibly as an engineer in the public interest, since each of these groups and individuals that make up the public are in a unique relationship to us and our work, and are potentially impacted by it in very different ways. We also have special obligations to some members of the public (our children, our employer, our friends, our fellow citizens) that exist alongside the broader, more general obligations we have to all of them.

One concept that ethicists often use to clarify our obligations to the public is that of a stakeholder. A stakeholder is anyone who is potentially impacted by my actions. Clearly, certain persons have more at stake than other stakeholders in any given action I might take; when I consider, for example, how much effort to put into cleaning up a buggy line of code in a program that will be used to control a pacemaker, it is obvious that the patients in whom the pacemakers with this programming will be implanted are the primary stakeholders in my action; their very lives are potentially at risk in my choice. And this stake is so ethically significant that it is hard to see how any other stakeholder’s interest could weigh as heavily.

Still, in most ethical contexts, including those that arise in software engineering, there are a variety of stakeholders potentially impacted by my action, and their interests may not always align with each other. For example, my employer’s interests in cost-cutting and an on-time product delivery schedule may frequently be in tension with the interest of other stakeholders in having the highest quality and most reliable product. Yet even these stakeholder conflicts are rarely so simple as they might first appear; the consumer also has an interest in an affordable product, and my employer also has an interest in earning a reputation for product excellence, and in maintaining the profile of a responsible corporate citizen.

Of course, while my own trivial, short-sighted and self-defeating interests (say, in gaining extra leisure time by taking reckless coding shortcuts) will never trump a critical moral interest of another stakeholder (say, their interest in not being unjustly killed by my product), it remains true that I myself am a stakeholder, since my actions also impact my own life and well-being. A decision to ignore my well-defined contractual obligations to my employer, or my obligations to my fellow product team members, will have weighty consequences for me. But ignoring the health, safety and welfare of those who rely upon the code I produce has consequences that are potentially even graver – for me as well as for those persons whose well-being I have chosen to discount or ignore. Ethical decision-making thus requires cultivating the habit of reflecting carefully upon the range of stakeholders who together make up the ‘public’ to whom I am obligated, and weighing what is at stake for each of us in my choice.

Here is a scenario to help you think about what this reflection process can entail:

Case Study 3: Developing software for repression

You are a new hire in a product design team for a start-up company that is developing new and more powerful versions of the kind of packet-sniffing and email scanning software systems used by law enforcement agencies and large corporations to monitor data traffic for illegal activities. This kind of software might, for example, be programmed to detect illegal downloads of copyrighted materials, or to flag for review email keywords like ‘bomb,’ ‘steal,’ or ‘bribe.’ You are a young parent of two small children, with parents and friends who are deeply proud of your achievements. You are looking forward to using this first job to cultivate a reputation in your industry for being an excellent software engineer.

One day, you happen to overhear your supervisor chatting with another supervisor about a new contract the company has recently received from a foreign government. You happen to recognize the name of this country as one that is currently run by an oppressive military regime that routinely imprisons its citizens without trial or other due process. In this country, people perceived as political dissidents and their families are often sent to labor camps with deplorable living conditions, without hope of appeal, for an indefinite period. Your own nation has strongly criticized this country’s human rights record, and many international organizations as well as the United Nations have condemned its practices.

You realize now that the product your team is working on is part of your company’s contract with this government; and in fact, you have been assigned specifically to develop the part of the product that searches for specific keyword strings in private emails, texts, social networking messages, Skype and phone conversations. Reviewing the specs for your task, you realize that your contribution to the product will almost certainly be used to identify for extraction and review conversations between private citizens of this country in which there is any specific discussion of their government or its policies, and especially those in which words like ‘reform,’ ‘injustice,’ ‘corruption,’ ‘due process’ or ‘human rights’ occur.

Questions for discussion

  1. Who are the various stakeholders in this scenario, and what do they each have at stake in your action? Reflect carefully and deeply, and answer as fully as possible.

  2. What do you think are your ethical obligation(s) in this situation? If possible, justify your obligation(s) by reference to either the ACM Code of Ethics or the Software Engineering Code of Ethics and Professional Practice.

  3. Do you feel you have ethical obligations not covered by either code? If so, please explain.