Upgrade to Pro — share decks privately, control downloads, hide ads and more …

The strategies behind ddd – AdeoDevSummit 2022

The strategies behind ddd – AdeoDevSummit 2022

Have you ever experienced that a small change in the business triggers an apocalyptic change in the software code? These kinds of symptoms are often a symptom of software architecture and business misalignment.
In this talk we will see how to enable developers to express business concerns in the software architecture in order to prevent a wide range of problems. Issues that cause particularly harmful side-effects and can prevent an efficient refactoring policy.
This introduction to the strategic aspects of Domain Driven Design is not a purely technical presentation, and is therefore aimed at both developers and all stakeholders involved in software design.

Arnaud LEMAIRE

June 22, 2022
Tweet

More Decks by Arnaud LEMAIRE

Other Decks in Programming

Transcript

  1. Sprint Zero Java or C# ? Spring Boot or Quarkus

    ? Kafka or Redis ? Microservices or Monolith ? Kubernetes or Nomad ? Angular or React ?
  2. Look, at our spring boot application with Kafka deployed on

    a K8S Cluster They know nothing about the project’s business domain … Sprint Zero
  3. Java or C# ? Spring Boot or Quarkus ? Kafka

    or Redis ? Microservices or Monolith ? Kubernetes or Nomad ? Angular or React ? These issues address only the solution
  4. Spring Boot or Quarkus ? Kafka or Redis ? Microservices

    or Monolith ? Kubernetes or Nomad ? Angular or React ? And that's why we are seen as technical expert Java or C# ?
  5. solution problem What should we do ? How are we

    going to do it ? It is an important discussion to have But only after we've fi gured out 
 what to do
  6. « Give a child a hammer and everything they meets

    has to be pounded. » – Abraham Kaplan
  7. « We put the needs of the database before the

    needs of the users, which results in some pretty crappy experiences » – @WalterStephanie
  8. Domain Mapping Business Domain Classi fi cation Authoring & Publishing

    Customer Care Printing & Supply Chain Retail Store You need to acknowledge the fact that you have several domains
  9. Domain Mapping Business Domain Classi fi cation Authoring & Publishing

    Customer Care Printing & Supply Chain Retail Store Only one VP should be angry at a time
  10. Domain Mapping Business Domain Classi fi cation Authoring & Publishing

    Customer Care Printing & Supply Chain Retail Store These are neither Bounded Contexts nor Microservices
  11. Domain Mapping Business Domain Classi fi cation Authoring & Publishing

    Customer Care Printing & Supply Chain Retail Store These are your domains
  12. Domain Mapping Business Domain Classi fi cation Authoring & Publishing

    Customer Care Printing & Supply Chain Online Retail Store Payment processor Catalogue Invoicing Your domains contain domains
  13. Supporting Subdomain Generic Subdomain Core (sub)Domain Key differentiator Domains &

    Subdomains Business Domain Classi fi cation Essential to the 
 organization’s success Required for the 
 organization’s success Critical to the 
 organization’s success
  14. Domain Mapping Business Domain Classi fi cation Authoring Plateform Publishing

    & Printing Inventory Management Payment Processor Catalogue Invoicing Shipping Order Processing Proofreading
  15. Domains & Subdomains Business Domain Classi fi cation Authoring Plateform

    Inventory Management Shipping Payment Processor Catalogue Invoicing Order Processing Publishing & Printing Proofreading
  16. Domains & Subdomains Business Domain Classi fi cation Authoring Plateform

    Inventory Management Payment Processor Catalogue Invoicing Each business context is speci fi c Shipping Order Processing Publishing & Printing Proofreading
  17. Authoring Plateform Domains’ Connexion Reveal Business Relationships Inventory Management Shipping

    Catalogue Invoicing Order Processing Payment Processor It can highlight signi fi cant 
 sub-domain Publishing & Printing Proofreading
  18. From Problem to Solution Authoring Plateform Publishing & Printing Inventory

    Management Shipping Payment Processor Catalogue Invoicing Order Processing Proofreading
  19. From Problem to Solution Authoring Plateform Publishing & Printing Inventory

    Management Shipping Payment Processor Catalogue Invoicing Order Processing problem solution Payment processor Invoicing Order Processing Shipping Authoring Plateforme Inventory Management Catalogue Publishing Proofreading Proofreading Inventory E-commerce platform Authoring Publishing
  20. Domains & Subdomains Development Strategy Supporting Subdomain In-House development with

    
 external support if possible Generic Subdomain Outsourcing is an option Core (sub)Domain In-House development 
 with Your best teams Key differentiator
  21. Domains & Subdomains Development Strategy Supporting Subdomain Customized Off The

    Shelf Software 
 is an option Generic Subdomain Try to fi nd Off The Shelf solution Cost saving opportunities Core (sub)Domain Custom-made software High Cost & Quality Key differentiator
  22. From Problem to Solution Payment processor Invoicing Order Processing Shipping

    Authoring Plateforme Inventory Management Catalogue Publishing Proofreading Inventory E-commerce platform Authoring Publishing Authoring Plateform Publishing & Printing Inventory Management Shipping Payment Processor Catalogue Invoicing Order Processing Proofreading
  23. From Problem to Solution Inventory E-commerce platform Authoring Authoring Plateforme

    Publishing Catalogue Publishing Proofreading Authoring Plateform Publishing & Printing Inventory Management Shipping Payment Processor Catalogue Invoicing Order Processing Proofreading
  24. From Problem to Solution Business Domain & Architecture alignment Inventory

    E-commerce platform Authoring Authoring Plateforme Publishing Catalogue Publishing Proofreading These are your bounded contexts
  25. Inventory E-commerce platform Authoring Publishing Align your teams with your

    bounded context « Team assignments are the fi rst draft of the architecture » – Michael Nygard
  26. Authoring Publishing E-commerce Specific Architecture style You don’t need one

    architectural style Beware of the CRUD ES CQRS CRUD ? Stripe ShipMonk Shopify
  27. Stripe Still no microservices Bounded Context ≠ Deployment units ShipMonk

    Authoring Publishing E-commerce Shopify Deployment Unit
  28. Deployment Unit Stripe Still no microservices Bounded Context ≠ Deployment

    units ShipMonk Authoring Publishing E-commerce Shopify Deployment Unit
  29. Domains are not immutable Understanding is a never-ending process Stripe

    ShipMonk Authoring Publishing E-commerce Shopify Printing
  30. Semantic Boundaries Between BC meaning are different Authoring Publishing Book

    Chapter Chapter They are not the same book What happens if the author revises his book?
  31. Semantic Boundaries Between BC meaning are different Chapter This is

    why you must start by understand strategically your domain Author Book Reviews Release Catalogue
  32. Semantic Boundaries Between BC meaning are different Authoring Publishing Book

    Chapter Chapter Book Chapter Chapter Inside a Bounded Context, 
 Don’t 
 Repeat 
 Yourself Between Bounded Context, 
 Write 
 Everything 
 Twice
  33. Don’t cross them Between BC meaning are different Authoring Publishing

    Author Reviews Author Book Book Release Never create relationships between entities from two BC
  34. Don’t cross them Between BC meaning are different Authoring Publishing

    Book Book Release Author Author Reviews This is exactly the same
  35. Don’t cross them Between BC meaning are different Authoring Publishing

    Book Book Release Author Author Reviews API API
  36. Same for Events Between BC meaning are different Authoring Publishing

    This is exactly the same Event 
 Bus Book Book Release Author Author Reviews
  37. Same for Events Between BC meaning are different Authoring Publishing

    Event 
 Bus Book Book Release Author Author Reviews Translator Translator
  38. Transactional Boundaries Protect your integrity Authoring Book Chapter Chapter Chapter

    Statistics Inside your bounded Context 
 live 
 Entities They are grouped in Aggregates
  39. Transactional Boundaries Protect your integrity Book Chapter Chapter Chapter Statistics

    They are retrieved and persisted 
 as a whole Inside an aggregate, Entities 
 share the same lifecycle
  40. Transactional Boundaries Protect your integrity Book Chapter Chapter Chapter Statistics

    Who ensures the aggregate integrity All interactions are done through the Aggregate Root Write a new chapter
  41. Transactional Boundaries Protect your integrity Book Chapter Chapter Chapter Statistics

    But don’t put to much in it Author What happens if we delete the book ? They must share the same lifecycle
  42. Designing Boundaries Protect your domain Printing Team We need printing

    margin Book Chapter Chapter Chapter Release We need the colorimetric pro fi le Printing margin Colorimetric pro fi le API Publishing Team
  43. Designing Boundaries Protect your domain API We need printing margin

    Book Chapter Chapter Chapter Release We need the colorimetric pro fi le Printing margin Colorimetric pro fi le Domain Leakage Publishing Team Printing Team
  44. Designing Boundaries Protect your domain Publishing Team Printing Team Publishing

    API We need printing margin Book We need the colorimetric pro fi le Printing margin Colorimetric pro fi le Printing API We discovered the need 
 for an ACL
  45. CRUD don’t express behavior It blinds you from the business

    perspective UPDATE address Relocation Mistake correction
  46. CRUD don’t express behavior It blinds you from the business

    perspective Relocation Mistake correction
  47. Data oriented programming It obfuscates your code – Mathias Verraes

    $order->setStatus('paid'); $order->setPaidAmount(120); $order->setPaidCurrency('EUR'); $order->setCustomer($customer);
  48. Data oriented programming It obfuscates your code $money = new

    Money(120, new Currency(‘EUR')); $order->pay($customer, $money); – Mathias Verraes $customer->pay($order, $money);
  49. Data oriented programming It obfuscates your code – Mathias Verraes

    $customer->pay($order, $money); $order->setStatus('paid'); $order->setPaidAmount(120); $order->setPaidCurrency('EUR'); $order->setCustomer($customer);
  50. A A A not « just » a glossary Ubiquitous

    language Stakeholders & Team Alignement Dev Domain 
 Expert Dev
  51. Ubiquitous language Each BC has its own Authoring Publishing A

    A A A It is a common cause of miscommunication
  52. Know your users They might not be who you think

    they are Dev Domain 
 Expert Product 
 Owner Customer User
  53. Know your users They might not be who you think

    they are Dev Domain 
 Expert Product 
 Owner Customer User He has the last word regarding domain implementation
  54. Know your users They might not be who you think

    they are Dev Domain 
 Expert Product 
 Owner Customer User Prioritize development & formalize users’ feedback
  55. Know your users They might not be who you think

    they are Dev Domain 
 Expert Product 
 Owner Customer User Power of Life and Death over the project
  56. Know your users They might not be who you think

    they are Dev Domain 
 Expert Product 
 Owner Customer User Too often forgotten
  57. Know your users They might not be who you think

    they are Dev Domain 
 Expert Product 
 Owner Customer User Maybe you could spend a day per month working with them ?
  58. Know your users They might not be who you think

    they are Dev Domain 
 Expert Product 
 Owner Customer User They design the software speci fi cation
  59. Know your users They might not be who you think

    they are Dev Domain 
 Expert Product 
 Owner Customer User What he understood goes 
 into production
  60. “A loosely coupled software architecture and org structure to match”

    is a key predictor of: • Continuous Delivery Performance • Ability to scale organization and increase performance linearly This is what DDD is All About ! — Michael Plöd (@bitboss)