This is the ground the diagnostic covers, written out. It is useful on its own — take it to your team and answer the six honestly. Every one of these has a tell: a question that separates a system somebody engineered from one that merely runs.
You can prove a change didn't make things worse.
- A fixed set of real inputs with known-good outputs, scored automatically — not a handful of prompts somebody tries by hand before a release.
- The score runs in CI and can block a merge. An eval nobody has wired to a gate is a dashboard, not a test.
- You know what the score was last month, so you can see drift rather than infer it.
The honest tell: if the answer to “how do you know the new prompt is better?” is “we tried a few things and it seemed good”, you don't have evals — you have vibes with a deploy button.
You find out something broke before a user tells you.
- Structured logs you can actually query — one line per request with the ids you'd need to reconstruct what happened, not a wall of console output.
- An alert that fires on the thing that matters to your users (errors, latency, a queue backing up), routed to somebody who is awake.
- For anything model-driven: the input, the output, the latency, and the cost of every call, retrievable for a specific user complaint.
The honest tell: pick a complaint from last week and try to reconstruct exactly what the system did. If you can't, you're debugging production by guessing.
Every actor — human, service, or model — can only touch what it needs.
- Row-level or tenant-level isolation that is enforced by the database, not by remembering to add a WHERE clause in every query.
- Secrets in a secret store, rotated, and never in the client bundle. Check the bundle; a surprising number of them are.
- If an LLM can call tools or hit your APIs, it has its own scoped identity and its actions are logged. Prompt injection is an access-control problem before it is a model problem.
The honest tell: if a new engineer could ship a query that returns another tenant's rows and nothing would stop them, the isolation is a convention, not a control.
You can say what leaves your system, where it goes, and how long it stays.
- A written answer to which third parties receive customer data — every model provider, analytics tag, and logging service included.
- PII is not being logged incidentally. Request bodies and model prompts are the two places it leaks most often.
- Deletion actually deletes: from the database, the backups you'd restore from, and the logs.
The honest tell: your first enterprise customer's security questionnaire will ask all of this in writing. Finding the answers under a deadline is considerably more expensive than finding them now.
Being popular is a good day, not an incident.
- You have run it at several times your current peak and know what fell over first. Nobody's system degrades where they expect.
- The obvious N+1 queries and unindexed lookups are gone — these are the single most common wall for something built fast.
- Per-request cost is known and bounded, especially anything calling a model in a loop. A retry storm on a paid API is a bill, not just an outage.
The honest tell: if you don't know which query is slowest under load, you will find out during the launch you were most excited about.
When a dependency dies, the product degrades instead of disappearing.
- Timeouts on every outbound call, and retries with backoff on the ones worth retrying. An unbounded retry is an outage amplifier.
- Work that must not be lost is in a queue with a dead-letter path, not in a fire-and-forget HTTP handler.
- A defined behaviour for when the model is slow, wrong, or down — a cached answer, a cheaper path, or an honest message. Something, decided in advance.
The honest tell: turn off your least important dependency in staging. If the whole product 500s, you don't have a dependency — you have a single point of failure with a friendly name.
The first two are the discipline behind AI evaluation and observability; the middle two behind AI security and compliance engineering. How we work through all six on a real engagement is written up under methodology.