SlideShare a Scribd company logo
1 of 90
Bridging the Divide between
Architecture and Code
Chris Chedgey
Structure101
?
✗
✗
✗
✗
The Divide is a problem because…
The Divide is a problem because…
• Invisible, emergent, accidental structure fights
against developers
The Divide is a problem because…
• Invisible, emergent, accidental structure fights
against developers
• Invisible, disconnected architecture could
guide developers … but doesn’t
The Divide is a problem because…
• Invisible, emergent, accidental structure
fights against developers
• Invisible, disconnected architecture could
guide developers … but doesn’t
Invisible structure fights developers
because…
• Invisible structure becomes tangled
V 0.7.2
V 0.8.6
V 0.8.7
V 0.8.8
V 1.0.0
V 1.3.0
V 1.3.5
• Invisible structure becomes tangled
Invisible structure fights developers
because…
• Invisible structure becomes tangled
• Tangles increase complexity
Invisible structure fights developers
because…
Tangles increase complexity
CCD = (1*1) + (11*2) + (7*3) + …
~ 164
CCD = 362 = 1,296 !!!
Cumulative Component Dependency
(John Lakos)
• Invisible structure becomes tangled
• Tangles increase complexity
Invisible structure fights developers
because…
• Invisible structure becomes tangled
• Tangles increase complexity
• Complexity is hard to understand
Invisible structure fights developers
because…
Complexity is hard to understand
• Invisible structure becomes tangled
• Tangles increase complexity
• Complexity is hard to understand
Invisible structure fights developers
because…
• Invisible structure becomes tangled
• Tangles increase complexity
• Complexity is hard to understand
• Tangles make a monolith
Invisible structure fights developers
because…
Tangles make a monolith
Tangles make a monolith
Tangles make a monolith
Tangles make a monolith
Tangles make a monolith
✗
• Invisible structure becomes tangled
• Tangles increase complexity
• Complexity is hard to understand
• Tangles make a monolith
Invisible structure fights developers
because…
The Divide is a problem because…
• Invisible, emergent, accidental structure
fights against developers
• Invisible, disconnected architecture could
guide developers … but doesn’t
The Divide is a problem because…
• Invisible, emergent, accidental structure fights
against developers
• Invisible, disconnected architecture could
guide developers … but doesn’t
Architecture could guide developers
Architecture could guide developers
• Define/enforce layering
Architecture could guide developers
• Define/enforce layering
Architecture could guide developers
• Define/enforce layering
Architecture could guide developers
• Define/enforce layering
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
• Prevent dependency proliferation
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
• Prevent dependency proliferation
• Allow for future module replacement
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
• Prevent dependency proliferation
• Allow for future module replacement
• Guide new developers
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
• Prevent dependency proliferation
• Allow for future module replacement
• Guide new developers
• Phased/parallel development
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
• Prevent dependency proliferation
• Allow for future module replacement
• Guide new developers
• Phased/parallel development
• Modularity!
Architecture could guide developers
• Define/enforce layering
• Group related modules/packages
• Define/enforce interface-implementation
• Prevent dependency proliferation
• Allow for future module replacement
• Guide new developers
• Phased/parallel development
• Modularity!
• …
Bridging the divide
Bridging the divide
Bridging the divide
Bridging the divide
Bridging the divide
Bridging the divide
Bridging the divide
Bridging the divide
1. Start visualizing the structure you have now
Bridging the divide
1. Start visualizing the structure you have now
2. Lock-in any useful architecture you have now
– overlay the visualization
Bridging the divide
1. Start visualizing the structure you have now
2. Lock-in any useful architecture you have now
– overlay the visualization
3. Improve/extend the architecture –
development gets easier and easier
• You’re going to need a tool…
• That parses code
• Hierarchical dependency model
• Architectural overlays
• You’re going to need a tool…
• That parses code
• Hierarchical dependency model
• Architectural overlays
• SonarGraph
Hierarchical
dependency graph
DSM - Dependency Structure Matrix
• You’re going to need a tool…
• That parses code
• Hierarchical dependency model
• Architectural overlays
• SonarGraph
• Lattix
• IntelliJ Idea Ultimate
Hierarchical
dependency graph
DSM - Dependency Structure Matrix
LSM – Levelized Structure Map
• You’re going to need a tool…
• That parses code
• Hierarchical dependency model
• Architectural overlays
• SonarGraph
• Lattix
• IntelliJ Idea Ultimate
• Structure101
Hierarchical
dependency graph
Step 1: Visualize what you have
Step 1: Visualize what you have
• Immediate productivity boost
– A map of the codebase
Step 1: Visualize what you have
• Immediate productivity boost
– A map of the codebase
• See the details in the context of the de facto
architecture, e.g.
– Eclipse projects
– IntelliJ modules
– Maven POMs
– Java 9 modules
– …
Step 1: Visualize what you have
• Immediate productivity boost
– A map of the codebase
• See the details in the context of the de facto
architecture, e.g.
– Eclipse projects
– IntelliJ modules
– Maven POMs
– Java 9 modules
– …
• Raise structural awareness
– Start simplifying the codebase - reduce coupling and
complexity
Step 1: Visualization Demo
Step 2: Lock in and shore up de facto
architecture
Step 2: Lock in and shore up de facto
architecture
• Organize modules into groups
Step 2: Lock in and shore up de facto
architecture
• Organize modules into groups
• Specify module dependency constraints
Step 2: Lock in and shore up de facto
architecture
• Organize modules into groups
• Specify module dependency constraints
• Overlay onto the visualization
– Understand the details in the context of the spec’d
architecture
– Warned immediately if edits violate spec
Step 2: Structure Spec Demo
Step 3: Incrementally improve the
architecture/structure
Step 3: Incrementally improve the
architecture/structure
• Deal with the monoliths
– Increase %specified
Step 3: Incrementally improve the
architecture/structure
• Deal with the monoliths
– Increase %specified
• Lift lower packages into modules
Step 3: Incrementally improve the
architecture/structure
• Deal with the monoliths
– Increase %specified
• Lift lower packages into modules
• Disentangle packages…
– Small/easy: In the code
– Broader: Simulate first
– Move classes, then refactor for dependencies
Step 3: Incrementally improve the
architecture/structure
• Deal with the monoliths
– Increase %specified
• Lift lower packages into modules
• Disentangle packages…
– Small/easy: In the code
– Broader: Simulate first
– Move classes, then refactor for dependencies
• … and/or Extract modules
– Simulate first
– Add new module to spec
– Refactor for dependencies, then move classes
Step 3: Structure101 Studio Demo
Bridging the gap…
Summary
Bridging the gap…
Summary
1. Start visualizing the structure you have now
Bridging the gap…
Summary
1. Start visualizing the structure you have now
2. Lock-in and shore-up any useful architecture
you have now – overlay the visualization
Bridging the gap…
Summary
1. Start visualizing the structure you have now
2. Lock-in and shore-up any useful architecture
you have now – overlay the visualization
3. Improve/extend the architecture –
development gets easier and easier
Questions?
@chedgey
chris@structure101.com
structure101.com
Early access to Workspace:
2018.structure101.com

