A Manifesto for Ethical Software

Technology shapes how we live, work, and interact. It has the power to create opportunities, but too often it reinforces inequality instead. Software should not contribute to racism, sexism, ableism, or colonial power structures. It should not automate oppression, deny access, or prioritize profit over people. The systems we build reflect the choices we make, and I refuse to create or deploy technology that harms marginalized communities.
This also means looking at who gets to make decisions. When leadership lacks representation from women, BIPOC, disabled people, and other marginalized groups, technology is shaped by a narrow perspective. That is not just a missed opportunity for innovation, but a direct cause of harm. Diverse leadership leads to better, more inclusive products. Without it, bias becomes embedded in the foundations of our systems. If a project does not reflect that reality, I will not be part of it.
Ethical responsibility does not stop at representation. Every developer has the right to know how their work will be used and to walk away from projects that put people at risk. AI trained on biased datasets, surveillance tools that target vulnerable communities, and software that collects data without informed consent all contribute to harm. These are not just technical challenges, but ethical failures. Transparency, accountability, and the ability to say no are essential in building software that serves rather than exploits.
Too often, the industry moves at a pace that ignores these responsibilities. Prioritizing speed and profit over care and safety has consequences. When accessibility is treated as an afterthought, people are excluded. When systems are tested only on a narrow group of users, they fail to serve the wider world. When documentation is written in a way that only a small group can understand, barriers are created instead of solutions. Ethical software requires slowing down, questioning assumptions, and designing for real people from the start. Testing must include diverse user groups, and documentation should be clear, inclusive, and available in multiple formats.
Privacy should not be a privilege for those with the resources to protect it. It should apply equally to everyone, without exception. Software should not rely on deceptive practices to extract user data, and consent should mean more than a checkbox hidden in fine print. People deserve to know what they are agreeing to in language they can understand.
Building technology is an ongoing responsibility. It is not enough to avoid harm. It is necessary to actively examine systems for bias, listen to those affected, and change course when needed. No software is neutral, and every project involves choices that impact real lives. Ethical development means taking those choices seriously, challenging the status quo, and refusing to accept systems that reinforce injustice.
Technology should serve people, not exploit them. It should empower rather than exclude. Every decision in software development shapes the future, and I choose to build a future that is fair, responsible, and inclusive. This is, what my claim means:
Changing the world one app at a time.
Published on:
Learn moreRelated posts
You are holding GitHub Copilot Wrong!
Most developers think that one can’t really use GitHub Copilot wrong. There is a chat interface that lets you also choose a model, so th...
You are holding GitHub Copilot Wrong!
Part 0 showed why constant prompting, re-prompting, and steering GitHub Copilot feels fragile. Not because Copilot is unreliable, but because ...
Building a Multi-Hierarchy Ticket Classification System (Because Keywords Aren't Enough)
Look, I love a good keyword-based system as much as the next developer. They’re fast, predictable, and when your user says “VPN,&r...
Secretless cross-tenant dataverse access
Client secrets are like hiding your house key under the mat; easy to grab and impossible to audit. Certificates are just slightly better, beca...
How Azure CLI handles your tokens and what you might be ignoring
Running az login feels like magic. A browser pops up, you pick an account, and from then on, everything just works. No more passwords, no more...
How Dev Proxy teaches you to make your apps more resilient
I added Microsoft Dev Proxy to my Mermaid → Dataverse converter, because I wanted to test how it handled rate limits and API errors. What I go...
Building Azure functions that never store secrets — ever
What if your function could hit Microsoft Graph with no client secrets, no certs, and no Key Vault entries? That is exactly what a Managed id...
Introducing Mermaid to Dataverse Converter
Why diagrams matter (and why they usually fail us) Entity-Relationship Diagrams (ERDs) are the universal shorthand for talking about data mode...
It’s OK to be seen trying
It’s OK to be seen trying Somewhere along the way, we started believing that you’re only allowed to speak after you’ve figured everything out....
Stuck in pilot - Part 1: no foundations, no future
“We just need to test the AI. We’ll figure out the data later.” That sentence has quietly killed more AI pilots than any model failure ever ...