
The Demo Works. Shipping Is a Different Job.
A demo is the happy path with data you chose. Everything that made my products hard was in the part nobody demos — dates, permissions, empty screens, and the jobs that run while you sleep.
Anyone can get a demo working now. You describe the thing, the model writes it, and within an hour there is a screen that does roughly what you said. That part is genuinely solved, and pretending otherwise makes you sound like you have not been paying attention.
What is not solved is everything after. A demo is the happy path, run once, with data you picked because it makes the screen look right. Shipping is the same product surviving inputs you did not choose, users who are not you, and time passing. Almost everything that was hard about the products I have live was in that second category.
The Model Has No Clock
Stips generates prediction markets from the news on a schedule, which means an AI is writing the close date for every market. That worked perfectly in testing. Then the first real batches came out already expired.
Models do not have a clock. Asked for a date a week out, they produce something that looks like a date a week out, anchored to whenever their training data thinks "now" is. In a demo you never notice, because you write one market, look at it, and move on. On a schedule, running unattended, it quietly fills the board with markets nobody can bet on.
The fix was boring, which is the point: put today's date in the prompt, and validate every generated date before it is allowed near the board. Ten minutes of work that only existed as a problem because the thing was actually running.
Testing As Yourself Hides Half the Product
The second Stips bug cost me considerably more time, and it is the one I would warn anyone about.
I did most of my testing signed out, because it is faster to just open a page. Signed out, row-level security returns nothing rather than an error. So every bug that only existed for logged-in users looked exactly like an empty state working correctly. Pages that were broken and pages that were empty were indistinguishable, and I could not tell the difference from the outside.
I did not find any of it until I started testing as a real account. Not a test fixture, not a mock — an actual signed-in user clicking through the actual product. Everything I had been calling "working" for a week turned out to be a category of bug I had no way to see.
Nobody Demos an Empty Screen
Every demo has data in it. That is what makes it a demo. Which means the state most new users actually hit — nothing here yet — is the one state you have never looked at.
On Stips, a market with no bets says "Be the first to trade" instead of rendering an empty chart, because a market nobody has touched is still worth reading; it just has to say so. On HerbaLink, the hard screens were never the search results. They were the ones where a practitioner had not filled in their profile yet, and the whole product is trust, so a half-empty profile is worse than no profile.
You do not find these by designing. You find them by using the thing on a day when it has no data in it.
The Parts That Run While You Sleep
The thing that separates a live product from a good prototype is usually not the interface. It is the scheduled job that keeps the content fresh, the auth that has to hold up, the database rules that decide who sees what, and the error path for when an external service is down.
None of that shows up in a screenshot. All of it is what makes the screenshot still be true tomorrow. When I say Stips runs end to end, that is what I mean — design, front end, database, auth, and the cron that keeps the board from going stale. Ring-Rival is the same claim in a different shape: it is a URL you can open on your phone right now, which is a much harder standard than a video of it working.
Why This Matters More Than It Used To
When building was expensive, the demo was the hard part, and getting one working was real evidence. Now that generating is cheap, the demo proves almost nothing — which is why judgment became the whole job. Everyone can produce the screenshot. Far fewer people have taken something all the way to the point where strangers use it and it holds.
That gap is the entire difference between "I built a prototype" and "I have products live that people use". It is also, conveniently, the thing that is hard to fake. You can generate a beautiful interface in an afternoon. You cannot generate the eighteen small corrections that come from a real thing being used by real people over real time.
If you are evaluating someone's work — or your own — the useful question is not whether the demo works. It is what broke after it shipped, and what they did about it.
Related UX Design Articles
The Work Is Deleting, Not Generating
AI made producing screens almost free. That moved the bottleneck from making things to deciding which ones to throw away — and no model will do that part for you.
When Trust Is the Product, It Can't Be a Feature
Getting two strangers to agree to meet at a park is easy. Getting them to feel fine about it's the entire product — and it's not something you bolt on near the end.
If You Make People Do Maths, They Guess or They Leave
A price of 67¢ tells you the odds are 67%. Almost nobody works that out in their head, and the ones who try get it wrong. Do the arithmetic for them.