More Related Content

Similar to Bridging the Divide between Architecture and Code (Germany JUGs version)

Resilient Functional Service Design
Resilient Functional Service DesignResilient Functional Service Design
Resilient Functional Service Design
Uwe Friedrichsen
 
Calling All Modularity Solutions: A Comparative Study from eBay
Calling All Modularity Solutions: A Comparative Study from eBayCalling All Modularity Solutions: A Comparative Study from eBay
Calling All Modularity Solutions: A Comparative Study from eBay
Tony Ng
 
Calling all modularity solutions
Calling all modularity solutionsCalling all modularity solutions
Calling all modularity solutions
Sangjin Lee
 

Similar to Bridging the Divide between Architecture and Code (Germany JUGs version) (20)

Ten Advices for Architects
Ten Advices for ArchitectsTen Advices for Architects
Ten Advices for Architects
 
S/W Design and Modularity using Maven
S/W Design and Modularity using MavenS/W Design and Modularity using Maven
S/W Design and Modularity using Maven
 
Building modular software with OSGi - Ulf Fildebrandt
Building modular software with OSGi - Ulf FildebrandtBuilding modular software with OSGi - Ulf Fildebrandt
Building modular software with OSGi - Ulf Fildebrandt
 
Resilient Functional Service Design
Resilient Functional Service DesignResilient Functional Service Design
Resilient Functional Service Design
 
How Agile changed Software Development
How Agile changed Software DevelopmentHow Agile changed Software Development
How Agile changed Software Development
 
Advanced CSS Troubleshooting
Advanced CSS TroubleshootingAdvanced CSS Troubleshooting
Advanced CSS Troubleshooting
 
