
The AI I taught to stay silent
Most of the effort in building an assistant goes into making it respond well. My focus recently has been on the opposite problem: making mine keep its mouth shut.
The thing I'm building lets small food producers take orders over WhatsApp, on the same number and the same threads they already run by hand. The first prototype did the obvious thing. A message comes in, the assistant reads it, the assistant replies. Helpful, in the abstract. In practise it meant the bot was talking over the producer on their own phone, to their own customers. Wrong on day one, on a channel people run by hand precisely because it's personal.
So the redesign started from silence.
Silent by default, awake on a trigger
The assistant now says nothing at all until a customer explicitly opens an ordering session. There's a keyword ("order") and a couple of WhatsApp ice-breakers that start it. Outside that session, the bot is invisible. It does not react to chit-chat, it does not helpfully interject, it does not announce itself.
Inside a session, it does one job. It captures a draft order, reflects it back, and offers two tappable buttons: "That's my order" and "Add more". When the customer taps confirm, the session closes. That's the whole surface area.
Getting there meant dropping the feature that started the whole thing. The original ask was an order button on every message. WhatsApp simply won't let you decorate arbitrary messages that way, so instead of fighting the platform I used what it does give you: ice-breakers and a keyword to open the session, buttons to close it.
Two confirmations, doing two different jobs
The part I'm most pleased with is subtle, and it resolved a question I'd left open in the design for a while.
There are two confirmations in this flow, and they are not the same confirmation twice. The customer confirms completeness: "yes, that's everything I want to order." It is deliberately non-binding. It does not commit anything. The producer confirms acceptance later, in their weekly review, when they actually decide to take the order on.
The assistant never commits an order itself. It stages, it reflects, it hands a tidy draft to the human who owns the decision. That split matters because it fits how these businesses actually work: orders trickle in through the week, and the maker sits down once to sort out what they're making. A real-time "new order, confirm now?" ping to the producer would just reintroduce the exact interruption the whole silent design was built to remove. So I left it out.
What a real, messy order taught me
I tested it live on a real number. Three line items came in: "6 pea shoots", "corriander", and "rocket".
The pea shoots matched the catalogue cleanly. "Corriander" didn't, because it's a typo. "Rocket" didn't either, because it wasn't seeded yet. On paper, two of three items failed.
Except nothing was lost. The design captures the raw text first and matches second, so the unmatched items sat there in the draft as plain text, waiting for the producer to tidy them at review. The bet behind the whole thing ("capture light, let the human tidy") held up under a real, misspelt, half-unknown order. That was the moment the design earned its keep.
The principle
Restraint is a feature. An assistant that reacts to everything is easy to build and easy to resent. An assistant that stays quiet until it's genuinely wanted, captures generously, and hands the real decision to a person, is harder to build and much easier to live with.
I keep coming back to the same shape: the machine preps, the human decides what leaves the pass. Less assistant, more useful.
More to come as I keep building this in the open. Where have you found that less assistant turned out to be more?
Found this helpful? Share it!
Enjoyed this post? Subscribe to my newsletter for more insights on web development, career growth, and tech innovations.
Subscribe to NewsletterRelated Posts

Beyond tools: Building systems that think
Tired of renting software that doesn't quite fit? This post explores building a personal AI operating system, detailing the journey from standalone apps to an interconnected system that truly understands your context.

⚡ Blazing-Fast TypeScript: A 10x Leap in Developer Experience
An in-depth exploration of TypeScript's new native compiler, Project Corsa, and how its 10x performance improvement is set to transform the frontend development landscape.

Embracing the Future: A Deep Dive into Tech's Latest Innovations
A journey through cutting-edge tools and breakthroughs powering modern software development, with practical insights and real-world applications.
