DEV Community

Saras Growth Space
Saras Growth Space

Posted on

LLD Domain Modeling: When NOT to Use Domain Modeling (Very Important Reality Check)

Up to now, domain modeling may feel like the answer to everything:

  • entities
  • aggregates
  • invariants
  • bounded contexts
  • state machines

But strong engineers also know something equally important:

not every problem deserves deep domain modeling.

And over-applying it is one of the most common beginner mistakes.


The Mistake: Over-Engineering Everything

Beginners often take a simple problem like:

“ToDo app”
Enter fullscreen mode Exit fullscreen mode

and design:

  • 12 entities
  • 5 aggregates
  • 3 bounded contexts
  • complex state machines

This creates:

  • unnecessary complexity
  • slower development
  • harder debugging
  • confusion instead of clarity

Key Principle: Complexity Must Be Earned

Strong engineers follow this rule:

You don’t start with domain modeling complexity. You arrive at it when the problem demands it.

If the domain is simple:

  • keep it simple

If the domain is complex:

  • model it deeply

When You SHOULD Use Deep Domain Modeling

Use it when:

1. Strong Business Rules Exist

Example:

No double booking
No duplicate payment
Strict inventory control
Enter fullscreen mode Exit fullscreen mode

If rules matter → model deeply.


2. State Changes Matter

Example:

  • ride lifecycle
  • order lifecycle
  • booking lifecycle

If lifecycle exists → state modeling is needed.


3. Concurrency Exists

Example:

  • multiple users booking same seat
  • multiple payments happening

If race conditions exist → aggregates matter.


4. Multiple Business Areas Interact

Example:

  • cart → payment → order → shipping

If workflows span domains → bounded contexts matter.


5. Failure Handling is Critical

Example:

  • payments can fail
  • retries matter
  • partial success exists

If failures matter → invariants matter deeply.


When You SHOULD NOT Over-Model

Avoid deep modeling when:

1. Simple CRUD Systems

Example:

  • admin panel
  • basic form submissions
  • static content systems

No need for:

  • aggregates
  • complex state machines

2. No Real Business Rules

If:

  • data is just stored and retrieved
  • no complex validation exists

Then:

domain modeling adds unnecessary overhead


3. No Lifecycle Complexity

If objects:

  • don’t evolve
  • don’t change state meaningfully

Then:

  • entities vs value objects distinction is minimal

4. No Concurrency Concerns

If:

  • single user usage
  • no race conditions

Then:

  • locking models are unnecessary

The Real Skill: Calibration

Strong engineers don’t ask:

“Can I apply domain modeling?”

Instead they ask:

“How much domain modeling does this problem actually need?”

That difference is crucial.


The Spectrum of Design Complexity

Think of system design as a spectrum:

Simple CRUD → Light structure → Full domain modeling → Distributed domain systems
Enter fullscreen mode Exit fullscreen mode

Not everything belongs at the far right.


Example Comparison

ToDo App

Good design:

  • Task entity
  • basic status
  • simple service

No need for:

  • aggregates
  • bounded contexts

BookMyShow

Needs:

  • aggregates
  • state machines
  • concurrency control
  • invariants

Because complexity is real.


The Hidden Danger: Fake Complexity

Sometimes engineers:

  • apply patterns just to “look advanced”
  • add abstractions early
  • over-split services
  • create unnecessary boundaries

This leads to:

systems that are harder to understand than the problem itself

That is worse than simple design.


Strong LLD Thinking

“Start simple. Increase structure only when complexity demands it.”


Weak LLD Thinking

“I must use all concepts everywhere to show good design.”


Real Engineering Insight

Good architecture is not about:

  • maximizing abstraction
  • maximizing patterns
  • maximizing separation

It is about:

matching design complexity to domain complexity.


Final Mental Model

Before applying domain modeling, always ask:

Is the complexity in the business, or am I creating it in the design?
Enter fullscreen mode Exit fullscreen mode

Because:

  • real complexity → must be modeled
  • artificial complexity → must be avoided

The Most Important Insight

Domain modeling is powerful, but not universal.

Its true purpose is:

to manage real-world business complexity, not to decorate simple systems with unnecessary structure.

And mastering LLD means knowing both:

  • when to model deeply
  • and when to keep things simple

Because the best design is not the most complex one.

It is the one that fits the problem exactly.

Top comments (0)