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 8 areas of software development that engineers have to consider when they want to design ethical software.
Data Privacy
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:
- User consent: Always clearly inform the user what data you collect, how you will use it, and with whom it could be shared. You must always obtain the user's consent before collecting any of their data.
- Data minimization: Do not extract more data from the user than you require. Only extract the data that's absolutely necessary to provide your services.
- Third-party sharing: If you share user data with third parties, the security of that data still remains your responsibility. Vet the third parties you share user data with and inform the user that their data is being shared.
- Right to access, correct, and delete: A user should always be able to access, correct, and delete the data you've collected from them. This is not a nice-to-have, but a legal requirement in many countries.
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
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.
Addictive Design
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:
- Excessive notifications
- Endless feeds and autoplaying
- Social validation features
- Reward and gamification features
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.
Algorithmic Bias
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.
Software Security
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.
Environmental Impact
As our reliance on technology grows, so does its environmental impact. Data centers in particular are responsible for roughly 1% of energy-related greenhouse gas emissions. While this may not seem like much, it is still the ethical responsibility of a software engineer to consider the environmental impact of their applications. Key climate considerations include:
- Using sustainable cloud computing practices
- Adding sleep modes and power-saving features
- Using CDNs to reduce data transfer
- Nudging users towards environmentally conscious behavior in an app
For example, video streaming services can implement adaptive bitrate streaming to reduce unnecessary data transfer, while cloud applications can use auto-scaling to optimize resource usage during low-traffic periods.
Software Transparency
Ethical software development requires transparency about how systems work and what users can expect. This means maintaining clear, comprehensive documentation not just for other developers, but for everyone, from business stakeholders to end users. This documentation should include system capabilities and limitations, data processing methods, change logs, potential risks, et cetera.
Such transparency builds trust with users and helps them make informed decisions about how they use your software. It's especially important when your software is used for important decisions in someone's life, such as in financial services or healthcare applications.
Interoperability
Software engineers should design systems that promote fair competition and avoid anti-competitive practices. This includes supporting industry standards and ensuring reasonable levels of interoperability with other systems when appropriate. Ethical considerations include:
- Using open standards when possible
- Providing clear APIs and documentation
- Avoiding unnecessary lock-in to proprietary systems
- Supporting data portability
- Maintaining backward compatibility when reasonable
These best practices not only benefit users by giving them more choice and control, but they're also good for the industry because they encourage innovation and healthy competition. Users shouldn't get trapped in specific ecosystems. To a reasonable degree, they should be able to move their data and workflows between different systems as needed.
A Better World
Ethical software development goes beyond writing code that works well. It requires careful consideration of how the software we write affect its users, society, and the world. They are not easy to follow and, sometimes, are still downright discouraged.
But the ethical software engineer has more power than may seem at first. Simply being aware of these eight ethical principles can be enough to guide applications towards a more ethical design, until they become applications that both serve their intended purpose while also contributing positively to the world.