Ethics is the branch of philosophy that involves understanding what's right and what's wrong, with the intention to help guide our behavior and the decisions we make. In the context of software development, ethics refers to the principles that software engineers use to write software that's good for the world and the people who live on it.
Ethics are important because engineers have more power than ever before. Software touches every aspect of modern society and it's not uncommon for a small number of engineers to write an app that reaches millions of people across borders and cultures. Engineers have a responsibility to write software that is ethical while also meeting reasonable business requirements.
But what does that look like in practice? Although by no means a complete list, this blog post identifies 5 areas of software development that engineers have to consider when they want to design ethical software.
It's impossible to talk about software ethics without talking about data privacy. The idea is simple: When a user trusts you with their data, you have to collect, process, and store it properly and securely. You have to be in line with data privacy frameworks like GDPR and CCPA and other frameworks that aim to protect a user's online privacy and data. Here are a few elements to consider about data privacy:
A good way to deeply understand what's important for data privacy is to learn how to become GDPR-compliant. GDPR is the most comprehensive data framework in the world and will give you a good understanding of what's required to design software that respects the privacy and data of your users.
Accessibility centers around diversity, inclusivity, and equal access to technology. Because software touches the lives of billions of people, engineers should aim to create digital worlds that are accessible to everyone, including those with disabilities. Two good resources to make your software more accessible are:
There are various ways you can make your software more accessible, from providing alt text on images to making software compatible with assistive technologies like screen readers, magnifiers, and speech recognition software. Overall, it's about ensuring that everyone has the right and ability to engage with your software.
Too many consumer apps use addictive design to keep their users engaged. Instead of a user interacting with an app because they enjoy using it, they interact with the app because its engineers implemented addictive mechanisms that encourage constant engagement and usage over a user's well-being. This is unethical. Addictive design features include:
Software engineers should always consider the impact of new features on a user's well-being, especially when it comes to addictive design features in apps that reach millions of people. Ethical software design is about writing software that enriches a user's life, not about fueling insecurities or monopolizing someone's time.
Software has no inherent moral framework, but it may operate on datasets that are biased toward a certain group of users. This is particularly important in the field of AI, especially as AI becomes more powerful and takes on a more important role in our society. You have to make sure that the data you feed the algorithms is clean.
This means you need to be aware of the various data biases, use diverse datasets to train your algorithms, and involve a variety of diverse people when developing and reviewing your algorithms. Software easily reaches across countries and cultures, and the data that such software is trained on should reflect this diversity.
Facebook's Move Fast and Break Things motto has encouraged a culture where software engineers operate in short sprint cycles and push out new features and patches as fast as possible. While there is some merit to this approach, because done is better than perfect, software engineers should always ensure they write software that is stable and secure.
This is especially important for software in industries where safety is of the utmost importance, like aerospace or manufacturing or healthcare. Software bugs or poorly thought-out features in these industries can endanger people's lives. But in all industries, software engineers should use secure coding practices to protect both the software itself and the people who use it.