Released
AI Engineer · Keynote

Compiling Intent

Spec-based AI development - why the specification, not the code, is now the thing you actually build.

The talk in one sentence

In 2026 the artifact that matters most in your repo is not the code. It is the spec. The code is a build artifact - let the agent compile it. The specification is the program.

Downloads

Everything Nick referenced in the session, and a worked example you can read end-to-end.

Try it yourself - a Claude skill

Compiling intent starts with a conversation. This is the skill Nick uses to turn a raw customer meeting into the first artifact that matters: a testable SPEC.md. It reads the transcript, then interrogates you for everything the meeting left vague - the numbers behind “fast”, the threshold behind a business rule, what is explicitly out of scope - and only then writes the spec, in the exact seven-section shape used in this talk.

Slide-by-slide

Eighteen minutes is fast. The slides land their point in seconds; this is where the longer argument lives. Each card below is the slide stripped to its essentials, plus the “why this matters” that Nick would expand on in a 45-minute version of the talk.

Slide 01 · Title

Compiling Intent

Spec-based AI development - why the specification, not the code, is the thing you actually build.

The claim of the talk in a single line: in 2026 the artifact in your repo that carries the value is not the code. The code is what the loop generates. The thing you author, version, review and protect is the specification - intent plus guarantees, written precisely enough to be testable.

Why open this way: framing the spec as the source of truth, rather than as documentation, is the only way the rest of the talk lands. Every demo and every habit is downstream of that one reframe.
Slide 02 · The hook

We have been backing up the wrong file.

When you prompt an AI coding agent, what do you keep, and what do you throw away?

You keep the code. You commit it, review it, back it up. The prompt - the actual capture of what you wanted - scrolls out of the terminal and dies. That is backwards. We have been versioning the build artifact and discarding the source.

The diagnostic: look in your repo. If the only place the “why” of any function exists is a Slack thread from three months ago, or a commit message, or a person’s memory - that file is build artifact pretending to be source.
Slide 03 · The reframe

The spec is the source of truth. The code is a build artifact.

Two lines. Everything else in the talk is a consequence.

The compiler analogy is meant literally. You do not hand-edit the assembly that gcc emits and forget where it came from - you change the C and rebuild. Treat generated code the same way. If you are afraid to regenerate a file, that fear is a signal: there is intent living in the code that should be in the spec instead.

The practical test: for every file in your repo, ask - can I regenerate this from something more abstract? If yes, it’s build artifact. If no, it’s source, and it had better be reviewed and versioned with care.
Slide 04 · Definition

What spec-based development is

A disciplined loop: SPEC → PLAN → TASKS → BUILD.

SPEC captures intent plus guarantees, written to be testable. PLAN is the architecture and approach, human-approved. TASKS are atomic and independently checkable. BUILD generates code, tests and documentation together. The invariant: everything below SPEC is regenerable. The spec is the only thing a human edits by hand.

Why “regenerable” is the load-bearing word: the moment one of those downstream artifacts (a test, a doc, a config file) becomes precious and hand-edited, the loop is broken. Drift starts. The spec stops being the truth.
Slide 05 · The landscape

This is not a fringe idea anymore

Eight vendors, one direction.

GitHub Spec Kit, AWS Kiro, OpenSpec, BMAD-METHOD, Claude Code, Cursor rules, Tessl, Google Antigravity. The first numbers from teams using these tools are landing - roughly an order of magnitude fewer “regenerate from scratch” cycles, and forty-hour features collapsing toward eight when authored as a spec first.

Why the convergence matters: when eight independent vendors arrive at the same workflow inside a year, that is no longer a trend you can wait out. It is the new default.
Slide 06 · Mental model

One test to keep in your head

If you can regenerate it, it is a build artifact.

Build artifact - do not hand-edit: generated source code, unit and integration tests, API reference docs, scaffolding, wiring and config. Source - this is what you own: the specification itself, architecture decision records, acceptance criteria and the judgement calls behind them.

The diagnostic in practice: most code in most repositories today is build artifact pretending to be source. That mislabelling is the root of why “refactor” feels expensive and why nobody trusts the docs.
Slide 07 · Demo 1 · Symphony

Symphony, in one slide

A senior principal makes every meaningful decision. The engine does the mechanical work.

Symphony is the open-source delivery engine Released uses to ship client software. It is spec-governed (one WORKFLOW.md file holds config and the prompt template), isolated by issue (each GitHub issue gets a contained workspace), tests-and-docs-always (the engine refuses to call an issue done without them) and model-agnostic (runs against any OpenAI-compatible model through Codex CLI).

Get it yourself: github.com/releasedgroup/symphony · MIT licence, .NET, cross-platform release bundles. The WORKFLOW.md on this page is a real example you can copy.
Slide 08 · The loop

The six-stage loop

Brief → Shape → Build → Review → Release → Iterate.

The principal owns Brief (frame the problem as a living spec), Shape (sign off the architecture the agents propose) and Review (every material change). The engine owns Build, Release and Iterate. The loop never has a “final” build, only a current one - feedback flows from Iterate straight back into the spec at Brief.

