ADOPTING DOMAIN DRIVEN DESIGN AT SCALE
Combating Near Enemies
Andrew Harmel-Law Gayathri Thiyagarajan
ADOPTING DOMAIN DRIVEN DESIGN AT SCALE Combating Near Enemies - - PowerPoint PPT Presentation
ADOPTING DOMAIN DRIVEN DESIGN AT SCALE Combating Near Enemies Andrew Harmel-Law Gayathri Thiyagarajan ANDREW HARMEL-LAW Tech Principal at ThoughtWorks GAYATHRI THIYAGARAJAN Engineering Lead at Expedia Group Near
Andrew Harmel-Law Gayathri Thiyagarajan
Tech Principal at ThoughtWorks
Engineering Lead at Expedia Group
–https://www.wildmind.org/tag/near-enemy
“Near enemies are counterfeits of what we’re actually aiming for, and they're unhelpful because while the genuine article helps free us, the counterfeit doesn’t.”
Andrew Starts Andrew Finishes Gayathri Starts Gayathri Finishes
(spanning multiple organisations)
cut
No single domain expert had a detailed, end-to-end view No obvious "Big Picture" The cognitive load was much too high
Design has been done, but it hasn't been laid
it consumable. Make sure all your design artefacts are created with the audience in mind.
https://www.flickr.com/photos/chiropractic/6849052708
Similarities have been spotted, and abstractions made. But important differences have been lost in the process.
Capture the richness of the domain in the core entities. Don’t abstract too early.
A data-based view has been achieved at the expense of process / behaviour, Conflicts between teams have resulted.
Sharing models and code between teams is really difficult. Only share what you need to.
information
Hands on modellers aren't hands on. They aren't manipulating their models and using them to try and solve real-world problems.
Everyone manipulates the code. If certain team members can't, get them pairing.
Domain Driven Design is being done "to" - rather than "by" - teams. Modelling is done by the team who own their models. Grow DDD practices
Not having any10,000- foot view when working at scale.
Just because one structural "big idea" is wrong, doesn't mean you can get away with nothing. Relationships between models are always key.
Solving one problem at the expense of another.
Don't ignore the tensions between problems. Use DDD tools to make them, and their solutions, explicit.
Anaemic (rather than focused) abstraction. Don't jump to abstraction. Distill it from the detail
Abstract concepts mean little if they are not understood and implemented in code by the teams. Incrementally step towards the final model. And while incrementing, constantly validate and challenge your model.
Splitting into Bounded Contexts is good. But premature splits can lead to silos which are harder to recover from. Think team relationships when splitting up bounded contexts so that things don't get lost between the cracks.
Pseudo domain complexity. Anything that is not inherently complex in the domain should not be complex in the code.
Minimum Viable Product.
Don't constrain yourself by requirements and scope (MVP) when learning about the domain. Once learnt, implement MVP .
Legacy (ways of thinking). Obtain knowledge from the current state of the domain. Model the To-Be state.
CQRS (everywhere). CQRS is powerful when used in the right place. Use it only if suggested by your domain, and even then only sparingly.
especially for differences
lot
for everyone
have solutions hidden inside
how to split things up
(WHAT QUESTIONS CAN I ANSWER?)