writing on tech, ethics, and everything in between

What we owe the systems we build

Most conversations about responsibility in technology start from the wrong end. They ask what a system should be permitted to do, as if the interesting question were containment. The harder and more useful question is what we, the people building it, owe it — not in the sentimental sense of owing a machine kindness, but in the practical sense of what a builder owes to the consequences of their own choices.

An engineer who ships a recommendation algorithm doesn't stop being responsible for it the moment it goes live. The system will make thousands of small decisions a day that no one individually reviews. Each of those decisions carries a trace of a design choice someone made once, under deadline, half-attending to the long tail of what would happen. That's not a special property of algorithms — it's true of any process you set running and then walk away from. The difference is scale, and scale is not a neutral multiplier. It changes what carelessness costs.

Obligation doesn't end at deployment

There's a comfortable fiction in a lot of engineering culture: that responsibility is discharged at the point of correctness. If the code does what the spec says, the obligation is met. But specs are written by people who couldn't see everything, and systems meet the world in ways no spec anticipates. Treating "it matched the spec" as the end of the ethical conversation is a way of outsourcing judgment to a document that was never asked the hard questions in the first place.

A better standard, though a less comfortable one, is to keep asking what the system is actually doing to the people who encounter it — after launch, after the sprint is closed, after the team has moved on to the next thing. That's expensive. It doesn't fit neatly into a roadmap. It's also the only version of responsibility that isn't cosmetic.

You don't get to design the incentive and then act surprised by the behavior it produces.

The debt doesn't disappear, it just changes hands

When a team decides not to think through a hard edge case, that decision doesn't make the edge case go away. It just moves the cost somewhere else — onto a support team fielding complaints, onto a user who trusted a default that wasn't built with them in mind, onto whoever inherits the codebase three years later and has to reverse-engineer intentions no one wrote down. Skipping the ethical work doesn't save the work. It just changes who pays for it, and they rarely get a say.

None of this argues for paralysis. Most systems get built under real constraints, by people doing their honest best with the time they have. But there's a difference between constrained and unconsidered. The obligation isn't to get everything right before shipping — it's to keep the question open after you have.

← back to all posts