- Published on
Ethics of Software Engineering
- Authors
- Name
- Shariq Hirani
- @ShariqHirani
Ethics are hardly spoken about in the development world. Sure we see ourselves as ethicals developer and never intentionally want to do anything that would be considered the opposite, but rarely do we treat ethics as a priority or guideline. It's easy to say, "Hey, I'm just trying to deliver my story" and leave the onus on our employers and clients. It's just as easy to leave the blame on another codebase or principle that you are referencing or modeling after. If Facebook does it, it must be okay right?
Wrong.
On Ethics and Being a Software Engineer
It's not enough to expect your employer or larger corporations to set the standard of ethics. As a matter of fact, it's to be expected that they are pushing the boundaries of unethical - not because our bosses are bad people, but because the pressure to produce profitable features in a short amount of time makes the cognitive dissonance easier to settle. Imagine a scenario where a client is demanding a new feature at the risk of exposing user information. For a developer, it's potentially do or die - you either deliver the feature with whatever risks it comes with or you delay and risk your contract. However, as developers, we're the first line of defense for our users. We have to bring ethics to the forefront of the software development lifecycle.
What can you do?
I'm proposing four principles for developers to bring ethics into the fold of development, not as an afterthought but as a core tenant of development.
1. Be an active bystander Often times, when we see something bad, it's easier to just ignore it and move on. Surely the code must have been reviewed, read a dozen times by other developers editing the same code base and approved by some manager. This is known as the bystander effect or bystander apathy. In 1964, Kitty Genvese was publicly stabbed to death outside her apartment and not a single neighbor tried to help or at a minimum notify the police. What this moment proved was the concept of the diffusion of responsibility. Neighbor Joe assume neighbor Sara was going to call the cops, and so on like dominos until no one took action. Do your best to be an active bystander - if you see something, say something. Do not assume it has been reported or will be.
2. Make it your problem It doesn't matter if you wrote the code or if you are refactoring someone else's efforts, it is your problem. At the very least, it needs to be communicated that you've stumbled upon code that could lead to major ethical violations. The worst case scenario is that you've informed the stakeholder, and they ignore it but are aware (send an email, so it's documented), best case you've won yourself some more work and trust from your client to help them solve problems they may not even know they had.
3. Teach yourself A large reason ethical issues in development are ignored is because we’re not exposed to the topic of ethics in our field. Due to the subjective nature of ethics, even if we were presented with some topics, they are rarely enforced. As a developer, you need to expose yourself to different ethical violations found in the development community. Form an opinion and defend it, but be flexible enough to learn and evolve those opinions. Inevitably, as more developers become aware of the ethics of programming, more opinions will arise. This will allow more discourse around what is truly considered to be ethical. This leads directly into the next principle.
4. Socialize your ethics We're often told to be careful of out opinions at work - especially those that include politics and personal life. The good news is when you socialize your ethics around development, you're actually working (take this with a grain of salt). As you bring the discussion of ethics to your workplace, you are inherently helping make better developers. Developer who are more aware of their work and what constitutes being ethical are able to make more informed decisions. Maybe they will be able to implement code more effectively, write better tests, leave better documentation and take pride in the work they produce.
Code that is ethical is something every developer can be proud of. An ethical developer would never have to worry about if their code could be causing harm to their users because they used ethics as a part of the planning toolkit. Ethics was not an afterthought but instead a part of their IPM in which they call out potentially unethical measures.