Comparison
Ordo and conventional development
This comparison is built on what each approach makes visible to a machine — not on defect counts. We tried the defect-count comparison and it did not hold up, which is explained at the bottom of this page rather than omitted from it.
What each approach asks a human or an agent to infer
| Dimension | Conventional | Ordo |
|---|---|---|
| What state a record is in | Inferred by combining flags, nullable fields and status strings at each read site. | Named. The state is the thing stored, not a consequence of other things stored. |
| Which changes are possible | Any write the language permits. Illegal combinations are representable and must be defended against. | Only declared transitions. Data belonging to one state is constructible only in that state. |
| What an actor may do next | Usually re-derived in the interface, so the rule exists twice with nothing keeping the copies in step. | Computed from the same predicates the transitions enforce. There is one copy. |
| Finding the change surface | Exploration. Read until you are confident you have found every affected place. | Routing. Repository map to semantic area, semantic area to the authority that decides the rule. |
| When a rename changes meaning | Caught where the name appears. Silent where the value is a bare primitive passed positionally. | Distinct nominal types mean the wrong value cannot be supplied without a compile error. |
| What a green build proves | That it compiled. Independently measured not to establish merge-readiness. | One signal among several chosen because their blind spots differ. |
| Architectural conformance | Convention, review, and whoever remembers the rule. | A check that runs. Dependency direction is verified rather than agreed. |
| Requirement coverage | Believed, usually from test counts. | Traced criterion by criterion to the test that covers it. |
| Unknown outcomes at a boundary | Collapsed into success or failure, or thrown. | A distinct state, with reconciliation as a declared operation. |
Every row describes a property of the two approaches as built in our trials. Rows five, six, seven and eight are the ones with measurements behind them; the others are design descriptions you can verify by reading either codebase.
- 1Semantically complete state viewThe domain projects the smallest authoritative view in which no omitted fact could change legality, evidence requirements, coverage, capability applicability, obligations, policy, or transition outcome.
- 2EvidenceTyped evidence identifies what was observed, where it came from, when it was observed, and what it depends on.
- 3Scoped coverageEach contract-defined scope is Complete, Partial, or Unknown. Required non-Complete coverage refuses the decision before provider execution.
- 4Capabilities and obligationsHost-established semantic authority is supplied as capabilities; unresolved required work remains explicit as obligations.
- 5Legal choice spacePolicy, guards, state, evidence, coverage, capabilities, and obligations determine which outcomes are actually legal.
- 6Compute, bounded decide, refuse, or escalateDeterministic work stays deterministic. Judgment happens only inside the legal choice space. Missing prerequisites do not force an answer.
- 7Result, requested effects, and auditThe result carries the state identity and decision facts forward; external work is requested as data and observations are recorded for later verification.
The same change, applied both ways
The unit of measure changes: recording becomes exact to the minute, and six-minute rounding moves to a derived billing view. This change was applied to the same domain in several implementations, which is why it is the most informative comparison available.
Conventional C#
Eight caught, fourteen silent
The compiler reported 8 of ~22Call sites the C# compiler reported on the unit change — direct member accesses. Roughly
~14Call sites where a rename silently changed meaning more passed duration as a bare positional integer, so the
literal 10 silently went from meaning sixty minutes to meaning ten. Each had
to be found by hand and its intent re-read. Two ended up correct
2Values that survived the change correct by coincidence. The build was clean throughout.
Conventional JavaScript
Nothing caught, program ran
0Mistakes caught by the language mistakes were caught by the language across the whole rebuild, and 0 of ~22Call sites the JavaScript language reported on the same change call sites were named on the unit change. The rename produced no errors, no warnings and no crashes. 8, from one root causeJavaScript test failures that caught the change instead did fail — a real safety net, the only one available, and one that worked because those assertions compare numbers rather than reference the renamed property.
Ordo, C#
Every site, one build
Ripple surfaced all of themRipple sites found by the compiler rather than by searching, with exact file and line, and none
required a manual search. Separately and structurally:
DurationMinutes is a distinct type from TimeOfDay, so the
substitution that caused the silent sites cannot be written.
Ordo, F#
Seventeen at once
17Ripple sites surfaced in a single build across two root causes — each root cause showing every affected call site in a single build rather than one per cycle. 0Runtime domain defects runtime domain defects.
AI generating code, and AI working inside an engineering system
This is the distinction the methodology exists for, and it is not about model quality.
Give the agent context
Correctness depends on inference
The agent receives a goal and enough repository access to work out how to satisfy it. It must infer where the change belongs, what it may affect, which states are valid, and what would count as finished. Everything it gets right, it got right by reasoning correctly about an under-specified system — including the parts nobody wrote down.
Failure mode: locally plausible code in the wrong place.
Give the agent a system
Correctness depends on structure
The agent asks what is legal in the current state and chooses from the answer. The compiler enumerates what its change propagates to. The architecture check refuses what violates layering. An independent mechanism inspects what the tests cannot express.
Failure mode: still possible — but a smaller share of it now depends on inference.
- 1Work item and acceptance criteriaThe requested change starts with explicit intent and conditions that can be checked.
- 2Semantic mapThe repository points to the semantic area and authority that own the decision.
- 3Declared feature contextState, transitions, contracts, effects, interfaces, and tests for the feature are locally discoverable.
- 4Mechanical feedback firstCompiler, architecture, contract, and structural checks expose required propagation before broad search.
- 5Expand only when evidence says context is insufficientSearch is an escalation mechanism, not the default navigation strategy.
- 6Heterogeneous verificationBehavioural, integration, and independent review cover failure classes the earlier mechanisms cannot.
- 7Record evidence and unresolved obligationsThe work leaves behind what ran, what was established, what remains open, and what the evidence does not prove.
Ordo does not make a model reliable. In one paired trial both agents produced a change that passed every mechanical check on both architectures and did the wrong thing. Constraining what an agent can attempt is not the same as guaranteeing that what it attempts is right. The goal is to reduce how much of correctness rests on inference, not to eliminate inference.
Where this comparison does not hold
Three places, all from our own records, and each one rules out a claim we would otherwise like to make.
- Explicit types do not reduce ripple cost in general. The one experiment that controlled for this properly found no difference on field renames and no help from either type system on arithmetic business rules. It contradicts the blanket claim, and the hypothesis remains open rather than supported. The full result →
- Defect counts do not favour Ordo. Raw rework-driving mistakes came out 6 for the conventional C# rebuild and 2 for the conventional JavaScript one — the build with the least static checking scored best. The research record's own conclusion is that raw count "is not where the two styles differ." We therefore make no defect-count claim.
- Part of this is persona, not architecture. The state-structured trials deliberately reached for the strongest available patterns; the conventional rebuilds deliberately reached for ordinary ones. Their own reports say comparing them is partly a comparison of persona. The rows that survive that objection are the structural guarantees, because those hold regardless of how careful the author was.
What this leaves
A narrower claim than "Ordo produces better software," and a more useful one. Here it is with the numbers attached, because "they differ in which mechanism catches them" is not something a reader can check.
| Conventional C# | Conventional JavaScript | |
|---|---|---|
| Size | 1,645 lines | 1,540 lines |
| Rework-driving mistakes | 6 | 2 |
| Caught by compiler or language | 3 of 6 | 0 |
| Caught only by a person re-reading the diff | 3 of 6 | 1 of 2 |
| Sites named by the machine on one identical change | 8 of ~22 | 0 of ~22 |
| Sites a person had to find on that change | ~14 | All of them |
Mistake counts do not separate the two: 6 against 2, and the
build with less static checking scored better. The highlighted rows are where the
separation actually lives. Of the C# rebuild's six mistakes,
3 of 6 were invisible to every mechanism — swapped string arguments, a stale
revision inside a loop, a signature change hidden behind var — and were caught
only because someone re-read a diff before running it. None of those three is catchable by a
compiler even in principle. In the state-structured builds, the substitution
that produced the fourteen silent sites cannot be written down, because a duration and a time
are distinct types.
That is the claim: not fewer failures, but a smaller set of failures that depend on a person noticing. Under the conditions the industry now measures, where change volume outruns review capacity, that is the difference that decides whether the volume is absorbable. Both tables in full, with every figure's source →