Decoding DDD: A Three-Tiered Approach to Django Projects

Oct 17 1:20 PM EDT :calendar: to 2:05 pm

About This Talk


This talk is geared towards intermediate to advanced Django developers who want to improve the structure and maintainability of their projects.


Every project has its unique history and limitations. In this session, I will navigate you through three levels of implementing DDD in Django, from basic to advanced. You will understand how to apply DDD to your Django project strategically and tactically and learn how to balance the costs and benefits of each level.

Level 0: Ubiquitous Language and Bounded Contexts

We’ll begin with an easy-to-implement approach, focusing on strategic DDD patterns. Then, we’ll delve into creating Ubiquitous Language and discovering Bounded Contexts through Event Storming sessions - an engaging technique to visualize and define domains collaboratively.

Level 1: DDD tactical patterns

We’ll move on to tactical patterns like entity, aggregate, repository, and domain services. Here, you’ll understand how the standard usage of Django models may lead to a lack of integrity and how DDD patterns can provide business-level integrity.

Level 2: Advanced DDD

Finally, we’ll explore advanced DDD techniques. We’ll cover how to design a domain layer in pure Python independent of the framework and why this approach can lead to cleaner, more testable code.


By the end of this talk, you will have:

  1. A clear understanding of implementing DDD in Django projects at different levels based on your requirements.
  2. A solid grasp of the strategic and tactical patterns in DDD and how they can improve your Django project.
  3. Hands-on experience in creating Ubiquitous Language and discovering Bounded Contexts through Event Storming sessions.
  4. Knowledge of how to ensure business-level integrity in your project using DDD tactical patterns.
  5. Insights on how to write a domain layer in pure Python, independent of the framework, and how it can lead to cleaner, more testable code.


In this session, I will focus on linking theory with practical examples. Drawing from my experience refactoring a 5-year-old Django monolith, which continues to be actively developed by five different teams, I have many real-world examples to illustrate different approaches. These examples are particularly insightful as they are based on diverse DDD approaches tried in various parts of the project and incorporate feedback from developers and business experts.


    Photo of Pavel Sviridov

    Pavel Sviridov (he/his)

    Pavel Sviridov, the Head of Backend Development at TripleTen since 2019, brings over eight years of Python development experience, with a specialization in Django. His hands-on approach to Domain-Driven Design (DDD) in Django projects is bolstered by real-world experience and collaborative feedback. Known for his ability to make complex topics accessible, Pavel’s sessions blend theoretical knowledge with practical, real-world examples.