The best way, I think, is that management structure should follow the personality patterns of the people involved.
In general, in development at least, there are two types of people, those who have more social skills and those who are more technically oriented.
Looking back on all the places I have worked in my career, there was one place where that was really taken into consideration. Each project had a manager and a technical lead.
The manager's job was to interact outside the group, with customers and other groups. They collected requirements, dealt with solving personal conflicts within the group, etc.
The technical lead's job was to determine exactly how the technical work would be done. They assigned work to the appropriate people and determined exactly how requirements would be handled.
As far as I could see, both of these roles were handled by managers at Oracle. Usually, the manager was not technically proficient enough to make technical decisions. They seemed to me to be mostly interfering in the technical work in most cases, for political reasons. Instead of improving communication between technical people in their group with technical people in other groups, they seemed to try to prevent it from happening.
I think that management style has a lot to do with the failure of Oracle development to produce good work.
You have to work with human nature, some people are better at technical work and making technical decisions, and some people are better at ruling of social situations. These two roles should always be taken care of within each project.