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

Chris Chedgey
Chris ChedgeyCo-Founder at Structure101
Bridging the Divide between
Architecture and Code
Chris Chedgey
Structure101
Bridging the Divide between Architecture and Code (Germany JUGs version)
Bridging the Divide between Architecture and Code (Germany JUGs version)
?
Bridging the Divide between Architecture and Code (Germany JUGs version)
Bridging the Divide between Architecture and Code (Germany JUGs version)
✗
✗
✗
✗
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
1 of 90

Recommended

Monolith to Modular - The devil in the dependencies by
Monolith to Modular - The devil in the dependenciesMonolith to Modular - The devil in the dependencies
Monolith to Modular - The devil in the dependenciesChris Chedgey
197 views32 slides
Bridging the divide between architecture and code (US version) by
Bridging the divide between architecture and code (US version)Bridging the divide between architecture and code (US version)
Bridging the divide between architecture and code (US version)Chris Chedgey
152 views37 slides
Rediscovering Modularity - .NET Edition by
Rediscovering Modularity - .NET EditionRediscovering Modularity - .NET Edition
Rediscovering Modularity - .NET EditionChris Chedgey
2K views137 slides
Digital Transformation with Kubernetes, Containers, and Microservices by
Digital Transformation with Kubernetes, Containers, and MicroservicesDigital Transformation with Kubernetes, Containers, and Microservices
Digital Transformation with Kubernetes, Containers, and MicroservicesLightbend
1.3K views70 slides
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen... by
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...
EoinWoods_WhereDidMyArchitectureGoPreservingSoftwareArchitectureInItsImplemen...Kostas Mavridis
321 views68 slides
Onion Architecture / Clean Architecture by
Onion Architecture / Clean ArchitectureOnion Architecture / Clean Architecture
Onion Architecture / Clean ArchitectureAttila Bertók
6.2K views45 slides

More Related Content

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

Ten Advices for Architects by
Ten Advices for ArchitectsTen Advices for Architects
Ten Advices for ArchitectsEberhard Wolff
1.8K views56 slides
S/W Design and Modularity using Maven by
S/W Design and Modularity using MavenS/W Design and Modularity using Maven
S/W Design and Modularity using MavenScheidt & Bachmann
2.9K views78 slides
Building modular software with OSGi - Ulf Fildebrandt by
Building modular software with OSGi - Ulf FildebrandtBuilding modular software with OSGi - Ulf Fildebrandt
Building modular software with OSGi - Ulf Fildebrandtmfrancis
3.2K views53 slides
Resilient Functional Service Design by
Resilient Functional Service DesignResilient Functional Service Design
Resilient Functional Service DesignUwe Friedrichsen
6.7K views68 slides
How Agile changed Software Development by
How Agile changed Software DevelopmentHow Agile changed Software Development
How Agile changed Software DevelopmentSteve Maraspin
370 views73 slides
Advanced CSS Troubleshooting by
Advanced CSS TroubleshootingAdvanced CSS Troubleshooting
Advanced CSS TroubleshootingDenise Jacobs
11.7K views77 slides

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

Ten Advices for Architects by Eberhard Wolff
Ten Advices for ArchitectsTen Advices for Architects
Ten Advices for Architects
Eberhard Wolff1.8K views
Building modular software with OSGi - Ulf Fildebrandt by mfrancis
Building modular software with OSGi - Ulf FildebrandtBuilding modular software with OSGi - Ulf Fildebrandt
Building modular software with OSGi - Ulf Fildebrandt
mfrancis3.2K views
Resilient Functional Service Design by Uwe Friedrichsen
Resilient Functional Service DesignResilient Functional Service Design
Resilient Functional Service Design
Uwe Friedrichsen6.7K views
How Agile changed Software Development by Steve Maraspin
How Agile changed Software DevelopmentHow Agile changed Software Development
How Agile changed Software Development
Steve Maraspin370 views
Advanced CSS Troubleshooting by Denise Jacobs
Advanced CSS TroubleshootingAdvanced CSS Troubleshooting
Advanced CSS Troubleshooting
Denise Jacobs11.7K views
Calling All Modularity Solutions: A Comparative Study from eBay by Tony Ng
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 Ng956 views
Docker in the Enterprise by Saul Caganoff
Docker in the EnterpriseDocker in the Enterprise
Docker in the Enterprise
Saul Caganoff1.2K views
Staging and Deployment by heyrocker
Staging and DeploymentStaging and Deployment
Staging and Deployment
heyrocker761 views
Super chargeyourcontiniousintegrationdeployments by Nikola Gotsev
Super chargeyourcontiniousintegrationdeploymentsSuper chargeyourcontiniousintegrationdeployments
Super chargeyourcontiniousintegrationdeployments
Nikola Gotsev147 views
Supercharge Your Continuous Integration Deployments by Nikola Gotsev
Supercharge Your Continuous Integration DeploymentsSupercharge Your Continuous Integration Deployments
Supercharge Your Continuous Integration Deployments
Nikola Gotsev389 views
Architecture in action 01 by Krishna Sankar
Architecture in action 01Architecture in action 01
Architecture in action 01
Krishna Sankar1.1K views
"Project Tye to Tie .NET Microservices", Oleg Karasik by Fwdays
"Project Tye to Tie .NET Microservices", Oleg Karasik"Project Tye to Tie .NET Microservices", Oleg Karasik
"Project Tye to Tie .NET Microservices", Oleg Karasik
Fwdays166 views
Software is not a Building - Designing Technical Architecture for Change by Cantina
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
Cantina559 views
DevSecCon London 2017: when good containers go bad by Tim Mackey by DevSecCon
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
DevSecCon360 views
Calling all modularity solutions by Sangjin Lee
Calling all modularity solutionsCalling all modularity solutions
Calling all modularity solutions
Sangjin Lee613 views
Software Architecture and Architectors: useless VS valuable by Comsysto Reply GmbH
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 by Gabor Varadi
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
Gabor Varadi331 views

