Where the hours actually go
Ask a team what an AI project consists of and you will hear about models,
prompts and retrieval. Look at the commit history of a shipped system and the
majority of the work is integration: reading state out of systems that were never
designed to be read from programmatically, and writing back into systems that
assume a human is doing it.
This is not a failure of planning. It is the nature of the work. Every enterprise
system has behaviour that is not in its documentation — a field that is nominally
optional and mandatory in practice, a rate limit that is lower than published, an
endpoint that returns success while doing nothing. You find these by building
against the system, which is why integration estimates that assume the
documentation is accurate are always low.
Least privilege is the whole security story
The single most common finding when we audit an existing AI deployment is one
credential with broad access, created during the prototype and never narrowed.
The fix is unglamorous. Each tool gets its own credential at the minimum access
level that works. Reads are separated from writes. Access is scoped to specific
objects, tables or endpoints rather than granted at the account level. Spend and
volume limits live in code, outside anything the model can influence. And every
action is logged with the context that produced it.
None of that is novel security practice. It is the ordinary practice, applied to a
caller that happens to be probabilistic — which is exactly why it matters more
here than usual.
The legacy system is probably not impossible
“Our core system has no API” ends more AI use cases than it should. In order of
preference, the paths that generally work:
- Read replica or direct database access — stable, testable, and sufficient
for anything read-only.
- Scheduled file exchange — unglamorous, extremely reliable, and already in
use at most companies that run older systems.
- Event stream or message queue — if the system already emits, consume it.
- Interface automation — works, breaks on every UI change, and should be a
bridge while one of the above is built rather than the destination.
The ordering matters because teams frequently start at four.