Short · Oct 2026 · 3 min read

How Ask David was built

A cited ask me research surface that declines when the library is silent: what it reads, how it answers, and where it stops.

Many "ask me anything" features on personal sites are a chat window in front of a general model with a paragraph of biography pasted in. They answer everything, cite nothing, and speak in a first person they have no right to. The surface on this site answers only from published work, shows where each answer came from, and says plainly when it has nothing to say.

The surface reads from the essays and case studies published on this site, plus a small set of written answers to recurring questions. Nothing else. There is no biography in the prompt, no résumé, no private notes. A piece enters the search index when it is published and public, and leaves when it is unpublished or gated. The index can never return something the site would not show a visitor. That constraint is the whole design. The only way to keep a research surface trustworthy is to control what it can draw from, so the boundary is enforced in the data layer rather than in the prompt.

A question takes one of three paths. Some questions recur, and for those there is a written answer in my own words, stored with a question pattern. An incoming question is matched against the patterns with full-text search, and a match returns the written answer verbatim with its related pieces as citations. No model is involved. Everything else goes to retrieval: two searches run in parallel over the published work, one keyword and one semantic, and the top results are fused to become context for a single model call. The model is instructed to cite each piece inline at the moment it draws on it. If retrieval returns nothing, or the model concludes the question is out of scope, the surface declines in one fixed sentence and points at the contact page.

The prompt carries an explicit scope: systems thinking, product and platform leadership, enterprise adoption, metadata and governance, AI in enterprise settings, operating models, and the specific work in the library. It also carries an explicit list of what the surface will not engage with: sensitive employer detail, compensation, personal life, politics, predictions, other people's reputations. The surface never claims to be me, never speaks in first person about my experience, and never invents a number. If a figure is not in the retrieved context, it does not appear in the answer.

A public text box attached to a paid model is an invitation, so the route layers its defenses in the order that costs least first. A hidden form field catches bots. Questions shorter than eight characters, longer than five hundred, or matching obvious keyboard mashing are rejected before a database query. A session cookie allows five questions in ten minutes and twenty in a day; an IP-level limit sits above that. A global daily cap closes the surface entirely when the day's budget is spent. Each exchange is logged with the path it took, the answer or library pieces it used, the session, and the referring page.

The log is the evaluation. Reviewing it shows which questions found good context, which fell through to escalation, and which recur. A recurring question with a weak retrieved answer is the signal to write a better one; a recurring escalation on an in-scope topic is the signal that the library has a gap. The surface improves by adding to the library and to the written answer set, not by tuning the model. The scope is narrow and the stakes are small, but the system only works if it knows what it will not do.