Speaker Notes

Opening Keynote by Eric Evans - DDD Europe 2026

Eric Evans explores how Domain-Driven Design principles can be adapted using LLM agents and statistical code analysis to build testable domain models of legacy codebases.

Domain-Driven Design Europe · 57:54 · YouTube ↗

Talk · solo speaker  Advanced · concepts and tool design

Highlights

4 clips · 9 min of 58 min
    • Samples code randomly across repositories to avoid developer confirmation bias.
    • Combines discrete pipeline tools invoked via scripts by an LLM agent.
    • Replaces brittle pre-LLM frequency analysis scripts with robust LLM capabilities.
    • Extracts raw executable code phrases rather than abstract words for better repeatability.
    • Verifies that extracted terms deterministically exist within the source code.
    • Tokenizes and filters cleaned words using targeted LLM prompts to isolate domain vocabulary.
    • Formulates empirical similarity predictions based on historical architectural context maps.
    • Expects anti-corruption layers to show high vocabulary similarity to both connected contexts.
    • Tests architectural assumptions against hard statistical metrics instead of relying solely on intuition.
    • Vibe coding hits hard limits, making rigorous domain models and boundaries necessary.
    • Future architectures will blend deterministic code with explicitly constrained stochastic LLMs.
    • Module and function boundaries serve as crucial attachment points for verification and safety.

Questions this video answers

10 · every answer cites the moment it was said
01 How can LLMs be applied to domain-driven design experiments? 2 sources · 10:43

Eric built an experimental pipeline using LLMs to look at code supposedly in a bounded context and extract its actually used language. This statistical approach helps overcome the brittleness of pre-LLM tools like stop-word lists and TF-IDF.

02 How does the domain language surveyor pipeline extract vocabulary? 2 sources · 13:30

The pipeline grabs random chunks of code, classifies them by domain, and uses an LLM to extract domain phrases. It then verifies terms against pure code, tokenizes them, and filters them with an LLM for relevance.

03 Why use random sampling instead of targeted code inspection? 2 sources · 17:01

Random sampling avoids human biases that lead us straight to where we think domain logic should be located. It ensures you find the domain logic wherever it actually resides in the codebase.

04 How do you prevent LLM hallucinations during vocabulary extraction? 2 sources · 19:13

The pipeline uses multiple verification steps with deterministic code to ensure every extracted term actually exists in the code sample. This prevents hallucinations from causing real problems downstream.

05 What similarity metrics are used to compare code vocabularies? 2 sources · 25:14

The system uses Jaccard similarity to measure overlap between term sets and document frequency to build term vectors. These metrics allow you to compare the consistency of vocabularies within and across repositories.

06 How can similarity score comparisons act as a system sanity check? 2 sources · 28:50

You can compare a codebase's similarity to itself versus its similarity to other systems to ensure valid relationships. If a system isn't more similar to parts of itself than to random external pieces, it indicates a major problem.

07 Can historical context maps be treated as testable hypotheses? 2 sources · 37:11

Yes, you can draw a context map based on a system's documented history and derive expected similarity scores for relationships. Comparing these predictions against actual empirical similarity scores provides hard evidence for or against your architectural assumptions.

08 How can a coding agent orchestrate the analysis workflow? 2 sources · 38:41

You can write an instruction file and build a skill so an agent like Claude Code can orchestrate the pipeline end-to-end. The agent handles loops like resampling when data is insufficient while keeping raw processing details out of its main context.

09 How do you balance token costs across different model tiers? 2 sources · 41:07

Expensive top-tier models like Opus are reserved for high-level orchestration, while cheaper models handle specific tasks. For example, classification can be done by Haiku and vocabulary extraction by Sonnet, minimizing overall token costs.

10 How do domain models change when incorporating statistical metrics? 2 sources · 27:47

Domain models do not have to be limited to traditional object-relation diagrams and can instead be statistical models of phenomena occurring in code. This allows you to capture actual usage patterns and characteristics through metrics like corpus definitions and cohort term frequencies.

