views:

599

answers:

15

I won the bid on a project and now the client (who is itself from IT Department) wants me to architect/implement the solution in a very particular way. I am sure the application will fail that way for performance problems. And it will not be easily scalable.

This particular client/user does not know ANYTHING about the platform and language I will be using (ASP.NET / SQL Server). His only knowledge is in Cobol and trying to make him to understand my POV is just making him angry.

He contacted me. He was the person who selected me as a winner on the bid. He is who will be approving my checks. He is my only contact with this company.

I do not feel comfortable with providing a solution I know will fail and I do not want to be known as the stupid programmer who make it fail. I do know their real needs and usage patterns for this application because I have done projects for them in the past.

On the other hand, doing this in his way will just extend my contract more time (so, more financial gains) in order to solve the problems by modifying the code.

Should I resign from the project knowing that probably I will be losing this client forever?

Or…

Should I take the pill and take financial advantage from an extended project and just assume the bad fame as a cost?

+3  A: 

Is it possible to create a small prototype like application to prove that he is wrong and you are right? Talk is a lot easier if you have solid proof.

Gamecat
+1  A: 

Basically it is only you that can answer this question. You know your client and your situation the best and if you can find a way to make this work, it's your call.

Personally, I would decline the project. If they want to keep you, explain why you can't take the project under the requirements set forth.

Tell them that if they want you to implement the project, then they hired your expertise, not the expertise of their guy in the IT department.

Lasse V. Karlsen
+6  A: 

I think you will need to sit down with him, and ask some clarifying questions.

You will need to get at WHY he wanting to have it implemented in that particular fashion. You need to demonstrate that you are wanting to deliver a working solution that meets the business needs.

It's possible there is some underlying concerns, issues that need to be addressed, as you stated he may just not be familiar with your proposed technologies and needs some reassurance.

Failing that make sure things are fully documented and signed off on.

Brian Schmitt
+1  A: 

If you don't feel comfortable then walk away. We've been shoe horned into providing a specific solution for clients before despite our best wishes and best recommendations and it has caused us no end of grief in the future.

If its a financial issue and you "need" the business, then I'd definitely approach the project from a time-boxing point of view.

Tell them whats achievable in what sort of timelines. Make sure you get paid in a modular fashion as you hit different milestones. At least that way, it gives you oppurtunity to walk away in the future if it becomes a no-winner for you.

Another option might be to show them just how much more costly it would be to do it their way than yours.

Eoin Campbell
+1  A: 

Just propose your solution and explain (with the aid of presentations/documentation) why it's the better one. Or even do a prototype out of it.

Your client should understand, if you prove it, that you have technical leadership in that field, and trust you.

friol
+1  A: 

If you need the client, he needs you as well (probably more). Afterall, he is the one who selected you. He is the one who needs a problem to be solved.

Take a stand that you will not be dictated by his directions on 'how' to do work - what to do is certainly his call. It is likely that you will see some ice melting.

Ather
+1  A: 

I would recommend trying some misdirection tactics with him. Let him know what your concerns are with his methods, and offer him some other solution which will suit both your needs and his. Try to avoid being aggressive (Don't say he's wrong), but say that you think there's a better solution that integrates both of your options.

Try to practice "Verbal Judo". Being confrontational isn't going to net you any points with him, and is only going to make him more certain that you're just being difficult. Agree with him, build a rapport over common ideas, and then gently lead him down the path towards your solution.

Adam N
"verbal judo" - I like it. It's a bit less cheesy than the "tongue fu" one of my former HR reps used to always talk about.
Jason Baker
+3  A: 

I hate to be the customer service police, but talking about this as a "stupid client request" is probably a bad idea unless it really is (in which case you should walk away without question). I think a better term would be "ill-informed customer request".

With that taken into consideration, remember that your client probably has a genuine need and you should recognize that (verbally to them). It's just disguised by their (poorly informed) idea for a solution. Probe a bit and try to get at what they're really looking for, then propose a solution that you feel would be better and explain why it would be better. And do so in such a way that you're not calling the client's competence into question. Nobody wants to work with anyone that makes them feel stupid.

Jason Baker
Great way of putting it, I was attempting to say the same thing, but you put it a little more eloquent.
Brian Schmitt
+4  A: 

Option 1: Walk away, you already have a bad relationship and it is unlikely to improve.

However, don't do it because you want to prolong a contract, that is at best sly and at worst dishonest, but if you need the contract...

Option 2: Ask him to document his architecture choices and reasons and sign them off as a spec. Add a clause to the contract saying that you do not guarantee performance and/or scalability using the spec he has produced and then implement it his way. Send him a presentation of your favoured approach and reasoning.

If the project fails (he could be right) then you can always point out you told him so and offered an alternative.

Make sure that you implement his architecture in good faith, i.e. don't make it fail deliberately. Do early tests which prove your point and make sure he knows that they are failing. Give him clear written warnings throughout the lifecycle of the project that it is going off track.

Best of luck. Seriously consider option 1. An off-the-record heart to heart with the guy is worth trying.

Simon
+1  A: 

Draw a contract that contains your concerns and that makes them pay the money even in case of failure due to the bad decision of the client. Then make them sign it.

Make sure to run that contract by an experienced lawyer though, because it is easy to get it slightly wrong so that a court will through you out, if bad comes to worse and you need to sue for the money.

Make the client aware of that part in the contract prior to signing, maybe they will reconsider.

Or, instead of going through all this trouble, as others have suggested: bail, walk away, or better: run. As fast as you can. Unless it is really a lot of money, then it wont be worth it to sell out for it.

(Edit: darn, Simon beat me by some seconds.)

HS
+2  A: 