Why ownership matters: the boundaries are deliberate. Brief, Shape and Review are decisions that need taste and accountability. Build, Release and Iterate are mechanics that benefit from being relentless and tireless.
Slide 09 · Live

One GitHub issue, end to end

Symphony polls GitHub, claims an issue, reads SPEC.md, generates code + tests + docs, opens a PR.

The live demo shows Symphony claim issue #214 (“add an idempotency key to POST /payments”), cut an isolated workspace, read SPEC.md rather than the existing code, generate the implementation, test file and documentation update in the same turn, run the tests, and open a pull request for human review. Zero human edits in the run shown.

The critical line in the trace: [spec] read SPEC.md (source of truth). The agent is not inferring intent from the existing code - it is treating the code as what the spec is about to rebuild.
Slide 10 · The PR payoff

The payoff is the pull request

Quality is structural, not cultural. You cannot forget what the system refuses to skip.

Every PR Symphony opens contains four things: Code implementing the change against the spec, Tests covering it, Docs updated in the same commit (the API reference is never the lie everyone stopped trusting), and a full Trail of decisions and reviews. Nobody has to remember to write the tests. A change without them is, by definition, unfinished.

This is the part engineering managers care about: the failure mode of most AI-assisted workflows is that the easy bits get faster while the hard bits (tests, docs, audit) get skipped. Spec-based development inverts that - the boring bits are the ones the engine guarantees.
Slide 11 · Change

Now the requirement changes

Mid-build, a new rule: payments over $10,000 need dual approval.

Ad hoc, that’s a frantic patch - new prompt, hope it touches every relevant file, discover next week it missed the docs and one test. Spec-based, it’s a two-line diff in SPEC.md. The engine then re-plans, generates the approval state machine, writes the “same submitter cannot approve” test, updates the OpenAPI spec and the /payments reference page - all consistent, because they all descend from the same edited spec.

  rules:
    - idempotent POST /payments
+   - payments > $10,000 require
+     dual approval before settle
  # plan, tasks, code, tests, docs → regenerated from here
The deeper claim: change becomes a diff against intent, not a hunt through code. That is what makes spec-based development survive contact with real projects, which never hold still.
Slide 12 · Demo 2

Compiling a 45-year-old idea

Microsoft BASIC for the 6502, recovered into a spec and regenerated on .NET.

Demo 1 was the sensible production version of spec-based development. Demo 2 is the one that makes the idea click. 1976. Bill Gates and Paul Allen. Microsoft BASIC for the 6502 - the chip in the PET, the Apple II, the VIC-20. Seven kilobytes of hand-written assembly, publicly available, still runs, and crucially: no spec.

Why this demo: if you can recover a spec from forty-five-year-old assembly nobody wants to read, regenerate it on a completely different runtime, verify the regeneration against the original, and then change the architecture with one line - you have proved that the spec is the durable object, not the code.
Slide 13 · The artifact

Exhibit A - Microsoft BASIC, 6502

Roughly 7 KB of dense, hand-optimised 6502 assembly. Public. Iconic. Unreadable today.

Load accumulator, set carry, subtract, store, jump-subroutine, branch on carry. This is the implementation that ran an entire generation of programmers and that almost no working developer in 2026 wants to read. We have an implementation, no spec, and we are going to run the loop backwards first.

What “run the loop backwards” means: the normal direction is spec → code. The reverse direction - code → spec - is how you bring an existing system, one without a spec, into a spec-based workflow. It is also how you make sense of legacy.
Slide 14 · Recover

Step 1 - lift a spec out of the assembly

Assembly in; specification out.

The agent is pointed at m6502.asm and asked, not to translate, but to explain. What does BASIC actually do? What comes back is not code. It is a short specification: expression evaluation, operators and precedence (^ beats * / beats + -, left-associative), 40-bit float as the numeric model, division by zero halts with the canonical error, parentheses override precedence. The agent decompiled the 6502 into intent.

Why this is the unlock: code-to-code translation gives you a different implementation. Code-to-spec gives you the durable thing - the description that survives any future implementation choice.
Slide 15 · Regenerate

Step 2 - regenerate it on .NET

From the recovered spec, the agent builds a clean BASIC interpreter in C#.

The loop now runs forward again, the normal direction: spec to code. The agent does not transliterate the 6502 - it goes back to the spec and writes an idiomatic .NET implementation, with tests derived from the spec’s own examples. Cross-platform, IEEE doubles, a real test suite, a debugger - none of that was specified; it is just what the modern target gives you for free.

The demotion: the 6502 assembly was never “the program”. It was one implementation of the program. The C# is another. Same spec, different target.
Slide 16 · Verify

How do we know it is right?

The original is still running. Make it the test oracle.

A cycle-accurate 6502 emulator runs the real 1976 assembly on the left. The generated C# interpreter runs the identical BASIC programs on the right. The outputs are diffed token by token. 847 out of 847 programs match. The spec is verified against 45-year-old ground truth.

Why this convinces the sceptical engineer: the agent could in principle write confident garbage. The differential-testing harness against a known-correct reference closes that hole - any mismatch is a spec bug, and there are zero mismatches.
Slide 17 · The twist

