Mindset Our Focus Security Stories Get in touch
All stories
Banking · Europe · Training

A European bank trains its engineers
out of vibe coding

The challenge

Fast one day, messy the next.

Every developer had an assistant. Every developer had their own way of using it. The output ran quick and clean one day, then tangled and hard to review the next. Why would the same tool produce clean code on Monday and a mess by Thursday?

The answer sat in what nobody wrote down. A developer opens a chat window, describes the change in whatever words come to mind, corrects the model three or four times, and commits the result. The thinking that got them there stays in the session. What reaches the branch is an answer with its question deleted.

That holds up while the author is at their desk and still remembers. It holds up less well at review, where a reviewer can confirm that code runs and has no written target to check it against. It holds up less well the following month, when someone else opens the file. And in a bank it runs out entirely at audit, where the question is why the code was written this way, and the only person who ever knew has moved teams.

I stopped properly reading the generated code months ago. I just approve it. Nobody has ever pushed back on that. Developer · day one

Speed was never really the problem. Their developers were already fast. The trouble was that the speed belonged to individuals, arrived in different shapes from each of them, and left the organisation with work it could not verify at the rate it was being produced.

The brief was short: make the engineers genuinely faster and the code more reliable, with the tools already in the building. So we ran a two-day, hands-on training with the teams themselves, on their own repositories.

The method

It starts before the first prompt.

What we install is a loop your engineers run many times a day. The spec is the shared artifact inside it: the model builds against it, the reviewer checks against it, the auditor reads it months later. One thing has to exist before the loop turns for the first time.

SPECShared artifact
across the loop

Step 0

Write the constitution

Your coding standards, your security rules and your compliance requirements go into the workflow before anyone writes the first spec. Every task that follows inherits them by default, so an engineer never has to hold them in their head on a Thursday afternoon with a release pending.

Step 1

Write the intent as a spec

A short written target that a model and a reviewer read the same way. It is the thing the generated code will be judged against, so it is written before anything is generated.

Step 2

Clarify before generating

The assistant asks what is missing and waits, instead of filling the gap with a guess. Most of the rework in an AI-assisted change starts with a guess nobody noticed.

Step 3

Generate against the spec

Code written toward a stated target, judged against something written down. The same prompt, pointed at a document instead of at a memory.

Step 4

Validate against the spec

Checklists catch issues at the developer's desk, while the change is still cheap to fix. What the checklist contains comes from step zero, so it is your standards doing the checking.

Step 5

Add agents where they earn it

Multi-agent workflows for the tasks big enough to split, each with a scope it stays inside. Added where they pay for themselves, rather than everywhere at once.

Step 6

An engineer approves

Nothing merges on the model's say-so. The gate is part of the workflow, so it holds on the busy weeks too, which is the only week that matters.

Back to step zeroEvery pass through the loop teaches you something about your own rules. A checklist item that never once fires. A standard the model keeps reading the wrong way. A review comment that three different people have now written by hand. Each of those goes back into the constitution, so the next task starts from a better baseline than the last one did.

The training

Break the habit, then rebuild it.

Both days ran on the teams' own repositories, with the assistants they already had. The only thing added across the two days was one open-source spec toolkit, copied into a project on day two.

Day one

Let it break.

We let the cracks show. Teams worked the way they already worked, on code they already owned, until the failure modes surfaced on their own screens rather than in our slides.

  • The prompt that drifts. A long session that starts on target and ends somewhere else, with no line in it marking where the turn happened.
  • The file nobody can review with confidence. Two hundred generated lines that look plausible, where the reviewer's only option is to read every one of them.
  • The rework that lands next week. A change that passed, shipped, and came back because it answered a slightly different question from the one asked.

Each one traced back to the same missing thing: the target was never written down, so nothing could be compared to it.

Day two

Rebuild around the loop.

We put the loop in front of the same work. Teams ran it on their own code and produced the artifacts themselves, which is the part that makes a habit stick after everyone goes home.

  • Their own constitution. Teams wrote their coding, security and compliance rules into the workflow, in their words, for their stack.
  • Their first specs. Written against real tickets, then run through clarify and validate cycles until the generated change matched the target.
  • Review moved inside the loop. Engineers reviewed each other's work against the spec it was written from, rather than against their own reading of the diff.
  • A two-week rollout plan. Written on the day, around how these teams actually deliver, so the method has a route into normal work.

What changes for the team

The spec leaves the chat window.

A prompt is a private object. It lives in one person's session, in that person's shorthand, and it is gone when the tab closes. A spec is a document. It sits in the repository, in language the whole team reads, and anyone can pick it up.

Work that moves between people

That single change is the difference between one developer going faster and a team going faster. Work moves between people without a translation step. Someone away for a week leaves the target behind, not only the answer. Two engineers can split a feature in the morning and still be building the same thing by the afternoon, because the thing they are building exists in writing.