It is hard to suggest specific steps to take since I don't know the details here, but here are my thoughts:

If you build him what he wants (and not what he needs) and you know that the solution is the wrong one, then you are complicit in the failure of the project. If you know that it isn't going to work and won't scale and you build it anyhow, then don't be surprised if you end up being the "fall guy" for the project failure and don't get more money to do it right the next time around.

If the guy is getting angry, it could be for many reasons, one of which could be that he doesn't understand the technology and that bothers him. But, I don't know the situation, so who knows? I personally would rather get the guy angry and propose the right solution and insist on the right solution than to let his emotions drive the boat.

He may be the customer and he may hold the check, but that doesn't make him smart or right. Customers are wrong all the time, despite the old adage. Now, you can approach him the wrong way or the right way and he might react the same to both. But you want to approach him the right way regardless.

If, in the end he insists that you do it his way and can't support his way with anything but assertions and emotion, I'd politely walk away from the job. The money isn't worth it, honestly. He might be angry with you, but you can sleep well knowing that you didn't waste his company's money on a bad solution to the problem.

  • Be honest.
  • Listen to what he has to say.
  • Don't let his emotions cloud your judgment.
  • In the end, do the right thing.

At least, that is what I'd do.

Best of luck!

itsmatt
+2  A: 

Listen and learn. Be genuinely interested about the pros and cons of your clients approach.

Declare your own approach to the problem in a way the customer can understand make sure to document pros and cons of your approach, too.

Then discuss both ways to do stuff with the customer, but not in a 'your approach is stupid and I am right' way, but be genuinely interested what benefits his approach might bring.
If you see a problem in his approach, ask him. But not in a 'this won't work' way, but instead be curious 'how will this scale'. Don't just second guess his idea, instead know the facts and figures 'done this way, won't there be problems with too much traffic in these and these cases'?

You might even learn something. Try hard to! In the end, you might have to code it in his way, and it will be better if you really understand the pitfalls!

Sam
+1  A: 

I'd bail on the project unless I was starving. As a consultant myself, I feel the only value I bring to the customer is the knowledge that I possess (and that they don't, or else they wouldn't be hiring me). To work on something that I "know" is going to fail would violate the consultant's Code of Ethics (if there were one).

I would try my hardest to convince the client that his way is likely to fail, and then I would try my hardest to locate someone else to do the job for him.

MusiGenesis
+20  A: 

You're looking at this from the entirely wrong perspective. This isn't a stupid request from a client who doesn't know anything about technology. It's a design constraint that you think introduces risk into the project.

So you do whatever you do when you encounter risk in a project: Define it, assess it, and recommend a mitigation strategy.

  • Define the risk. Saying it will cause "performance problems" and "will not be easily scalable" is not defining the risk. You need to specify exactly what you mean. What isn't going to perform, and why? What changes in scale will will encounter these problems?
  • Assess the risk. Okay, so you think there's a problem. How bad is it? How certain can you be that these performance problems will actually happen? What will the impact be on the users if they do? You say the program can't scale: is the growth in scale that will expose the design defect even in the cards? Most importantly, how do you know this? Here is where taking the time to build and benchmark a prototype can save you a lot of pointless argument.
  • Recommend a mitigation strategy. What's the right way to implement this? Why is it the right way? Again, how do you know this? Again, prototyping is your friend.

A couple of things will come out of doing this exercise.

First, you may discover that while you're right about every particular, when you put them all together it doesn't matter. Yes, this program's not going to perform well or scale well, but if none of its projected use cases are going to run into those problems, it could easily not be worth solving them.

Second, there's a world of difference between telling someone "This isn't going to perform, I just know it" and telling him "I benchmarked the use cases that we expect, and it looks like this approach is going to result in four- or five-second response time per user transaction."

Third, if you know what conditions will make the software fail, and you articulate these concerns to the client, and the client says "We really just want it to work this way," you've discharged your responsibility. If this fails because the client chooses not to mitigate the risk you've identified, nobody can point to you and say it was the programmer's fault.

Above all, evidence trumps opinion. You've framed this entire question as a case of your opinion versus the client's. That's a losing proposition. What you need to do is frame it as "here's a problem that we need to solve." And to frame the question that way, you have to demonstrate the existence of the problem, and for that, you need evidence.

Ultimately, it's the client who decides whether or not a risk should be mitigated, not you. It's up to you to give him the best information you can to support his decision. And you need to make it clear, without being a dick about it, that it's his decision.

I've found, on more than one occasion, that a simple email focuses the attention perfectly:

I've been reviewing the design, and I think there's a risk here that we need to discuss. [Approach A] is really sensitive to transaction volume, and I'm worried that we're going to have enough users that we're going to run into trouble with it.

I ran a little test using [Approach B], and it's a lot less sensitive; in my simple prototype, I was able to get X transactions per second out of it. This makes sense, because [technical comparison of how the two approaches handle things].

I'm especially worried about this because [describe how program will fail if it performs poorly].

This seems like a significant problem to me. If it were me, I'd use [Approach B], because [describe how this approach will mitigate the risk].

But you're much more familiar with [Approach A] than I am, and I'll happily defer to your guidance on this matter. What do you think we should do?

This message very clearly says "If you disregard what I'm telling you, here's how the project is going to fail, and I'm going to have documentation demonstrating that you told me to do it that way." It also doesn't actually say that.

Robert Rossney
If there were a star for favourite answers, this one would surely get one! :)
hangy
Good well thought out answer. Was helpful to me.
metanaito
A: 

Thanks a lot to everybody. I have learned very useful and valid approaches and points of view. I up-voted every answer. All of them deserve it.

vmarquez