
Let AI Do the Hard Work. Use Determinism for Consistency.
Almost everyone who tells us AI is unreliable is describing the same afternoon. They asked a tool for a video, or an image, and got back something that was nearly right. So they asked again, slightly differently, and got something else that was nearly right in a different way. An hour later they had spent money, lost the one good version somewhere in the middle, and still did not have the thing they could picture in their head.
That is a real and miserable experience. It is also not what AI is.
AI is brilliant at logic. The unreliability people have in mind belongs to the generators, and nothing forces you to put one in your output.
The word has been stretched over two completely different kinds of tool. One of them writes code, follows rules, builds systems and runs them. The other takes a sentence and hands you a finished picture or a finished video, produced by a process neither you nor it can explain, which you can only accept or roll again.
- You describe it and hope
- No handle on any individual part of the output
- A small change means regenerating all of it
- Two runs of the same prompt are two different results
- Costs money every time, including the near misses
- You describe it and it writes you the tool
- Every part of the output is a value you can change
- A small change is an edit
- The same input always gives the same result
- Costs nothing per run once it exists
Both of those columns are AI. The difference is not how much of it you use. It is whether you leave a generator standing between your intention and the finished file.
What this looked like for us
Starting Lineup, our football app, ships a library of coaching drills, and every drill has a short animated video. They used to be flat diagrams: coloured tokens sliding around a green rectangle, like a tactics board that plays. Clear, and completely forgettable. Coaches share these in WhatsApp groups and post them to Instagram, and a tactics board does not stop a thumb.
So we rebuilt them in 3D. Figures in kit running on a proper stride cycle, a goal with a net the ball goes into, shadows, and a camera down on the pitch instead of hanging straight above it. Forty eight existing videos to redo, and everything new from here.
We could have fed each one to a video model. We did not, and it has nothing to do with trusting AI. It is that a coaching drill has to be right. It is a set of instructions a volunteer is going to run with twelve year olds on a Tuesday night. If a player drifts two yards the wrong way the coaching is wrong, and no amount of rerolling gives you a way to say "that run, two yards to the left, everything else exactly as it is."
The question worth asking about any AI tool
Can I change one thing in the output without changing everything else? If the answer is no, you are holding a generator, and you should only point it at work where nothing has to be exact.
So we had AI build the machine instead
Claude wrote essentially all of it over a few days. Not a prompt: a renderer, in three.js, with its own data format.
Players with timed moves, balls with timed passes, cones, on-screen labels, speech bubbles and a camera. One file, human readable, reviewable by someone who does not code.
It exposes one function: draw the frame for this exact instant, then stop. No animation loop, no timers, no randomness anywhere. Every frame is a pure function of time.
It screenshots the scene frame by frame, then the card design is laid over the top, so a 3D video and the old flat format are identical everywhere except the pitch itself.
A short low thump per kick, a flatter one for a keeper's hand. Nothing sourced, nothing licensed, nothing to go stale.
Every frame of every one of those videos is AI's work. The intelligence is all the way through it: the geometry, the motion model, the camera, the figures, the lighting. What is not in there is a generative model between the data and the pixels. AI built the tool, and the tool does the same thing every time.
That second step sounds like an implementation detail. It is the whole thing.
A frame rendered on its own is identical, pixel for pixel, to the same frame inside a full run. That is what makes the engine safe to keep changing.
Because of it, when we needed to change the renderer that forty eight approved videos depend on, we did not have to re-watch forty eight videos. We rendered a still from an old one, made the change, rendered it again and compared the checksums. Identical, or it does not ship. That check takes about a minute, and it is why this library can keep getting better instead of quietly freezing on the day it was signed off.
The camera is the part we would have had no idea how to write ourselves. It fits a shot around every player, the ball and the goal thirty times a second, holds the widest framing for half a second either side of any burst so nobody gets clipped at the frame edge, then smooths the path forwards and backwards so it leads the play rather than chasing it. That was a sentence of description and an afternoon of work.
Cost per render now: nothing. About four minutes of ordinary laptop CPU for a twenty second clip. No graphics card, no credits, no per clip fee, and the hundredth version costs exactly what the first one did.
Does the logic get things wrong? Constantly
This is the part that matters, and it is not the gotcha it looks like.
AI writing logic makes mistakes all day long. Ours made four worth telling you about. The difference is what happens next. A generator's mistake is a mystery you can only reroll. A logic mistake has a cause you can find, a name you can give it, and a fix that stays fixed.
Every one of those took minutes to diagnose, because we could read the cause. Every one is now impossible to reintroduce, because the fix is a check that runs on every build from here on. None of that is available to you when the output came out of a generator. There is nothing to read.
The one that is actually interesting
We had given Claude a hard rule: the ball never teleports, there is always a player on it. It took the rule seriously.
The drill has two teams either side of one goal, taking turns to head at the keeper. To get the ball from the back of the net to the next server without breaking our rule, it wrote a sequence where the beaten goalkeeper scrambles across his line, digs the ball out of the net, and clears it thirty yards to the opposition's next server. Every single repetition.
Technically flawless. Every constraint satisfied. Also something no goalkeeper on earth has ever done.
The failure mode to watch for
This is not hallucination. It is an invented behaviour that exists only to satisfy a rule you gave it, wearing the costume of the real thing. It was internally consistent, which is exactly what made it hard to see.
It took a coach about four seconds to spot. In a real session everybody has their own ball, there is a pile of them beside each group, and when you score you go and fetch your own out of the net on the way back to your queue.
The fix was to teach the renderer to draw more than one ball at a time, then rebuild the drill with eight balls for eight players and a pile on the grass beside each group. The scorer digs his own out of the net and rolls it back onto the pile, and the goalkeeper never leaves his line. It reads correctly now because it is correct, and it will still be correct in a year.
Note what we were able to do there. We did not describe the problem and hope. We changed the rule, and the output changed in exactly that way and in no other way.
How to apply this to your own work
Logic and generation are not the same product. Judging the first on your experience of the second is how people end up deciding AI cannot do something it is extremely good at.
A mood shot, a background, a bit of texture: generate it and enjoy it. We do, and we have written about how we make AI video that does not look fake. A document, a diagram, a price, an instruction: build the machine.
Same input, same output, every time. It costs almost nothing up front and it buys you the right to improve the machine for years without re-checking everything it has ever made.
Ours refuses to produce a file with a player moving faster than a human, a ball that jumps, or anyone standing still doing nothing. Those were all faults a person used to catch by watching. A failed build is cheaper and does not depend on anyone concentrating.
The pattern goes well beyond video. Quotes, reports, certificates, rotas, site plans, price lists, product images laid out to a template, anything your team rebuilds by hand every time a number changes. Ask AI for the finished artefact and you get a slot machine. Ask it to build you the thing that makes the artefact, and you get a tool that costs nothing to run, does the same thing every time, and can be corrected once instead of argued with forever.
More on how we work with this: AI integration, internal tools, the Starting Lineup build itself, or what our golf app taught us about putting AI into a real product. If you would rather just describe the problem to a human, tell us what you are stuck with.