03 Mar 2024
This post describes two different approaches to managing software releases across multiple teams.
It’s important to understand which teams are downstream of others, i.e. which teams can bring their code live before the others without risk. For example, if Team1 manages a GUI that accepts orders, and Team2 manages a backend system that executes orders, then Team2 is downstream of Team1. It can add the feature to execute orders without breaking anything, though the feature might not actually be used yet. Team1 cannot safely add the feature before Team2, because users will see it and try it, and it won’t actually work.
If teams agree to change an existing integration which is already being used in production, then the downstream system should support both the old and the new integrations, and only decommission the old integration after its upstreams have stopped using it. This avoids coupling releases across teams, and is especially good if one of the teams needs to rollback their release.
For frequent integration, there should be a person or process for managing the larger inter-team release. Each sprint, they should determine which teams are participating, and schedule the participating downstream releases first.
This approach is best when most sprints involve more than one team.
When one team needs changes from other teams, but not frequently, extra care is required. Often those other teams might be slow to release, or might not communicate well regarding their releases.
The simple and robust thing to do, is to be paranoid, and have the downstream system work both with and without the changes in the upstream system. Rely on automated tests to prove that the new code will continue to work against the old integration.
In both approaches, teams test all their changes together in a test environment before releasing them to production. This doc describes how to transition the production environment to have the same configuration as that tested configuration. Generally intermediate configuations are not manually tested in any pre-production environment. For example, no company manually tests downstream Team2’s changes in isolation, before Team1’s have been made. Instead this is handled by automated regression tests, and production checkouts after release.
RSS