A²D²Agentic Agile Driven Development

Essay · Where A²D² starts

Structure Against Uncertainty

Where A²D² starts — Agentic Agile Driven Development

This page presents, in English and as one argument, the theory of three essays originally written in Chinese. It follows their content only. Originals: Context 第一性原理 · 系统描述问题 · 用结构对抗不确定性

1. A machine we do not understand

Source: Context First Principles, introduction (Chinese) ↗

When you write code with an AI agent, you are not using a smarter autocomplete. You are using a machine whose operating principles differ from all traditional software. A traditional program is deterministic: given an input, its output is predictable, its state persists in memory, and it knows what it knows. An LLM is not like that.

Most developers start using this machine without understanding it. A project holds PRDs, architecture documents, deployment procedures and coding conventions — should they go into the prompt, become tools, or sit in files for the agent to look up? Usually the answer is intuition: stuff things in, and when it does not work, add more rules.

Before Newton, people knew that apples fall and that the moon does not; nobody knew the two were governed by the same law. LLM-driven development is in a similar place. We know prompts must be good, context must not be too long, outputs must be verified, several agents beat one. But these are scattered pieces of experience, not a unified theory: we do not know how they relate, which are fundamental and which derived, or when one of them will stop working. What is missing is not more experience but a framework that explains why the experience works and when it fails.

2. Four constraints

Source: Context First Principles, part 1 (Chinese) ↗

The framework starts from four core constraints of LLMs. L1–L3 are hard facts of the Transformer architecture. L0 is a mental model distilled from intuition and practice — not rigorously provable like the others, but with strong explanatory power.

L0 — Convergence and its cost

Before it receives any prompt, a trained LLM has a peculiar “omnipotence”: it can write poetry, act as a lawyer, debug Kubernetes network policies, or derive quantum field theory — but it is none of these. Its abilities coexist, undifferentiated, in its parameters. A prompt makes the model converge from many possible directions onto one: from a diffuse state that can do a bit of everything into a specific, focused intelligence.

Convergence has a cost. Not that the model’s abilities are weakened, but that finite context is occupied by role definitions and directional instructions; the more space a direction takes, the less is left for everything else. Role definitions are therefore real engineering operations, not decoration. Multi-agent setups often beat a single agent on complex tasks because they are context isolation plus task decomposition: several independent convergences, each optimizing one direction. And different task directions need isolated contexts, so that each convergence happens in a clean one.

L1 — The context window is finite

For project-specific knowledge — architecture decisions, business logic, team conventions, the current task — the context window is the model’s only source. Knowledge that is not in context does not exist for it. General knowledge lives in the weights; your project does not. And the window is finite: even million-token windows cannot hold a real project, and as context grows, the model gets worse at locating the relevant piece, like finding one box in a huge warehouse. The agent’s project knowledge is entirely determined by context, but context cannot hold everything. All project knowledge must be explicitly managed and carefully selected for loading.

L2 — Every call starts from zero

LLM inference is stateless. The “continuity” we feel is an illusion maintained by external systems that store conversation history and inject it into the next call. The model did not forget its earlier decision; it never made it — it only sees text describing that decision. Agent systems do have state — memory, tool state, RAG indexes, caches — but all of it is maintained outside the model. The model is stateless; the system is stateful. Combined with L1: the model neither knows what you did not tell it, nor remembers what it did. Anything that must survive across calls — reasons, progress, lessons — evaporates unless captured and persisted externally.

L3 — Output is probabilistic, not certain

An LLM produces the statistically most likely token sequence, not a logically correct conclusion. It can write completely wrong code fluently and confidently, without knowing it is wrong. Self-checks such as self-consistency or self-critique help, but they use the same probabilistic model to check its own output, so systematic biases go undetected. Final responsibility for verification must sit with external mechanisms — and its strength must not be uniform: renaming a variable and changing a database migration need very different checks.

3. From constraints to architecture

Source: Context First Principles, parts 2–4 and conclusion (Chinese) ↗

Constraints say what is limited, not what to do. A few bridge theorems take the step from constraint to solution. Each asks which kind of solution structure most naturally satisfies the constraints; engineering rarely has a single correct answer, and RAG, retrieval, function calling and other techniques can all work in particular cases.

The resulting architecture

Tensions

The constraints pull against each other, and these tensions can only be balanced, not removed. Sharpness vs capacity (L0 × L1): role and knowledge share the same finite space; a concise role definition with complete architecture documents usually beats an elaborate persona with partial project information, so concrete behavioral rules belong in the on-demand Conventions layer. Convergence is transient (L0 × L2): roles are not remembered, only rebuilt — so a role definition is a persisted, versioned engineering artifact. Convergence is not certainty (L0 × L3): convergence moves the centre of the distribution but not its variance; convergence raises the baseline, verification catches the tail.

