Escape the Monolith
We’ve all been there — we’d like to be able use the modern DevOps approach and deploy our own code. But our code is intertwined with everyone else’s code in a giant monolith. It may even be separated into a directory, but any change we make in our code often requires a change in someone else’s code. We’re stuck.
What would it be like if there were an incremental way to get my own team’s code out of the monolith? Something that I could do without asking for funding, without slowing down development, and without requiring that other teams help?
This series explores just such an approach. Free your code, even if other teams aren’t yet ready to free theirs.
Thursday, November 18, 2021 in Escape the Monolith
How Can We Deploy Independently Without Chaos?
Continuous and independent deployment sounds great from the team’s perspective. Nothing blocks the flow of value. They can ship each feature when it completes, and fix any bugs with an immediate rollback. The team can interact quickly and directly with customers through A/B tests and previews, and they can do all of this free of the company bureaucracy around release management, timing, and overhead.
But from the organization’s perspective, continuous and independent deployment promises sheer chaos.
Monday, October 18, 2021 in Escape the MonolithHow do I Know I’m Using My Dependencies Correctly? Our goal is to simplify integrations between my component and my dependencies. Using techniques from the last two newsletters, we can isolate my component from unwanted complexity in a dependency, and then verify that the dependency continues to work as I expect. However, one glaring hole remains: how do I ensure that my code uses the dependency correctly?
We’ve Already Solved Almost Everything You may recall that we have encapsulated each of our dependencies behind a Port.
Thursday, September 02, 2021 in Escape the MonolithHow Do I Keep This Working? A team that has been following this year’s Devops Series and performing each technique would find themselves able to:
Plan features without dependencies, Edit code independently, Build and verify independently, Isolate changes, and Isolate its integration complexity from its main collaborator. For that team, this is great progress and things seem pretty good for a while. Work is fast, deployment is practical, and integration bugs are lower than they’ve ever been.
Thursday, August 12, 2021 in Escape the MonolithHow Will We Debug the Monolith? If your teams are following our approach to escape the monolith that Deep Roots has provided in this year’s newsletters, you can probably see a big problem looming. Your teams are gaining independence at the cost of increasing integration complexity. Who is going to manage that complexity as every team flees the monolith? How?
Let’s look at our example organization to understand the complexity and its solution.
Thursday, July 08, 2021 in Escape the MonolithI’m Waiting For the Build…Again! Continuing our case study from the last two articles, let’s focus on one of the 130 teams who were trying to break free of the monolith.
At this point this team had created their component. Actually, there were several components, but each was just a namespace in the monolith. Only one team changed each component, but every change still forced them to recompile the monolith.
Tuesday, May 04, 2021 in Escape the MonolithWe also support our readers through the Code by Refactoring Slack channel. Please join us there to discuss any part of the technique along your way to gathering your own scattered component.
My Code is Everywhere! Let’s continue with the last newsletter’s example of an organization with more than 100 teams editing a single codebase. The codebase was well-structured. It had to be in order to support that much change.
Tuesday, April 06, 2021 in Escape the MonolithOther People Keep Messing with My Code! I was working with a company that had about 100 teams in the same product. Each had a different purpose, so each changed different code. However, it wasn’t as clean as that makes it sound.
Each team found itself making contributions across a quarter of the product. Each change impacted the work of a few other teams. Each method or class was shared among 2–4 teams — but it was a different 2–4 teams each time.
Thursday, March 04, 2021 in Escape the MonolithOur Code is Hopelessly Entangled With the Monolith! We really want our code to be a set of services. That unlocks CD and DevOps. However, our code is currently a long ways away from being Service Oriented so we will get to services incrementally.
Our first target is Continuous Integration (CI). We think of CI as a system to rapidly find mistakes so that we can correct them. However, the power of CI comes from an unexpected source — team independence.
Thursday, February 04, 2021 in Escape the MonolithOur Unit Test Suite Hurts! TDD, CI, and DevOps assume that unit tests have the following traits:
Domain relevant: Test one thing the user cares about and could describe. One Way to Fail: Can only fail for one reason, which is its assertion. Independent: Execute only the code they verify. You don’t need to update the test if anything else changes. Cover Functionality: The set of tests as a whole cover all behaviors of the system.