For most teams this is the largest single gain, and it is the one that never shows up in a demo. AI coding is usually sold as a private speed-up. A written spec turns it into shared work.

Who writes the first draft

Nothing about a spec requires an engineer to write it. It is a short statement of intent in plain language, which is already the thing a product owner produces every sprint. When the first draft arrives from the product side, the argument about what the team is building happens before anyone generates code, in a document both sides can edit.

Specs sized to a sprint slot into the iteration you already run, so the method sits inside your process instead of beside it. And because the constitution is where a team's rules live, it is also where you can state what you want counted: what makes a change done, what evidence it carries, which business outcome it was written to serve. Teams that go that far get their delivery measures as a by-product of how the work is written, which is a quieter and more honest number than one assembled at the end of a quarter.

What changes at the commit

Every change arrives with its own explanation.

Documentation ships with the change

The spec is written first and the code follows from it, so both land in the same commit. Changing behaviour means changing the spec and letting the code follow, which makes the document and the system move together by construction.

Documentation drift is what happens when the explanation is reconstructed afterwards by someone half-remembering a decision. Here the decision was the starting point, so there is nothing left to reconstruct and nothing to fall behind.

Review gets a target

A reviewer opening a merge request gets the diff and the spec it was written against, side by side, in the same commit. The question changes from "does this look right to me" to "does this do what it says it was meant to do", and the second question is one a reviewer can answer in minutes and defend afterwards.

It also gives review a place to disagree that is not the code. If the spec is wrong, that is the thing to argue about, and the argument happens over two paragraphs rather than two hundred lines.

What your team walks out with

One method, across the whole team.

A shared way of working
Private techniques out, one loop in. Work moves between people without a translation step.
Output a reviewer can check
Every diff arrives with the spec it was written against, so review is a comparison against a stated target.
Standards that travel
Your coding, security and compliance rules sit in the constitution and apply on every task.
Documentation that keeps up
The spec ships in the commit with the code, so the explanation stays attached to the change it explains.
A two-week rollout plan
Written on day two around how your teams actually work, so the habit outlives the training.
A constitution you own
Written by your engineers, in your repositories, and yours to keep improving after we leave.

Results

Faster teams, and code they can stand behind.

  • Shipping faster, working from a written spec instead of a prompt retyped from memory.
  • Reviewable by design. Generated work arrives with the target it was written against.
  • Documented by default. The spec travels in the commit, so the explanation ships with the change.
  • Nothing new to buy. Same assistants, same licences, same repositories.

Other governed AI work: a trust company's booking workflow and a public-tender compliance review.

Your engineers use AI. Do they all use it the same way?

Message us

Questions

What is spec-driven AI engineering?
A way of working where the engineer writes the intent as a short spec before the assistant generates anything. The assistant builds against that spec, a checklist validates against it, and a human approves the result. The spec is what makes AI-written code reviewable months later.
What is the difference between vibe coding and spec-driven development?
Vibe coding means prompting until the output looks right, with the intent living only in the developer's head. Spec-driven development writes that intent down first, so the assistant has a target to build against and the reviewer has the same target to check against. The code may look similar; what changes is whether anyone can verify it.
Is this a prompting course?
No. Prompting is one step inside the loop. The two days cover what surrounds it: turning vague requirements into structured specs, clarify-and-validate cycles that cut hallucinations and rework, encoding your standards into the SDLC, and placing human approval gates where they hold.
Does it work with the AI assistants we already use?
Yes. The method is tool-agnostic, and both days run on whatever your teams already have, in your own repositories. Buying anything new is not part of it.
Who should be in the room?
The engineers who write the code and the leads who review it, together. The loop changes what review looks like, so sending developers on their own builds only half the habit.
How long before a team is actually working this way?
The loop is in use on real code inside the two days, because both days run on your own repositories rather than on exercises. Teams then leave with a two-week rollout plan for moving it into normal delivery.
Can this run in a regulated environment?
That is where it started. This engagement ran with a European bank, on their own repositories, with their coding, security and compliance standards encoded into the workflow itself.
Do we have to change our CI pipeline or tooling?
No. The standards and checklists sit in the workflow your engineers already run. Teams that later want the checks enforced automatically can wire them into CI, but nothing in the two days depends on it.
Is this only for the developers?
No. A spec is a short statement of intent in plain language, which is the thing a product owner already writes every sprint. Teams that put the first draft on the product side get the argument about what they are building settled before any code is generated. The engineers then work from a target that the business already agreed to.
What happens to our documentation?
It ships in the same commit as the code, because the spec is written first and the code follows from it. Changing behaviour means changing the spec and letting the code follow, so the document and the system move together instead of drifting apart.
What is the constitution, and who writes it?
It is where your coding standards, security rules and compliance requirements live inside the workflow, so every task inherits them by default. Your engineers write it on day two, in their own words and for their own stack, and they keep improving it afterwards as the loop shows them which rules are working.