SlideShare a Scribd company logo
1 of 47
Guerrilla Domain Driven Design All the really important stuff you need to know about Domain Driven Design Jak Charlton www.thinkddd.com Google+ : jakcharlton@gmail.com Twitter : @jakcharlton
“passionate and opinionated”
Domain Driven Design is a methodology for evolving software that closely matches our business requirements
Domain Driven Design is a way of thinking, and a set of priorities
Domain : a sphere of Knowledge, Activity or Influence
For most software projects, the primary focus should be on the domain and domain knowledge
When we set out to write software we never know enough
Software is an exploration, you never know where you will end up
Development is iterative
Domain driven team
Get Domain Experts
Developers and domain experts must have a close relationship
Modelling
Model out loud
Brainstorm and experiment
The model is distilled knowledge
Look for the deep models
Don’t introduce deeper models the domain experts don’t see
The model is the backbone of a language used by all team members
The Ubiquitous Language
Domain experts should object to inadequate terms or structures
Developers should watch for ambiguity or inconsistency
When a term appears in multiple places, you need context
One team, one language
The term Ubiquitous Language implies there is only one model in play, but there may be many
Keep looking at things differently, keep questioning and challenging
Maintain an unbroken dialog with domain experts
Write it down, document continually
Documents should talk in terms of the ubiquitous language
Documents must work for their living, and stay current
A document should not try to do what the code already does well
If the code doesn’t already convey something well, perhaps it should be refactored
Use explanatory models , technical models aren’t always good at explaining things
The model and implementation are intrinsically linked
Expose your models, and avoid abstractions
Refactor when the design doesn’t express the team’s understanding of the domain
Refactor to deeper insight
Refactor when important concepts are implicit in the design and can be made explicit
Refactor when you can make the design more supple
Don’t aggressively refactor for the sake of it
Avoid technical virtuosity
Make it as simple as possible, but no simpler Albert Einstein
Complex is easy, any idiot can do complexSimple is a lot harder Jak Charlton
Don’t risk real business value for technical purity
Live in the domain
My objective today was to make you thinkI hope I have succeeded
Questions?

More Related Content

What's hot

Domain driven design in a nutshell
Domain driven design in a nutshellDomain driven design in a nutshell
Domain driven design in a nutshell
Toni Esteves
 
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Agile India
 

What's hot (20)

Code & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven DesignCode & Cannoli - Domain Driven Design
Code & Cannoli - Domain Driven Design
 
Introduction to DDD
Introduction to DDDIntroduction to DDD
Introduction to DDD
 
Introduction to Domain Driven Design
Introduction to Domain Driven DesignIntroduction to Domain Driven Design
Introduction to Domain Driven Design
 
Domain Driven Design Demonstrated
Domain Driven Design Demonstrated Domain Driven Design Demonstrated
Domain Driven Design Demonstrated
 
Domain Driven Design (DDD)
Domain Driven Design (DDD)Domain Driven Design (DDD)
Domain Driven Design (DDD)
 
Domain driven design
Domain driven designDomain driven design
Domain driven design
 
Domain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) DistilledDomain Driven Design (Ultra) Distilled
Domain Driven Design (Ultra) Distilled
 
DDD Basics: Bounded Contexts, Modelling - Kortrijk Edition
DDD Basics: Bounded Contexts, Modelling - Kortrijk EditionDDD Basics: Bounded Contexts, Modelling - Kortrijk Edition
DDD Basics: Bounded Contexts, Modelling - Kortrijk Edition
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
Domain driven design and model driven development
Domain driven design and model driven developmentDomain driven design and model driven development
Domain driven design and model driven development
 
Domain Driven Design Introduction
Domain Driven Design IntroductionDomain Driven Design Introduction
Domain Driven Design Introduction
 
Domain Driven Design Quickly
Domain Driven Design QuicklyDomain Driven Design Quickly
Domain Driven Design Quickly
 
Domain driven design in a nutshell
Domain driven design in a nutshellDomain driven design in a nutshell
Domain driven design in a nutshell
 
Domain-Driven Design: The "What" and the "Why"
Domain-Driven Design: The "What" and the "Why"Domain-Driven Design: The "What" and the "Why"
Domain-Driven Design: The "What" and the "Why"
 
Domain Driven Design
Domain Driven DesignDomain Driven Design
Domain Driven Design
 
Domain Driven Design in an Agile World
Domain Driven Design in an Agile WorldDomain Driven Design in an Agile World
Domain Driven Design in an Agile World
 
DDD Basics - Context mapping
DDD Basics - Context mappingDDD Basics - Context mapping
DDD Basics - Context mapping
 
Domain-Driven Design
Domain-Driven DesignDomain-Driven Design
Domain-Driven Design
 
DDD - What, why, how?
DDD - What, why, how?DDD - What, why, how?
DDD - What, why, how?
 
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
Strategic Domain-Driven Design by Nick Tune at #AgileIndia2019
 

Viewers also liked

Unleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-DayUnleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-Day
DotNetMarche
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
sergiopolo
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
André Borgonovo
 

Viewers also liked (17)

SOLID
SOLIDSOLID
SOLID
 
