Is the customer always right? And if he is not, what do you do? One of our Software Development Leads faced this dilemma in almost an “Arjuna moment”..
(In the epic Mahabharata, as Arjuna stood ready for battle facing an army composed of his own family members, he wondered whether it was right for him to fight the battle at all. This dilemma froze his legendary skill and warrior will into non-action)
(you can skip this section which has some technical details)
The client wants to make a mobile-compatible version of their web site. The web site is an online e-commerce site, developed using Adobe ColdFusion server technology.
Client priority is to get the mobile site out as quickly as possible. The thought process is to reuse as much as possible ColdFusion code developed for main web site, while generating a screen-compatible and down-sized mobile “face”. The strategy he suggested was to use front-end CSS scripts that would be added for mobile access only. Pages would be processed and downloaded exactly as the main web site. Then the additional CSS would also be downloaded on detection that page was being accessed from mobile. This CSS would do front-end browser-level manipulation (such as menu manipulation, image size and so on) to give an entirely different look and feel to pages, suited more to mobile screens.
While client wanted to follow this strategy, our technical and professional opinion said otherwise. Our Lead had tried to explain to client that this was a sub-optimal approach in the long run. Entire pages being downloaded and then “mobilized” using front-end CSS was essentially a trick with high bandwidth impact and soaring expense on data plans.
The real solution would be to restructure the application to move logic to sets of ColdFusion Components (CFCs) and use those from ColdFusion. ColdFusion code would be separate for mobile and normal web pages, and site redefinition should be done to evolve mobile-relevant functionality and pages. In short, a proper path to a mobile site.
You have a situation where client wants to follow technical path X, which has disadvantages. And there is a longer path Y, which is the correct technical approach. What do we do? Should we do X just because client says so? Or should we do Y because that is the “right” way to do it?
Clients make choices based on a wider set of thoughts and priorities, some of which we may not be aware of. There may be a trade show the client wants to attend, or venture capitalist they need to meet, and they need a “quick and dirty” mobile-enabled site rather than a true solution. Maybe the client has thoughts on how a split code-base may cause maintenance and consistency issues, in spite of code restructuring for logic centralization. Maybe the client is not savvy enough to understand the technical aspects of both solutions. Maybe the client is simply not smart enough. Many possibilities exist.
Although we work in 1’s and 0’s, the real world is not binary. There is no black and no white, it is a range of greys. There is no right and no wrong, it is a range of possibilities.
A client’s choice is not necessarily wrong just because it is not the technically superior solution – there may be aspects we are not aware of. When you understand those aspects, perhaps you would make the same choice in his shoes. Perhaps the same choice is correct in his context, even if it is wrong in isolation or in our opinion. And finally, the client may make a wrong choice – after all every human (including us) is born with the right to make wrong choices.
As self-respecting professionals, following something blindly is, to say the least, a criminal sin. Client or no client, we need to know and express our opinion based on facts and expertise. We cannot accept day as night just because client says so. Doesn’t matter if he is the client, if something is wrong it is wrong. We are professionals, not clerical staff to follow orders blindly.
However, at the same time, we do have to accept client choices. This is a simple and fundamental truth. We do not work in isolation. We work for clients. Clients pay for work with their hard-earned money, and if a client makes a choice we do not agree with or understand, we still have to follow the client decision.
So what does this mean, how can you do both?? How can we preserve our professional integrity and yet accept something that goes against our professional opinion?
The answer is simple.
Before choices are made, our duty is to advise the client, to update him with our professional advice and informed opinion on negatives and positives of available options.
Once a choice is made, our duty is to do. Our duty is to align and focus and do as per client choice, even when we professionally disagree with that choice.
Who gets to make the choice? The client.
Why? Not because he is paying and is the client – that is an immature and misdirected thought process. But simply because the work is being done for him, and only he knows the entirety and facets of the situation and conflicting priorities, and can make the choice that is right or wrong for what he is trying to achieve.
The customer is NOT always right, and it is our job to express that opinion to customers openly instead of blindly accepting whatever customers say. But it is also our job to respect customer decisions once they are made.
What do you think?
(This incident and thoughts reflect some opinions, beliefs and a way of looking at things. I hope sharing these will lead to debate and discussion)
Author – Chinmoy Panda