A probability grid of chain-of-thought, read through Boyd's OODA loop lens
adamsohn.com A probability grid of chain-of-thought, read through Boyd's OODA loop lens
Four reasoning runs drawn as rings, each arc a stretch of the model’s thinking, coloured by which phase of the loop it was in. Three of them finish and stop. The fourth is still turning.
During the Korean War, when both pilots saw each other, they merged head-on at a<br>closing speed near a thousand miles an hour. The pass was over in seconds. What<br>followed was a turning fight, each trying to end up behind the other. John Boyd,<br>an Air Force pilot who spent his career on those seconds, described what a pilot<br>does as four steps run over and over. Observe, orient, decide, act, then look<br>again, because the other aircraft moved during the decision. He argued that<br>the pilot who gets through that loop faster wins, even when his individual<br>decisions are the worse ones. Jeff Atwood in his blog, Coding Horror, took it from Roger Sessions and compressed it into a slogan. Speed of iteration beats<br>quality of iteration.
Two aircraft turning against each other. A small loss on each turn compounds into one the pilot cannot recover from.
Software took that slogan as sprint advice. Iterate faster, ship smaller, fail<br>early. That reading treats every cycle as a fresh start, and it misses what Boyd<br>was pointing at. His fight has no fresh starts. The speed a pilot burns in one<br>turn is still gone when the next turn begins, so a small disadvantage per cycle<br>compounds into an unrecoverable one. Software calls it technical debt. Every shortcut<br>one sprint takes slows every sprint after it, and slows them by more each time.<br>A reasoning model works the same way. It reads every token in front of it,<br>works out a probability for each token that could come next, picks one, and<br>adds it to what it reads on the next pass. That is the whole mechanism, and<br>nothing in it knows what a step is.<br>What comes out is natural language, and that language is Boyd's list. Here is one run,<br>in order. Okay, so I need to calculate the exact product of 2053896 and<br>30957123778 is observe. Alternatively, maybe use the calculator approach? But since I can't<br>use a calculator, I need to do it manually is orient. In the run that<br>came out wrong, floating an idea like that and then dropping it is the<br>commonest move the model makes, and not one of them produces any work. Alternatively, use the distributive property is decide, the same<br>word it just used to float an idea and drop it. Then comes the arithmetic,<br>which is act and the<br>only one of the four with no line to quote. Thirty passages of thinking<br>later, Wait, let me check the addition steps again. That looks<br>like a fifth step and it is not one. Checking the sum is observe again, and<br>the second time it points at what the model wrote rather than at the<br>problem it was handed.<br>Boyd's pilot has to look again because the other aircraft moved while he<br>decided. The model has to look again because it wrote something while it<br>decided, and what it wrote is now part of what it reads.<br>I ran thousands of<br>multiplication problems through these models, and had Claude Opus label the thinking text of individual runs segment by<br>expensive segment. The same patterns appear in models from different companies,<br>and in coding tasks. Every one of them reads the<br>problem back, chooses an approach, does the work, checks it, catches a mistake<br>and goes back.<br>No objective named those four phases, but that is not the same as nobody<br>selecting for them. Qwen3 was trained by reinforcement learning against thousands of query and verifier<br>pairs, and that reward arrives only when the final answer is exactly right. A<br>slip that survives to the end makes the answer wrong, and on a chain this long<br>some slip is close to certain, so no amount of care reaches that reward on its<br>own. Catching them does. That is what the training actually selects for. Both<br>it and Phi-4-reasoning, the second model on this page, were handed tokens, which put a wall around the reasoning<br>without saying anything about what goes inside it. And replications of that<br>training keep finding base models already writing "wait" and "let me verify"<br>before any of it ran, so it raised the weight on something that was there<br>rather than inventing it.<br>So the loop is a property of how these models were scored, not something in the<br>architecture. Wherever a task has one exact answer and a long way to reach it,<br>checking is the shortest route to that reward, and the loop follows. Where a<br>wrong step is survivable, nothing selects for the habit and there should be no<br>loop to find. Long multiplication sits at the first end of that range, which is<br>why the traces here are so legible, and it is also the caveat on everything<br>that follows.
How Claude Haiku, Opus and Sonnet each spend their thinking across nine kinds of reasoning move. The proportions do not agree.
Normally a model would call a tool. Doing the multiplication by reasoning instead...