Step 3 - change one line of the spec

The interpreter works. Don’t touch the code. Watch the spec.

The single most important moment of the talk. The execution model section originally said: “The AST is walked and evaluated directly” - that is an interpreter. Delete that line, replace it with: “The AST is lowered to .NET IL and JIT-compiled to a managed assembly before execution.” That is a compiler.

  # Execution model
  A BASIC program is parsed into an AST.
- The AST is walked and evaluated directly.       # interpreter
+ The AST is lowered to .NET IL and JIT-compiled
+   to a managed assembly before execution.        # compiler
  # everything below SPEC regenerates from this line

One line deleted, two lines added. No parser written. No code generator. No IL emitter. No JIT bridge. The definition of what “execute” means was changed, and the loop was handed back to the agent.

Slide 18 · The payoff

Same spec. Now it is a compiler.

Roughly 112× faster than the 1976 original, and not a single code file was opened.

The agent regenerated the entire back end: a .NET IL emitter and a JIT path. 1976 BASIC compiling to managed code. Relative throughput across the benchmark suite, with the 6502 normalised to 1×: the .NET interpreter sits around 38×, the compiled version around 112×. What we wrote was not a compiler. It was a sentence. The compiler is what the loop produced when the sentence changed.

The point in one line: a spec edit produced a different class of program. That is the leverage spec-based development unlocks.
Slide 19 · What just happened

One spec outlived two implementations and an entire instruction set

Recovered. Verified. Re-targeted. Code was never precious.

Track one spec through the demo. Recovered - from 45-year-old assembly nobody wanted to read; code became spec. Verified - against the original running as a test oracle; 847 of 847 programs matched. Re-targeted - from interpreter to compiler with a one-line edit; spec became code, again. Two complete implementations, zero hand-edits. The spec carried all the value.

The general claim: that pattern is not a party trick. It is what software development looks like when you accept that the spec is the source.
Slide 20 · Field notes

Four habits that make this work

What separates spec-based development from a really long prompt with crossed fingers.

1. Write testable specs. If a line can’t become a check, it’s decoration. “Payments should be reliable” is a wish; “a retried POST with the same key settles exactly once, 50 concurrent, one ledger row” is testable. 2. Keep one living spec, in version control. Reviewed like code. The only door change comes through. 3. Humans own decisions; agents own mechanics. Architecture, trade-offs, “what done means” - still you. Scaffolding, wiring, tests - the agent. 4. Treat code as a build output. Afraid to regenerate? That fear is a metric.

Where it breaks if you skip them: habit 1 is the most common failure - specs written like marketing copy. Habit 2 is the most expensive - specs in Confluence, truth in the code, real answer in someone’s head.
Slide 21 · The role

What this makes the AI engineer

The job is moving one level up the stack - from writing implementation to authoring intent.

From the engineer who writes the code (value measured in lines shipped; output is implementation; change means rewriting) to the engineer who compiles intent (value measured in clarity of intent; output is a verified spec; change is an edit). The skill that appreciates is saying precisely what you want, knowing what you want, and knowing how you will know it worked. That has always been the hard part of engineering. Now it is the whole job.

Speaking to the worried person in the room: the job is not disappearing. The taste, judgement and accountability part of engineering gets more valuable, not less. The typing part is what gets automated.
Slide 22 · The honest part

Where this still bites

Spec-based development is a real improvement, not a free lunch.

Thin specs still fail - garbage in, garbage out; the bottleneck moved to how well you think. Non-determinism - two regenerations differ; pin versions, lock tests, treat the build as reproducible. Specs rot too - a spec can drift from reality just like a comment; review and prune it. Review still matters - the agent is fast and confident, including when wrong. Hot paths need hands - perf-critical or exotic code still wants a human; know which 5% to keep hand-written.

Why this slide exists: if you ship the talk without it, you sound like a vendor. Naming the failure modes is what makes the rest of the argument credible.
Slide 23 · In closing

Stop shipping code. Start shipping intent.

The spec is the program. Everything else compiles.

The code is a build artifact - let the agent compile it. The specification is the program. Write that with the precision you used to spend on the code, verify it against something real, and let the implementation be whatever the loop builds today.

Slide 24 · Thank you

Questions - and try it yourself

Symphony is open source. Pick a spec-first tool. Spec a small feature this week.

Three concrete next steps from the close of the talk. First, Symphony is MIT-licensed on GitHub - run the installer, point it at a repo, watch it work. Second, pick one of GitHub Spec Kit, AWS Kiro or OpenSpec and spec a small feature this week. Third, ask the question from earlier - could you delete the code and rebuild it from the spec? If the answer is no, you have just found something worth writing down.

Nick Beaugeard

Principal of Released, a Sydney-based senior software consultancy. Nick has spent the last year shipping client software almost exclusively through the spec-based loop described in this talk, and built Symphony as the engine that enforces it.

If you try spec-based development and it breaks in an interesting way, Nick wants to hear about it.

“Stop shipping code. Start shipping intent. The code is a build artifact - let the agent compile it. The specification is the program. Everything else compiles.”

- Compiling Intent, closing slide