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

Domain-Driven Transformation

Domain-Driven Transformation

Henning Schwentner

April 22, 2024
Tweet

More Decks by Henning Schwentner

Other Decks in Programming

Transcript

  1. salesperson [person] Monolease [software system] Central car leasing tool customer

    [external person] risk manager [person] closes leasing contracts with creates and calculates contracts in assesses risk of contracts in Alphorn Auto Leasing Inc. [enterprise] Context
  2. @hschwentner big ball of mud code with poorly expressed domain

    knowledge bad team organization Typical Diseases of Legacy Systems
  3. @hschwentner big ball of mud code with poorly expressed domain

    knowledge bad team organization Cures strategic transformation tactical transformation team-organizational transformation
  4. @hschwentner Domain-Driven Refactorings • Strategic Refactorings • Tac0cal Refactorings (Against

    Big Ball of Mud) Catalog: https://hschwentner.io/domain-driven-refactorings strategic transformation tactical transformation team-organizational transformation • Socio-Technical • Tac0cal refactorings (Against Model Anemia)
  5. @hschwentner Strategic Transformation 1. Step: Domain re-discovery 2. Step: Modeling

    the target architecture 3. Step: Aligning current with target architecture 4. Step: Do the move
  6. @hschwentner Strategic Transformation 1. Step: Domain re-discovery 2. Step: Modeling

    the target architecture 3. Step: Aligning current with target architecture 4. Step: Do the move
  7. customer tells wish for 1 salesperson signs to gives for

    contract 3 risk manager contract passes on to 4 contract votes checks calculates 5 6 7 calculates to 8 2 car credit rating installment car resale value contract
  8. May 6th-9th 2024 Vienna, Austria The Collaborative Modeling Unconference comocamp.org

    Event Storming User Story Mapping Event Modeling Impact Mapping Domain Storytelling Storystorming Context Mapping Example Mapping etc.
  9. customer tells wish for 1 salesperson signs to gives for

    contract 3 risk manager contract passes on to 4 contract votes checks calculates 5 6 7 calculates to 8 2 car credit rating installment car resale value contract sales risk assessment
  10. Monolease [software system] salesperson [person] Monolease [software system] Central car

    leasing tool customer [external person] risk manager [person] closes leasing contracts with creates and calculates contracts in assesses risk of contracts in Alphorn Auto Leasing Inc. [enterprise] Context again
  11. backend [container] database [container] frontend [container] salesperson [person] backend [container:

    EJB 2] risk manager [person] creates and calculates contracts in assesses risk of contracts in Monolease [software system] frontend [container: servlets, JSPs] database [container: IBM DB2] Containers
  12. Calculator [component] frontend [container] LeasingServlet [component: servlet] CONTRACTS [database table]

    PartnerServlet [component: servlet] ContractService [component] PartnerService [component] backend [container] database [container] Contract [component] Partner [component] PARTNERS [database table] Components
  13. Calculator [component] frontend [container] LeasingServlet [component: servlet] CONTRACTS [database table]

    PartnerServlet [component: servlet] ContractService [component] PartnerService [component] backend [container] database [container] Contract [component] Partner [component] PARTNERS [database table] Components
  14. ContractService signContract() voteContract() Code Contract getContractNumber() setSignatureDate() setCreditRa7ng() setVo7ngResult() Sales

    Risk Assessment ContractService signContract() voteContract() Contract getContractNumber() setSignatureDate() setCreditRa7ng() setVo7ngResult()
  15. ContractService signContract() Code Contract getContractNumber() setSignatureDate() Sales Risk Assessment ContractService

    voteContract() Contract getContractNumber() setCreditRating() setVotingResult()
  16. @hschwentner 1.2 Extract Specialized “Contract Service” 1.1 Extract Specialized “Contract”

    1 Extract Context “Sales” Improvement Backlog 2 Extract Context “Risk assessment” 2.1 Extract Specialized “Contract Service” 2.1 Extract Specialized “Contract”
  17. @hschwentner Improvement Backlog Planning Transformation Tactical Refactoring 1.1 Strategic Refactoring

    1 User Story A Product Backlog User Story E User Story B User Story C User Story D Tactical Refactoring 1.2 Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog
  18. @hschwentner Improvement Backlog Planning Transformation User Story A Product Backlog

    User Story E User Story B User Story C User Story D Sprint Backlog Tactical Refactoring 1.1 Strategic Refactoring 1 Tactical Refactoring 1.2 Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2
  19. @hschwentner Improvement Backlog Planning Transformation Tactical Refactoring 1.1 Strategic Refactoring

    1 User Story A Product Backlog User Story E User Story B User Story C User Story D Tactical Refactoring 1.2 Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog
  20. @hschwentner Improvement Backlog Planning Transformation Strategic Refactoring 1 Product Backlog

    User Story E User Story C User Story D Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog
  21. @hschwentner Improvement Backlog Planning Transformation Strategic Refactoring 1 Product Backlog

    User Story E User Story C User Story D Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog User Story F User Story G Tactical Refactoring 1.3
  22. @hschwentner Improvement Backlog Planning Transformation Strategic Refactoring 1 Product Backlog

    User Story E User Story C User Story D Tactical Refactoring 1.3 Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog User Story F User Story G
  23. @hschwentner Improvement Backlog Planning Transformation Product Backlog User Story E

    Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog User Story F User Story G
  24. @hschwentner Improvement Backlog Planning Transformation Product Backlog User Story E

    Tactical Refactoring 2.1 Strategic Refactoring 2 Sprint Backlog User Story G User Story H User Story F User Story I
  25. ContractService signContract() voteContract() Code Contract getContractNumber() setSignatureDate() setCreditRa7ng() setVo7ngResult() Risk

    Assessment ContractService Contract Monolease voteContract() getContractNumber() setCreditRa7ng() setVotingResult()
  26. “Organizations which design systems are constrained to produce designs which

    are copies of the communication structures of these organizations.” Melvin Conway
  27. Melvin Conway (1967) “Organiza9ons which design systems are constrained to

    produce designs which are copies of the communica9on structures of these organiza9ons.”
  28. “The organiza9on of the so;ware and the organiza9on of the

    so;ware team will be congruent.” Eric Raymond
  29. “If you have four groups working on a compiler, you'll

    get a 4-pass compiler.” Eric Raymond
  30. @hschwentner Domain Categories Pipeline Domain Blackboard Domain Dialog Domain •

    Logis&cs • Insurances and banks • administra&on • healthcare • event management • control center • Software development • Communication software • Nego&a&ons in various domains or Domain Patterns?
  31. Bibliography Foote, Brian and Joseph Yoder. “Big Ball of Mud.”

    PLoP ’97, Monticello, IL, September 1997. Fowler, Martin. “Strangler Fig Application.” Bliki, June 29, 2004. Hofer, Stefan and Henning Schwentner. Domain Storytelling: a Collaborative, Visual, and Agile Way to Develop Domain-Driven Software. Boston: Addison- Wesley, 2022. Lilienthal, Carola. Sustainable Software Architecture: Analyze and Reduce Technical Dept. Heidelberg: dpunkt, 2019. Lilienthal, Carola and Henning Schwentner. Domain-Driven Transformation: Modularize and Modernize Legacy Software. Boston: Addison-Wesley, 2025. Kernighan, Brian W. Software Tools in Pascal. Addison-Wesley, 1981.