Evidence
F# state-system trial — same requirements, same model, different language
The C# trial's requirements and state model reused verbatim and implemented in F#, holding the specification fixed so the comparison isolates language.
What this was
- Status
- Complete
- Repository
- kemiller2002/time-entry-state-machine
- Branch
- main
- Ending commit
- 73a63f1ac319
- Executed by
- Claude Code (Sonnet 5), same session as the C# trial, .NET SDK 10, F# 10.
Objective
Hold requirements and the semantic model constant and vary only the implementation language, to see what changes.
Hypothesis
With the model fixed, differences between the two implementations are attributable to language rather than to design.
Method
The requirement specification and state model were reused verbatim — a deliberate, recorded methodological choice — with no independent requirement recovery or modelling. Implementation, testing and an adversarial state-system test followed the same protocol as the C# trial.
Findings
- Zero runtime domain defects, and a rework ratio of 0%.
- Seventeen ripple locations across two root causes, and every one of them surfaced at every affected call site in a single build. None required a manual search.
- Sixty-three tests, four build attempts, two repair loops, both compiler-driven and both resolved on the first retry.
- With the specification already in hand, the domain reached a first clean build in five minutes and the whole trial took under seventeen.
What this refuted
- The dramatic timing difference from the C# trial is not a language result. This trial skipped requirement recovery and modelling entirely by reusing them, which is the single largest methodological difference between the two and shapes every timing metric.
Anomalies, failures and confounders
- Both failed builds were in the test project rather than the domain, each one root cause surfacing at many call sites at once.
- Token and cost figures were not exposed to the agent.
Limitations
- Requirements and model were reused rather than independently derived, so this trial measures implementation, not the full engineering task.
- One agent, one session, one domain. Two implementations are a pair, not a sample.
- Nothing here compares either language against an unconstrained implementation of the same model.