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.

Recorded metrics

17

Ripple sites surfaced in a single build

Instrumented

Measures
Affected call sites across two root causes, and how many builds were needed to see them all.
Collected by
Counted per build. Each root cause surfaced at every affected call site at once; none required a manual search.
Does not show
These were test-project call sites, not domain logic. The figure shows completeness of compiler reporting, not severity.
Sourcekemiller2002/time-entry-state-machine / effort-experiment/f-sharp-state/EXPERIMENT-REPORT.md at 73a63f1ac319 — G. Metricsprivate repository

Findings

What this refuted

Anomalies, failures and confounders

Limitations

Source artifacts