DEV Community

Cover image for A Developer's Code of Ethics

A Developer's Code of Ethics

ibrahimcesar profile image Ibrahim Cesar ・11 min read

This is a post born out of pain, grief and anger. Also from a search for purpose and an examined life as a developer.

First, this is not my first take on this issue.

Second, I must share two things in order for a better context, but if you wish you can skip direct to my proposed code, which is more or less a sort of manifest but I’ll go ahead with code, a personal note (1) and a contextual note (2) in order to explain in what conditions I speak in a place of pain, grief and anger. Then, we will talk about ethics.

A personal note

My grandmother died yesterday. She had a long life. She will not be another number in the COVID-19 death statistics. But she didn’t get a funeral. We cannot have a time to closure. She had to get a straight burial. She got very sick and sent to hospital on Sunday. There was suspicion of COVID-19 amid all other complications she had such as diabetes, anemia and others. Several members of my family got COVID. I saw myself in a complete impotence place. My mother was all the time in the hospital, packed of people with COVID, with my grandmother. But she assured to me she would be ok–she would “take the medicines”. Our government is saying to people get “early treatment”. I shout out via video–we didn’t live in the same city: “No! Don’t do this”. What will happen? What I can do?

I translated The Designer’s Code of Ethics to Brazilian Portuguese after reading “Ruined by Design” by Mike Monteiro years ago and always tinkered with the idea of a developer call even in the definition proposed by Monteiro, anyone involved in a digital product is a designer.

A contextual note

“I am I and my circumstance”
—José Ortega y Gasset

I live in Brazil where 200k people died because of COVID-19 so far. Our government is anti-vaccine and even our Healthy Ministry send misinformation about an “early treatment” with the use of choloroquine and other antibiotics drugs with no scientific evidence. Also, our country rushed to buy millions of choloroquine from people close to the president, paying a surge price of at least three times.

Just last week, in English, we got a coverage on Guardian: Covid eruption in Brazil’s largest state leaves health workers begging for help

The government launched an “app” called “TrateCOV”, something like TreatCOV to help doctors and healthy agents to better act and give the proper “early treatment”. But a web page with a form, that anyone can access, has just a logic in the frontend, that basically recommends choloroquine and other antibiotics to everyone, even with no symptom related to COVID. Worse, these drugs have several known health effects.

This is the source code for the app. This was the work of Rodrigo Menegat. I only contribute with the scrape of the total site for archive.

A developer, or developers like me, made this. This is not acceptable. What we do every day defines us. We code, and code not only eat, but changes the world. And this type of code is killing people. Some article, in Brazilian Portuguese, I roughly translate the titles:

A Developer’s Code of Ethics

This is water

This video, from the late writer David Foster Wallace, starts with a humorous parable:

There are two young fish swimming along who meet an older fish. The older fish nods at them and says:
‘Morning boys, how’s the water?’
The two young fish swim on for a bit and then eventually one of them looks over at the other and asks:
‘What the hell is water?’

It is easy to not see the environment structures we are immersed and shaped every aspect of our existence. Structural racism, gender norms. We come out to this world and this doesn’t look like the “natural way of this”. This is water.

We must embrace other perspectives, understand our immersion and bias. We must listen. As David Foster Wallace, understand this has nothing to do with knowledge, that we developers are so proud of, but with “how to think”, and he says: “The alternative is unconsciousness. The gnawing sense of having lost some infinite thing”. Maybe because a highly respected white guy said this, more people can understand and immerse in this call for empathy and think in our context, give gravitas. Do not consider only the lobster. Consider people with disabilities. Consider people of color. Consider people of all genders.

We don’t produce software in a vacuum. But in a society. It is not ok to bound ourselves in a nutshell and count ourselves kings of infinite space of zeros and ones and ignore that our work. What we can do affects the fabric of this society.

Technology is not neutral

Whatever this subject comes, people always pulls the “guns don’t kill people, people kill people” approach. Objects are this noble and pure things that are corrupted by evil wrongdoers humans that happen to be always on the other side of the fence.

Picture this: You are an astronaut. You are, with the sound of Blue Danube floating in Jupiter’s Orbit. You see a semi-automatic assault rifle floating in the space. You assume: a) Advanced civilizations like ours made semi-automatic assault rifles exactly like ours! b) Assault rifles are natural objects in the world without any relation with any sensient being or c) some human drop it somehow.

