Have you ever been midway through a software development project, and had your client request a change in features?
That never happens in software development - said no one EVER, right!? Because it happens pretty much all the time.
I've noticed a fairly consistent reaction from the developers on said project, which is to resist strongly and throw up all kinds of creative reasons why the change can't be implemented, or would take a very long time. And I get it. I've been one of those developers. I know what it's like to put your heart into something and then have a client change direction on a whim.
But it's our job to make the client happy.
At the end of the day, if we're really honest with ourselves, we can make software do just about anything. Sure, it always comes with a price tag, but given enough money, or time, we can usually build something that will make our client happy.
It doesn't mean we have to agree to build it in the same timeframe, or with the same number of developers. We can and SHOULD negotiate those aspects of the project. If a client wants additional requirements, then it's completely reasonable to expect an extended delivery date, or to trade for other features if the delivery date can't be touched.
As professional developers, we need to be more willing to cooperate with our project managers, and give them the information they need in order to properly set expectations with clients.
So the next time your project manager asks you how much effort it would take to build a fancy extension for the widget you've poured countless hours into building, just smile and remind yourself that it's just software... and we can make it do whatever the hell we want.