I had been working for this company for over a year. The lead developer was in-house and I was remote. They had no version control.
One day the lead developer was out sick and they asked me to deploy a feature to the live website. First time this has happened - I have no knowledge of their deployment setup. The new feature was developed by an outside company and it was described to me as a sales tool.
Hmm, how am I going to deploy this? Who cares for now - let me look at the files they have given me. They changed 7 existing files. Of course, I had been using Git on the side the whole time - I ran the diff. Each file had the same change - they had added code that makes an ajax saveEmail() call onBlur. In other words, email addresses were being saved to the database when a user inputs an email and the input loses focus.
The first thought that came to my mind was - I'm not going to be here much longer. And it's not because I quit (I probably should have).
I told my client - apologies, but I don't want to work on this task because it's a dark pattern. And they reply - no, no, we are just sending people 3 email reminders. And then I try to explain that it's basically saving email addresses secretly.
The work relationship fizzled out a month later. This was a good client for me in terms of consistent work.
It's hard for people to understand or care about ethics in programming. One possible reason for this is that the issues are too nuanced.