Developer Responsibility
Tags: healthydebate, devlife, devresp, devrel
Published: 2020-06-22 15:50:07

I can't believe that I am writing this article, but yes this is happening. I believe that everybody in my community, the dev community is accountable for their _code_. So we have to have this conversation. Read on

Developers by definition, develop and create products. It is up to us to design new, innovative and sometimes provocative digital products that make the human experience bearable. It all begins with us and eventually ends with us. It is true that we have to have business considerations, but wait, mindless, selfish products from developers can wreck more havoc than the wall street. The grim example of this in our era is Facebook (of course) among many others. 

It can coerce people and ultimately have the opposite effect. It can make us hate software. So developers beware, you have the ultimate responsibility. You are in-fact the guardians of the internet and all things digital.


# Three case studies

## Case 1 - A Dev's story:
The first one (in the near past) to trigger me as a developer was an article by a fellow dev here. He wrote an article about [this](https://dev.to/heshiebee/i-was-emailed-after-abandoning-a-registration-form-i-did-not-click-submit-this-is-not-ok-a63). Unfortunately, this is not a one-off thing. I do not understand why most of us, despite relying heavily on open source software are less emphatic and tend to move towards logic that is less transparent and complicated. We give more importance to generating revenue, keeping users "in the funnel" and make decisions enforcing this ideology.

I do understand the need to generate revenue, trust me - I did have a failed [startup](https://antai.nl/), now an NGO. But I assure you that user __trust__ is a key factor in __UX__. You have to be as transparent as possible, look at [Gitlab](https://about.gitlab.com/) for example. All their design decisions are almost available online. In this way, users tend to stay longer, use your products longer and even participate in surveys which will all lead to your product becoming better.

Do not make a product for a year, make it for eternity. 

I recently had a similar experience with [Stripe](https://stripe.com/en-nl). Good luck finding the `Delete` button or the `Disable` button for one of my connections. I use Stripe to link to my Medium profile. It took me around 10 mins to figure it out. Yes, I may be dumb or blind or both, but I believe that dumb designs always work. Remind me, how many buttons did the first iPhone have? This again links back to UX, my experience here was less than optimal.

## Case 2: Even the big guys do it
I understand why small companies and startups tend to have designs that keep users in by bad (or convoluted) design, but even the big guys do it! why?

### Audible
The audible community usually hangs out in reddit. The thread is [here](https://www.reddit.com/r/audible/comments/ee4e9k/a_list_of_userhostile_design_patterns_in_the/). This clearly points out the issues that we as developers must face. This is just us not being responsible enough, even with huge amount of resources that Amazon has.

### Google Chrome
Remember how Google got sued for tracking users while using incognito mode? Yes, you promise something and deliver something else. This again leads to loss of trust. The link to the full article from vice [here](https://www.vice.com/en_us/article/m7jvvp/google-sued-tracking-users-incognito-mode)

### VS Code
Yes! One of our most favourite editors actually track our behaviours when we code. [This](https://news.ycombinator.com/item?id=18209082) link from YCombinator underlines the issue. We are using a product that is "free" but not really


## Case 3 - The ML game:
Guys come on! If you are using a data set to train your models, please always assume as a precaution that your data set maybe biased. Technology is not proportionally distributed all over the world. What is normal to you may not be the normal to somebody else. 

Define clear limits for your models and be wary of results that are generalised. Further sophistication can be brought about by assuming a very narrow set of things that your model is trying to solve. It is up-to us a developers to do this. The more the generalisation of something, the more likely that the result is biased. 

Again, the trend has been to use a single network to solve all the problems of humanity, but we can't have a Hitler AI doing that. Let us then approach the problem as a hierarchy of sub problems. Build up a model which consists of smaller models which in turn focus on parts of the problem. For example, take the problem of facial recognition using an ImageNet. If using the model in the US, divide the problem into a set of ImageNets that cater to each demographic of the population separately. We can then combine them with a weighing mechanism (or NN) to make a more concrete model based on the population that it operates. Let us not over simply our NP problems in the real world and have racist algorithms

John Oliver explains facial recognition its is misuse [here](https://www.youtube.com/watch?v=jZjmlJPJgug)


# TL;DR

So please, please, please be mindful of the design decisions regarding the super awesome stuff you make and when in doubt almost always choose the more transparent one, as it will last longer (as code), be more usable and even scalable. 


This is most definitely a note to self as well