A few things I keep relearning while building LLM products at work.
Evals over vibes
"It feels better" is not a diff. The moment you have more than one prompt, you need a small eval set you can run on every change — even 30 hand-picked cases beats guessing.
Prompts are code
They belong in version control, in review, with a changelog. A prompt edited live in a dashboard is a production change nobody can reproduce.
// keep the contract explicit
const system = await loadPrompt("geo/extract@v3");
The boring parts win
Retries, timeouts, caching, a cheap model for the easy 80% — that's where reliability actually comes from. The clever prompt is maybe 10% of it.