Every layer exists not because it looks tidy but because a constraint is there that cannot be bypassed. Four constraints, one architecture: the constraints cannot be violated; the architecture can evolve. And they point away from the traditional workflow engine that commands agents. What the system really has to do is assemble the right context for each agent at each moment, and let the agent judge what to do.

4. The executor changed: from compensator to amplifier

Source: The System Description Problem, introduction (Chinese) ↗

The second line of the argument looks not at the machine’s internals but at the control structure of software development itself.

You ask an LLM to add permission checks to a new endpoint using the project’s existing authentication module. It returns clean, type-checked code — that ignores your module and implements fresh JWT validation the way its training data most often does. You add a rule: use the existing AuthService. Next time it uses AuthService, but calls it wrongly, because it does not know about its special session-timeout handling. Rules pile up, and it feels like whack-a-mole. That feeling is right: the problem is not too few rules, it is that the nature of the executor has changed.

A human developer is a compensator. An LLM is a conditional amplifier.

Humans fill incomplete documentation with experience, call someone to resolve ambiguity, ask the person who made an unrecorded decision. An LLM, given complete input, executes faster and more consistently than humans within its training distribution. Given input with gaps, it does not stop and say “not enough information” — it fills the gap with the most common statistical pattern and amplifies that biased signal at machine throughput, looking just as fluent and confident as normal output. The core danger is not that this happens but that it is invisible: you do not know where it filled in. When the executor turns from compensator into amplifier, input quality turns from “nice to have” into the dominant constraint.

5. Development as control

Source: The System Description Problem, parts 1–2 (Chinese) ↗

Cybernetics studies how a system pushes itself from its current state to a target state. Following Jin Guantao’s Cybernetics and Scientific Methodology: the possibility space is every state a thing could become next. An empty repository could become any system; every line of code, design decision and interface narrows the space. When only the target remains — a system that meets all requirements and runs correctly — development is done. Software development is narrowing the possibility space to the target state; that is control. Control capability is the ratio of the space before and after an intervention, and every tool has a ceiling: a compiler excludes type errors but cannot judge business logic; review catches semantic issues but depends on attention.

Four progressive control methods each address the ceiling of the previous one — and they map onto four stages of AI coding that many developers have lived through:

  1. Random control → vibe coding. Describe what you want, sample, retry. Without constraints the output is a sample from the training distribution. It works for small, independent tasks and collapses when the task depends on project context.
  2. Control with memory → rule files (CLAUDE.md, .cursorrules, AGENTS.md). Each rule excludes a known error. Two ceilings: at scale, rules dilute attention and get selectively ignored; more fundamentally, rules can only say “don’t do this”. Project-specific correct knowledge is not an error pattern. Pruning shrinks the space but cannot change it.
  3. Conjugate control → spec-driven development. Instead of working in the original space, transform an impossible problem B into a solvable problem A, solve it, and transform back: L A L′. (The classic example is Cao Chong weighing an elephant by weighing stones.) Here B is having the LLM “understand” your project’s intent directly; L is humans turning tacit intent, constraints and decisions into an explicit spec — a contract, not a rule; A is the LLM expanding that explicit structure into code, squarely within its training distribution; L′ is humans reviewing the result against intent and team taste. Specs sit where the two kinds of cognition meet: natural language is too loose for the LLM, code is too granular for human architectural intent; interfaces, state machines, constraint declarations and ADRs carry both semantic anchors and structural rigor. The spec is the one protocol language humans and LLMs truly share. Its ceiling: specs go stale, inconsistent or incomplete — and then L is distorted no matter how well A is done.
  4. Negative feedback → harness engineering. On the code side, decades of practice have closed the loop: compilers give second-level feedback, unit tests move detection to the function level, TDD puts expectations before implementation, CI wires every sensor into every commit. The earlier a deviation is found, the cheaper it is to fix. But the spec side has no sensors. Code is closed-loop; specs are open-loop, and open-loop systems drift. Harness engineering builds sensors for specs too.

The stages are not alternatives but layers; total control capability is their product. And the progression is driven not only by better tools but by the changed executor. Traditional development runs on three layers — explicit documents and rules, individual tacit experience, and team consensus and culture — and the last two catch what the first misses. An LLM has only the first. The first two stages are enough for a compensator, not for an amplifier: spec-driven development and harness engineering are structural requirements, not options.

Decomposition and self-containment

All four methods assume the system fits within the controller’s capability. Beyond that, the system must first be decomposed — itself a conjugate transform: split an uncontrollable whole into separately controllable parts, control each, and merge the results. The hard requirement is that every part is self-contained: within the consumer’s context limits, everything needed to process the unit must be present. A unit with correct logical boundaries but missing information is, to the consumer, damaged input; the transform is lossy and the output distorted.

6. Specs and harnesses

Source: The System Description Problem, part 3 (Chinese) ↗