Section-by-section summary

11 parts

Reflecting on a decade of community and disruption

Celebrating ten years of DDD Europe highlights the resilience of the community through global crises. The profession now faces another massive upheaval with the advent of artificial intelligence. Rather than yielding to paralysis, developers must adapt through practical utility.

Rejecting hype and doomerism through curiosity

Discussions around artificial intelligence are frequently plagued by extreme hype or doomerism. Predicting specific future outcomes is futile and paralyzing for practitioners. Cultivating curiosity and experimentation serves as a much better guide for navigating uncertainty.

Experimenting with LLMs for domain-driven design

Exploring how modern AI tools can assist with domain-driven design leads to practical experimentation. Previous pre-LLM attempts at extracting domain language from codebases were brittle and required excessive setup. Modern language models provide the right capabilities to solve this extraction problem reliably.

Building a multi-stage vocabulary extraction pipeline

Extracting domain terms involves random code sampling to avoid confirmation bias. The pipeline extracts code phrases, verifies them deterministically against the source, and uses LLMs to filter relevant domain vocabulary. This multi-step process ensures high repeatability across hundreds of samples.

Applying statistical similarity metrics to code vocabularies

Extracted vocabulary lists are compared using Jaccard similarity and document frequency vectors. These statistical models allow developers to measure consistency within a codebase and divergence between different repositories. Domain models do not need to be object-relations; statistical models offer powerful insights into code phenomena.

Treating historical context maps as testable hypotheses

Analyzing the complex history of the OpenMRS project allows the creation of an architectural context map. Developers can formulate empirical hypotheses about expected vocabulary similarities between core systems and anti-corruption layers. Testing these hypotheses provides concrete evidence for or against architectural assumptions.

Orchestrating analysis workflows with coding agents

A Claude Code skill orchestrates the entire multi-step surveying process autonomously across multiple repositories. Cost efficiency is maintained by routing tasks to appropriate model tiers, such as Opus for orchestration and Haiku for classification. The agent handles loops and retries while presenting a concise narrative report.

Validating architectural assumptions with empirical similarity scores

Empirical measurements show high domain prevalence in core modules and anti-corruption layers. Similarity scores confirm that integration layers closely match external standards while maintaining lower similarity to internal core code. This empirical approach replaces anecdotal guesswork with hard metrics.

Formalizing a statistical domain model for code analysis

The surveyor architecture is itself structured around a formal domain model containing corpora, samplers, classifiers, and cohorts. While the overall system relies on deterministic code and well-defined contracts, only specific components require LLMs. This separation enables agents to reason about the codebase using a shared, precise language.

Adapting domain-driven design for heterogeneous AI systems

Domain-driven design remains vital as vibe coding reaches its practical limits. Future systems will combine deterministic components and stochastic LLM behaviors explicitly defined by contracts. Bounded context boundaries become crucial attachment points for verification and cost control.

Embracing continuous learning as a professional adventure

Attempting to predict long-term technological plateaus or outcomes is entirely futile. Developers must accept that specialized skills will frequently become obsolete and require relearning. Treating this cycle of continuous learning as an adventure ensures resilience in a rapidly changing landscape.

0:00 / 57:54
k play/pause · f fullscreen · m mute
n next · p previous clip · t highlights/full
< > slower/faster · / search what was said
  • Domain-Driven Design8× · first 0:18

    An approach to software development focused on modeling software to match a domain.

  • Bounded Context4× · first 2:01

    A boundary within which a domain model applies and terms have specific meanings.

  • Mixture of Experts1× · first 9:16

    An alternative neural network architecture where different subnetworks handle different inputs.

  • TF-IDF1× · first 12:50

    A numerical statistic reflecting how important a word is to a document in a corpus.

  • Jaccard Similarity3× · first 25:14

    A metric used to gauge the similarity and diversity of sample sets.

  • Anti-Corruption Layer5× · first 36:00

    A translation layer between different subsystems to prevent conceptual pollution.