5

我赢得了一个项目的投标,现在客户(本身来自 IT 部门)希望我以非常特殊的方式构建/实施解决方案。我确信应用程序会因为性能问题而失败。而且它不容易扩展。

这个特定的客户/用户对我将使用的平台和语言(ASP.NET / SQL Server)一无所知。他唯一的知识是 Cobol,试图让他理解我的 POV 只会让他生气。

他联系了我。他是在竞标中选择我作为获胜者的人。他将批准我的支票。他是我与这家公司的唯一联系人。

我对提供一个我知道会失败的解决方案感到不舒服,我不想被称为导致它失败的愚蠢程序员。我确实知道他们对这个应用程序的真正需求和使用模式,因为我过去曾为他们做过项目。

另一方面,以他的方式这样做只会延长我的合同更多时间(因此,更多的经济收益),以便通过修改代码来解决问题。

我是否应该从这个项目中辞职,因为我可能会永远失去这个客户?

或者……</p>

我是否应该服药并从扩展项目中获得经济利益,而只是将坏名声视为成本?

4

14 回答 14

27

你从完全错误的角度看待这个问题。这不是来自对技术一无所知的客户提出的愚蠢要求。您认为这是一种设计约束,会在项目中引入风险。

因此,当您在项目中遇到风险时,您会做任何事情:定义风险、评估风险并推荐缓解策略。

  • 定义风险。 说它会导致“性能问题”和“不容易扩展”并不是定义风险。您需要准确说明您的意思。什么不会执行,为什么?什么规模的变化会遇到这些问题?
  • 评估风险。 好的,所以你认为有问题。有多糟糕?您如何确定这些性能问题会实际发生?如果他们这样做会对用户产生什么影响?您说程序无法扩展:规模的增长是否会暴露设计缺陷,即使在卡片中?最重要的是,你怎么知道这个? 在这里花时间构建和基准测试原型可以为您节省很多毫无意义的争论。
  • 推荐缓解策略。 实现这一点的正确方法是什么?为什么它是正确的方法?再说一次,你怎么知道的? 同样,原型设计是您的朋友。

做这个练习会产生一些事情。

首先,你可能会发现,虽然你对每一个细节都是正确的,但当你把它们放在一起时,这并不重要。是的,这个程序不会很好地执行或扩展,但如果它的预期用例都不会遇到这些问题,那么它很容易不值得解决。

其次,告诉某人“这不会执行,我只知道它”和告诉他“我对我们期望的用例进行了基准测试,看起来这种方法将导致四个——或每个用户事务的 5 秒响应时间。”

第三,如果你知道什么条件会导致软件失败,并且你向客户表达了这些担忧,而客户说“我们真的只是希望它以这种方式工作”,那么你已经履行了你的责任。如果由于客户选择不减轻您确定的风险而导致失败,那么没有人可以指向您并说这是程序员的错。

最重要的是,证据胜过观点。您已经将整个问题构建为您的意见与客户的意见的案例。这是一个失败的提议。您需要做的就是将其框定为“这是我们需要解决的问题”。要以这种方式提出问题,您必须证明问题的存在,为此,您需要证据。

最终,决定是否减轻风险的是客户,而不是您。您可以向他提供最好的信息来支持他的决定。而且你需要清楚地表明这是他的决定。

我发现,不止一次,一封简单的电子邮件完美地集中了注意力:

我一直在审查设计,我认为这里有一个风险需要我们讨论。[方法 A] 对交易量非常敏感,我担心我们将拥有足够多的用户,我们会遇到麻烦。

我使用 [Approach B] 进行了一个小测试,它的敏感度要低得多;在我的简单原型中,我能够从中获得每秒 X 笔交易。这是有道理的,因为[两种方法如何处理事情的技术比较]。

我特别担心这一点,因为[描述如果程序表现不佳将如何失败]。

这对我来说似乎是一个重大问题。如果是我,我会使用 [方法 B],因为 [描述这种方法将如何降低风险]。