Calling All Modularity Solutions: A Comparative Study from eBay
Calling All Modularity Solutions: A Comparative Study from eBayCalling All Modularity Solutions: A Comparative Study from eBay
Calling All Modularity Solutions: A Comparative Study from eBay
 
Docker in the Enterprise
Docker in the EnterpriseDocker in the Enterprise
Docker in the Enterprise
 
Decorator design pattern
Decorator design patternDecorator design pattern
Decorator design pattern
 
Staging and Deployment
Staging and DeploymentStaging and Deployment
Staging and Deployment
 
Super chargeyourcontiniousintegrationdeployments
Super chargeyourcontiniousintegrationdeploymentsSuper chargeyourcontiniousintegrationdeployments
Super chargeyourcontiniousintegrationdeployments
 
Supercharge Your Continuous Integration Deployments
Supercharge Your Continuous Integration DeploymentsSupercharge Your Continuous Integration Deployments
Supercharge Your Continuous Integration Deployments
 
Architecture in action 01
Architecture in action 01Architecture in action 01
Architecture in action 01
 
"Project Tye to Tie .NET Microservices", Oleg Karasik
"Project Tye to Tie .NET Microservices", Oleg Karasik"Project Tye to Tie .NET Microservices", Oleg Karasik
"Project Tye to Tie .NET Microservices", Oleg Karasik
 
Software is not a Building - Designing Technical Architecture for Change
Software is not a Building - Designing Technical Architecture for ChangeSoftware is not a Building - Designing Technical Architecture for Change
Software is not a Building - Designing Technical Architecture for Change
 
Decorator Pattern
Decorator PatternDecorator Pattern
Decorator Pattern
 
DevSecCon London 2017: when good containers go bad by Tim Mackey
DevSecCon London 2017: when good containers go bad by Tim MackeyDevSecCon London 2017: when good containers go bad by Tim Mackey
DevSecCon London 2017: when good containers go bad by Tim Mackey
 
Calling all modularity solutions
Calling all modularity solutionsCalling all modularity solutions
Calling all modularity solutions
 
Software Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuableSoftware Architecture and Architectors: useless VS valuable
Software Architecture and Architectors: useless VS valuable
 
Guide to Destroying Codebases The Demise of Clever Code
Guide to Destroying Codebases   The Demise of Clever CodeGuide to Destroying Codebases   The Demise of Clever Code
Guide to Destroying Codebases The Demise of Clever Code
 

More from Chris Chedgey

Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No...
Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No...Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No...
Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No...
Chris Chedgey
 
Restructuring- improving the modularity of an existing code-base
Restructuring- improving the modularity of an existing code-baseRestructuring- improving the modularity of an existing code-base
Restructuring- improving the modularity of an existing code-base
Chris Chedgey
 

More from Chris Chedgey (7)

Beautiful Structure
Beautiful StructureBeautiful Structure
Beautiful Structure
 
Rediscovering modularity - JavaOne Brazil 2012
Rediscovering modularity - JavaOne Brazil 2012Rediscovering modularity - JavaOne Brazil 2012
Rediscovering modularity - JavaOne Brazil 2012
 
Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No...
Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No...Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No...
Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No...
 
Retrofitting Architecture - Oredev 2012
Retrofitting Architecture - Oredev 2012Retrofitting Architecture - Oredev 2012
Retrofitting Architecture - Oredev 2012
 
Rediscovering Modularity - JFall 2012 version
Rediscovering Modularity - JFall 2012 versionRediscovering Modularity - JFall 2012 version
Rediscovering Modularity - JFall 2012 version
 
Rediscovering Modularity
Rediscovering ModularityRediscovering Modularity
Rediscovering Modularity
 
Restructuring- improving the modularity of an existing code-base
Restructuring- improving the modularity of an existing code-baseRestructuring- improving the modularity of an existing code-base
Restructuring- improving the modularity of an existing code-base
 

Recently uploaded

%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
masabamasaba
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
VictoriaMetrics
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
shinachiaurasa2
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Medical / Health Care (+971588192166) Mifepristone and Misoprostol tablets 200mg
 

Recently uploaded (20)

WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?WSO2CON 2024 - Does Open Source Still Matter?
WSO2CON 2024 - Does Open Source Still Matter?
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Knoxville Psychic Readings, Attraction spells,Br...
 
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park %in ivory park+277-882-255-28 abortion pills for sale in ivory park
%in ivory park+277-882-255-28 abortion pills for sale in ivory park
 
Architecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the pastArchitecture decision records - How not to get lost in the past
Architecture decision records - How not to get lost in the past
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Microsoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdfMicrosoft AI Transformation Partner Playbook.pdf
Microsoft AI Transformation Partner Playbook.pdf
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT  - Elevating Productivity in Today's Agile EnvironmentHarnessing ChatGPT  - Elevating Productivity in Today's Agile Environment
Harnessing ChatGPT - Elevating Productivity in Today's Agile Environment
 
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
Devoxx UK 2024 - Going serverless with Quarkus, GraalVM native images and AWS...
 
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park %in kempton park+277-882-255-28 abortion pills for sale in kempton park
%in kempton park+277-882-255-28 abortion pills for sale in kempton park
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
Large-scale Logging Made Easy: Meetup at Deutsche Bank 2024
 
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
%in kaalfontein+277-882-255-28 abortion pills for sale in kaalfontein
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
The title is not connected to what is inside
The title is not connected to what is insideThe title is not connected to what is inside
The title is not connected to what is inside
 
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
Abortion Pill Prices Tembisa [(+27832195400*)] 🏥 Women's Abortion Clinic in T...
 
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
%in Bahrain+277-882-255-28 abortion pills for sale in Bahrain
 

Bridging the Divide between Architecture and Code (Germany JUGs version)

  • 1. Bridging the Divide between Architecture and Code Chris Chedgey Structure101
  • 2.
  • 3.
  • 4. ?
  • 5.
  • 6.
  • 7.
  • 8.
  • 10. The Divide is a problem because…
  • 11. The Divide is a problem because… • Invisible, emergent, accidental structure fights against developers
  • 12. The Divide is a problem because… • Invisible, emergent, accidental structure fights against developers • Invisible, disconnected architecture could guide developers … but doesn’t
  • 13. The Divide is a problem because… • Invisible, emergent, accidental structure fights against developers • Invisible, disconnected architecture could guide developers … but doesn’t
  • 14. Invisible structure fights developers because… • Invisible structure becomes tangled
  • 22. • Invisible structure becomes tangled Invisible structure fights developers because…
  • 23. • Invisible structure becomes tangled • Tangles increase complexity Invisible structure fights developers because…
  • 24. Tangles increase complexity CCD = (1*1) + (11*2) + (7*3) + … ~ 164 CCD = 362 = 1,296 !!! Cumulative Component Dependency (John Lakos)
  • 25. • Invisible structure becomes tangled • Tangles increase complexity Invisible structure fights developers because…
  • 26. • Invisible structure becomes tangled • Tangles increase complexity • Complexity is hard to understand Invisible structure fights developers because…
  • 27. Complexity is hard to understand
  • 28. • Invisible structure becomes tangled • Tangles increase complexity • Complexity is hard to understand Invisible structure fights developers because…
  • 29. • Invisible structure becomes tangled • Tangles increase complexity • Complexity is hard to understand • Tangles make a monolith Invisible structure fights developers because…
  • 30. Tangles make a monolith
  • 31. Tangles make a monolith
  • 32. Tangles make a monolith
  • 33. Tangles make a monolith
  • 34. Tangles make a monolith ✗
  • 35. • Invisible structure becomes tangled • Tangles increase complexity • Complexity is hard to understand • Tangles make a monolith Invisible structure fights developers because…
  • 36. The Divide is a problem because… • Invisible, emergent, accidental structure fights against developers • Invisible, disconnected architecture could guide developers … but doesn’t
  • 37. The Divide is a problem because… • Invisible, emergent, accidental structure fights against developers • Invisible, disconnected architecture could guide developers … but doesn’t
  • 39. Architecture could guide developers • Define/enforce layering
  • 40. Architecture could guide developers • Define/enforce layering
  • 41. Architecture could guide developers • Define/enforce layering
  • 42. Architecture could guide developers • Define/enforce layering
  • 43. Architecture could guide developers • Define/enforce layering • Group related modules/packages
  • 44. Architecture could guide developers • Define/enforce layering • Group related modules/packages
  • 45. Architecture could guide developers • Define/enforce layering • Group related modules/packages
  • 46. Architecture could guide developers • Define/enforce layering • Group related modules/packages
  • 47. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation
  • 48. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation
  • 49. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation
  • 50. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation • Prevent dependency proliferation
  • 51. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation • Prevent dependency proliferation • Allow for future module replacement
  • 52. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation • Prevent dependency proliferation • Allow for future module replacement • Guide new developers
  • 53. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation • Prevent dependency proliferation • Allow for future module replacement • Guide new developers • Phased/parallel development
  • 54. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation • Prevent dependency proliferation • Allow for future module replacement • Guide new developers • Phased/parallel development • Modularity!
  • 55. Architecture could guide developers • Define/enforce layering • Group related modules/packages • Define/enforce interface-implementation • Prevent dependency proliferation • Allow for future module replacement • Guide new developers • Phased/parallel development • Modularity! • …
  • 63. Bridging the divide 1. Start visualizing the structure you have now
  • 64. Bridging the divide 1. Start visualizing the structure you have now 2. Lock-in any useful architecture you have now – overlay the visualization
  • 65. Bridging the divide 1. Start visualizing the structure you have now 2. Lock-in any useful architecture you have now – overlay the visualization 3. Improve/extend the architecture – development gets easier and easier
  • 66. • You’re going to need a tool… • That parses code • Hierarchical dependency model • Architectural overlays
  • 67. • You’re going to need a tool… • That parses code • Hierarchical dependency model • Architectural overlays • SonarGraph Hierarchical dependency graph
  • 68. DSM - Dependency Structure Matrix • You’re going to need a tool… • That parses code • Hierarchical dependency model • Architectural overlays • SonarGraph • Lattix • IntelliJ Idea Ultimate Hierarchical dependency graph
  • 69. DSM - Dependency Structure Matrix LSM – Levelized Structure Map • You’re going to need a tool… • That parses code • Hierarchical dependency model • Architectural overlays • SonarGraph • Lattix • IntelliJ Idea Ultimate • Structure101 Hierarchical dependency graph
  • 70. Step 1: Visualize what you have
  • 71. Step 1: Visualize what you have • Immediate productivity boost – A map of the codebase
  • 72. Step 1: Visualize what you have • Immediate productivity boost – A map of the codebase • See the details in the context of the de facto architecture, e.g. – Eclipse projects – IntelliJ modules – Maven POMs – Java 9 modules – …
  • 73. Step 1: Visualize what you have • Immediate productivity boost – A map of the codebase • See the details in the context of the de facto architecture, e.g. – Eclipse projects – IntelliJ modules – Maven POMs – Java 9 modules – … • Raise structural awareness – Start simplifying the codebase - reduce coupling and complexity
  • 75. Step 2: Lock in and shore up de facto architecture
  • 76. Step 2: Lock in and shore up de facto architecture • Organize modules into groups
  • 77. Step 2: Lock in and shore up de facto architecture • Organize modules into groups • Specify module dependency constraints
  • 78. Step 2: Lock in and shore up de facto architecture • Organize modules into groups • Specify module dependency constraints • Overlay onto the visualization – Understand the details in the context of the spec’d architecture – Warned immediately if edits violate spec
  • 79. Step 2: Structure Spec Demo
  • 80. Step 3: Incrementally improve the architecture/structure
  • 81. Step 3: Incrementally improve the architecture/structure • Deal with the monoliths – Increase %specified
  • 82. Step 3: Incrementally improve the architecture/structure • Deal with the monoliths – Increase %specified • Lift lower packages into modules
  • 83. Step 3: Incrementally improve the architecture/structure • Deal with the monoliths – Increase %specified • Lift lower packages into modules • Disentangle packages… – Small/easy: In the code – Broader: Simulate first – Move classes, then refactor for dependencies
  • 84. Step 3: Incrementally improve the architecture/structure • Deal with the monoliths – Increase %specified • Lift lower packages into modules • Disentangle packages… – Small/easy: In the code – Broader: Simulate first – Move classes, then refactor for dependencies • … and/or Extract modules – Simulate first – Add new module to spec – Refactor for dependencies, then move classes
  • 85. Step 3: Structure101 Studio Demo
  • 87. Bridging the gap… Summary 1. Start visualizing the structure you have now
  • 88. Bridging the gap… Summary 1. Start visualizing the structure you have now 2. Lock-in and shore-up any useful architecture you have now – overlay the visualization
  • 89. Bridging the gap… Summary 1. Start visualizing the structure you have now 2. Lock-in and shore-up any useful architecture you have now – overlay the visualization 3. Improve/extend the architecture – development gets easier and easier

Editor's Notes

  1. You cannot do structure in the IDE alone – structure emerges from the code
  2. You cannot do structure in the IDE alone – structure emerges from the code
  3. You cannot do structure in the IDE alone – structure emerges from the code
  4. You cannot do structure in the IDE alone – structure emerges from the code