A cart is not a list

William Martinsson · May 17, 2026

A cart on the web is usually built as a list of rows. Add something, the list grows. Remove something, the list shrinks. The mechanics are solved. The interaction stays flat.

That is the misunderstanding. A cart is not a list. It is the place where a user is most uncertain about what they have just committed to, and the design of a cart is the design of that uncertainty. Treating it as state management produces something technically correct and emotionally empty — a thing that records the user's decisions without acknowledging them.

In 1982, an IBM researcher named Walter Doherty published a paper called The Economic Value of Rapid Response Time. Its central finding was that human productivity does not rise smoothly with system speed. It rises sharply, at a specific threshold of around 400 milliseconds. Below that line, the user stops waiting and starts thinking. Above it, the system is a thing they are talking to. Below it, it is a thing they are using.

Most carts on the web sit well above that line. The user clicks +, a request goes to the backend, the network answers, the number changes. Nothing is wrong with it. Nothing is right with it either. The cart is silent in the moment that matters. If you have ever clicked + twice because you were not sure the first click registered, you already know what is happening — the interface is asking the user to model the server.

Fig. 01Silent — the baseline cart

Wooden Stool

Wooden Stool
700.00 SEK
1

Bioglow

Bioglow
500.00 SEK
1

Polaroid

Polaroid
2 500.00 SEK
1

A different version of the same cart admits the work. The stepper replaces its glyph with a spinner the moment it is pressed. The removed row slides out instead of vanishing. None of the latency has changed, but the cart is now in the conversation. It says “I'm working on it.” Slower in real time. Faster in felt time.

Fig. 02The cart admits the work

Wooden Stool

Wooden Stool
700.00 SEK
1

Bioglow

Bioglow
500.00 SEK
1

Polaroid

Polaroid
2 500.00 SEK
1

A third version commits before the server does. The quantity changes at the click, and the request leaves in the background. If it fails — almost never — the UI rolls back. The cart now says “Done” before it knows. This is the version where the user stops talking to a system and starts using a tool.

Fig. 03The cart commits first

Wooden Stool

Wooden Stool
700.00 SEK
1

Bioglow

Bioglow
500.00 SEK
1

Polaroid

Polaroid
2 500.00 SEK
1

All three carts share the same feature spec. The data model does not move. The QA list is identical. What changes is the interface's willingness to participate in the moment the user is in.

The optimistic cart is the only one of the three that crosses Doherty's line. It is also the only one that required the designer to take a position on what the system was willing to claim before it knew. The other two are still well-built. They are simply not in the conversation.

That is the part I keep coming back to. The cart is not a list of rows. It is the conversation around the rows, and that conversation either happens or it does not.

An interface that says nothing is not neutral.

It is a position.