Affordance is formally defined as “the ‘multifaceted relational structure’" between object/technology and the use that enables or constrains potential behavioral outcomes in a particular context”. As Jenny L. Davis puts in its concise but very insightful book How Artifacts Afford, “Technologies don’t make people do things but instead, push, pull, enable, and constrain. Affordances are how objects shape action for socially situated objects” and:

Human-technology relations are a subtle dance in which technological objects push and pull with varying degrees of insistence while humans subjects navigate with more and less motivation, creativity, and skill. […] Thus, affordances are never determinations, nor are they uniform. Instead, features apply varying levels of pressure on socially situated subjects.

Every technological object–webapps, apps– has affordances that request, demand, encourage, discourage, refuse and allow particular lines of action and social dynamics. You may know this as features or user cases and stories. Requests and demands are started by the object, encouragement, discouragement and refusal are responses to subject’s inclinations. Allows applies to acts started by both subjects and objects.

Technology is not apolitical

In the 1980’s paper “Do Artifacts Have Politics?” Langdon Winner argues that, well, long paper, short answer: Yes. In a 2004 essay, L. M. Sacasas expands questioning: Do Artifacts Have Ethics?

Technologies themselves embody human values and politics in their design, implementation and use. The problem is, by default, it will reflect and reinforce existing inequalities.

Lacasas’s article has significant questions to think about technologies. One very clever way to avoid responsibility of the political effects of technology is to attribute to the algorithm. Always the algorithm. But we know how “The Algorithm” is made, it didn’t come in a mountain from God. We code in very specific ways to provide results that are in line with the purposes of its creators or viewed as valuable. If you think the algorithms are passive and you only see the benefits, is mostly because you are the norm, you are part of the status quo. Algorithms will never offer an escape from society.

Code is law

"[The code] will present the greatest threat to both liberal and libertarian ideals, as well as their greatest promise. We can build, or architect, or code cyberspace to protect values that we believe are fundamental. Or we can build, or architect, or code cyberspace to allow those values to disappear. There is no middle ground. There is no choice that does not include some kind of building. Code is never found; it is only ever made, and only ever made by us"
– Lawrence Lessig

Lessig was very polarizing in his famous “Code is law” argument. But we have to say it was an exactly reflection of the way we are building, resisting and attacking this code: “There is no middle ground”. This idea I find horrible. It is a war menace. But the most pernicious idea is this is exactly we are having right now and didn’t fully realize or vocalized. We are in a war. Contrary to Kant’s dreams, in a Perpetual War.

Unknowns unknowns

In 2008 the philosopher Timothy Morton invented a word to describe all kinds of things that we can study and think about and compute, but that are not so easy to see directly: hyperobjects. One of the most common examples: the Global Warming. And as Morton states we are obliged to do something about them, because we can think them.

That’s good news if you care about mitigating the effects of global warming. (I refuse to call it climate change. The globe is literally warming because of greenhouse gases.) Thinking ecologically about global warming requires a kind of mental upgrade, to cope with something that is so big and so powerful that until now we had no real word for it. However, thinking of global warming as a hyperobject is really helpful. For starters, the concept of hyperobjects gives us a single word to describe something on the tips of our tongues. It’s very difficult to talk about something you cannot see or touch, yet we are obliged to do so, since global warming affects us all.
– Timothy Morton

On the one hand, we have all this incredible data about them. On the other hand, we can’t experience them directly. And because of this, there is not a single person that can handle the cognitive overload of fully grasp, even have some kind of agency and power upon it, but some people have the hubris to think that. Our distributed systems are hyperobjects. The Cloud is a hyperobject. Facebook itself is a hyperobject. And these entities have several unknowns unknowns—the ones we don’t know we don’t know. And is precisely this type of problem the hardest to deal it. Our digital communities, languages and frameworks are always facing something new.

Ethics is a journey, not a destination, we have always prepared to take action.

The sorcerer’s apprentice syndrome

If Disney’s Fantasia is famous for, is for that image of Mickey Mouse plays the apprentice, and the story follows a famous Goethe’s poem.

