Deep Dive · Enterprise AI engineering

How Revolut Cut AI Coding Costs 90% With Self-Hosted Open Models

David Abitbol runs AI operations at an EU-regulated bank with 2,000 engineers. His data shows lead time improving far more than coding time, why unlimited tokens changed how people work, what 56 Blackwell GPUs actually buy, and the compliance argument that let a bank serve Chinese open weights on US soil.

How Revolut Cut AI Coding Costs 90% With Self-Hosted Open Models — video thumbnail
Talk: AI Engineer · David Abitbol 11:47 29 October 2026
GLM-5.3 Self-hosting 56× B200 EU compliance

🏦 The company and the sample 0:36

Revolut, as he introduces it for a US audience: a European digital bank with 80 million customers, live in 45 markets, the most downloaded finance app in Europe last year, and — as of July — Europe's largest private company. The customer figure checks out: the Financial Times reported more than 80 million customers by September 2026, and the company's own site says "80+ million".

The evidence base is 2,000 engineers over the past year, tracked on two metrics: lead time in days, from an engineer picking up a feature to it being merged and ready to deploy, and coding time in hours. That pairing is the reason this talk is worth an hour of anyone's attention: most AI-coding claims report the second and infer the first.

📅 A year in four dates 1:18

WhenWhat changedReported effect
January 2025AI introduced company-wide with Gemini — first time private data could be used inside a model−10% lead time, −20% coding time
February 2025Experiments with Claude Code (he dates it to the Sonnet 3.7 era, "the one that would delete your prod database")—
January 2026Claude Code rolled out at scale, with strict budget limits"Not so much impact at the time"
26 April 2026Self-hosted GLM (GLM-5.1 generation) on dedicated GPUs−60% coding time, −70% lead time

The pre-history matters as much as the dates. Before self-hosting they were, in his words, "highly sceptical about the cost of AI" — engineers spending a thousand, sometimes ten thousand dollars a month with unclear return. So the rollout came with hard budget caps.

That is the honest starting condition almost every enterprise shares: the first phase of AI coding is metered, and metering teaches engineers to hoard. The question he set out to answer was not "which model is best" but "how do we remove the budget cap without the invoice exploding".

📈 The finding: coding is not the bottleneck 3:20

The counterintuitive result: lead time improves more than coding time. Sixty per cent faster typing, seventy per cent faster delivery. If coding were the constraint, the two curves would move together.

His explanation: the time is in the surrounding work — digging through your inbox, fighting Jira and Confluence, waiting for context. When tokens are unlimited, engineers stop saving them and start spending them on the boring parts too.

"The bottleneck for engineering is not necessarily coding. You can save a lot of time not having to dig through your inbox, or messing with Jira and Confluence. And so, when you have unlimited tokens, you're free to do that."
Read the claim carefully. This is self-reported internal telemetry with no control group, and a 70% lead-time improvement across 2,000 engineers is an extraordinary number by normal DORA standards. It is also not a claim that coding agents made people faster — it is a claim that removing the budget constraint made them apply agents to non-coding work. The mechanism is plausible; the magnitude deserves your scepticism until somebody publishes the method.

🔓 Why unlimited tokens change behaviour 3:50

His framing of the cost problem is behavioural rather than financial: with a budget, engineers save their tokens for the biggest, most difficult task, or for the end of the quarter. The small, genuinely useful queries — summarise this thread, read this spec, explain this error — never get made, because each one spends a resource that might be needed later.

Self-hosting changes the incentive: billing is flat, so there is no bill shock at the end of the month, and no reason to think about marginal cost per query. He is explicit that the trade is not "open model instead of frontier model" — they keep Claude Code and Codex, and the latest Gemini, as exceptions for the hardest work.

The pattern is worth generalising beyond Revolut: the value of an AI budget is not in the average query, it is in the queries that never happen because someone is rationing. Any metered plan teaches the opposite behaviour to the one you want.

🖥 56 GPUs for 2,000 engineers 4:24

ItemNumberNotes
Engineers served2,000The same population as the performance data
GPUs56× NVIDIA B200Blackwell-generation, which matters for the FP4 point below
ModelGLM-5.3He says "800 billion parameters" — the real figure is ~744B total with ~40B active per token

