The Doctor and the Demanding Patient
Imagine the following conversation between a doctor and a patient:
- Patient: “I want you to cut my arm off.”
- Doctor: “What’s wrong with your arm?”
- Patient: “It hurts. I’m tired of it. Just cut it off.”
- Doctor: “Let me see your arm. Hmmm. Looks like you’ve got a sprain or perhaps a hairline fracture. We should take some X-Rays.”
- Patient: “No, just cut it off.”
Even though the patient is the doctor’s customer/boss, also known as “the one who pays the bills”, you wouldn’t expect the doctor to behave unprofessionally. The conversation would most likely continue like this:
- Doctor: “Sir, I do not cut off healthy arms.”
- Patient: “But I’m paying you. You have to do what I say!”
- Doctor: “No, sir, I don’t. Cutting off your arm would violate my oath.”
Now, project this to software development and think about what would you do if you were asked to do something you know is wrong, violates your ethics, makes no sense at all, or it’s purely unrealistic.
Yet, many software developers often let their clients or boss corrupt their work and silently accept any of their demands, no matter how unreasonable. Such behavior may reduce the risk of a layoff or a lost contract, but it’s extremely unprofessional.
The difference between a laborer and a professional is that a laborer takes orders from his boss, and a professional provides input to his superiors. Laborers are hired to take direction. Professionals are hired to ensure that the direction chosen makes sense. – Robert C. Martin
Keep in mind that most customers/bosses/managers want the truth, even if they don’t always act like it. They defend schedules and business requirements with passion, and that’s part of their job. On the other hand, part of your job as a software professional is to defend code with the same passion.
Just to be clear, everyone’s ultimate goal is to deliver value to the business, and do it without doing harm. Hence, sometimes we have no other choice but to say no, even if it comes with a cost.