We have a large system now, and we need to scale it. It also has to be maintainable. At this point, the concerns aren't only technical but also organizational. This means it's not just about managing software repositories; each repository will most likely belong to an application, and it will be maintained by a team who owns that part of the system.
This demands we keep in mind how a large system is divided into different components. This can have many phases, from a very simple approach about, say, creating Python packages, to more complex scenarios in a microservice architecture.
The situation could be even more complex when different languages are involved, but in this chapter, we will assume they are all Python projects.
These components need to interact, as do the teams. The only way this can work at scale is if all the parts agree on an interface...