Spec side: make the input signal reliable

No complex system’s full spec fits in one context, so the answer is decomposition — and decomposition is leverage: when each unit’s spec can be fully loaded, the LLM works reliably within each unit, and the sum of the units exceeds what any single context could hold. Three questions follow:

Harness side: make deviations detectable

A harness is negative feedback: LLM output is probabilistic, so deviations must be measured and corrected continuously, letting limited control accumulate into precise output. Two parameters matter. Sensing precision decides which deviations can be seen: deterministic sensors (compilers, type checks) are precise but cover only what can be formalized; probabilistic sensors (code review, LLM-as-judge) cover more, with noise. Feedback latency decides the cost of correction: the longer a deviation goes undetected, the more it is amplified, depended on and spread.

At the spec layer the loop is broken — a deviation introduced while writing a spec is found when the code is tested, a whole development cycle later. The detection gap has three levels of rising difficulty:

Completeness is an engineering problem with solutions; structural consistency has a direction; semantic consistency has no mature answer yet. New LLM-era sensors — description compilers, and design-document tests that walk user stories through a design to find process defects at the PRD stage — move feedback earlier, but mostly address the structural level. The spec-layer harness is the most important engineering and research direction of the next stage.

7. Structure determines precision

Source: Countering Uncertainty with Structure (Chinese) ↗

In 1927, Harold Black at Bell Labs faced cascaded vacuum-tube amplifiers for long-distance telephone lines, each with unstable gain. The intuitive fix was better tubes. Black changed the structure instead, feeding part of the output back to the input, and arrived at a theorem that shaped engineering ever since:

The overall precision of a closed-loop system depends mainly on the precision of its feedback channel, not of its forward channel.

A 10% fluctuation in forward gain can be pressed to 0.1% at the output, provided the feedback channel is precise enough. The LLM is the imprecise tube: probabilistic, invisibly deviating, and not something we can make precise within engineering control. Hence the meta-theorem: system precision is a function of structure; component precision is only one input. Feedback loops, redundant voting, formal constraints, isolation boundaries and online identification are all structure added along some dimension.

Its corollary for allocating effort: a less reliable LLM with a high-precision sensor network will tend to outperform a better LLM with crude detection. Model capability matters — forward gain sets what tasks are reachable — but once it is “enough”, returns diminish quickly, while improvements in feedback precision pay back almost linearly. Treat sensor infrastructure as a first-class investment, no lower in priority than prompt engineering, model selection or spec writing.

Six tools apply the meta-theorem across five dimensions:

Spec-driven development and harness engineering correspond to feedforward (information) and feedback (time) — the two highest-leverage dimensions. The others are not optional: redundancy for high-risk modules, cascades for long agent workflows, robust design for LLM-facing architecture, adaptation for long-running practice. Each dimension pays back independently, and the total is multiplicative. Most teams should start with feedback (sensor infrastructure) and feedforward (spec engineering), then add structure where gaps appear. LLM engineering is systems engineering, and the core capability of systems engineering is designing structure.

8. What remains human

Source: The System Description Problem, part 4 and conclusion (Chinese) ↗

Conjugate control places firm demands on both of its ends, and neither can be automated away.

L — writing is thinking. Turning tacit knowledge into a spec is not just recording what is already known. Writing the authentication interface, an engineer suddenly realizes: what happens when the session expires? I never thought about that. You find the gaps in your tacit knowledge by trying to say it. Outsourcing specs entirely to an LLM may yield a perfectly formatted document while losing the cognitive gain of writing it.

L′ — review needs depth. The quality of reviewing LLM output depends on how deeply a person understands the system, and that depth comes from continuous interaction — writing architecture, making decisions, debugging incidents. Reduce the human to clicking “approve” and depth erodes, and both ends of conjugate control weaken.

Communities of practice cannot be formalized. Team taste, the implicit standard of “good enough”, the shared “we don’t do it that way here” live in social relationships, not information, and cannot be turned into specs.

The core work of the developer shifts from “writing code” to “defining problems” and “examining solutions”. Writing code becomes an intermediate step.

9. The questions that remain

Condensed, the theory is a set of questions.

The underlying insight of cybernetics is one: when you cannot raise component precision, counter uncertainty with structure. The more dimensions of structure, the larger the product, and the more tolerant the system becomes of imprecise components.

Coming next

The next essay distinguishes conversation from task in how we communicate with LLMs — the distinction that leads to A²D²’s domain objects. Title to be announced.

The original essays

All three are by Neov (@neolf), written in Chinese. This page is an English presentation of their argument; for the full reasoning, read the originals.

The cybernetic framework is drawn, as in the originals, from Jin Guantao’s Cybernetics and Scientific Methodology (《控制论与科学方法论》), Harold Black’s negative-feedback amplifier, and Kalman’s optimal estimation.