Design, production, and development all are moderately adversarial.
A good designer *CAN* write designs that are beyond the scope of production resources and beyond the scope of development talent, but also *CAN* write game designs that push the envelope of both. A good design uses all the resources completely without going over.
A good development team will both be adversarial and offer constructive improvements. They'll review designs as they are made, make realistic and accurate estimates, essentially turning the designer's dreams into a shopping list.
A good production team will work with the designer so they know all the resources available to them, and give them all that is reasonable. They'll tell the designer how much budget they have for each resource, so they can pick and choose from the shopping list.
A designer might have 14 programming days and 8 modeling days and 17 animation days and 4 audio days and certain requirements from QA and from localization, then they'll need to pick and choose from the shopping list to find features that use them all. So they'll pick something that takes 4 hours here, and 7 hours there, and 2 hours somewhere else, and ensure all the hours are spent.
All three groups should be constantly pushing back against each other, but also pushing themselves to make the best game possible. The developers (programmers and art folk) should look at the grand designs and say "I cannot quite do that, but I think I can meet the spirit of your design by doing something slightly different.". The developers should also suggest extra content as appropriate, "I think this extra feature might fit the theme and it only takes two hours, but I don't see it in your design, have you considered adding it?" The production folk should try to fill up the the schedule all the way and use all the resources, and only push back when something is over scope to get it down to scope.
When all the groups are working together the designs will be discussed and reviewed so everybody understands and agrees with the project going in. Sometimes there will be good designs that don't survive the process (we have called the process 'drowning puppies') and it can be painful for everybody who has a stake in it.
If any one of the groups (design and design lead, production and production lead, developers and programming lead and art lead and QA lead) have difficulty pushing back on the other groups there will be problems. Conversely, if any of the groups give in too easily there can be problems.. It can mean products are over scope and need features cut late. It could mean features are not good enough or you have underscheduled; of all the problems this is the easiest to deal with, but it can be frustrating especially for designers. Using too many or too few resources can frustrate producers who need to keep schedules coordinated. It is an important system to balance.
Good teams that are generally cooperative but assertive enough to constructively push back are wonderful environments to work.