NOTE
This is a satirical depiction of an experience I had in an IT organization. The point is to share the same message with a broader audience. Obviously, convincing people to make big changes requires patience, perseverance, and long-term support.
Today, I had a conversation at work which reminded me of the 2000 animated adventure comedy, Chicken Run. Here’s how that conversation would look like if Ginger were advocating for architecting independent value streams, contract testing, and staged rollouts.
Ginger: Think, everyone, think... what haven't we tried yet?
Dev1: Um... we haven't tried not trying to improve.
Dev2: That might work.
Ginger: How many more flow blockages will it take for us to finally try something new?! We don't have to go all in, but we can at least try and start small...
Dev1: No! We need to spend more time and effort into making our acceptance environment just like the production environment.
Ginger: So does playing catch-up and spending all your time matching the environments sound like a good way of working to you?
Dev2: It's a way of working...
Ginger: You know what the problem is? This is as hard as we make it for ourselves. We can test our components in isolation, and do less end-to-end testing and more contract-testing. We can technically deploy independently any time we want... and safely and gradually release (e.g., with feature flags).
Dev3: What about freezes?
Ginger: We can still deploy without releasing. The risk is much lower when the code is only executed under conditions we fully control with a very low blast radius.
Dev4: What do we do when a frontend depends on a backend owned by a different team?
Ginger: We can have end-to-end ownership of capabilities within teams. That way we won't have to wait for another team to do a release to be able to make changes in a domain.
Dev2: What about other dependencies?
Ginger: When you're owning everything linked to a capability, you won't be affecting or depending on others as much.
Dev2: What about aligned releases for dependencies?
Ginger: There are no dependencies! Don't you get it? There won't be any dependency, or shared ownership of capabilities, or coupling between releases and deployments... because we can design our software and organization to be that way.
Dev1: In all my life I've never heard such a fantastic... load of tripe! Face the fact, people! It's not practical to do any of this. The chance of being able to pull this off is one in a million...
Ginger: Then there's still a chance.