Separate the durable from the disposable
Model choice is the fastest-moving part of any AI system and should be the easiest thing to replace. Your data access layer, permission model, audit log and integration code are the parts you will still be running in three years.
Designing behind an internal interface — so the application asks for a capability rather than calling a specific provider directly — costs little at the start and saves a rewrite later.
Permissions are part of the model's context
The most common serious defect in enterprise AI applications is an assistant that can retrieve information the person asking is not entitled to see. Retrieval must be filtered by the user's identity before it ever reaches the model, not afterwards.
This has to be designed in. Retrofitting access control onto a system that was built to search everything is painful and rarely complete.
- Filter retrieval by the requesting user's permissions
- Keep an audit trail of what was retrieved and why
- Separate environments and data between development and production
- Decide retention and deletion policy before you store conversations
Design for being wrong
Assume the system will sometimes be wrong, unavailable or slow. The question is what happens next. A well-built application degrades to a queue, a form or a human rather than losing the interaction.
This principle applies to the mundane parts too. If the notification fails, the enquiry should still be saved. If the integration is down, the work should be retryable rather than discarded.
Make the cost visible early
Per-request costs behave differently from licence fees, and a design that is economical at pilot volume can be unattractive at ten times the traffic. Model the cost per completed task, not per call, and include the retries.
It is worth knowing at design time which operations are expensive, because that often changes the design — caching, smaller models for routing, or handling common intents deterministically.
Key takeaways
- Make the model the replaceable part and the integration the durable part
- Filter retrieval by user permissions before the model sees anything
- Define what happens when the system is wrong, slow or unavailable
- Model cost per completed task, including retries, before you commit