This is one of those dark arts that geeks know about but usually refuse to even acknowledge. There is a lot of stuff that happens in the middle of the software development process that is so far away from the objective that it drives certain personality types absolutely crazy. This is why there are so many programmers that are either really wild alpha types or so completely laid back that it makes you wonder why they bother going to work. We (programmers) like thinks that are absolute because that’s how programming works: I tell the application to do something, and it does it. If it doesn’t do it, it’s a bug. If I tell it to do the wrong thing, it’s MY bug. Office politics are nowhere as black and white as programming, and office politics drive all processes.
The alphas will stand their ground until death, until either everyone else sees their way, or the alphas get canned in exchange to somebody more malleable. This is not a bad thing, because a lot of those alphas will refuse to leave the business and will opt to fly solo, set up their own shops, etc. This eventually drives innovation and competition.
The super laid back types just let the customer fuck himself, if the customer asks for crazy the programmer dutifully provides crazy. Why? Because the laid back programmer gets paid the same to care or to not care as long as the work gets done. If the customer fucks up, they will either eat crow and ask for a revision at their expense, or throw the programmer under the bus to save face, then ask for the revision still at their expense. The smart project manager knows this, and makes sure that the programmers understand the game too. Everyone plays along, the project takes 5 times as long to wrap up and everyone on both sides gets paid. It’s a convoluted process that somehow doesn’t implode as long as the project is eventually completed. The alphas don’t like getting thrown under the bus, the laid back types couldn’t care less, they just want to move on to the next thing.