For decades, I worked in an industry where you were never allowed to say no to a user, no matter how ridiculous the request. You had to suck it up and figure out a way to deliver on insane requests, regardless of the technical debt they inflicted.
Users are a funny breed. They say things like I don’t care if the input dialog you have works; the last place I worked had a different dialog to do the same thing, and I want that dialog here! With only one user saying stuff like that, it’s semi-tolerable. When you have 700+ users and each of them wants a different dialog to do the same thing, and nobody in management will say no, you need to start creating table-driven dialogs (x-y coordinates, width, height, label phrasing, field layout within the dialog, different input formats, fonts, colors and so forth). Multiply that by the number of dialogs in your application and it becomes
needlessly pointlessly impossibly difficult.
But it never stops there. Often, one user will request that you move a field from another dialog onto their dialog – just for them. This creates all sorts of havoc with validation logic. Multiply it by hundreds of users and you’re basically creating a different application for each of them – each with its own validation logic, all in the same application.
After just a single handful of users demanding changes like this, it can quickly become a nightmare. Worse, once it starts, the next user to whom you say no tells you that you did it for the other guy and so you have to do it for them too! After all, each user is the most important user, right?
It doesn’t matter that saying no is the right thing to do. It doesn’t matter that it will put a zero-value load on development and debugging time. It doesn’t matter that sucking up development time to do it means there are less development hours for bug fixes or actual features.
When management refuses to say no, it can turn your code into a Pandora’s-Box-o-WTF™
However, there is hope. There is a way to tell the users no without actually saying no. It’s by getting them to say it for you and then withdrawing their urgent, can’t-live-without-it, must-have-or-the-world-will-end request.
You may ask how?
The trick is to make them see the actual cost of implementing their teeny tiny little feature.
Yes, we can add that new button to provide all the functionality of Excel in an in-app calculator, but it will take x months (years) to do it, AND it will push back all of the other features in the queue. Shall I delay the next release and the other feature requests so we can build this for you, or would you like to schedule it for a future release?
Naturally you’ll have to answer questions like “But it’s just a button; why would it take that much effort?”
This is a good thing because it forces them down the rabbit hole into your world where you are the expert. Now you get to explain to them the realities of software development, and the full cost of their little request.
Once they realize the true cost that they’d have to pay, the urgency of the request almost always subsides to nice to have and gets pushed forward so as to not delay the scheduled release.
And because you got them to say it for you, you didn’t have to utter the word no.
– Provision your servers automatically without ever needing to log-in to a command prompt.