<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Chris on AI</title><description>Chris Taylor on AI, cloud, strategy and technology — long-form writing, mental models as interactive diagrams, and the tools I build, with the source.</description><link>https://chrison.ai/</link><language>en-GB</language><atom:link href="https://chrison.ai/rss.xml" rel="self" type="application/rss+xml"/><item><title>Evaluations are not tests</title><link>https://chrison.ai/blog/evaluations-are-not-tests/</link><guid isPermaLink="true">https://chrison.ai/blog/evaluations-are-not-tests/</guid><description>A test tells you whether the code did what you wrote. An evaluation tells you whether the system is still good enough. Confusing the two produces suites that pass while the product gets worse.</description><pubDate>Tue, 04 Aug 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Engineering teams arrive at AI systems fluent in testing, and reasonably assume evaluation is testing with fuzzier assertions. The vocabulary encourages it: both run in CI, both go green or red, both are described as coverage. The assumption is wrong in a way that takes about six months to become obvious, usually when a suite that has been green throughout ships a regression everyone can see in the product.&lt;/p&gt;
&lt;h2 id=&quot;the-difference-that-matters&quot;&gt;The difference that matters&lt;/h2&gt;
&lt;p&gt;A test asks a closed question with a knowable answer: given this input, does the function return this output? It is deterministic, it is cheap, and a passing test is a proof. When a test fails, something is broken.&lt;/p&gt;
&lt;p&gt;An evaluation asks an open question with no fixed answer: across this distribution of inputs, is the system’s behaviour good enough for what we are using it for? It is statistical, it costs real money, and a passing eval is &lt;em&gt;evidence&lt;/em&gt;, not proof. When an eval score drops, something may be broken, or the sample may have shifted, or the judge may have drifted, or the threshold may have been wrong.&lt;/p&gt;
&lt;p&gt;Three consequences follow, and each one contradicts a testing habit that is otherwise a virtue.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;A single run is a sample, not a result.&lt;/strong&gt; One green run means little. What you need is a distribution and a trend — the same suite, run repeatedly, tracked over releases. Teams that treat the first green as pass/fail throw away the only signal that actually predicts regressions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;100% is a warning sign.&lt;/strong&gt; In testing, a suite that always passes is a suite doing its job. In evaluation, it means the cases are too easy, and the suite has stopped being able to detect the thing you built it for. Healthy suites sit somewhere uncomfortable and move.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The suite is a living asset, not a ratchet.&lt;/strong&gt; Test suites accumulate — you rarely delete a test. Eval sets need active curation: retiring cases the system has fully absorbed, and continuously adding the failures found in production. An eval set that has not changed in two quarters is measuring last year’s system.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“A suite that always passes has stopped being a measurement and become a ritual.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;what-earns-its-place-in-a-suite&quot;&gt;What earns its place in a suite&lt;/h2&gt;
&lt;p&gt;The useful mental model is three layers, and they are not interchangeable.&lt;/p&gt;
&lt;figure&gt;&lt;img alt=&quot;Three stacked layers. Human review, at the top, catches the failures nobody encoded. Graded cases, in the middle, track the trend over releases. Assertions, at the bottom, catch the cheap failures on every commit.&quot; loading=&quot;lazy&quot; decoding=&quot;async&quot; sizes=&quot;(min-width: 1488px) 1488px, 100vw&quot; data-astro-image=&quot;constrained&quot; data-astro-image-pos=&quot;center&quot; width=&quot;1488&quot; height=&quot;562&quot; src=&quot;https://chrison.ai/_astro/eval-layers.kLlRvrnJ_ZclgBJ.webp&quot; srcset=&quot;https://chrison.ai/_astro/eval-layers.kLlRvrnJ_ZKlHRg.webp 640w, https://chrison.ai/_astro/eval-layers.kLlRvrnJ_ZHuLwS.webp 750w, https://chrison.ai/_astro/eval-layers.kLlRvrnJ_1qeHB5.webp 828w, https://chrison.ai/_astro/eval-layers.kLlRvrnJ_1iGkAd.webp 1080w, https://chrison.ai/_astro/eval-layers.kLlRvrnJ_ZtgRPG.webp 1280w, https://chrison.ai/_astro/eval-layers.kLlRvrnJ_ZclgBJ.webp 1488w&quot;&gt;&lt;figcaption&gt;The middle layer gets the attention and the budget. The two either side of it catch what it cannot.&lt;/figcaption&gt;&lt;/figure&gt;
&lt;p&gt;&lt;strong&gt;Assertions.&lt;/strong&gt; The genuinely deterministic properties: valid JSON, schema conformance, no PII in the output, required disclaimer present, tool called with well-formed arguments. These &lt;em&gt;are&lt;/em&gt; tests, they are cheap, and they belong in CI on every commit. Most teams under-invest here and over-invest in the layer above, because assertions feel too simple to be the answer to an AI problem. A surprising share of production incidents are assertion failures.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Graded cases.&lt;/strong&gt; A curated set with known-good answers, scored by a rubric — sometimes by a model, sometimes by an exact or fuzzy match. This is the layer that tracks quality over time. It needs enough cases to be statistically meaningful, and it needs to be built out of real traffic rather than invented examples, because invented examples encode your assumptions about what users do.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Human review.&lt;/strong&gt; A sampled slice looked at by someone who knows the domain. Expensive, slow, and the only layer that can find a failure mode you did not think to encode. It is also the layer that calibrates the one above it: if your model-as-judge disagrees with your domain expert, the judge is wrong until proven otherwise.&lt;/p&gt;
&lt;p&gt;The common mistake is trying to push everything down into the graded layer because it is the automatable one. Assertions catch the cheap failures for almost nothing. Human review catches the novel ones. The middle layer is where you watch the trend, not where you find surprises.&lt;/p&gt;
&lt;h2 id=&quot;judges-need-evaluating-too&quot;&gt;Judges need evaluating too&lt;/h2&gt;
&lt;p&gt;Model-as-judge is what makes graded evaluation affordable at scale, and it introduces a measurement instrument that can itself drift. Treated carelessly it converts an unknown quality problem into an unknown measurement problem, which is worse because it looks like progress.&lt;/p&gt;
&lt;p&gt;Two disciplines make it trustworthy. Hold out a set of human-labelled cases and periodically measure agreement between your judge and your humans — if that agreement number is not tracked, your quality numbers mean nothing in particular. And pin the judge’s model version and prompt, treating a change to either as a change to the instrument: re-baseline, and never compare scores across the boundary. A silent judge upgrade will move every number in your suite and look exactly like a quality change.&lt;/p&gt;
&lt;h2 id=&quot;where-the-suite-should-live&quot;&gt;Where the suite should live&lt;/h2&gt;
&lt;p&gt;The organisational placement matters as much as the design. Evals built inside the delivery team and never seen by anyone else are useful for iteration and worthless for assurance — they are marking their own homework, which second line will spot immediately and correctly.&lt;/p&gt;
&lt;p&gt;The pattern that holds up: the delivery team owns the eval &lt;em&gt;suite&lt;/em&gt; and runs it on every change; the standard for what a suite must contain at each risk tier is owned centrally; and the results land somewhere risk and audit can read without asking. That last part is what converts a development tool into a control, and it is almost entirely a plumbing problem — a durable location, a stable format, and results that are not manually curated before anyone sees them.&lt;/p&gt;
&lt;p&gt;Get that right and the eval suite stops being the thing you run before a release. It becomes the continuous evidence that the system is still operating inside the envelope you were approved for — which is the only form of assurance that survives a system that changes weekly.&lt;/p&gt;</content:encoded><category>Evaluation</category><category>AI</category><category>Governance</category><author>Chris Taylor</author></item><item><title>Why AI pilots die in model risk review</title><link>https://chrison.ai/blog/why-ai-pilots-die-in-model-risk-review/</link><guid isPermaLink="true">https://chrison.ai/blog/why-ai-pilots-die-in-model-risk-review/</guid><description>SR 11-7 wasn&apos;t written for systems that change weekly. Here&apos;s the tiered validation pattern that gets agents through second-line review.</description><pubDate>Tue, 14 Jul 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every bank I have worked in has a graveyard of successful pilots. The demo worked. The metrics were real. The sponsor was genuinely enthusiastic. And eighteen months later the system serves no traffic, because the questions that killed it were never on the pilot’s scorecard.&lt;sup&gt;&lt;a href=&quot;#fn-1&quot;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/p&gt;
&lt;p&gt;The usual post-mortem blames the second line — risk was too slow, too conservative, too attached to a framework written for credit scorecards. That explanation is comfortable and wrong. The gate is doing what it was designed to do. The problem is that we keep presenting it with an object it cannot evaluate.&lt;/p&gt;
&lt;h2 id=&quot;the-pilot-theater-problem&quot;&gt;The pilot theater problem&lt;/h2&gt;
&lt;p&gt;A pilot optimises for the demo. It runs on a curated slice of data, in a sandbox, with the people who built it watching. Its scorecard measures whether the output looks right.&lt;/p&gt;
&lt;p&gt;Production optimises for the run. It runs on everything, unattended, for years, and its scorecard measures whether anyone can explain what happened on a Tuesday in March when the output was wrong and a customer was harmed.&lt;/p&gt;
&lt;p&gt;These are not the same test, and passing the first tells you very little about the second. Worse, a successful pilot creates a specific kind of organisational damage: it convinces everyone the hard part is done. Budget gets released for the wrong phase. The team that holds all the context disbands. The system arrives at the risk gate as an orphan, sponsored by nobody who can answer a question about it.&lt;/p&gt;
&lt;h2 id=&quot;what-second-line-is-actually-asking&quot;&gt;What second line is actually asking&lt;/h2&gt;
&lt;p&gt;Model risk management in US banking runs on SR 11-7, the Fed and OCC’s 2011 supervisory guidance. It is a better document than its reputation suggests. Strip away the vocabulary and it asks three things:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;What is this thing, and what is it for?&lt;/strong&gt; A documented statement of purpose and intended use, so that use outside that envelope can be identified as a breach rather than a surprise.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;How do you know it works?&lt;/strong&gt; Evidence, generated independently of the people who built it, that the system performs as claimed across the range of conditions it will actually meet.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Who is accountable when it doesn’t?&lt;/strong&gt; A named owner, an escalation path, and a control that fires before the harm rather than after.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of that is hostile to AI systems. All of it assumes a model is a fixed artifact — a set of weights and a scoring function you can validate once, revalidate annually, and version when it changes.&lt;/p&gt;
&lt;p&gt;An agentic system is not a fixed artifact. The weights move when the vendor ships. The prompt moves when someone improves a phrasing. The tool surface moves when an API adds a field. The retrieval corpus moves continuously, by design. Validation-on-the-instance means revalidating weekly, which no second line can staff, so the request queues, and while it queues the instance changes again.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“The gate isn’t too strict. It’s aimed at the wrong object.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;validate-the-envelope-not-the-instance&quot;&gt;Validate the envelope, not the instance&lt;/h2&gt;
&lt;p&gt;The pattern that works is to move the unit of validation up a level. You stop asking second line to approve &lt;em&gt;this system as it is today&lt;/em&gt; and start asking them to approve &lt;em&gt;the envelope this system is permitted to move within, and the controls that detect when it leaves.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Concretely, the artifact you submit is not a model card for one configuration. It is four things:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;A bounded statement of use.&lt;/strong&gt; What decisions this system may influence, what it may never do unaided, which populations it touches. Narrow beats broad — a narrow envelope approved this quarter is worth more than a wide one still in review next year.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The change envelope.&lt;/strong&gt; Which components may change without re-review, within what tolerances, and what change automatically forces re-review. A prompt edit inside a tested template is routine; adding a tool that can move money is not.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Continuous evidence.&lt;/strong&gt; An eval suite that runs on every change and reports against the same measures used at approval, with results second line can read without asking you. This is the load-bearing piece and the one most teams skip.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The failure path.&lt;/strong&gt; What the control is, what it fires on, who receives it, and what they are empowered to do. “The model has a confidence threshold” is not a control. “Below threshold routes to a named queue with a four-hour SLA and a monthly sampling review” is.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;The reframe is not a trick to get past the gate. It genuinely gives the second line something more useful than an instance snapshot — a snapshot goes stale the day after it is signed, while an envelope with live evidence stays true.&lt;/p&gt;
&lt;h2 id=&quot;tiering-so-the-effort-lands-where-the-risk-is&quot;&gt;Tiering, so the effort lands where the risk is&lt;/h2&gt;
&lt;p&gt;Applying that machinery uniformly is how you end up with an eight-month queue for a meeting-notes summariser. Tier by consequence, not by technical sophistication:&lt;/p&gt;

























