Kaizen-3C infinity mark Kaizen-3C

case study · framework modernization · Apr 19, 2026

Nancy NancyContext.cs · .NET Framework → .NET 8

14 → 0 compile errors measured by dotnet build (net8.0)

Three-arm ablation on a 148-LOC .NET Framework class. The plain ADR closed all 14 compile errors on its own. The framework-migration domain schema added zero compile-cleanness value but produced 15 explicit API contracts and 6 dependency decisions — value shifts from code to documents.

Repository
NancyFx/Nancy
License
MIT
Languages
C# (.NET Framework 4.5+) → C# (.NET 8)
Source LOC
148
Spend
~$0.09 total (three-arm comparison)

What the test is

Three-arm head-to-head on the same 148-LOC C# file, same LLM (gpt-4.1), same temperature=0. Each arm represents a different level of scaffolding.

Measurement: dotnet build on a minimal net8.0 csproj. Pass = 0 errors; fail = N errors.

Results

ArmScaffoldLOC (output)dotnet buildNotes
A — sym + --domain framework-migrationFull (ADR + API-contract schema)860 errors, 0 warningsPlan includes 15 API contracts, 6 dependency decisions
B — one-shot (no pipeline)None14414 errorsPreserved Nancy-internal type references that don’t resolve standalone
C — plain sym (no --domain)Medium (ADR only)920 errors, 0 warningsPlan: 2 identifiers, 4 decisions, 0 API contracts

What the ablation tells us

Source of valueErrors closed% of compile-cleanness win
ADR-as-contract alone (B → C)14100%
Framework-migration schema (C → A)00%

The ADR carries 100% of the compile-cleanness win. The domain schema’s value is in plan-document richness, not in output code quality.

Where the domain schema did add value

Plan ContentArm A (domain)Arm C (plain)
Key Identifiers (migration candidates)162
Architectural Decisions34
API Contracts (public surface)150
Dependency Upgrade Decisions60

The schema didn’t change whether the code compiled — both arms compiled cleanly. It produced a much richer plan document. For a compliance officer or program manager, that richer content is the artifact they want. For an engineer who just needs code that builds, plain mode is sufficient.

Honest takeaways

  1. The plain ADR is sufficient for compile-clean output on classic C# → .NET 8. No framework-migration schema required for the code-quality axis.
  2. The --domain framework-migration schema shifts value from code to documents. 15 API contracts + 6 dependency decisions are artifacts an auditor wants. They don’t make the code compile better.
  3. The one-shot baseline continues to fail “will it build?” 14 unresolved type references — the exact class of problem the ADR’s stub-missing-types decision avoids.

Caveats

← back to home