Ethics Policy

Technical limitations

The code I write will probably have errors in it. That's an unfortunate fact of life for all software engineers; I will try my best to write error free code. Sometimes it might be too expensive in terms of time to fix a particular error. It might require hours of additional feature work that aren't worth the time, or the error might occur so rarely that would be appropriate to handle if you were e.g. building a rocket ship, but not common web software. I'll try to use my best judgment about this tradeoff, but I could make a mistake.

When researching the right way to solve a problem, I need to make a tradeoff between spending more time to research a solution, and beginning to implement the best solution I have so far. I have been building software for a fair amount of time, and have an idea of how to solve a lot of common problems. I've also had to make this tradeoff a fair number of times in the past, and consider:

  • the costs of getting the implementation wrong
  • the current solution's ability to solve the problem
  • the likelihood of a better solution
  • the potential benefits of a better solution.

It's possible the solutions I've used in the past aren't optimal, or I might get the tradeoff wrong.

I understand that you will want an estimate of how long a project will take, I will give you my best guess. This estimate may be too low. This is a wider problem in software engineering.

Security

I may write code that has security vulnerabilities. These are worse than common defects, because they may compromise company security or user privacy. I am not a professional security engineer, nor do I have the mathematical background to assess whether a cryptographic algorithm is implemented correctly. It's unlikely that I will be able to write software that can protect your secrets from a sophisticated government attacker.

That said, I try my best to ensure every piece of software I deploy does not have security vulnerabilities in it, or unsafe interfaces.

Conflicts of Interest

You might ask for a feature that I think is a bad idea. I will always give you my honest opinion. if you want to proceed despite my objections, I will do my best to build the feature in question.

Unethical Requests

I won't agree to do work that I believe is unethical. Here are some examples of things I won't do:

  • Some amount of embellishment may be necessary in marketing ("X is the easiest way to do Y", &c), but I won't deliberately lie to anyone - for example, claiming a 80% success rate if the real number is 30%.

  • Cheat people out of money they are owed. Steal other people's designs, or software, without credit.

  • Violate users reasonable expectations of security or privacy.

  • Violate laws

Promises

I'll try my best to deliver the best product I can in the time that we have, and to justify the trust you've placed in me. I care a lot about the products I make, and will extend that same care to the products I build for you.

Thanks to Kevin Burke for allowing me to use his ethics policy as the basis for my own.