DEV Community

Cover image for The Interview Question That Made Me Rethink My Architecture: Understanding Domain‑Driven Design
Timothy Leung
Timothy Leung

Posted on

The Interview Question That Made Me Rethink My Architecture: Understanding Domain‑Driven Design

Can you explain how you’ve used Domain‑Driven Design in your past projects?

That one simple question stopped me cold.

🌱 The Interview Question
It was my second interview — and also my last one for that position.
After the first round, the interviewer had mentioned that a technical test would be required.
So, when I got the invitation to the second interview, I spent almost a week preparing — mostly focusing on LINQ and Entity Framework in .NET Core.

My programming journey started with Visual Basic 6, then moved to VB.NET, and later to C# and Python.
In my C# years, I mostly worked with ADO.NET, writing raw SQL queries and stored procedures.
That’s why I wasn’t familiar with these newer methodologies — and I knew that was a weakness I had to fix.

So I spent a week catching up. It only took a couple of days to get the big picture (thanks to my previous experience), and the rest of the week went into polishing and preparing for the test.

🤔 What I Thought DDD Was
During the interview, I explained my architecture like this:

Repositories communicated with the database through Entity Framework
Services used these repositories to handle business logic
Controllers acted as endpoints, exchanging data with frontend or mobile apps
After I finished, the interviewer smiled and said:

“Tim, you’re smart, honestly.”

When the interview ended, I asked an AI what that architecture style was called.
The answer came back: Domain‑Driven Design.

That moment surprised me — I had been applying some parts of DDD all along, without even realizing it.

💡 What I Realized Afterward
At first, I thought DDD was just about extra layers: entities, repositories, services… like a neatly organized folder structure.

But I later realized DDD is not about structure — it’s about meaning.

It’s about how the structure represents the real business domain.
The key idea is the ubiquitous language — code that mirrors how the business actually talks about its work.

Instead of thinking:

“This function updates a table.”

DDD makes you think:

“This function completes an order.”

The difference sounds small, but it completely changes how you design, read, and discuss your code.

The interviewer hadn’t been testing my knowledge of frameworks — he’d been testing whether I could connect technical implementation with business intent.
And that is what Domain‑Driven Design is all about.

🧭 What DDD Really Means (in Simple Terms)
Here’s how I now understand DDD’s main ideas:

Domain – The real-world problem space you’re modeling (orders, payments, customers…).
Ubiquitous Language – A shared language between developers and domain experts.
Entities – Objects that have identity and lifecycle (like Order, Customer).
Value Objects – Define characteristics without identity (like Money, Address).
Aggregates – Groups of entities that change together as one unit.
Repositories – Abstract persistence, letting you save or load aggregates without leaking database logic.

🧱 Applying That Insight
Before that interview, my OrderService looked like this:
csharp

public void CompleteOrder(int orderId)
{
    var order = _repository.GetById(orderId);
    order.Status = "Completed";
    _repository.Update(order);
}
Enter fullscreen mode Exit fullscreen mode

It works — but it’s mainly data‑driven.

After learning about the domain perspective, I rewrote it to express intent, not CRUD actions:

csharp

public void CompleteOrder(Order order)
{
    order.MarkAsCompleted();
    _repository.Save(order);
}
Enter fullscreen mode Exit fullscreen mode

Now, the focus is on what the business is doing — not how the database changes.
That one small shift made my architecture feel cleaner, more readable, and more meaningful.

✍️ Key Takeaways
DDD isn’t about fancy patterns or layers — it’s about representing the business domain in code.
Even if you’re not applying full DDD, thinking in domain terms makes your code clearer and more maintainable.
The best architecture doesn’t just run — it communicates.

🔚 Closing Thoughts
That interview taught me something I didn’t expect —
sometimes, you already understand good architectural principles — you just haven’t learnt the name for them yet.

And that’s okay.
Understanding comes in layers — just like good architecture.

🧩 Thanks for reading! If this story resonated with you or helped clarify what DDD really means, consider leaving a comment — I’d love to hear your own “aha!” moments too.

🌐 Connect with Me
💻 GitHub: https://github.com/timleunghk
💼 LinkedIn: https://www.linkedin.com/in/timothy-leung-48261b8b/

⭐ If you enjoyed this article, feel free to follow me on dev.to or star my GitHub projects — I’m always exploring new ways to make code tell better stories.

Top comments (0)