DDDesign Challenges
DDDesign ChallengesDDDesign Challenges
DDDesign Challenges
 
Domain Driven Design Up And Running
Domain Driven Design Up And RunningDomain Driven Design Up And Running
Domain Driven Design Up And Running
 
Event sourcing
Event sourcingEvent sourcing
Event sourcing
 
Event based modeling - eng
Event based modeling - engEvent based modeling - eng
Event based modeling - eng
 
Unleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-DayUnleash Your Domain With Greg Young @ DDD-Day
Unleash Your Domain With Greg Young @ DDD-Day
 
Domain Driven Design Development Spring Portfolio
Domain Driven Design Development Spring PortfolioDomain Driven Design Development Spring Portfolio
Domain Driven Design Development Spring Portfolio
 
DDD Dirty Harry style
DDD Dirty Harry styleDDD Dirty Harry style
DDD Dirty Harry style
 
Introducción a DDD
Introducción a DDDIntroducción a DDD
Introducción a DDD
 
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
Loosely Coupled Complexity - Unleash the power of your Domain Model with Comm...
 
Introdução ao Domain-Driven Design
Introdução ao Domain-Driven DesignIntrodução ao Domain-Driven Design
Introdução ao Domain-Driven Design
 
Model storming
Model stormingModel storming
Model storming
 
Projections explained
Projections explainedProjections explained
Projections explained
 
Greg Young on Architectural Innovation: Eventing, Event Sourcing
Greg Young on Architectural Innovation: Eventing, Event SourcingGreg Young on Architectural Innovation: Eventing, Event Sourcing
Greg Young on Architectural Innovation: Eventing, Event Sourcing
 
Domain Driven Design 101
Domain Driven Design 101Domain Driven Design 101
Domain Driven Design 101
 
Domain Driven Design using Laravel
Domain Driven Design using LaravelDomain Driven Design using Laravel
Domain Driven Design using Laravel
 
Socrates BE - Projections Explained
Socrates BE - Projections ExplainedSocrates BE - Projections Explained
Socrates BE - Projections Explained
 

Similar to Domain Driven Design - DDDSydney 2011

Agile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovAgile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin Nakov
Svetlin Nakov
 
Designers are from Venus - Presentationas Given to CD2
Designers are from Venus - Presentationas Given to CD2Designers are from Venus - Presentationas Given to CD2
Designers are from Venus - Presentationas Given to CD2
Chad Udell
 

Similar to Domain Driven Design - DDDSydney 2011 (20)

How to become a great developer
How to become a great developerHow to become a great developer
How to become a great developer
 
Up to speed in domain driven design
Up to speed in domain driven designUp to speed in domain driven design
Up to speed in domain driven design
 
DDD In Agile
DDD In Agile   DDD In Agile
DDD In Agile
 
The 360 Developer
The 360 DeveloperThe 360 Developer
The 360 Developer
 
Crafty communications - Dealing with the pesky people parts of communications
Crafty communications - Dealing with the pesky people parts of communicationsCrafty communications - Dealing with the pesky people parts of communications
Crafty communications - Dealing with the pesky people parts of communications
 
Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014Writing good C# code for good cloud applications - Draft Oct 20, 2014
Writing good C# code for good cloud applications - Draft Oct 20, 2014
 
Technical Writing Overview: WTD Nigeria
Technical Writing Overview: WTD NigeriaTechnical Writing Overview: WTD Nigeria
Technical Writing Overview: WTD Nigeria
 
Pragmatic programmer
Pragmatic programmerPragmatic programmer
Pragmatic programmer
 
Lecture 03
Lecture 03Lecture 03
Lecture 03
 
Importance Of Being Driven
Importance Of Being DrivenImportance Of Being Driven
Importance Of Being Driven
 
Why Can't We All Just Get Along? Improving Designer/Developer Collaboration
Why Can't We All Just Get Along? Improving Designer/Developer CollaborationWhy Can't We All Just Get Along? Improving Designer/Developer Collaboration
Why Can't We All Just Get Along? Improving Designer/Developer Collaboration
 
Wanna Be An Architect?
Wanna Be An  Architect?Wanna Be An  Architect?
Wanna Be An Architect?
 
Agile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin NakovAgile Methodologies And Extreme Programming - Svetlin Nakov
Agile Methodologies And Extreme Programming - Svetlin Nakov
 
Build your own Language - Why and How?
Build your own Language - Why and How?Build your own Language - Why and How?
Build your own Language - Why and How?
 
DDD
DDDDDD
DDD
 
Primeros paso con Copilot en Microsoft 365
Primeros paso con Copilot en Microsoft 365Primeros paso con Copilot en Microsoft 365
Primeros paso con Copilot en Microsoft 365
 
Designers are from Venus - Presentationas Given to CD2
Designers are from Venus - Presentationas Given to CD2Designers are from Venus - Presentationas Given to CD2
Designers are from Venus - Presentationas Given to CD2
 
Professional Persona
Professional PersonaProfessional Persona
Professional Persona
 
Time to Good DX
Time to Good DXTime to Good DX
Time to Good DX
 