&lt;table&gt;&lt;thead&gt;&lt;tr&gt;&lt;th&gt;Tier&lt;/th&gt;&lt;th&gt;Test&lt;/th&gt;&lt;th&gt;Treatment&lt;/th&gt;&lt;/tr&gt;&lt;/thead&gt;&lt;tbody&gt;&lt;tr&gt;&lt;td&gt;3&lt;/td&gt;&lt;td&gt;No external effect; a human reads every output&lt;/td&gt;&lt;td&gt;Register it, log usage, review annually&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;2&lt;/td&gt;&lt;td&gt;Influences a decision about a customer, with a human in the loop&lt;/td&gt;&lt;td&gt;Full envelope, independent eval, quarterly control testing&lt;/td&gt;&lt;/tr&gt;&lt;tr&gt;&lt;td&gt;1&lt;/td&gt;&lt;td&gt;Acts unaided, or the harm is not reversible by the human&lt;/td&gt;&lt;td&gt;Tier 2 plus pre-deployment challenge, kill switch, standing committee ownership&lt;/td&gt;&lt;/tr&gt;&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;The tiering test that matters is not “how clever is the model” but “if this is wrong and nobody notices for a week, what is the worst outcome and can we undo it?” A regex can be tier 1. A frontier model can be tier 3.&lt;/p&gt;
&lt;p&gt;Getting this table agreed with the second line &lt;em&gt;before&lt;/em&gt; you build anything is the single highest-leverage hour available to an AI programme. It converts an unbounded conversation about AI safety into a routing decision, and routing decisions can be made in days.&lt;/p&gt;
&lt;h2 id=&quot;what-to-fix-before-the-next-pilot&quot;&gt;What to fix before the next pilot&lt;/h2&gt;
&lt;p&gt;Three things, none of which are technical:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Name the production owner on day one.&lt;/strong&gt; Not the pilot sponsor — the executive who will hold the run-rate, the incidents, and the annual attestation. If nobody will take it, that is the finding, and you have learned it for the cost of a meeting rather than a programme.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Fund the run, not the build.&lt;/strong&gt; Innovation budgets end at the demo. Ask for the three-year operating line — evals, monitoring, revalidation, second-line time — in the same paper that asks for the build. A pilot that cannot survive that question was never going to reach production.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Bring second line in at design, not at the gate.&lt;/strong&gt; They are not the last approval step; they are a design constraint you can either discover early and cheaply or late and expensively. Every risk officer I have worked with would rather shape a system in February than reject it in November.&lt;/p&gt;
&lt;p&gt;None of this makes governance free. It makes it &lt;em&gt;sequenced&lt;/em&gt;, which is a different and achievable thing. The organisations getting agents into production are not the ones with the most permissive risk functions. They are the ones that stopped treating the risk function as a thing that happens to them at the end.&lt;/p&gt;
&lt;ol class=&quot;footnotes&quot;&gt;
  &lt;li id=&quot;fn-1&quot;&gt;Fed SR 11-7, &quot;Guidance on Model Risk Management,&quot; 2011 — the reference regime for US banks, and the direct ancestor of most of what your second line will ask for.&lt;/li&gt;
