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.
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.
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:
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.
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.
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:
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.
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.