What it takes to be a "Good" Developer?
What it takes to be a "Good" Developer?What it takes to be a "Good" Developer?
What it takes to be a "Good" Developer?
 

Recently uploaded

CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 

Recently uploaded (20)

08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
Boost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivityBoost PC performance: How more available memory can improve productivity
Boost PC performance: How more available memory can improve productivity
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdfUnderstanding Discord NSFW Servers A Guide for Responsible Users.pdf
Understanding Discord NSFW Servers A Guide for Responsible Users.pdf
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Strategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a FresherStrategies for Landing an Oracle DBA Job as a Fresher
Strategies for Landing an Oracle DBA Job as a Fresher
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 

Domain Driven Design - DDDSydney 2011

Editor's Notes

  1. DDD is a way of thinking, a set of priorities.DDD is a methodology for evolving software that closely matches our business domainsAlthough the book includes a fair bit of code, and a fair number of software patterns these are the least important bitIt is about thinking differentlyIt is about changing our priorities from the technical problem, to the business problemSoftware projects rarely fail due to technical constraints or decisions – they usually fail due to not understanding the problem
  2. DDD is a way of thinking, a set of priorities.DDD is a methodology for evolving software that closely matches our business domainsAlthough the book includes a fair bit of code, and a fair number of software patterns these are the least important bitIt is about thinking differentlyIt is about changing our priorities from the technical problem, to the business problemSoftware projects rarely fail due to technical constraints or decisions – they usually fail due to not understanding the problem
  3. DDD is a way of thinking, a set of priorities.DDD is a methodology for evolving software that closely matches our business domainsAlthough the book includes a fair bit of code, and a fair number of software patterns these are the least important bitIt is about thinking differentlyIt is about changing our priorities from the technical problem, to the business problemSoftware projects rarely fail due to technical constraints or decisions – they usually fail due to not understanding the problem
  4. This term has become widely abused and bastardisedIn DDD, a Domain is a “Sphere of Knowledge, Activity or Influence”In Amazon terms, Ordering is a Domain, Fulfillment is a Domain, Shipping is a Domain, Accounts is a DomainA Domain represents a tightly related area of business activity
  5. Too often we lose track of this fundamental conceptThe Domain represents an area of activity in our businessesSo that’s where our software project should be focusedWe get distracted by too many other things – we need to keep pulling back to the domain and the knowledge around the domain
  6. Software is a wicked problem.Until you actually finish a piece of software it is impossible to estimate how long it will take to completeOr put another way, it takes just as long to accurately estimate as it does to complete it(which never stopped project managers wanting an estimate)But, as we progress, we learn moreEstimates get more accurateWe understand the problem betterWe get closer to a solution
  7. Life is a journey, the destination sucks – but if you stop and look around once in a while, you might at least enjoy the ride.Software is an exploration into the unknown.Sure sometimes you have CRUD App 0003 to write – and you know pretty much what you’re gonna do – in that case don’t use DDDBut if you have a real business problem to solve, then it’s unlikely you know the way to get to the finished product yetAnd you probably don’t even know what the finished profuct looks likeScrum is keen on the concept of “Definition of Done” – well the bad news for scrum is, there really isn’t one – there are shades of DoneYou’ll know when you get there- till then enjoy the journey
  8. Whether you follow Agile, Scrum or Waterfall – Development is an iterative craftPerformance, Feedback, RevisionDo something, validate it, revise it – repeat
  9. Software is a team sportNot only a development team – but a domain driven teamA team that includes the domain experts, the users, the BAs and managers, the CTOIf you don’t play as a team, then you can certainly expect to fail as one
  10. Not just users, not BAs – Domain Experts really know
  11. It is essential in softwaredevelopemnt that you maintain a close relationship between the people developing the software and the expertsDomain experts have a deep understanding of the businessDevelopers have a deep understanding of computersThese are the people who must work closely together
  12. Brainstorm and experimentDDD really promotes visibility – speak to people, use whiteboards, use cards, post it notes, blu tack and big marker pensDraw things out, throw ideas around. Talk about terms that don’t make sense, or you don’t understand.Explain things that others don’t understandIf you can’t explain something properly, you don’t understand it either.
  13. The model is the latest version of all the knowledge the team has gathered about the problemIt is the essence of everything you know at any point in timeIt is probably never done, just like the Sistine chapel, but it should always be getting closer to the problem
  14. A deep model provides a lucid expression of the primary concernsof the domain experts and their most relevant knowledge while itsloughs off the superficial aspects of the domain
  15. The model is the foundation of DDDThe model is the representation of the working parts in your business processAnd the model forms the backbone of the language the team uses to communicate
  16. One language to rule them all, one language to bind them
  17. In DDD it is important that your code is a strong representation of your domainIf your code does not closely reflect your business domain, then you are dealing in abstractions.A primary purpose of DDD is to remove abstractions
  18. Keep refining your models – refactoring can take place away from the code as well as in the codeAs you refactor you will discover new places where the model needs refinement or deeper exploration
  19. A supple design is easier to change and adaptMake it flexible enough to change, but rigid enough to maintain integrityAvoid rigidityLoosely coupled, highly cohesive