Someone at the DC Department of Public Works wants to know how many blocks a crew missed on a particular route last week, broken down by the reason the crew logged.
That is an ordinary question. The department asks questions like it all the time. Before the warehouse, the answer took a person, a spreadsheet and most of a morning, because the data sat in three places: a work-order system, a feed of vehicle location data, and a map of the routes that a third system owns.
We built a chat box on top of the warehouse. The chat box is the smallest part of this story.
What was already underneath
Since 2016, we have worked with the department on data integration that nobody would put in a demo.
A dozen agency systems, each bought separately and none built to share data, now connect through one enterprise service bus: a shared layer that moves data between them. About a hundred million telemetry readings from a fleet of two hundred vehicles arrive in near real time. Route maps let a resident's address match the streets the department plows or sweeps. All of it lands in one warehouse that can be queried as a single picture of the operation.
That work continued through several chief information officers and a pandemic, and at no point did it produce anything that would impress someone on a screen. Reports that used to arrive weekly as a spreadsheet now update within minutes. A result like that gets one line in a status report.
It is also the reason a plain-English tool is possible at all. You can only answer a question asked in English if there is one place where the answer exists.
The chat tool is two hundred lines
Once the warehouse exists, the interface is small: a chat window, a model that can call tools, and one tool that runs a read-only query against the warehouse and returns the rows.
The steps are simple. The question goes to the model along with the database schema. The model calls the query tool. The rows come back. The model reads them and answers in a sentence, with the numbers in it.
We wrote the model calls and the tool-call loop ourselves, without a framework. We considered two. One would have added about thirteen dependencies, in return for an easier way to switch model providers and built-in streaming. The other, a full agent framework, would have added closer to forty, and would have managed the whole loop, the schemas and the process lifecycle.
For a proof of concept, neither was worth the cost. Our own version took hours to build, added no dependencies, and whoever inherits it can debug it line by line. A framework is the better choice for a long-lived production system where several features share the same structure. Our rule: add a dependency when a second and a third feature will use it, and not before.
Show the query
The most important detail: the tool showed the query it ran.
The query appeared next to the answer, where the person reading it would see it. It was not hidden in a debug panel or behind an administrator setting.
This matters more in a government department than almost anywhere else. A number from a tool like this might end up in a council briefing, a public records response or a performance report. The person who puts it there is accountable for it, more than most private-sector analysts are, and nobody will accept "the AI said so" as a defense.
When people can see the query, they can check the answer. Someone who knows the data can look at it and see at once that it counted the wrong week, filtered on the wrong route, or dropped the rows with no reason code. That reader is the safety check, and the design should make their job easy.
If you do not have the warehouse yet
This is where most of these projects go wrong.
If your data still lives in a dozen systems that do not share data, a plain-English tool will not fix that. It will give fluent answers from whichever piece of the data it can reach. Those answers will be wrong in ways nobody catches, because how fluent an answer sounds tells you nothing about whether the data behind it is complete.
So the integration comes first. It is slower, it costs more, it does not look impressive, and it makes everything after it possible.
The integration is worth doing even if you never add a model. The department's dashboards and reports already ran on the warehouse. The chat tool was an extra convenience on top of a system that was already paying for itself.
What to ask about any chat tool over data
When someone shows you a plain-English interface over their data, set aside the questions about the model, the prompt and the framework. Ask this: what does it query, and how was that built?
If the answer is a real, connected and maintained data warehouse, the interface on top is a couple of hundred lines and a good idea. If the answer is vague, you are looking at a demo with nothing behind it.