Chad Fowler produce cheap now keep the cost Every line you keep is a line you must maintain, understand and verify. Forever. Patch it, and it becomes legacy. Regenerate it, and it stays immutable (Phoenix Architecture): features nobody uses don’t survive the next build. The System Is the Asset · Evaluations Are the Real Codebase · “code is more clearly a liability” 5
it was Dynamic languages Static type systems “widely criticized as undisciplined” Extreme Programming Phase-gate development “From the outside, what we were doing looked reckless.” Continuous deployment Release management “demands far stricter engineering than quarterly releases ever did” AI generation Hand-written code “Generation can be flexible. … But evaluation must be rigid.” “When something looks like recklessness, look for where the discipline moved.” 8
It should compile to architecture.” spec regenerable components architecture implementations The analogy A compiler source code ISA (instruction set architecture), e.g. x86-64 Intel · AMD · the next chip Now spec architecture React · .NET · the next framework stays changes 9
is Why it must survive Specification What the system must do (intent) The new code is generated from it Evaluation How we know it works (tests, checks) Proves the regenerated code is correct Context boundary Where one part ends and another begins: contracts, event schemas Defines what can be deleted and regenerated on its own Provenance Why a decision was made The reasons don’t disappear with the code But “The implementation remembers. The organization forgets.” What it remembers is a shadow spec. “Specification, evaluation, context boundary, and provenance are the minimum set” · The Phoenix Primitives 10
destination. Regenerate, diff the behavior, and every difference is knowledge you never wrote down. Diff findings emails are lowercased retry twice on timeout VAT rounds half up Each one is a shadow spec. 11
Team B UI LoanController HoldController InvoiceController PaymentController Service LoanService MemberService BillingService FineService Data Member Loan Account Invoice Who decides where that line goes? 1 ·2technical · team chart? layers? 14
LoanController HoldController InvoiceController PaymentController LoanService MemberService BillingService FineService Member Loan Invoice Account · payer Account · member Who decides where that line goes? 3 · meaning ✓ 15
Context “A description of a boundary … within which a particular model is defined and applicable.” Eric Evans, Domain-Driven Design Reference (2015) Context boundary (Chad Fowler, 2026) ≈ Bounded context (Eric Evans, 2003) 17
is Intent Goals Non-goals Why this, why now, and for whom What becomes true What stays false, deliberately Constraints Acceptance criteria Open questions What must hold regardless of approach How we will know. Each one able to fail. What we don’t know yet, and who decides Notice what is absent: how. 18
What persists Where the domain ends up GitHub Spec Kit constitution.md: principles, governance Key Entities, data-model.md: per feature folder AWS Kiro Steering: product, tech, structure Per-feature specs; no glossary by default BMAD (closest) PRD with a real Glossary Inside the PRD, per initiative; no bounded contexts “Related decisions can be spread across multiple feature directories” GitHub Spec Kit docs, Spec persistence 23
Document” (Aug 2026) Payments One retry rule for a failed payment authorization Reliability Compliance One rule, three homes. A document makes you pick one. 24
should store the graph instead.” Organize knowledge by bounded context. In practice, from my SDD workshop: specs as a graph A graph tells you how things connect. A bounded context tells you where a word means one thing. # key-rotation.spec.md Relates to: revocation.spec.md Inherits: platform-constraints.spec.md Supersedes: key-rotation.v1.spec.md 25
level. specs/003-checkout/ Customer = the buyer specs/014-invoicing/ Customer = the billing account specs/027-support/ Customer = whoever opened the ticket $ rm -rf specs/ Run the Deletion Test on your specs. If you are afraid to delete your old specs, your specs are the new legacy. 26
knowledge Domain, subdomains, ubiquitous language glossary, domain.md, context map (usually missing) Slow Problem space The feature’s problem within the domain spec.md, PRD Life of the feature Solution space Bounded context, model, aggregate plan.md, ADR Medium Implementation Code tasks.md, code Disposable Today the slowest layer has no file. 27
↔ domain “…just moving the bottleneck” “domain-driven design is all about working on that bottleneck” Martin Fowler, with Eric Evans, DDD Europe 2026 28
some tactical patterns Ubiquitous language Bounded contexts Context map Subdomains Repository Factory Value Objects Domain Services Patterns regenerate. Boundaries must be decided. 29
What depends on what What the words mean What it actually does today dependency graph, git history glossary, event storming characterization tests, telemetry A spec written before these three is a guess about the system. 32
shared table PriceRules.cs Discounts.cs QuoteBuilder.cs Files that change together are one concept, or coupled by accident. Clusters are candidates. Naming them is human work. Co-change from git history (e.g. Ctxo, or plain git log) 34
status = 3 translates InvoiceOverdue The ACL is where legacy meaning gets written down for the first time. Anti-corruption layer: Eric Evans, Domain-Driven Design (2003) 35
sensors spec → plan → code routes move from legacy to new, one at a time characterization tests contract tests at the ACL architecture tests Ctxo blast radius & PR impact regenerate freely “push towards computational sensors, not inferential” Harness engineering for coding agent users by Birgitta Böckeler Strangler fig pattern by Martin Fowler 36
Model it: language, aggregates, specs, evals Keep it simple Buy it. Don’t spec it. Spend your scarce human attention where your domain is different. 37
Named Pinned Fear ACL, strangler spec and evals per context glossary, context map characterization tests knowledge only in code “The goal is to build systems where deletion is boring.” The Deletion Test 38
of it: specs, evaluations, decisions. Durable Give the domain a home. A ubiquitous language and a context map that outlive every feature spec. Day one Start with the Deletion Test. Find where knowledge lives only in code. Write it down, one bounded context at a time. 40