Looking back on my work with Agile (Scrum, Scaling to the enterprise, implementing Kanban..) one of the biggest challenges was not the implementation of practices, but establishing a working self organization environment. A place where people can take responsibility of their own work, make improvements to what they see and alert if something is wrong.
We can implement Lean and Flow even with preserved specialization and silos. In the right contexts, this is valuable. However, in places where problem solving is needed and we are dealing with cross cutting constraints (architecture issues, platform and performance limitations) this it is not enough. Therefore, we need a cooperation model to enable this.
Another example is business interaction. How many times isn’t the biggest problem lack of cooperation between business and development? Handover of "complete" ideas(turning up to be impossible to do), refusal to prioritize business needs in a single list, difficulty of taking life cycle responsibility of investments decisions (..there is no such thing as IT and business, just business..)?
In all of these cases, we fail if we do not device a cooperation model together with the practices. In all successful cases I have seen described, Jeff Sutherlands Patientkeeper, David Andersons Corbis for example – there has been a working thriving cooperation model.
It might not always have been planned, but it was there (hopefully due to good management) and it enabled people to cooperate around problem solving, do continuous improvement and surface problems fast.