The model claim is worth correcting precisely, because the sparse structure is the reason the hardware bill is not larger. GLM-5.3 on Hugging Face lists 753,329,940,480 parameters in its safetensors metadata; Z.ai's release describes it as the same Mixture-of-Experts base as GLM-5.2 with scaled post-training, and the community framing is 744B total / 40B active. Either way it is hundreds of billions of parameters — but only a small fraction activate per token, which is what makes 56 GPUs for 2,000 people conceivable at all.

A dense model of the same size would not fit this budget. The whole economic case here rests on Mixture-of-Experts: you pay to hold the weights, but you only compute a fraction of them per token. That is why the enterprise self-hosting conversation in 2026 is almost entirely about MoE models.

⏱ The latency targets that matter 4:48

This is the most operationally useful minute of the talk, because the targets are empirically derived from complaints rather than from a spec sheet:

MetricTargetWhy
Time to first tokenUnder 3 seconds"As soon as you exceed 5 seconds, my Slack inbox starts to blow up"
Interactive throughput~200 tokens/secondEnough; more does not help interactivity
Off-peak throughput~800 tokens/secondWhat an engineer gets after 5pm when nobody else is on the GPUs

He adds a behavioural observation that explains why first-token latency dominates: people no longer watch the stream of thinking tokens. They launch tasks in parallel and come back when a task is done. So the metric that governs satisfaction is how long the first sign of life takes, not how fast the full answer arrives.

If you are sizing hardware, this is the number to design around — not tokens per second. A cluster that produces 800 tok/s but takes six seconds to start is worse, in human terms, than one that produces 200 tok/s and starts in 1.5 seconds. The bottleneck is perceived responsiveness, and the complaint threshold is around five seconds.

💵 The cost claim, and whether the arithmetic holds 5:10

The headline: a blended cost of $0.30 per million tokens, and an invoice one tenth of what they were paying Anthropic and OpenAI.

AssumptionValueSource
Blended cost per million tokens$0.30His figure
GPUs56 × B200His figure
Rough rental-equivalent rate~$2 per GPU-hourMy assumption, for a sanity check only
Monthly GPU cost implied≈ $80,00056 × $2 × 730 hours
Break-even volume at $0.30/M≈ 270 billion tokens/month$80,000 ÷ $0.30 × 1M
Per engineer≈ 135 million tokens/month÷ 2,000
Does it hold up? An order of magnitude, yes. Heavy agentic coding users plausibly consume tens to low hundreds of millions of tokens a month, so 135 million per engineer is aggressive but not fantasy for a bank that has deliberately removed all rationing — and cheap-owned-hardware is exactly how that volume becomes affordable. If your engineers each use one million tokens a month, self-hosting 56 B200s would be a spectacular waste.
Three things the "$0.30 per million" figure excludes: the people who run the cluster (he leads AI operations — that is a team), the engineering time spent on tuning and incident response, and the hardware itself if you buy rather than rent. Self-hosting converts a variable bill into fixed cost plus headcount, which is a good trade at 2,000 engineers and a bad one at 50.

🔧 Same hardware, 88% faster 5:45

The chart that should interest anyone who has tried self-hosting and been disappointed. Between April and August, on the same 56 GPUs, with demand up 76%:

MetricAprilAugustChange
Requests per second~3>7+76% demand absorbed
Time to first tokenover 10 s~1.6 s88% better

His point is blunt: if you buy GPUs, upload weights and start serving, you will get terrible performance — not because the model is bad, but because your workload is extremely sensitive to serving parameters. The gap between naive and tuned is a factor of six in first-token latency, on identical hardware.

This is the argument against "self-hosting is cheaper" as a slogan. Self-hosting is cheaper after someone tunes it. The 88% improvement is engineering labour, not a purchase — and it is the reason a small team should rent managed inference instead of running a cluster they cannot tune.

🎛 The parameters that matter 7:08

He is upfront that there is no secret recipe, then lists the levers that actually moved his numbers:

LeverHis positionComment
Context length"Long context is a scam" — serve 256K, not 1MAn argument about serving cost and KV cache, not about capability
QuantisationOn Blackwell, nothing above FP4; NVFP4 preferredCorrect instinct: FP4 halves memory against FP8 — see the correction below
Tensor parallelismGLM fits on TP4 but leaves too little KV cache; TP8 often betterCapacity discipline: fit the cache, not just the weights
Cache hit rateCoding workloads need above 90%The single biggest lever on cost per task
Speculative decodingWorth investigatingStandard throughput win when draft acceptance is high
Sequential / chunked prefill, PD disaggregationWorth investigatingControls the latency spike when a long prompt arrives mid-batch
One statement is backwards, and it matters if you size hardware from it. He says "going from FP4 to FP8 is a 40% saving in GPU footprint for zero loss in precision". The direction is wrong: FP8→FP4 is the saving; FP4→FP8 doubles your footprint. What he means — and what is true — is that running FP4 instead of FP8 on Blackwell cuts memory substantially (roughly half in the weights) with precision loss that is acceptable for coding work. Do not quote the sentence as written.
The cache-hit point is the most transferable: coding agents resend an enormous stable prefix — system prompt, tool definitions, repository context — on every turn. Above 90% cache hits, you are paying mostly for the new tokens. Below it, you are paying to re-read the same code thousands of times a day, and no amount of GPU tuning fixes that.

🔌 Production shape: one API, a router, any harness 8:17

  • Text-only is the accepted trade. GLM is a text model, and he would make that trade every time: "get the smarter model and figure out how to do image recognition another way."
  • A local router handles the exceptions. Image work goes to a vision model — Gemini or GPT-6 Luna — while the main task stays on the self-hosted model.
  • OpenAI-compatible endpoints, including the Responses API. That is what makes the whole thing usable: any harness that speaks the OpenAI shape — OpenCode, Codex, the Codex app — points at the local cluster and works.
The strategic insight is the compatibility layer, not the model. By exposing an OpenAI-compatible surface, the bank made the model a swappable component: today GLM, tomorrow whatever is best, with the harnesses untouched. Enterprises that lock themselves to a vendor's proprietary endpoint cannot make that switch — which is precisely the argument for self-hosting that survives a model change.

🛡 The CIO section: compliance and safety 9:23

He addresses the stigma around Chinese open weights head-on, and the argument is narrower than "it's fine":

  1. You are not sending data to China. You download weights and run them on your own infrastructure — in his case, US-based. The inference endpoint that belongs to the model's creator is never involved.
  2. Coding tasks are not autonomous agents. They run with a human in the loop, which changes the regulatory category. Revolut is an EU-regulated bank under the strictest regime, and this distinction is what they lean on.
  3. The sandbox is the proof. Harnesses ship approval rules — allow git, block gradle, for instance — and configuring them is how you demonstrate to a regulator that a human is genuinely in the loop rather than nominally present.
  4. Insider risk. "You'd be surprised what you find in a large company" — the sandbox also constrains what a bad actor inside the bank can do with an agent.
  5. Prompt injection — "not so much a thing now given how smart models are, but always a thing."
  6. Data residency and retention. Data must sit in an adequacy-framework country (US, EU, UK, Israel); inference providers should be on zero data retention by default.
  7. OpenTelemetry. If there is an incident you need logs deep enough to reconstruct what the agent did — which doubles as analytics.
The load-bearing assumption is "human in the loop". Everything above rests on coding agents not being treated as autonomous decision-makers, which holds while a person reviews and approves actions. The moment you let an agent merge to production unsupervised — the direction several teams are heading — that classification changes, and with it the compliance story that made the whole deployment defensible. This is the part of the talk most likely to age badly, and the most important to keep explicit in your own setup.

🎯 What to copy, what to doubt 11:37