More from Chris Chedgey

Beautiful Structure by
Beautiful StructureBeautiful Structure
Beautiful StructureChris Chedgey
1.6K views47 slides
Rediscovering modularity - JavaOne Brazil 2012 by
Rediscovering modularity - JavaOne Brazil 2012Rediscovering modularity - JavaOne Brazil 2012
Rediscovering modularity - JavaOne Brazil 2012Chris Chedgey
696 views123 slides
Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No... by
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
874 views109 slides
Retrofitting Architecture - Oredev 2012 by
Retrofitting Architecture - Oredev 2012Retrofitting Architecture - Oredev 2012
Retrofitting Architecture - Oredev 2012Chris Chedgey
1.6K views110 slides
Rediscovering Modularity - JFall 2012 version by
Rediscovering Modularity - JFall 2012 versionRediscovering Modularity - JFall 2012 version
Rediscovering Modularity - JFall 2012 versionChris Chedgey
737 views51 slides
Rediscovering Modularity by
Rediscovering ModularityRediscovering Modularity
Rediscovering ModularityChris Chedgey
740 views17 slides

More from Chris Chedgey(7)

Rediscovering modularity - JavaOne Brazil 2012 by Chris Chedgey
Rediscovering modularity - JavaOne Brazil 2012Rediscovering modularity - JavaOne Brazil 2012
Rediscovering modularity - JavaOne Brazil 2012
Chris Chedgey696 views
Rediscovering Modularity - Java User Groups, Stuttgart, Munich, Nuremberg, No... by 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...
Chris Chedgey874 views
Retrofitting Architecture - Oredev 2012 by Chris Chedgey
Retrofitting Architecture - Oredev 2012Retrofitting Architecture - Oredev 2012
Retrofitting Architecture - Oredev 2012
Chris Chedgey1.6K views
Rediscovering Modularity - JFall 2012 version by Chris Chedgey
Rediscovering Modularity - JFall 2012 versionRediscovering Modularity - JFall 2012 version
Rediscovering Modularity - JFall 2012 version
Chris Chedgey737 views
Rediscovering Modularity by Chris Chedgey
Rediscovering ModularityRediscovering Modularity
Rediscovering Modularity
Chris Chedgey740 views
Restructuring- improving the modularity of an existing code-base by Chris Chedgey
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 Chedgey1.4K views

Recently uploaded

Cycleops - Automate deployments on top of bare metal.pptx by
Cycleops - Automate deployments on top of bare metal.pptxCycleops - Automate deployments on top of bare metal.pptx
Cycleops - Automate deployments on top of bare metal.pptxThanassis Parathyras
30 views12 slides
Software testing company in India.pptx by
Software testing company in India.pptxSoftware testing company in India.pptx
Software testing company in India.pptxSakshiPatel82
7 views9 slides
MariaDB stored procedures and why they should be improved by
MariaDB stored procedures and why they should be improvedMariaDB stored procedures and why they should be improved
MariaDB stored procedures and why they should be improvedFederico Razzoli
8 views32 slides
Neo4j y GenAI by
Neo4j y GenAI Neo4j y GenAI
Neo4j y GenAI Neo4j
35 views41 slides
Citi TechTalk Session 2: Kafka Deep Dive by
Citi TechTalk Session 2: Kafka Deep DiveCiti TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep Diveconfluent
17 views60 slides
Unleash The Monkeys by
Unleash The MonkeysUnleash The Monkeys
Unleash The MonkeysJacob Duijzer
7 views28 slides