但是你比我更熟悉[方法A],我很乐意在这件事上听从你的指导。你认为我们应该怎么做?

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.

于 2008-10-25T22:25:09.317 回答
6

我认为你需要和他坐下来,问一些澄清问题。

您将需要了解他为什么希望以这种特定方式实施它。您需要证明您希望提供满足业务需求的有效解决方案。

可能存在一些潜在的担忧,需要解决的问题,正如您所说,他可能只是不熟悉您提出的技术并且需要一些保证。

未能确保事情得到充分记录并签署。

于 2008-10-25T19:04:20.063 回答
4

选项1:走开,你们的关系已经很糟糕,而且不太可能改善。

但是,不要因为你想延长合同而这样做,这充其量是狡猾,最坏的是不诚实,但如果你需要合同......

选项 2:让他记录他的架构选择和原因,并将其作为规范签署。在合同中添加一个条款,说明您不保证使用他制作的规范的性能和/或可扩展性,然后按照他的方式实施。向他发送您喜欢的方法和推理的介绍。

如果项目失败(他可能是对的),那么你总是可以指出你告诉过他并提供了一个替代方案。

确保您真诚地实施他的架构,即不要故意让它失败。做早期的测试来证明你的观点,并确保他知道他们失败了。在项目的整个生命周期中向他发出明确的书面警告,说明项目正在偏离轨道。

祝你好运。认真考虑选项 1。与这个人进行一次不公开的心对心是值得一试的。

于 2008-10-25T19:16:03.830 回答
3

是否可以创建一个类似应用程序的小型原型来证明他是错的而你是对的?如果你有确凿的证据,谈话会容易得多。

于 2008-10-25T19:03:17.740 回答
3

我讨厌成为客户服务警察,但是将其称为“愚蠢的客户请求”可能是个坏主意,除非确实如此(在这种情况下,您应该毫无疑问地走开)。我认为更好的术语是“消息灵通的客户请求”。

考虑到这一点,请记住您的客户可能有真正的需求,您应该认识到这一点(口头上对他们)。这只是被他们(知之甚少)的解决方案想法所掩盖。稍微探究一下并尝试了解他们真正在寻找什么,然后提出一个您认为会更好的解决方案并解释为什么它会更好。这样做的方式是不要质疑客户的能力。没有人愿意与任何让他们感到愚蠢的人一起工作。

于 2008-10-25T19:14:25.987 回答
2

由于我不知道此处的详细信息,因此很难建议要采取的具体步骤,但这是我的想法:

如果你为他建造他想要的(而不是他需要的)并且你知道解决方案是错误的,那么你就是项目失败的同谋。如果你知道它行不通并且无法扩展并且无论如何你都要构建它,那么如果你最终成为项目失败的“替罪羊”并且没有得到更多的钱,那就不要感到惊讶下次做对。

如果这个人生气,可能有很多原因,其中之一可能是他不了解技术,这让他很困扰。但是,我不知道情况,所以谁知道呢?我个人宁愿让那个人生气并提出正确的解决方案并坚持正确的解决方案,而不是让他的情绪驱动船。

他可能是客户,他可能持有支票,但这并不意味着他聪明或正确。尽管有句老话,但客户总是错的。现在,你可以以错误的方式或正确的方式接近他,他可能会对两者做出相同的反应。但无论如何,你都想以正确的方式接近他。

如果最后他坚持要你按照他的方式去做,除了断言和情感之外什么都不能支持他的方式,我会礼貌地离开这份工作。这笔钱不值得,说实话。他可能会生你的气,但知道没有把他公司的钱浪费在问题的糟糕解决方案上,你可以睡得很好。

  • 说实话。
  • 听听他要说什么。
  • 不要让他的情绪影响你的判断。
  • 最后,做正确的事。

至少,我会这样做。

祝你好运!

于 2008-10-25T19:25:07.447 回答
2

边听边。_ 对客户方法的利弊真正感兴趣。

