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

Unveiling a Release Train's Metro Plan - Effici...

Unveiling a Release Train's Metro Plan - Efficiently Understand Organizatios Dependency Relations

Teams of Software developers have an allergy relationship to duplicate code for good reasons. Introducing shared libraries is a common medicine in these situations, but like each medicine, shared code has an unintended consequence - it leads to coupling between components and makes release planning mandatory.

By analyzing complex multilayer dependencies between your components, you can extract the needed information and materialize the Metro plan of your release train. OpenRewrite's DataTable feature makes it easy to extract this information and visualize it. And what's more, with OpenRewrite, these analyses are efficiently scalable for hundreds of connections, making it perfect for complex codebases with many interdependent components.

In this session, I will show you how to utilize DataTable and OpenRewrite recipes to query your code base and gain valuable insights into your release planning process. On top of that, I will reveal the underlying Metro plan of your release train so you can plan your releases more easily in even the most complex scenarios.

Avatar for Merlin Bögershausen

Merlin Bögershausen

October 08, 2025
Tweet

More Decks by Merlin Bögershausen

Other Decks in Programming

Transcript

  1. ©2025 Moderne, Inc. 2 "It's Just a Small Fix“ -

    famous last words of software engineering
  2. ©2025 Moderne, Inc. 4 09:02 “Yo, this needs a parameter”

    09:15 PR green and approved 09:18 merge success 09:28 CI on main green 09:29 click Release and Coffee 09:35 Next Issue Timeline The last Simple Fix
  3. ©2025 Moderne, Inc. 5 rewrite-migrate-java (1 module) Parameter is optional,

    no problem! What we thought Direct • moderneinc/rewrite-cryptography • moderneinc/rewrite-devcenter • moderneinc/rewrite-hibernate • moderneinc/rewrite-java-security • openrewrite/rewrite-hibernate • openrewrite/rewrite-liberty • openrewrite/rewrite-micronaut • openrewrite/rewrite-rewrite Transitive • moderneinc/rewrite-spring • moderneinc/rewrite-vulncheck • openrewrite/rewrite-recipe-markdown-generator, • openrewrite/rewrite-spring The Hidden Reality What We Actually Affected
  4. ©2025 Moderne, Inc. 6 We Navigate Our Software Blind No

    visibility dependency chains No impact analysis before unpredicted ripple effects Discovery through failures "Dieses Foto" by Unknown Author is licensed under CC BY-SA
  5. ©2025 Moderne, Inc. 7 Release Train Metro Plan Every software

    release is a journey through connected components.
  6. ©2025 Moderne, Inc. 8 The Metro Metaphor Metro Software System

    Stations Components/Artifacts Lines Dependencies Metro Map Dependency Graph Journey Planning Release Planning Service Disruption Breaking Changes By Unknown Author is licensed under CC BY-SA
  7. ©2025 Moderne, Inc. 10 Three simple (automatable) Steps Extract Process

    Visualize OpenRewrite analyzes your codebases with recipes Connect and enrich the dependency data Interactive metro map
  8. ©2025 Moderne, Inc. 11 OpenRewrite DataTables mod run . --recipe=ReleaseTrainMetroPlan

    <project> <groupId>org.example</groupId> <artifactId>core-lib</artifactId> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-core</artifactId> </dependency> </dependencies> </project> repositoryPath groupId artifactId example/core org.example core-lib repositoryPath groupId artifactId example/core org.springframework spring-core ProjectCoordinates.csv DependenciesInUse.csv Recipes see Recipes produces
  9. ©2025 Moderne, Inc. 12 Data Pipeline ProjectCoordinates.csv DependenciesInUse.csv ParentRelationships.csv Kotlin

    Processing connections.json 1. Read information 2. Group by repositoryPath 3. Produce Graph representation
  10. ©2025 Moderne, Inc. 19 • ~10 services • ~50 dependencies

    • Simple relationships What teams think • 100+ components • 1000+ dependencies • Multi-level transitivity • Hidden coupling The Scale Problem What teams have
  11. ©2025 Moderne, Inc. 20 Week 1 – Discover Week 2

    - Integrate Week 3 - Operationalize Adoption Plan • Run recipes on your Teams codebase • Generate first visualization • Share "aha!" moment with Team • Add to CI/CD pipeline • Publish to team wiki • Train developers • Pre-release checks • Dependency reviews • Architecture decisions
  12. ©2025 Moderne, Inc. 21 Simple ✅ Understands build semantics ✅

    Handles multi-module projects ✅ Processes inheritance correctly ✅ Scales to thousands of modules ✅ Works across repository boundaries Why OpenRewrite Sematic Power Each producing a DataTable ReleaseTrainMetroPlan: - FindMavenProjectIDs - FindGradleProjectIDs - FindMavenParentRelationships - FindGradleParentRelationships - FindPotentiallyUnusedDependencies
  13. ©2025 Moderne, Inc. 22 Integration # .github/workflows/metro-map.yml name: Update Metro

    Map on: push: branches: [main] jobs: generate-map: steps: - uses: actions/checkout@v3 - run: mod run . --recipe=ReleaseTrainMetroPlan - run: python process_data.py - run: aws s3 cp metro-map.html s3://wiki/ “Its to complex” – 2 min to save hours “We have private code...” – Runs next to your Build “We use multiple build tools…” – Maven, Gradle, Bazel and more Automatic updates on every merge
  14. ©2025 Moderne, Inc. What is lurking in YOUR dependency Graph?

    POLL POLL 1 You don’t know until you map it!
  15. ©2025 Moderne, Inc. Key Takeaways 1. You can’t fix what

    you don’t see 2. Small changes have big impact 3. The tools you need exists 4. Don’t wait for the next incident to happen. Build your Metro Plan now! https://github.com/MBoegers/Release-Train-Metro-Plan
  16. ©2025 Moderne, Inc. 26 Where to learn more docs.openrewrite.org moderne.ai

    app.moderne.io github.com/openrewrite youtube.com/@Moderne-and-OpenRewrite Google Shape;842;p69 O’Reily Book: AI for Mass-Scale Code Refactoring and Analysis
  17. ©2025 Moderne, Inc. Merlin Bögershausen mboegie.dev Thank you! OpenRewrite Training

    Hub Its never a Small Change Map your dependencies. Control your Releases.