Recently uploaded(20)

Cycleops - Automate deployments on top of bare metal.pptx by Thanassis Parathyras
Cycleops - Automate deployments on top of bare metal.pptxCycleops - Automate deployments on top of bare metal.pptx
Cycleops - Automate deployments on top of bare metal.pptx
Software testing company in India.pptx by SakshiPatel82
Software testing company in India.pptxSoftware testing company in India.pptx
Software testing company in India.pptx
SakshiPatel827 views
MariaDB stored procedures and why they should be improved by Federico Razzoli
MariaDB stored procedures and why they should be improvedMariaDB stored procedures and why they should be improved
MariaDB stored procedures and why they should be improved
Neo4j y GenAI by Neo4j
Neo4j y GenAI Neo4j y GenAI
Neo4j y GenAI
Neo4j35 views
Citi TechTalk Session 2: Kafka Deep Dive by confluent
Citi TechTalk Session 2: Kafka Deep DiveCiti TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep Dive
confluent17 views
Neo4j : Graphes de Connaissance, IA et LLMs by Neo4j
Neo4j : Graphes de Connaissance, IA et LLMsNeo4j : Graphes de Connaissance, IA et LLMs
Neo4j : Graphes de Connaissance, IA et LLMs
Neo4j46 views
Mark Simpson - UKOUG23 - Refactoring Monolithic Oracle Database Applications ... by marksimpsongw
Mark Simpson - UKOUG23 - Refactoring Monolithic Oracle Database Applications ...Mark Simpson - UKOUG23 - Refactoring Monolithic Oracle Database Applications ...
Mark Simpson - UKOUG23 - Refactoring Monolithic Oracle Database Applications ...
marksimpsongw74 views
DSD-INT 2023 HydroMT model building and river-coast coupling in Python - Bove... by Deltares
DSD-INT 2023 HydroMT model building and river-coast coupling in Python - Bove...DSD-INT 2023 HydroMT model building and river-coast coupling in Python - Bove...
DSD-INT 2023 HydroMT model building and river-coast coupling in Python - Bove...
Deltares15 views
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema by Deltares
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - GeertsemaDSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
DSD-INT 2023 Delft3D FM Suite 2024.01 1D2D - Beta testing programme - Geertsema
Deltares12 views
DSD-INT 2023 - Delft3D User Days - Welcome - Day 3 - Afternoon by Deltares
DSD-INT 2023 - Delft3D User Days - Welcome - Day 3 - AfternoonDSD-INT 2023 - Delft3D User Days - Welcome - Day 3 - Afternoon
DSD-INT 2023 - Delft3D User Days - Welcome - Day 3 - Afternoon
Deltares11 views
Software evolution understanding: Automatic extraction of software identifier... by Ra'Fat Al-Msie'deen
Software evolution understanding: Automatic extraction of software identifier...Software evolution understanding: Automatic extraction of software identifier...
Software evolution understanding: Automatic extraction of software identifier...
Geospatial Synergy: Amplifying Efficiency with FME & Esri ft. Peak Guest Spea... by Safe Software
Geospatial Synergy: Amplifying Efficiency with FME & Esri ft. Peak Guest Spea...Geospatial Synergy: Amplifying Efficiency with FME & Esri ft. Peak Guest Spea...
Geospatial Synergy: Amplifying Efficiency with FME & Esri ft. Peak Guest Spea...
Safe Software391 views
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI... by Marc Müller
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Dev-Cloud Conference 2023 - Continuous Deployment Showdown: Traditionelles CI...
Marc Müller31 views
What Can Employee Monitoring Software Do?​ by wAnywhere
What Can Employee Monitoring Software Do?​What Can Employee Monitoring Software Do?​
What Can Employee Monitoring Software Do?​
wAnywhere18 views
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra... by Marc Müller
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra....NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
.NET Developer Conference 2023 - .NET Microservices mit Dapr – zu viel Abstra...
Marc Müller35 views
How to Install and Activate Email-Researcher by eGrabber
How to Install and Activate Email-ResearcherHow to Install and Activate Email-Researcher
How to Install and Activate Email-Researcher
eGrabber19 views
Applying Platform Engineering Thinking to Observability.pdf by Natan Yellin
Applying Platform Engineering Thinking to Observability.pdfApplying Platform Engineering Thinking to Observability.pdf
Applying Platform Engineering Thinking to Observability.pdf
Natan Yellin12 views

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

  • 1. Bridging the Divide between Architecture and Code Chris Chedgey Structure101
  • 4. ?
  • 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