以客户可以理解的方式声明您自己解决问题的方法,并确保也记录您的方法的优缺点。

然后讨论与客户做事的两种方法,但不要以“你的方法很愚蠢,我是对的”的方式,而是真正感兴趣他的方法可能带来什么好处
如果您发现他的方法有问题,请询问他。但不是以“这行不通”的方式,而是好奇“这将如何扩展”。不要只是猜测他的想法,而是要知道事实和数据“这样做,这些情况下流量过多会不会有问题”?

你甚至可能学到一些东西。努力吧!最后,你可能不得不按照他的方式编码,如果你真正了解其中的陷阱会更好!

于 2008-10-25T19:51:39.327 回答
1

基本上只有你可以回答这个问题。你最了解你的客户和你的情况,如果你能找到一种方法来完成这项工作,这就是你的决定。

就个人而言,我会拒绝这个项目。如果他们想留住你,请解释为什么你不能按照规定的要求接受这个项目。

告诉他们,如果他们希望实施该项目,那么他们聘请了您的专业知识,而不是他们IT 部门人员的专业知识。

于 2008-10-25T19:03:39.487 回答
1

如果你觉得不舒服,那就走开。尽管我们有最好的祝愿和最好的建议,但我们之前一直被迫为客户提供特定的解决方案,这给我们带来了未来无尽的悲痛。

如果它是一个财务问题并且你“需要”这项业务,那么我肯定会从时间盒的角度来处理这个项目。

告诉他们在什么样的时间表内可以实现什么。确保您在达到不同的里程碑时以模块化方式获得报酬。至少这样,如果它对你来说没有赢家,它会给你机会在未来走开。

另一种选择可能是向他们展示按照他们的方式做这件事比你的成本高多少。

于 2008-10-25T19:04:58.533 回答
1

只需提出您的解决方案并解释(借助演示文稿/文档)为什么它是更好的解决方案。或者甚至用它做一个原型。

如果您证明了这一点,您的客户应该了解您在该领域具有技术领先地位,并信任您。

于 2008-10-25T19:07:09.357 回答
1

如果您需要客户,他也需要您(可能更多)。毕竟,他是选择了你的人。他是需要解决问题的人。

表明你不会被他关于“如何”工作的指示所支配——做什么当然是他的召唤。您可能会看到一些冰融化。

于 2008-10-25T19:08:52.487 回答
1

我建议与他尝试一些误导策略。让他知道您对他的方法有什么顾虑,并为他提供一些适合您和他的需要的其他解决方案。尽量避免咄咄逼人(不要说他错了),但要说你认为有一个更好的解决方案可以整合你的两种选择。

尝试练习“口头柔道”。与他对抗并不会让你得到任何分数,只会让他更加确定你只是在为难。同意他的观点,就共同的想法建立融洽的关系,然后温柔地引导他走向你的解决方案。

于 2008-10-25T19:09:50.193 回答
1

制定一份包含您的顾虑的合同,即使由于客户的错误决定而导致失败,他们也会支付这笔钱。然后让他们签字。

不过,请务必由经验丰富的律师执行该合同,因为它很容易出现轻微错误,因此法院会通过您,如果情况变得更糟并且您需要起诉钱财。

在签署之前让客户了解合同中的那部分,也许他们会重新考虑。

或者,不要像其他人建议的那样经历所有这些麻烦:保释,走开,或者更好的是:逃跑。以你最快的速度。除非它真的是很多钱,否则卖掉它是不值得的。

(编辑:该死,西蒙领先我几秒钟。)

于 2008-10-25T19:16:47.993 回答
1

除非我饿了,否则我会放弃这个项目。作为一名顾问,我觉得我给客户带来的唯一价值是我拥有的知识(而他们没有,否则他们不会雇用我)。从事我“知道”会失败的事情会违反顾问的道德准则(如果有的话)。

我会尽我最大的努力说服客户他的方式可能会失败,然后我会尽我最大的努力找到其他人为他做这项工作。

于 2008-10-25T19:54:31.523 回答