The bigger a company gets and the bigger your IT department gets there will be more talk about governance and efficiency. That usually requires lots of meetings, coordination between teams and organizing the teams by layers.
The result of such an organization is that is moves much slower and there is very little fun in developing and delivering software.
I recommend a very different approach where the whole org is split into very small teams (I think agile got that size right in 7-9 people) that are 100% independent and work on a full vertical app. If the apps need to exchange data that should be done via web based APIs that are available both between apps and externally as a public API. Every team should own everything, from the tech tools they use to the production deployment, infrastructure and support.
Rather than getting approvals from a lot of people that can take weeks I recommend having a set of guidelines/patterns and built ins that every app should follow and have:
– a clear specified API contract that has automated tests that test both the contract functionality and SLAs (non functional requirements)
– monitoring hooks that all apps must have
– everything must be scripted and automated as part of the deployment pipeline
This way every team can experience with the right tools for their app features and problems and need no approvals and coordination with other teams. They will have a lot of fun, be proud owners of the apps (no handover to ops or prod support), can move as fast as they need and pay the price of long hours if they deliver poor quality code, but that will most likely not happen for long as they will learn to not repeat the same mistakes in the nest release.