I've had this debate in the office. It is, potentially, one of the start examples of where "service oriented architecture" shines. Define the service interface between the teams, and let them do the rest.
Unfortunately, it is too easy to actually talk of a shared infrastructure design. As soon as you have a shared message queue/repository or some other piece of infrastructure, you no longer have a solid contract between teams where each can operate independently of the other.
Oh for sure, this is way easier to say than do. More often than not some team's interface isn't quite what you need, so then you have to have some way of working between teams to make sure the interfaces improve, and then what do you do while you wait for that to happen?
But I've seen large orgs that at least strive for this ideal vs orgs that have thrown their hands in the air and given up. One is definitely a lot easier to operate in.
Unfortunately, it is too easy to actually talk of a shared infrastructure design. As soon as you have a shared message queue/repository or some other piece of infrastructure, you no longer have a solid contract between teams where each can operate independently of the other.