Agents in production
The gap between a working demo and a system you can leave running
An agent in production works on real data and spends money on every model call. I define which actions need approval, how to stop a run and how to check behaviour after a change.
- Tool calling
- I connect tools to the domain services the product already uses, with the same validation and permissions.
- Write safety
- I define what each tool may change and which actions need explicit approval before they run.
- Evals
- I run a fixed set of cases in CI on every prompt, model or tool change to catch regressions before deployment.
- Cost control
- Token accounting per run and per tenant, with the caps and fallbacks that keep an agent loop from turning into an unbounded bill.
Production systems and a demo
An open-source demo and three systems I have worked on.
The systems come from my time at FXStreet (2020-2025) and from my freelance work since 2023; client names are omitted. The demo is open source and you can read all of it.
invoice-assistant
An open-source demo of tool calling, write controls, evals and cost tracking.
- Tools call the app's REST API with the user's token and permissions
- Writes require human confirmation, follow rules in policies.json and have per-turn limits on tool calls
- Evals run in CI against a real model; a one-line prompt regression turns the pipeline red
- Tokens, euros and latency metered per model call, behind a daily spend kill switch
- Eval cases
- 36 in CI
- Write gate
- Server-side
- Spend
- Daily cap
Platform re-architecture
Moving a legacy monolith to cloud-native.
- Split the monolith into domains that deploy independently
- Moved communication between them onto Kafka, so one service failing no longer fails the request
- Reduced regression testing time from days to minutes
Cost and performance optimisation
More throughput on a smaller bill.
- Rewrote the queries and indexes that dominated the load
- Put Redis in front of the reads that repeated most
- Sized the Kubernetes requests to what the pods actually used, and let autoscaling take the peaks
- Throughput
- 15k+ msg/min
- Regions
- Multi-region
Reliability and on-call
Service monitoring and automated incident response.
- Defined SLOs and measured the services against them
- Built the dashboards around those SLOs
- Automated the routine steps of incident response
- Monitoring
- New Relic
Platform and delivery experience
Financial data services and deployment pipelines
FinTech platform delivery
Built and evolved multi-tenant services processing high-frequency financial data, with delivery guarantees that hold through broker and consumer restarts.
.NET, Azure, Kafka, Redis, TimescaleDB
CI/CD delivery modernisation
Moved legacy delivery pipelines to GitOps workflows with repeatable deployments.
Kubernetes, Helm, GitHub Actions, Terraform, ArgoCD
What I work with
What I reach for, and what I have run in production.
- Applied AI
- Azure OpenAI, Amazon Bedrock, Model Context Protocol, LLM evals
- Infrastructure
- Kubernetes (AKS and EKS), Terraform, Docker
- Cloud
- AWS, Azure
- Observability
- OpenTelemetry, New Relic
- Backend and data
- .NET 10, Kafka, PostgreSQL
- Web
- Next.js, React