This depends on the organisation, the team itself, the team-lead, the level of leadership vs direction that are in play. In an ideal world, it should function like the Beatles... "whoever had the best song idea is the one we used" but more often than not you will find a somewhat curtailed level of design autonomy when it comes to software development...
Of course this leads to the gripes, disagreements, factions forming, enemy-of-my-enemy, work to rule, I'm outta here scenarios depending on the gravity of the situation. Professionally we all like to think we're right, yet sometimes we'll do things and implement choices we believe thoroughly wrong because the decision is out of our hands or budget, or you simply no longer care enough to put up a fight. Moral high-horsing about walkouts are fine in print, not so fine when you've houses, cars, kids to pay for etc...
As a manager, I try not to stamp out all friction, some can be very good, productive, educational and motivating actually, it's a case by case scenario. Naturally, anything serious or detrimental must be handled and delicately, but difference of opinion and a little loose rope to see how it pans out needn't be a bad thing.
I'd rather have a team 'burdened' by respectful disagreements than a group of sheep waiting to have orders barked at them. A handy 'fire-blanket' I've used before is to take a losing idea, explore the merit of it and see where else we could use it assuming it's not a useless idea.