AI Engineering

AI engineering for systems that have to keep working

The gap between an AI demo and an AI system in production is mostly engineering: deterministic outputs, evaluation, failure handling, cost control and observability. That is the work.

The problem

Most AI projects do not fail at the model

A prototype that works in a notebook is not the hard part. The hard part is what happens when the same system runs thousands of times a day against real inputs, produces a wrong answer, and nobody notices until a customer does. Almost all of the engineering effort in a production AI system is in the parts that are not the model.

  • A working prototype that has not been deployed because it is not reliable enough
  • Outputs that vary between runs in ways downstream code cannot handle
  • No way to tell whether a prompt or model change made the system better or worse
  • Cost per request that is fine in testing and unworkable at volume
  • No visibility into what the system is doing in production
  • Uncertainty about what the system should do when it is not confident
Who this is for

The people who usually bring us this problem

CTO / VP Engineering

You have AI features committed and need them built to the same standard as the rest of your platform — with the same expectations around reliability, observability and cost.

Head of Product

You need to know what can be shipped credibly and what the quality bar actually is, rather than discovering the limits after launch.

Founder

AI is central to your product thesis and you need engineering judgement about what is achievable, applied to your specific case rather than demonstrated on a toy problem.

What it costs

What this costs while it goes unfixed

Engineering faults are rarely confined to the engineering layer. These are the commercial consequences we see most often.

A demo that cannot ship has no value

The distance between prototype and production is where most AI investment is currently lost. The prototype is often 20% of the work and looks like 80% of it.

Unreliable AI erodes trust faster than no AI

A feature that is usually right is, from the user's perspective, a feature that cannot be relied on. The tolerance for unpredictability is far lower than teams expect.

Cost surprises arrive at scale

Per-request cost that is negligible in testing becomes a material line item at production volume. It is a design constraint, and it is much cheaper to design for than to retrofit.

What we do about it

Capabilities

Each of these is work we carry out, not an area we advise on.

LLM integration into existing systems

Integrating model capabilities into an application that already has users, data and constraints — rather than building a separate AI product alongside it.

Structured and constrained outputs

Downstream code needs to be able to rely on what comes back. Constrained output formats, validation and deterministic fallbacks are what make an AI component usable by the rest of a system.

Evaluation harnesses

You cannot improve what you cannot measure. We build evaluation sets from real cases so prompt and model changes can be assessed against evidence rather than impression.

Guardrails and failure handling

Define what the system does when it is uncertain, when it is asked something out of scope, and when the model provider is unavailable. An AI system without a defined failure mode has an undefined one.

Observability

Instrumentation over inputs, outputs, latency, cost and failure rates, so the system's behaviour in production is visible rather than assumed.

Cost engineering

Model selection, caching, batching and prompt design treated as cost decisions, because they are. Sustainable unit economics are a requirement of the design, not an optimisation afterwards.

Human-in-the-loop design

For many workflows the correct architecture is AI-assisted rather than autonomous. Deciding where the human belongs is a design decision with a large effect on both quality and cost.

How we work

Engineering methodology

The sequence is deliberate. The order is usually what determines whether the work holds or has to be repeated.

  1. Start from the failure modes

    Before design, establish what happens when the system is wrong, how expensive that is, and who notices. This determines how much validation, how many guardrails and how much human oversight the system needs — and it varies enormously between use cases.

  2. Build the evaluation set before the feature

    An evaluation set drawn from real inputs turns AI development from opinion into engineering. Without one, every decision about prompts and models is a guess, and every regression is invisible.

  3. Constrain outputs at the boundary

    Treat the model as an unreliable dependency and design the interface accordingly — validated schemas, defined fallbacks, and no assumption that a response is well-formed.

  4. Instrument before scaling

    Observability is built in from the start rather than added after an incident. Cost and behaviour are both unknowable without it.

  5. Design the failure path deliberately

    Decide what the system does when uncertain, unavailable or out of scope — and make that a user-facing experience that has been designed, not an error state that was never considered.

Deliverables

What an engagement produces

Documentation is a deliverable, not an afterthought. On most of these engagements a large part of the value is a defect report precise enough for another team to act on.

Design

  • Failure-mode and risk analysis
  • Human-in-the-loop decision: where judgement stays
  • Evaluation criteria and test set
  • Cost model at projected volume

Implementation

  • Integration into the existing application
  • Structured output and validation layer
  • Guardrails and defined fallback behaviour
  • Observability and cost instrumentation

Operation

  • Evaluation harness for ongoing change
  • Model and prompt version management
  • Performance and cost monitoring
Under the hood

Architecture and technology

System concerns

  • Input validation and prompt construction
  • Model selection and routing
  • Output validation and repair
  • Fallback and degradation paths
  • Cost and latency instrumentation
  • Evaluation and regression testing

Operational concerns

  • Versioning of prompts and models
  • Observability over production behaviour
  • Access control and data handling
  • Human review workflows where required
Related work

Where we have done this

Engagements where this capability was the substance of the work rather than a line item.

Education technology

AI social media automation

A four-week automated publishing engagement on Facebook. The objective was not to increase posting volume for its own sake but to establish whether consistent automated output could expand reach beyond the existing follower base. It did — and the mechanism by which it did was more interesting than the headline growth.

39.4Ktotal views, up 160.7%
Adjacent problems

If this is not quite your problem

These overlap at the edges. Sending you to the right page is more useful than having you work it out.

You need automation of a specific workflow, not a full AI product

See AI Automation for scheduled, notification and summarisation workflows.

You need AI applied to testing rather than to the product

See the AI Quality Engineer solution.

Questions

Frequently asked

Do you build retrieval-augmented systems?

When retrieval is the right answer to the problem, which it often is not. Retrieval adds a dependency, a failure mode and a latency cost, and it is frequently reached for when better prompt structure or a smaller corpus would have been sufficient. We will say so when we think it is unnecessary.

Which models do you use?

Whichever fits the requirement, and we keep that decision reversible. Model capability and pricing change quickly, so the architecture should make substitution cheap rather than betting on one provider.

Can you work with our existing AI implementation?

Yes, and that is a common starting point. The most frequent gap in an existing implementation is the absence of an evaluation set, which makes it impossible to know whether a change improved anything. That is usually the first thing we build.

How do you handle data privacy?

As a design constraint from the start, not a later review. What data reaches a model provider, under what terms and with what retention is an architectural decision, and it constrains which models and which deployment patterns are viable. We establish that before designing anything.

Bring us the problem you have not been able to fix

Describe what is happening rather than what you think the cause is. If we are not the right people for it, we will say so.