01 / 11 Title
navigate · O overview · F fullscreen · G go to
DDD Real Build

Domain-Driven Design — Real Build

A real proposal, real issues, and what it means for agentic teams.

Mir Mursalin Ankur
Lead Software Engineer @ Nerddevs Ltd
Northwind is gone. Bengal Lens is a real editorial platform built for a news media house client — modeled with the patterns from Intro + Deep Dive, and built by handing each bounded context to its own AI agent.
01 · The Proposal

I Got a Proposal. DDD Wasn't Part of It.

A news media house needed articles to move through a real newsroom workflow — drafted, reviewed, fact-checked, approved, published, sometimes corrected — alongside image handling, search, and a public site that renders it all to readers. The existing codebase was organized by technical concern: a folder for articles, a folder for auth, a folder for media.

The call I had to make
Nobody said "use Domain-Driven Design." That decision was mine.
02 · Decision

Reading for Where Language and Lifecycle Diverge

ContextOwnsCore model
IdentityUsers, auth, 2FA, RBACUser, Credentials, Session
Editorial (core)draft→review→approve→publish→correctArticle, WorkflowState, Version
MediaUpload, processing, storageMediaAsset, ImageVariant
Content DiscoverySearch, sitemapsSearchIndex (read model only)
Public DeliveryRendering, locale, SEOnone — stateless consumer

Rejected merges: Identity↛Editorial, Media↛Editorial, Discovery↛Editorial, Public Delivery↛Discovery — each kept apart for a stated reason, not by default.

03 · Decision

What Actually Earns Its Cost Here

04 · Decision

If the Domain Splits Cleanly, Can the Build Split Too?

Five independent contexts, modeled separately — the next question: are they independent enough to be built separately too, by different workers, without getting in each other's way?

The decision
Hand each piece to an AI agent starting completely fresh, no memory of a previous piece's decisions. Eight pieces of work on one branch: foundation → Identity → Editorial → Media → Discovery → public site → admin tool → integration.
05 · Framework

A Framework, Not Just an Anecdote

The rest of this deck is the evidence for why each rule earned its place.

06 · The Count

Six, Not Three

#IssueShape
1A required setup file couldn't be created — a permission restrictionEnvironment gap
2Editorial reported all checks passing; an independent look found real errorsFalse-green
3The first fix for #2 fixed one tool and broke anotherFix introduced a new mismatch
4A maintenance task ran into two pre-existing gaps from the still-in-progress buildCross-task drift
5A test still encoded an old design (fixed role list) after the schema moved to free-form rolesDesign drift
6Two pieces of work disagreed on where transition rules should liveOwnership drift
07 · Resolution

Actual vs. Standing Practice

IssueHow it was handledHow it should always be handled
1 — blocked fileFlagged, asked for it outside the restrictionNever bypass a deliberate permission boundary
2 — false-greenIndependent tool caught it before the next piece beganNever advance on a single "passed" report
3 — fix broke a toolRe-checked everything, fixed the new breakRe-run every check after any shared-config fix
4 — cross-task driftChecked history file-by-file before fixing anythingAttribute before fixing — always
5 — stale testRecognized the test, not the schema, was outdatedAsk "which side is actually stale?" first
6 — ownership driftChecked against the written architecture docOnly works if the decision was written down
08 · Applied

Proposal → Decision → Build → Verification

Read the proposal for where language and lifecycle diverged, not where old folders happened to be. Picked patterns for what they cost versus what they protect. Wrote the architecture decision down before any code existed. Split the build to match the contexts, handed each to a fresh AI agent.

Never trusted a single "passed" report — every piece got an independent look before the next began. Resolved disagreements by checking who caused what, or what was actually written down — never by guessing.

09 · Looking Forward

Three Things I'd Make Standing Process

The honest ending
None of these three are DDD patterns. They're process discipline sitting on top of a structure that was already sound.
10 · Wrap-Up

Take It Back to Your Own Workflow

Remember
Simple CRUD apps, short-lived projects, no sustained access to people who understand the domain — none of this, human or agentic, pays for itself there.
Sources: Bengal Lens (built for a news media house client) · ByteByteGo · Nikki Siapno, Level Up Coding · ↗ Read the blog · ← Back to Deep Dive · ← Back to Intro

All slides — click to jump