design engineering
APRIL 24, 2026·4 min read

Design Engineering

Notes on the practice.

Design engineering runs on a loop: build, ship, watch what people do, adjust. When this works it's extremely effective. You ship a checkout flow. 40% of users drop at the address form. You split it into two steps. Drop-off halves. Done in a day.

The loop works here because the checkout is a closed system. The user already decided to buy. Everything between that decision and the confirmation is yours — your design, your code, your friction. The signal points at the thing you're changing.

Most interesting products aren't closed systems. And the loop becomes a specific kind of trap.

You're building a marketplace. Users search, scroll, leave. Search engagement is low. You redesign search — better filters, ranking, layout. Ship it. Numbers don't move. You iterate: better cards, faster autocomplete, cleaner results. Still flat.

Search was fine. There were twelve listings in the user's area and none were worth clicking. But from the data, search failure and supply failure produce the same number: user searched, didn't engage, left. The analytics can't distinguish "your search is bad at surfacing what's there" from "there's nothing there to surface."

So you iterate on search, because search is the thing the medium gives you. You can change the layout. You can tune the ranking. You can feel whether the interaction is fast, whether the results look right. The medium is responsive to all of this. And each cycle rewards you — the search experience does get better, measurably, in the ways you're measuring. You develop sharper opinions about filter placement, card hierarchy, whitespace. You are climbing a hill. You just can't tell from inside the loop whether it's the right one.

· · ·

The thing about design engineering that I think gets missed — and I say this as someone who practices it — is that proximity to the real medium is not an unqualified advantage. The whole pitch, from Bret Victor forward, is immediate connection to the material: see the effect of your changes, feel the resistance, iterate in real time. And that's genuinely powerful. But the resistance you feel when you're building is the resistance of the medium — of the rendering pipeline, of the interaction model, of the layout engine. It's not necessarily the resistance of the user's actual problem. And when the medium is responsive and the loop is tight, you naturally stay inside the frame the medium presents. You solve what's in front of you.

The checkout flow is the rare case where medium-resistance and problem-resistance are the same thing. The user's problem is literally "this form is hard to fill out," and the medium shows you that directly. The marketplace is the case where they diverge. The medium shows you search results, card layouts, filter interactions — the things you can build. The user's problem is that there's nothing worth buying. The medium can't surface that, because the problem isn't in the medium.

Before you start iterating, figure out what has to be true for your signal to actually reflect your design. For a marketplace: enough supply that a search failure means a search failure. For a social product: enough people that an empty feed reflects a bad feed, not an empty room. Create those conditions first, manually if you have to, and then iterate. Now the loop is teaching you about the thing you can change.

The tell is when you notice you've developed strong opinions about the interface of a product nobody uses yet. You know how the filters should work. You can defend every spacing choice. The loop gave you all of that. What it didn't give you is the answer to whether anyone needed to search in the first place.