I've seen many different way of working, but in most case, there is a responsible for everthing.
- One team responsible of deployment
- One team responsible of analysis
- One team responsible of coding
- One team responsible of database management
- One team responsible of documentation
- One team responsible of reviews
- One team responsible of architecture
- One team responsible of hiring
- and so on...
Of course you have a responsible of the responsible team, and of course a reponsible of responsibles, and often responsibles of responsibles of responsibles...
Everyone has send a written request to the other responsible for anything. Some organization even invest in heavy and complicated workflow systems.
Since everyone is evaluated on his personnal performances, and that's the only way to get promoted or get a salary increase, everyone try to protect themselve from external requests and make choice based on how they will be evaluated.
It's almost impossible to have a successful software project in such organizations. (success = in time and in budget).
It is also an environment where a decent programmer wouldn't work in.
I've been able to improve some of the problems by implementing Scrum and other agile like methodologies such as Scrum, Lean, XP... So that's my answer:
To solve most large enterprise weaknesses, agile is a best practice