DEV Community

Cover image for A design I didn't write
Hideki Mori
Hideki Mori

Posted on

A design I didn't write

I built a feature that turns text into other text. It started as translation: text in one language, out in another. That was the name it got, and names are sticky.

I didn't stay literal about it for long, though. The engine underneath took an arbitrary instruction, so I started elaborating. I extended the translation side into style — feed it a flat document and ask for more shape, plain prose in and prose in the manner of a literary novelist out. Murakami, say. Same words, different weather. And the other obvious move, pulling structure out of unstructured text, I gave its own tool, with its own name. By the time the story I'm about to tell happened, I had a tidy little map: translation here, style as its good clothes, extraction over there in a room of its own. I was proud of the map.


Through the wrong door

Then a customer did something that wasn't on my map.

They had a spreadsheet — thousands of rows of text in a single column. They pasted it into the translation box and, instead of asking for another language or another voice, typed an instruction to categorize each row. What came back wasn't prose. It was labels: a tag, a code, the one field worth pulling out of each messy line. They downloaded the result and pasted it into the next column over, beside the original.

I laughed when I saw it. Then I stopped laughing, because it was exactly the job I'd built the other tool for — and they'd done it in the translation box, without ever opening the room I'd furnished for precisely this.

They hadn't gone somewhere I'd never imagined. I'd imagined it well enough to build a product for it. They'd gone through a wall.


The walls were mine

The uncomfortable part is where that wall had come from.

The engine never had it. Underneath, the thing took text and an instruction and handed back whatever the instruction asked for — translate this, restyle this, classify this. It didn't care which, and it didn't know there was supposed to be a difference. The line between "translation" and "extraction" wasn't in the capability. I'd painted it on, with two names and two products and a tidy map. The customer couldn't see my paint. They saw one box that took text and an instruction, and they used it as the thing it actually was: undivided.

So the limit that mattered was never the reach of my imagination. I'd reached the idea fine — I'd built a whole tool for it. It was the structure I'd laid over a capability that didn't have any. I'd spent real care drawing rooms, and the user walked through them as if the walls were paper.


The dirty version was right

There's a smaller version of the same move, and it landed in a different spot.

When I saw the copy-and-paste workflow, my instinct was to fix it. You shouldn't have to do that, I said, more or less. I'll give you an API. Wire it straight into your process. Clean. Proper. The engineer's idea of a favor.

They didn't want it. The current shape was best, they said — and they were right, the same way they'd been right about the box. My API was another wall I'd built: the correct way in. Their copy-paste went around it, because to them there was no correct way in, only don't make me leave the spreadsheet I already live in. Once more I'd imposed a structure, and once more the user reached past it for the thing underneath. "Better," measured against my structure, was worse against their day.


The truer map

So I've stopped policing my own boundaries.

When a customer crosses one — pulls data out of the box, routes around the API — they haven't misused anything. They've shown me a wall that doesn't need to be there. The line between translation and extraction was a decision I'd made, not a fact about the work, and the customer who never agreed to it is the one person placed to tell me it was optional. The translation box used as a classifier wasn't an error to fix. It was a map of the capability with my walls left off — and a truer map than the one I'd been proud of.

Use isn't feedback on your design. It's a design you didn't write — and, often, the better one.


Built with Claude (Opus).

Top comments (0)