Articles
Spec-Driven LLM Development at Scale: Why Architectural Patterns Are the Foundation
Working with LLMs on small, isolated tasks is straightforward. Working with them on a production platform — multiple repos, evolving domain, long-lived codebase — is a different problem. The differ...
Spec-Driven LLM Development at Scale: Why Architectural Patterns Are the Foundation
Spec-driven development is how you work effectively with LLMs at scale — and architectural patterns are what make it possible.
Guide: When the Machine Codes: A Series Introduction
A six-part argument for Java and Quarkus over Python as the language of choice when an LLM is doing most of the coding — and why the conventional case for Python doesn't transfer from human develop...
Part 1: When the Machine Codes: Against the Python Default in LLM-First Development
When the machine codes, Python's default advantages disappear — the case that the conventional choice of Python for LLM-first development rests on assumptions that only hold for human developers.
Part 2: When the Machine Codes: The LLM-First Development Advantage of Static Typing
The positive case: how static typing's properties at generation time, review time, and scale make statically typed languages better suited to a development model where the LLM is the primary implem...
Part 3: When the Machine Codes: From Python to Quarkus — A Migration Playbook
A case study in migrating from Python to Java/Quarkus under LLM-first development — what actually happened, what transferred, and what the process revealed about the argument.
Part 4: When the Machine Codes: Java’s Ecosystem Trajectory and a Call to the Industry
The strongest remaining objection to Java in LLM-first development is scientific computing — this article documents the trajectory on which it is being resolved and what the industry needs to do.
Part 5: When the Machine Codes: Parallel Design and Spec-Led Development at Scale — An Empirical Study
An empirical examination across five integrated casehub systems built Java-first from inception — API evolution, integration outcomes, and whether the model scales.
Part 6: When the Machine Codes: Synthesis and Recommendations
Five articles condensed into two sentences, and what follows from them for developers, architects, and the organisations building the next generation of AI-assisted software.
Companion: When the Machine Codes: Technical Companion
The mechanism behind the claims — supporting technical arguments for developers who want implementation detail rather than the top-line case made in the six main articles.
Four Things a Synchronous Blackboard Strategy Can't Do
Changing the LoopControl interface from a blocking contract to a reactive Uni unlocks four capabilities the classical synchronous blackboard control shell cannot support.
What I Learned Trying to Fix Claude’s Sycophancy Problem
What I learned rebuilding my CLAUDE.md from scratch — researching what the community had tried, understanding why it worked or didn't, and what actually changed Claude's behaviour.