---
title: "Built, live, demo, shipped, sold"
url: "https://toddpaulbrownjr.com/writing/five-status-words/"
author: "Todd Paul Brown Jr."
description: "Agents made 'built' cheap, so the status word is now the claim. Five words the industry uses as one, and a real example of each from Todd's own work."
kind: "article"
updated: "2026-09-26T02:50:29+00:00"
---

# Built, live, demo, shipped, sold

"We built an AI agent" can mean five different things. I've started making myself pick one.

## The five words

These are the definitions I hold myself to. They sit in a config file that every post I draft gets checked against, which is a slightly unhinged thing to own, and I recommend it.

- **Built.** It exists and passes its tests. Nobody real is using it.
- **Live.** It's in production, handling real requests.
- **Demo.** It works, someone outside the company is looking at it, and nobody's paying.
- **Shipped.** It's in the hands of the people it was made for.
- **Sold.** Someone pays for it.

There's a sixth, which is less a status than an admission: **parked** or **in development**, said plainly, with the reason.

## One of each

On 21 September I was fact-checking a batch of posts and noticed I owned a real example of every one of these at the same time. Nobody arranged it. It was just sitting there.

**Live:** Content Ops, our content pipeline. It runs in production, and it drafted 92 of the 95 pages we planned for our company website in two days of batch runs.

**Built:** that website. When I first wrote this list, the rebuild was 91 pages (74 updated, 17 new), verified on staging, not launched. Two days later, on 23 September, it went live. Which is the point. The words move, and when they move you say so in one place, on purpose, instead of letting the old word quietly drift into the new one. My current example of built is a 3D visualisation plugin for my own knowledge system. It runs, it has 31 tests, and its own README says it's only partially verified by a human. One feedback round is still open. Built.

**Demo:** Sadyr, our revenue agent. The platform is live, and it runs two working demonstrations for prospects: a plan explainer for an insurance provider, and a rulebook assistant for a sports league's managers. Not sold. Nobody is paying for it yet, and I'm not going to write a sentence that lets you assume otherwise.

**Shipped:** Cadence, a proofread-by-ear app I made for myself. Shipped to an audience of one. I use it constantly.

**Sold:** a six-week revenue operations rebuild for a national amateur sports league. Seven systems into one, roughly 2,400 teams, zero rollbacks. Sold, delivered and running.

And the game I've been building with Claude Code is none of the above. It's **in development**. There's a playable build, and I'm playtesting it on a controller.

## Why be this fussy

Because agents made built cheap.

I can get to built in a day. Sadyr went from first commit to production in twelve days, and day one alone was the blueprint, the scaffold and the first sprints. Getting code to exist is no longer the expensive part. The distance from built to live is where the engineering still is: real data, real users, the bug that only appears when the mock is replaced with the real thing.

I have a clean example of that last one. Sadyr decides whether it's confident enough to answer a question. The gate that made that call divided the best retrieval score by the number of words in the question. In the test suite, the mock returned a raw count of matched words, and against that the heuristic looked right. Every test passed.

Then we turned on real embeddings for a demo. Real similarity scores land somewhere around 0.4 to 0.6. Divided by the length of a normal question, they became 0.03 to 0.05, well under the 0.62 threshold. Every multi-word question abstained. We found it on the first live run and fixed it the same day: 15 lines added, 6 removed.

That bug was invisible at built and obvious at live. If "built" and "live" mean the same thing in your status update, that entire category of work disappears from the record, and it's the category that decides whether the thing is any good.

## Where the words get bent

Each word has a neighbour it gets rounded up to.

- **Built gets called live**, because "it works on staging" sounds a lot like "it works".
- **Demo gets called a client.** A company looked at it, liked it and asked good questions. That's a demo. A logo on a slide doesn't change it.
- **Shipped to one person gets called shipped, full stop.** Cadence is shipped. The audience is me. Both halves of that sentence matter.
- **In development gets quietly dropped.** The unfinished project just stops being mentioned. I'd rather say "in development" every time, and "parked" with the reason when something stops.
## How I keep myself to it

Three habits, none of them clever.

**The word is stored, not remembered.** Every claim I publish has a status word attached in a claims ledger, next to the number, where it came from, and whether it was measured or estimated. When the website went live, the word changed once, in the ledger, and everything downstream follows it.

**"Not sold" gets said out loud.** The easiest lie in a status update is omission. Nobody writes "Sadyr has paying customers". They write "Sadyr is live with two clients" and let you fill in the rest. So the absence goes in the sentence.

**Status comes from evidence I can point at.** Live means a health check returning 200 on the deployed commit. Built means a passing suite and nobody real using it. Sold means an invoice. If I can't point at the thing, I don't get the word.

## Read announcements with this in mind

When building costs almost nothing, the status word is the claim. The code existing tells you very little on its own. The interesting question about any AI build, mine included, is which of the five it actually is, and what it took to move it one word to the right.

Every number in this piece is on the [receipts page](/receipts/), with its source.