ElementVerdictReason
Measure lead time, not just coding timeCopyThe one change that tells you whether AI is helping delivery or just typing
Remove token rationing for engineersCopy if you can afford flat costRationing suppresses the small useful queries, which is where the lead-time win lives
Design to first-token latency (sub-3 s)CopyEmpirically derived from complaint volume; tokens/second matters less
OpenAI-compatible surface in front of the modelCopyMakes the model swappable and keeps every harness working
Keep frontier hosted models as exceptionsCopyHe does exactly this — the open model is the default, not the only option
Self-host open weightsOnly at scaleRequires a team to tune; below a few hundred heavy users the fixed cost exceeds the savings
The 70% lead-time improvementTreat as directionalInternal telemetry, no method, no control group
"FP4 to FP8 saves 40%"BackwardsFP8 → FP4 is the saving direction

✅ Claims checked

ClaimVerdictEvidence
Revolut: 80 million customers, 45 markets, Europe's most-downloaded finance app, Europe's largest private company as of JulyBroadly verifiedFT (Sept 2026): more than 80M customers across 40 countries; Revolut's own site says "80+ million". "45 markets" vs "40 countries" is a definitional difference.
2,000 engineers tracked for a year on lead time and coding timeCompany data, unpublished methodPresented from internal dashboards; no methodology or control group offered
Gemini: 10% better lead time, 20% better coding timeCompany dataSame source, same caveats
Claude Code launched at scale with strict budget limits; low impact at firstCompany dataConsistent with the pattern of metered rollouts
After self-hosting GLM: 60% faster coding, 70% faster lead timeCompany data, extraordinary magnitudeUnverified; the mechanism (unlimited tokens → non-coding work) is coherent
56 B200 serve 2,000 engineersStated, plausibleHardware sizing from the operator; nothing contradicts it
GLM-5.3 is "800 billion parameters"Rounded upOfficial: ~744B total / ~40B active MoE; safetensors list 753,329,940,480. Sparsity is what makes the GPU count viable.
GLM-5.3 is the model being servedVerifiedZ.ai released GLM-5.3 on 14 August 2026; weights published ~28 August
Blended cost $0.30 per million tokens; invoice 1/10 of Anthropic + OpenAICompany figureCoherent for this volume; excludes staff, tuning time and hardware purchase
Sub-3 s time to first token target; 5 s triggers complaintsPractical and credibleEmpirically derived from internal support load
~200 tok/s interactive is enough; ~800 tok/s off-peakStatedConsistent with the "launch tasks, come back later" usage pattern he describes
Same 56 GPUs: ~3 req/s and >10 s TTFT → >7 req/s and ~1.6 s, with 76% more demandCompany chart88% improvement figure comes from his own dashboard
"Long context is a scam; 256K is what you need"Opinion about serving costGLM-5.3 supports 1M context; his point is KV-cache and latency, not capability
FP4 → FP8 is "a 40% saving in GPU footprint"Direction reversedFP8 → FP4 reduces footprint; the reverse doubles it
TP4 fits GLM but leaves too little KV cache; TP8 can be betterSound reasoningWeights-fit is not capacity — cache is what serves concurrent users
Coding workloads need >90% cache hit rateConsistent with practiceStable prefixes dominate agentic coding prompts
Endpoints are OpenAI-compatible, including Responses API; works in OpenCode, Codex, Codex appStated, and architecturally standardThe compatibility layer is the reason harnesses need no changes
Running Chinese open weights is fine because you host them yourselfCorrect distinctionDownloading weights ≠ sending data to the vendor's endpoint
Coding agents are "not autonomous agents" because a human is in the loopTrue today, conditionalHolds while approvals are enforced by the sandbox; changes with unsupervised merges
Data residency: US, EU, UK, Israel adequacy; zero data retention by providersConsistent with EU practiceHis summary of the regulatory frame, not a legal opinion

Transcript notes. The auto-captions mangle most product names: "Cloud Code"/"CodeX code code" (Claude Code / Codex), "GLM 51" (GLM-5.1), "GLM-53" (GLM-5.3), "Gnome"/"Jimmy" (Gemini), "Gnome 5G flash" (a Gemini Flash-tier vision model — the exact version is unclear), "Open Codex" (a router/harness name, unclear), "PGD zag" (PD disaggregation, i.e. prefill/decode), "VFP4" (NVFP4), "Cyber"/"Saber"? and "Cloud and Codex". The talk itself runs about 50 minutes in the room; the published cut is 11:47.