&lt;/ol&gt;</content:encoded><category>Risk</category><category>Governance</category><category>Compliance</category><author>Chris Taylor</author></item><item><title>The AI skills gap is a job-design problem</title><link>https://chrison.ai/blog/the-skills-gap-is-a-job-design-problem/</link><guid isPermaLink="true">https://chrison.ai/blog/the-skills-gap-is-a-job-design-problem/</guid><description>Everyone is hiring for the scarcest skill on the org chart. The role that decides whether a system survives its first year is the one nobody has written a job description for.</description><pubDate>Thu, 18 Jun 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Every firm I speak to describes the same shortage and reaches for the same remedy. We cannot find the modelling talent. So the budget goes to a recruiter, six months pass, three people land, and the shortage has not moved. It has usually got slightly worse, because the three new people now have opinions about a platform nobody owns.&lt;/p&gt;
&lt;p&gt;The shortage is real. It is just not the binding constraint.&lt;/p&gt;
&lt;h2 id=&quot;what-the-gap-actually-is&quot;&gt;What the gap actually is&lt;/h2&gt;
&lt;p&gt;Watch where an AI programme stalls and it is almost never at the point where somebody has to train a model. It stalls where a system that works has to be handed to people who will run it for the next five years — with an on-call rotation, a revalidation cycle, a cost line, and an executive whose name is on the attestation.&lt;/p&gt;
&lt;p&gt;That handover needs a person who can hold three things at once: enough engineering to read the pipeline, enough risk literacy to talk to second line without a translator, and enough organisational standing to say no. Firms have those people. They are just not in a job that lets them do it, because that job has not been designed.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The scarce skill is not building the model. It is being accountable for one in production, in a regulated firm, on a Tuesday, when it is wrong.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;why-hiring-does-not-fix-it&quot;&gt;Why hiring does not fix it&lt;/h2&gt;
&lt;p&gt;A specialist hire arrives into an org chart that was drawn before the problem existed. If the operating model has not settled who owns an AI system after the pilot team disbands, the new hire inherits the ambiguity rather than resolving it — and the more senior they are, the more expensive that ambiguity gets.&lt;/p&gt;
&lt;p&gt;This is the same failure the centre-of-excellence argument runs into from the other side. Capability without an owner does not compound. It pools in whoever happens to care, and it leaves when they do.&lt;/p&gt;
&lt;h2 id=&quot;designing-the-job-instead&quot;&gt;Designing the job instead&lt;/h2&gt;
&lt;p&gt;The fix is unglamorous and mostly free. Write the role down. Name the accountable owner for each production system, and make the name a person rather than a committee. Put the run costs — evaluation, monitoring, revalidation, second-line time — into that owner’s budget, not into the innovation fund that paid for the build.&lt;/p&gt;
&lt;p&gt;Then, and only then, work out what you cannot staff internally and hire for that. In most firms the answer turns out to be a much shorter list than the one the recruiter was given.&lt;/p&gt;
&lt;h2 id=&quot;the-test&quot;&gt;The test&lt;/h2&gt;
&lt;p&gt;If you want to know whether you have a skills gap or a job-design gap, ask who gets paged when a production AI system starts behaving differently, and then ask that person what authority they have to stop it. If the two answers are different people, hiring will not help you. You do not need more talent. You need a job that the talent you already have is allowed to do.&lt;/p&gt;</content:encoded><category>Talent</category><category>Operating models</category><category>Strategy</category><author>Chris Taylor</author></item><item><title>The AI centre of excellence is a transition state</title><link>https://chrison.ai/blog/the-coe-is-a-transition-state/</link><guid isPermaLink="true">https://chrison.ai/blog/the-coe-is-a-transition-state/</guid><description>Centralising capability is the right first move and the wrong steady state. The question worth arguing about is what the CoE is supposed to make itself unnecessary at.</description><pubDate>Thu, 21 May 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Almost every large organisation reaches for the same structure in the first year: pull the scarce people into one team, give it a name with “excellence” in it, and route all the AI work through it. This is the correct first move. It is also a structure with a natural half-life, and the failure mode is not choosing it — it is forgetting to say out loud when it should end.&lt;/p&gt;
&lt;h2 id=&quot;why-centralising-is-right-at-the-start&quot;&gt;Why centralising is right at the start&lt;/h2&gt;
&lt;p&gt;At the beginning, the binding constraint is judgement, not capacity. Almost nobody in the organisation has shipped one of these systems, so nobody can tell a hard problem from an easy one, a real evaluation from a demo, or a vendor claim from a vendor. Scattering six capable people across six business units means six teams each learning the same lesson slowly and privately.&lt;/p&gt;
&lt;p&gt;Centralising does three things well:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;It concentrates reps.&lt;/strong&gt; One team doing twenty projects learns twenty times. The pattern library — which use cases fail, what second line asks, what the real unit costs look like — only forms above a certain density of experience.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It gives risk a single counterparty.&lt;/strong&gt; Second line, legal, procurement and audit each get one relationship to build instead of thirty. In the first year this alone can be worth more than the engineering.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;It makes the paved road buildable.&lt;/strong&gt; Shared evaluation harnesses, a vetted model gateway, logging that satisfies audit — these are only worth building once there is one team who owns them.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;where-it-stops-working&quot;&gt;Where it stops working&lt;/h2&gt;
&lt;p&gt;The trouble starts when demand outruns the team, which happens faster than anyone plans for. Three symptoms show up in order.&lt;/p&gt;
&lt;p&gt;First, the CoE becomes a queue. Business units wait months for a slot, and the ones with budget quietly start their own thing. You now have shadow AI &lt;em&gt;and&lt;/em&gt; a bottleneck, which is the worst of both structures.&lt;/p&gt;
&lt;p&gt;Second, the CoE becomes the domain expert by proxy. Its members are good at the technology and necessarily shallow on the business process being changed. The projects that work are the ones where a business person cared enough to sit with the team every day; the projects that fail are the ones where the CoE was handed a brief and asked to come back with a system. This is not a talent problem. Process knowledge does not transfer through a requirements document.&lt;/p&gt;
&lt;p&gt;Third — and this is the one that ends programmes — the CoE owns delivery but not the P&amp;#x26;L. It gets measured on systems shipped, not on outcomes changed, because outcomes belong to the business unit. Everyone can see the mismatch and nobody can fix it from inside the structure.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“A centre of excellence that is still the only place excellence happens in year three has failed at its actual job.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;what-the-second-structure-looks-like&quot;&gt;What the second structure looks like&lt;/h2&gt;
&lt;p&gt;The destination most organisations converge on is a small central platform-and-standards function, with delivery capability embedded in the business units.&lt;/p&gt;
&lt;p&gt;The central team keeps what benefits from being singular: the model gateway and its commercial terms, the evaluation and observability tooling, the risk tiering standard and the relationship with second line, the reference patterns, and the community of practice that keeps embedded engineers from re-learning things privately. Roughly: everything that is a &lt;em&gt;road&lt;/em&gt;, plus the right to say what “done” means.&lt;/p&gt;
&lt;p&gt;The business units keep delivery, because they own the process, the data, and the outcome. Their engineers use the paved road and are held to the standard, but they report to the P&amp;#x26;L that changes if the work is good.&lt;/p&gt;
&lt;p&gt;What matters is that this is a deliberate handover with a trigger, not a drift. Useful triggers: the CoE’s queue exceeds a set wait; a business unit has run three projects on the paved road without central delivery help; the standards are stable enough that a team can self-certify a tier 3 use case. Write the trigger down in the founding charter of the CoE, in the first month, when it costs nothing to agree.&lt;/p&gt;
&lt;h2 id=&quot;the-transitional-question-worth-asking&quot;&gt;The transitional question worth asking&lt;/h2&gt;
&lt;p&gt;Every CoE charter should answer one question explicitly: &lt;strong&gt;what are we trying to make unnecessary, and how will we know we have?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;If the answer is “nothing — we are the permanent home of AI delivery”, that is a defensible choice for a smaller organisation, but say so, and staff it for the demand it will actually attract.&lt;/p&gt;
&lt;p&gt;If the answer is “central delivery”, then the CoE’s own success metric should include things like the number of business-unit engineers shipping on the paved road, the share of projects the CoE never touched, and the time from idea to tier-3 approval without central involvement. A team measured on those numbers behaves very differently from a team measured on systems delivered — it writes documentation, it runs clinics, it resists the flattering request to just build it for them.&lt;/p&gt;
&lt;p&gt;The organisations that got this right did not have a better first structure. They had the same one, plus a written expiry date and the discipline to honour it.&lt;/p&gt;</content:encoded><category>Operating models</category><category>Strategy</category><category>Governance</category><author>Chris Taylor</author></item><item><title>Your model is only as auditable as its lineage</title><link>https://chrison.ai/blog/your-model-is-only-as-auditable-as-its-lineage/</link><guid isPermaLink="true">https://chrison.ai/blog/your-model-is-only-as-auditable-as-its-lineage/</guid><description>The question &quot;what data is this built on&quot; gets asked at review time, and it cannot be answered retroactively. By then the honest answer is a shrug with a confidence interval.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;There is a moment in every model risk review where somebody asks what the system was trained on, or retrieves from, or was last evaluated against. It is a reasonable question. It is also, in most firms, unanswerable — not because the answer is bad, but because nobody wrote it down while it was still cheap to write down.&lt;/p&gt;
&lt;h2 id=&quot;lineage-is-a-build-time-artefact&quot;&gt;Lineage is a build-time artefact&lt;/h2&gt;
&lt;p&gt;Data lineage cannot be reconstructed. You can approximate it, and teams do: someone spends three weeks tracing tables backwards through a warehouse, produces a diagram, and everyone agrees it is roughly right. Roughly right is worth very little to a reviewer whose job is to attest to it.&lt;/p&gt;
&lt;p&gt;The alternative costs almost nothing if you do it at the time. Every dataset that enters a model carries its source, its extraction time, its permission basis and its version. Every run records the exact versions it consumed. None of that is difficult. It is simply invisible while things are going well, which is why it keeps getting deferred.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Nobody has ever been asked for lineage on a day when everything was fine.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;the-permission-problem-underneath-it&quot;&gt;The permission problem underneath it&lt;/h2&gt;
&lt;p&gt;The harder version of this question is not where the data came from but whether you were allowed to use it that way. A retrieval system that indexes an internal share drive inherits every access assumption that drive ever made, including the wrong ones. The model does not know that the folder was readable because of a 2019 migration error. It will cheerfully summarise it for whoever asks.&lt;/p&gt;
&lt;p&gt;This is where lineage stops being a documentation exercise and becomes a control. If you can trace a retrieved passage back to a document and that document back to a permission set, you can enforce something. If you cannot, your access model is whatever the index happened to crawl.&lt;/p&gt;
&lt;h2 id=&quot;what-good-looks-like&quot;&gt;What good looks like&lt;/h2&gt;
&lt;p&gt;The bar is lower than people assume. Three properties cover most of it:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Every artefact — dataset, index, model version, eval run — has an identifier that appears in the logs.&lt;/li&gt;
&lt;li&gt;Every production inference can be traced to the artefact versions that produced it, without asking a person.&lt;/li&gt;
&lt;li&gt;Permission is evaluated at query time against the requesting user, not baked in when the index was built.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;None of that requires a platform purchase. It requires deciding, before the first system ships, that the answer to “what is this built on” should be a query rather than an investigation.&lt;/p&gt;
&lt;h2 id=&quot;the-cost-of-deferring&quot;&gt;The cost of deferring&lt;/h2&gt;
&lt;p&gt;The reason this is worth arguing about now rather than later is that lineage debt compounds in a way most technical debt does not. An undocumented dataset gets copied, joined, and derived from. Three quarters later the thing you cannot explain is not one table but a small ecosystem, and the reconstruction cost has gone from a week to a project nobody will fund.&lt;/p&gt;
&lt;p&gt;The systems that clear review are rarely the ones with the best models. They are the ones that can answer questions about themselves.&lt;/p&gt;</content:encoded><category>Data</category><category>Governance</category><category>Risk</category><author>Chris Taylor</author></item><item><title>Your cloud bill is a design review you keep skipping</title><link>https://chrison.ai/blog/your-cloud-bill-is-a-design-review/</link><guid isPermaLink="true">https://chrison.ai/blog/your-cloud-bill-is-a-design-review/</guid><description>Cost anomalies are almost never pricing problems. They are architecture decisions arriving late, in a format nobody on the engineering team reads.</description><pubDate>Mon, 09 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The monthly cloud bill lands with finance, gets converted into a variance figure, and reaches engineering as a request to reduce spend by some percentage. By then the information has been stripped of everything that made it actionable. What was a specific statement — &lt;em&gt;this retry loop calls a cross-region endpoint on every failure&lt;/em&gt; — arrives as a target.&lt;/p&gt;
&lt;p&gt;The bill is not a finance artifact that engineering must occasionally react to. It is the most complete record you have of how your architecture actually behaves under real load, and almost nobody reads it that way.&lt;/p&gt;
&lt;h2 id=&quot;what-the-bill-knows-that-your-diagrams-dont&quot;&gt;What the bill knows that your diagrams don’t&lt;/h2&gt;
&lt;p&gt;An architecture diagram records intent. The bill records what happened. Where they disagree, the bill is right.&lt;/p&gt;
&lt;p&gt;Three things show up there and essentially nowhere else:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;The paths you did not know were hot.&lt;/strong&gt; Egress charges between availability zones are the classic tell. Nobody designs a chatty cross-AZ call; it emerges from a service that got split, a client library defaulting to a regional endpoint, or a retry policy that fans out. The diagram shows one arrow. The bill shows how many times it was traversed.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;The idle you are paying to keep warm.&lt;/strong&gt; Non-production environments running at production shape, over-provisioned baselines sized for a launch that already happened, storage tiers holding data nobody has read in a year. None of this fails, so nothing alerts.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Your real unit economics.&lt;/strong&gt; Cost per tenant, per transaction, per inference. Most teams cannot produce this number, which means they cannot tell whether growth improves their margin or erodes it — and that is a strategy question, not a housekeeping one.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;the-three-questions-that-recover-most-of-it&quot;&gt;The three questions that recover most of it&lt;/h2&gt;
&lt;p&gt;Before any tooling, the same three questions do most of the work:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Where does the data move, and how often?&lt;/strong&gt; Compute is visible and gets attention. Data movement is invisible in the diagram and frequently the largest line. Trace the ten most common request paths and count region and zone boundaries crossed.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is running that nobody asked for?&lt;/strong&gt; Not “unused resources” — that framing sends people hunting for orphaned volumes worth a rounding error. The question is which &lt;em&gt;deliberately provisioned&lt;/em&gt; things are sized for a condition that no longer holds.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What does one unit of the business cost to serve?&lt;/strong&gt; Pick the unit that matters — a customer, an order, a document processed — and get to a defensible number. Being roughly right here beats being precisely right about anything else on this list.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;“Every recurring cost is a design decision that is still being paid for.”&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;where-this-bites-hardest-with-ai-workloads&quot;&gt;Where this bites hardest with AI workloads&lt;/h2&gt;
&lt;p&gt;AI systems break the assumptions most cost governance was built on, in three ways.&lt;/p&gt;
&lt;p&gt;Cost moves with &lt;em&gt;usage&lt;/em&gt;, not with &lt;em&gt;deployment&lt;/em&gt;. A traditional service costs roughly the same whether it serves ten requests or ten thousand, because you provisioned it either way. A token-metered system does not. This is genuinely better — spend follows value — but it means an unbounded retry, a runaway agent loop, or a well-meaning batch job can multiply the bill overnight with no infrastructure change to point at.&lt;/p&gt;
&lt;p&gt;The expensive choice is usually invisible in the code. Whether a step uses the frontier model or a small one, whether you retrieve five chunks or fifty, whether the agent gets three tool-call turns or twenty — none of these look like cost decisions when written. They look like quality decisions. They are both, and the tradeoff is only legible if someone has put the numbers next to each other.&lt;/p&gt;
&lt;p&gt;Evaluation is a real and unbudgeted line item. Running a serious eval suite on every change costs money proportional to how seriously you take it. Teams that did not budget for this quietly stop running the suite, which is a governance failure that first appears as a cost decision.&lt;/p&gt;
&lt;h2 id=&quot;making-it-a-review-not-a-report&quot;&gt;Making it a review, not a report&lt;/h2&gt;
&lt;p&gt;The fix is structural and unglamorous: put the bill in front of the people who can change it, at a cadence where changing it is still cheap.&lt;/p&gt;
&lt;p&gt;Attribute cost to the team that causes it, not the account that hosts it. Tag enforcement is tedious and it is the precondition for everything else — unattributed spend belongs to nobody and therefore gets optimised by nobody.&lt;/p&gt;
&lt;p&gt;Give engineering the shape, not the total. A percentage target produces theatre. “This endpoint is now 40% of the service’s cost and its call volume tripled after the March release” produces a fix, usually within the week.&lt;/p&gt;
&lt;p&gt;Put unit cost in the same review as latency and error rate. If cost per transaction lives in a finance deck and p99 lives in an engineering dashboard, the tradeoff between them never gets made explicitly — it gets made accidentally, by whoever last tuned something.&lt;/p&gt;
&lt;p&gt;Set a cost budget at design time for anything metered by usage. Not a limit to enforce, a number to be wrong about early. A team that has estimated cost per request before building will notice a 10× surprise in week one rather than in the quarterly variance report.&lt;/p&gt;
&lt;p&gt;The goal is not a cheaper bill. It is a bill that nobody is surprised by — which, in practice, is the same thing arrived at from a more durable direction.&lt;/p&gt;</content:encoded><category>Cloud</category><category>Business</category><category>Strategy</category><author>Chris Taylor</author></item><item><title>The business case that survives second line</title><link>https://chrison.ai/blog/the-business-case-that-survives-second-line/</link><guid isPermaLink="true">https://chrison.ai/blog/the-business-case-that-survives-second-line/</guid><description>Most AI business cases are built on hours saved and die the moment somebody prices the controls. The number that matters is the one nobody put in the model.</description><pubDate>Wed, 11 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;The standard AI business case has three lines: a headcount-hours figure, an adoption curve, and a licence cost. It clears the investment committee comfortably. It then meets the first serious risk review and loses roughly forty per cent of its value in an afternoon, because the controls the system actually needs were never in the model.&lt;/p&gt;
&lt;p&gt;This is not a failure of optimism. It is a failure of scope.&lt;/p&gt;
&lt;h2 id=&quot;what-gets-left-out&quot;&gt;What gets left out&lt;/h2&gt;
&lt;p&gt;The build is the cheap part, and everyone knows it. What does not appear in the case is the run: the evaluation suite and the person who maintains it, the monitoring, the annual revalidation, the second-line hours consumed by review, the incident process, the retention and the storage that the retention implies.&lt;/p&gt;
&lt;p&gt;Individually none of these is large. Together they are frequently the majority of the five-year cost, and they arrive as a surprise because the innovation budget that funded the build has no line for any of them.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A business case that ends at go-live is not a business case. It is a construction estimate.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;the-tiering-shortcut&quot;&gt;The tiering shortcut&lt;/h2&gt;
&lt;p&gt;The reason this matters commercially rather than just procedurally is that control cost is not uniform — it scales with risk tier. A use case that can be honestly tiered low carries a fraction of the assurance overhead of one that cannot.&lt;/p&gt;
&lt;p&gt;Which means the single highest-leverage move in most business cases is not squeezing the licence cost. It is designing the use case so that it sits in a lower tier: keeping a human decision in the loop where the decision is consequential, narrowing scope so the failure mode is recoverable, choosing not to touch the data that drags the whole thing into a higher regime.&lt;/p&gt;
&lt;p&gt;That is an architecture decision with a price attached, and it is almost always made before anyone thinks to price it.&lt;/p&gt;
&lt;h2 id=&quot;writing-the-case-backwards&quot;&gt;Writing the case backwards&lt;/h2&gt;
&lt;p&gt;The version that survives is built in the opposite order. Start from the tier the use case will land in. Take the control set that tier requires as a given cost, not a negotiation. Add the run-rate for the whole life of the system, with a named owner and a budget line. Then see what value is left.&lt;/p&gt;
&lt;p&gt;Sometimes the answer is that the case does not work — and finding that out in a planning cycle is enormously cheaper than finding it out after eighteen months of build. More often the case still works, but the shape has changed: smaller scope, tighter boundary, a slower rollout that clears review rather than a fast one that stalls in it.&lt;/p&gt;
&lt;h2 id=&quot;the-number-to-lead-with&quot;&gt;The number to lead with&lt;/h2&gt;
&lt;p&gt;If you present one figure, make it total cost of ownership over five years including assurance, against benefit that has been discounted for adoption you can evidence. It is a less exciting number than the one on the first slide. It is also the only one that will still be true in a year, which is the entire point of putting it in front of people who have to fund it.&lt;/p&gt;</content:encoded><category>Business</category><category>Strategy</category><category>Talent</category><author>Chris Taylor</author></item><item><title>Retrieval is not a knowledge base</title><link>https://chrison.ai/blog/retrieval-is-not-a-knowledge-base/</link><guid isPermaLink="true">https://chrison.ai/blog/retrieval-is-not-a-knowledge-base/</guid><description>Teams ship retrieval as though it were search with better manners. It is a data product, and it fails in the ways data products fail — quietly, and mostly on freshness.</description><pubDate>Wed, 03 Dec 2025 00:00:00 GMT</pubDate><content:encoded>&lt;p&gt;Retrieval-augmented generation gets built by application teams and reasoned about as though it were search. Point it at a corpus, tune the chunking, ship it. The demo is excellent, because a demo asks questions the corpus answers well.&lt;/p&gt;
&lt;p&gt;What has actually been built is a data product with a language model on the front. It fails the way data products fail, and almost none of those failure modes look like a model problem.&lt;/p&gt;
&lt;h2 id=&quot;freshness-is-the-first-one&quot;&gt;Freshness is the first one&lt;/h2&gt;
&lt;p&gt;A search index that is a week stale is annoying. A retrieval system that is a week stale is confidently wrong, in fluent prose, with a citation. The generation layer removes every signal a user would normally have that the information is old — no result timestamps, no obvious gaps, no sense of how much was scanned.&lt;/p&gt;
&lt;p&gt;So the reindex cadence stops being an operational detail and becomes a correctness property. It belongs in the design, with an owner and an alert, next to the freshness guarantees you would put on any other data product.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The model does not know what it did not retrieve, and neither does the person reading the answer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;then-coverage&quot;&gt;Then coverage&lt;/h2&gt;
&lt;p&gt;The second failure is subtler. A system that retrieves nothing relevant does not usually say so. It answers from whatever it did retrieve, or from parametric memory, and the answer is often plausible enough to pass.&lt;/p&gt;
&lt;p&gt;This is why retrieval needs its own evaluation, separate from the end-to-end one. Measure retrieval quality directly — was the passage that contained the answer in the returned set — because an end-to-end score averages that failure away against the questions the corpus happens to cover well.&lt;/p&gt;
&lt;h2 id=&quot;permission-is-the-one-that-ends-careers&quot;&gt;Permission is the one that ends careers&lt;/h2&gt;
&lt;p&gt;Every retrieval system inherits the access assumptions of everything it indexes, including the mistakes. If the crawl could read it, the model can surface it, to anyone who asks a question that matches. Permission has to be evaluated at query time against the person asking, not resolved once when the index was built.&lt;/p&gt;
&lt;p&gt;That is a straightforward requirement and an expensive retrofit, which is the usual reason it is missing.&lt;/p&gt;
&lt;h2 id=&quot;treat-it-like-what-it-is&quot;&gt;Treat it like what it is&lt;/h2&gt;
&lt;p&gt;None of this is exotic. It is the standard discipline for anything that serves data to people: a named owner, freshness targets you monitor, coverage you measure, access enforced at read time, and a test suite that fails loudly when the corpus shifts underneath you.&lt;/p&gt;
&lt;p&gt;The teams that get retrieval right are rarely the ones with the best embedding model. They are the ones who noticed early that they had shipped a data platform, and staffed it accordingly.&lt;/p&gt;</content:encoded><category>Data</category><category>AI</category><category>Evaluation</category><author>Chris Taylor</author></item></channel></rss>