home dispatch log about field notes
DISPATCH-039
2026.04.12 FILED FROM AMSTERDAM 5 min read

The Checkout We Didn't Build

Here's a product decision you can judge us on: our entire checkout flow is a PayPal button. One price. One click. You don't choose the origin, the roast level, or the grind. You don't fill out a preference form. You don't pick from a dropdown. You click the button, PayPal handles the rest, and coffee arrives.

We could have built more. We chose not to.

What We Considered

The original spec had a modal. Email field, grind preference dropdown (whole bean / course / medium / fine), a note about shipping times. Reasonable stuff. Standard e-commerce. We built a prototype, looked at it, and deleted it.

The grind dropdown was the first to go. A PayPal payment link is a fixed URL — it can't receive custom order attributes. Which meant "grind preference" would become a note in the order email, which means manual handling, which means we'd occasionally miss it, which means a frustrated customer. The correct solution to that problem is: ship whole bean, say so clearly, and don't offer a choice we can't reliably fulfill.

The origin selector went next. The entire premise of this product is that the origin is a mystery. An origin selector is a contradiction in terms.

the_real_question

Stripping the modal down left us with: email field. That's it. And then the question became: does the modal add anything, or does it just add friction to what should be a two-second decision?

PayPal already collects the email. PayPal already collects the shipping address. PayPal already handles the payment. Our modal would have duplicated all of that, poorly, and introduced a failure mode that PayPal's checkout doesn't have.

The best interface for a decision that's already been made is the one that gets out of the way fastest.

The Philosophy, Briefly

We use "you've made enough decisions today" as copy because it's true. Decision fatigue is real and measurable. Every choice in a checkout flow — even a trivial one — consumes a small cognitive budget that you were spending on something else. A developer mid-session who decides to order coffee doesn't want to re-enter focus mode after a five-field form.

This isn't just about developer UX. It's about honesty in product design. If your interface requires choices that don't affect the outcome, those choices are theater. They make the product feel more complex without making it better. We have one product at one price. The checkout should reflect that.

flow_state_as_constraint

There's a version of this argument that's specifically about developers. We route everything through the terminal because leaving it costs something real. We use jq instead of opening a browser. We keep reference docs in man pages. We've already made the architectural decision: context switches are expensive, and interfaces that cause them are bad interfaces.

A complex checkout is a context switch. A single button is not.

What This Costs Us

Not nothing. We can't upsell. We can't collect preferences for future personalization. We can't do A/B testing on checkout funnel conversion. We can't do abandoned cart emails. We can't offer subscription billing through PayPal's fixed-URL link system.

These are real limitations. We accepted them because the alternative — building a proper checkout infrastructure — requires maintaining authentication, payment state, subscription billing, address validation, and email automation. For a one-SKU business with no inventory, that's a lot of complexity in service of problems we don't actually have.

At some point the product might grow into needing that infrastructure. When it does, we'll build it. Right now, we don't.

the_grind_note

Whole bean is also just better. Ground coffee degrades within two weeks. Whole bean stays good for 3–4 weeks after opening. Shipping pre-ground would mean the coffee is already stale by the time it gets anywhere outside a major city. This isn't an ideology — it's storage chemistry. The "you've made enough decisions today" line is about the checkout. The whole bean decision is about giving you coffee that's worth drinking when it arrives.

// adjacent_dispatches
// accept_mission

250g specialty coffee. Origin unknown. $30 flat. Free worldwide shipping.

accept mission — $30