🔑 Key takeaways

  • The headline number is a behaviour change, not a model change: lead time improved 70% while coding time improved 60%, which means the gains came from applying agents to the work around coding.
  • Metering teaches hoarding. Budget caps make engineers save tokens for the biggest task, so the small useful queries never happen — which is where delivery time is actually lost.
  • Self-hosting is a fixed-cost decision. 56 B200 for 2,000 engineers at roughly $0.30 per million tokens only works because Mixture-of-Experts keeps active parameters low and the volume is enormous.
  • Design to first-token latency, not throughput. Under 3 seconds is the target, 5 seconds floods the operator's inbox, and 200 tokens/second is plenty when people launch tasks in parallel.
  • The gap between naive and tuned serving is a factor of six: the same 56 GPUs went from 10+ seconds to 1.6 seconds to first token while absorbing 76% more demand.
  • Cache hit rate above 90% is the cost lever that outranks hardware: agentic coding resends the same prefix on every turn.
  • Fit the cache, not just the weights. TP4 holds the model but starves concurrent users; TP8 often serves better on the same memory.
  • One statement in the talk is backwards: moving FP4 → FP8 doubles footprint; the saving is FP8 → FP4 on Blackwell. Do not size a cluster from the sentence as spoken.
  • An OpenAI-compatible endpoint is what makes self-hosting strategic: harnesses keep working and the model becomes swappable — which is the part that survives the next model release.
  • Keep frontier hosted models as the exception, not the enemy: Revolut still uses Claude Code and Codex for the hardest work.
  • The compliance argument rests on "human in the loop": enforced sandbox approvals are how an EU bank turns that phrase into evidence for a regulator.
  • Self-hosting below a few hundred heavy users rarely pays: the savings arrive after tuning labour, and tuning labour is a team.

🔗 Sources

  • The talk — David Abitbol (Revolut), "How Revolut Cut AI Coding Costs 90% With Self-Hosted Open Models", AI Engineer, 11:47, 29 October 2026
  • Z.ai: GLM-5.3 — release post: same base as GLM-5.2, post-training gains, staged weight release
  • zai-org/GLM-5.3 on Hugging Face — the weights, with 753B parameters in the safetensors metadata
  • zai-org/GLM-5.3-Flash — the smaller, multimodal sibling
  • NVIDIA DGX B200 — the Blackwell platform with FP4/NVFP4 support he is referring to
  • Revolut — company facts, customer count and markets
  • Revolut (Wikipedia) — 2026 customer and valuation reporting, including the FT's 80M figure
Basis note. Built from the 11:47 published cut of the talk. Product facts (GLM-5.3's release, parameter count and sparsity, B200's FP4 support, Revolut's customer base) were checked against primary sources; every performance figure is the speaker's own company telemetry and is labelled as such. One technical statement in the talk is corrected in the body (the FP4/FP8 direction) and one figure is refined (744–753B rather than 800B).

⏱ Timestamp index

0:12Who David is, and the premise
0:36Revolut in numbers
1:18The 2,000-engineer chart: lead time and coding time
1:49Timeline reset: Claude Code in the Sonnet 3.7 era
2:13Gemini first: 10% lead time, 20% coding time
2:45Scepticism about cost; budget limits
3:14April 26: self-hosting GLM-5.1
3:33Coding is not the bottleneck
4:00Open source as priority; flat billing
4:2456 B200 for 2,000 engineers
4:48Sub-3-second time to first token
5:04200 tok/s interactive, 800 off-peak
5:28$0.30 per million tokens; a tenth of the invoice
5:45Tuning: the April-to-August chart
6:5088% improvement on the same hardware
7:08"Long context is a scam"
7:26Quantisation: FP4 on Blackwell
7:45Tensor parallelism and KV cache
7:59Cache hit above 90%; speculative decoding
8:17Text-only trade and the vision router
9:00OpenAI-compatible endpoints and harnesses
9:23The CIO section: Chinese weights, no data to China
9:50EU bank, human in the loop, sandbox rules
10:29Rogue use and prompt injection
10:58Data residency, zero retention, OpenTelemetry
11:37Closing and applause
☰ View all