The poem begins as an old sorcerer departs his workshop, leaving his apprentice with chores to perform. Tired of fetching water by the pail, the apprentice enchants a broom to do the work for him — using magic in which he is not yet fully trained. The floor is soon awash with water, and the apprentice realizes that he cannot stop the broom because he does not know how.

Not knowing how to control the enchanted broom, the apprentice splits it in two with an axe, but each of the pieces becomes a new broom and takes up a pail and continues fetching water, now at twice the speed. When all seems lost, the old sorcerer returns, quickly breaks the spell and saves the day. The poem finishes with the old sorcerer’s statement that powerful spirits should only be called by the master himself.

What this have to do with development? We are not the masters some of us think they are. Always reflect, don’t fall in the trap that you control all the outcomes. Take responsibility.

It is not only because you made you can control it. You’ll break things. Your app to hate woman on their looks could turn out in a Lovecraftian blind idiot god Democracy destructor–Zuckerberg invoker of Azathoth.

Program or be programmed

Sometimes your PM will not come to you and say: “Make all elements on the page accessible”. Or QA or UX will ask to remove a focus. You don’t need to simply accept things as they are. Of course there are several levels of hierarchy and someone who has the ultimate word can push whatever wants, but we must point things. Is our duty and our place of an intellectual and highly skilled workers to educate others about it. To point if a specific ML you give potential wrong results.

Educate. Don’t assume everybody is gibing you all the directives. Push for more inclusive and beneficial uses of technology. Be a pure HTML page, be a highly sophisticated machine learning model. Program is a lot to give instructions. This is precisely our job.

With great power comes great responsibility

Ernst Schraube notion of technology as materialized action leads to the view technological objects imbued with the politics and values of the culture within which they arise. The materialized action approach recognizes technological efficacy (technologies do things) but rejects the idea of technological agency. Agency is reserved for human subjects. The effects of technology, both good and bad, can be traced back to cultural norms, corporate directive, state interests and laws and beliefs. The force of technological objects can be immense, but that force is inextricable from the values, desires, and interests of human actors.

Users will surprise you in the ways they behave and use your creation, for sure. But is exactly because of this we need to follow tenets and always examine our

Halt and catch fire

In computer engineering, Halt and Catch Fire, known by the assembly mnemonic HCF, is an idiom referring to a computer machine code instruction that causes the computer’s central processing unit (CPU) to cease meaningful operation, typically requiring a restart of the computer.
–From the Wikipedia definition (Also, a favorite show of mine)

We do refactors all the time. Not always because is not workings as expected. Sometimes is for better performance. Sometimes is just to use a new syntax available or in another way we previously didn’t have knowledge and will improve the maintenance of the code. So, we always have to look what needs to refactor in our ways of behave with co-worksers, how we hire.

“It works on my computer” and “"We’ve always done it this way” are lame and half-ass excuses both for software and society. When someone is angry because a repo is moving to “main” instead of “master”, because is “just a word”, try to place if, then, else or any other word of your programming language in any context or file. Is just a word isn’t? Until your compiler complain. Think these movements as patches in the compiler of how society process things.

It is not working?, well, reboot. Let’s start over. Halt and catch fire.

There are no binary choices

The world is messy. Between the Dark and the Light side there is a long grey continuum that we base our society upon. Not everyone can choose on what or how to work. We have families. And we need money. We want to feel safe, happy and in comfort. It should give everyone this opportunity. In several countries, technology jobs are one of few ways to escape from poverty. We can’t condemn and judge other people’s choices. We can offer empathy and listen, sharing our principles and moving towards your own definition of a better world. And we can though our work, in a world each day, more and more intertwined by technology. Be conscious. Be brave. Don’t be evil–but please remember to not drop it along the way only for the sake of shareholders’ money. We saw what happens when you do it.

This is “A Developer’s Code of Ethics”. This is not “The Developer’s Code of Ethics”. I have no power to define and coerce any developer to follow it—on the contrary—is easy for this post be one more of millions of contents with no footprint in the real world, a DOM tree falling on the forest of Internet with nobody to hear it. This is precisely why I’m angry. Because of this I write and I share, because of my lack of power, I must speak out. As loud as I can speak. If you think is a good place to start or these words resonate with your values, great let’s talk and make a better world through our work.

Discussion (0)

Editor guide