您是否应该承诺提供不确定是否可实现的功能?


13

HN一篇文章中,我遇到了以下建议:

即使不确定,也请始终对客户/用户说“是”。90%的时间,您会找到一种方法。10%的时间,您会回去道歉。以小价钱支付个人的主要成长

但是我一直认为,对客户/用户做出任何形式的承诺之前,应该进行可行性分析,以使它们在任何时候都不会被误导。那么,在什么情况下上述建议应适用?


20
在编程中,一切皆有可能。请记住,“是”不是对“需要多长时间?”的答案。
史蒂文·埃弗斯

9
@SnOrfus:有些问题根本无法解决。如果您认为不是这样,请编制一个天气预报例程,该例程将告诉您我们是否有白色圣诞节。
罗伦·佩希特

5
@Earlz:这是假设宇宙是确定性的,不一定是正确的。
whatsisname 2012年

4
对不起,不可能。7至10天后天气变得混乱。有一篇非常著名的论文,主题是“可预测性:巴西蝴蝶翅膀的襟翼会在德克萨斯州引发龙卷风吗?爱德华·洛伦兹(Edward Lorenz)着。
大卫·哈门

26
如果程序员要兑现他们无法兑现的承诺,那么销售人员会做什么?
JeffO 2012年

Answers:


20

这是该文章短时间内引发的第二个问题。

  • 好的程序员:我优化代码。更好的程序员:我构造数据。最佳程序员:有什么区别?
    这个还有另一个名字:过早的优化。

  • 切勿使用早期出口。
    这就是“单入口点/单出口点”规则。这是解决实际问题的补丁,那就是提早离开可能会造成混乱。正确的规则是“清理混乱”。更好的规则是使用可自行清理的数据构造,以便程序员不必担心清理其混乱情况。

  • 现在,即使您不确定,也要始终对您的客户/用户说“是”。90%的时间,您会找到一种方法。
    这也是非常糟糕的建议。

有时需要告知您的客户不,或者“您要在哪个千年中做到这一点?” 不要承诺会破坏您的架构,成本远远超过客户愿意花费的东西,或者您不知道如何实现它。您知道技术,而不是客户。如果您不知道该怎么做,请不要说您可以做到。如果不确定,请说您需要时间研究是否可行。老实说最好,这样可以避免麻烦。

如果您无法兑现承诺,那么客户很快就会成为前客户。10%的故障率听起来可能很小,但是您的客户将专注于10%的故障率。有时,他们在您无法兑现承诺时提起诉讼。你真的不想要那个。在其他时候,确保您履行诺言会使您破产,精神错乱或失去配偶,因为您每天工作18小时。您也不想要那个。

这样想:如果90%的飞机着陆成功,您会对航空业产生什么看法?您是否认为回头道歉并为崩溃的10%道歉能够解决问题?


2
+1我没有看过较早链接的列表,这很好地指出了那里确实存在一些糟糕的建议。这个家伙可能是一个很好的开发人员,但我不知道,但是他确定他是一个好兆头,而这个建议看起来像是来自每月IT经理人的抹布。
吉米·霍法

+1-我从不对客户说“不”(除非我不想再见到他们)-它始终遵循“这将花费X美元”,“您的技术堆栈不支持”的句法。 “否”关闭该问题。使用打开它的响应进行进一步讨论。例如“ ...但是我可以以10%的成本给您90%的价格”或“...。但是我可以以这种方式实现它并为您提供以这种方式工作的解决方案...。”
mattnz

1
@mattnz-很难说“不”,但有时是必需的。“你明天能完成这项改变吗?” 好吧,不。但是我可以在一周结束时得到它。“您能否对每次运行随机改变的数百个控制变量进行蒙特卡洛分析?” 那就是获得“您想要在哪个千年中取得结果”响应的响应。我讨论了维数的诅咒,并建议我们将其减少到合理的水平。你怎么说的不重要很重要,但是有时候你不得不说不。当然是外交上的。
大卫·哈曼

10%的失败率将是对当前平均软件交付成功率的巨大改进。
格雷厄姆(Graham)

关于飞机着陆类比-飞机每天安全着陆。如果我是飞行员,并且回答“我可以就此告诉您”,我是否可以安全地降落飞机,就不会与乘客购买任何业力。即使我知道降落事故的几率很小,这也是一个很好的例子,表明对飞行员的能力表现出信心比关注失败的几率更重要。
悬崖

24

最好说“我认为可以做到”。或“我会检查并与您联系”。我曾经有几次我拒绝或反对提出建议。如果客户希望“基于浏览器的应用程序能够正常工作,而无需连接到Internet并使用触觉反馈”,则可能是可行的。但这很昂贵,讨论实际需求是有用的。

如果您诚实,客户将尊重您。在问题的建议中,人有10%的时间是错误的。如果我与经常犯错的人(十分之一)一起工作,我将完全不信任他(她)。那是一个糟糕的记录。


17
通常最好确保客户告诉您他们想解决什么问题..而不是让他们对他们想要解决方案大加赞赏。解决问题..并告诉他们解决方案。
西蒙·怀特海德2012年

+1和更多-您要说的两个非常好的观点-永远不要说“不”,也不要失去与客户之间的信誉。
mattnz 2012年

+1“如果您诚实,客户将尊重您”。这个说法是真实的,值得金。向客户介绍选项时,请诚实。只需告诉他们,他们所要的不是您可以购买和插入的某些预制小部件。让他们知道他们正在寻求定制的解决方案,而定制软件非常昂贵。这通常导致发生两件事之一。1.)他们想要一个经济有效的选择。2.)他们愿意为定制解决方案付费。无论哪种方式都是双赢。
迈克尔·赖利

6

承诺月球和运送石头是一种推销员的方法,不应容忍。如果您不知道是否可行,请进行研究。或者,请给他们提供您需要花费的调查时间的报价。这样,您就不会承诺无法交付的任何东西,但是您会花大量的时间调查它。


6

这个问题已经被正式研究,并由联合出版的IEEE计算机协会/ ACM道德规范解决

2.01。在他们的能力范围内提供服务,对他们的经验和教育的任何局限要诚实坦率。

3.04。通过适当的教育和培训以及经验的结合,确保他们有资格从事任何工作或提议从事的项目。

3.09。确保对他们从事或提议从事的任何项目的成本,进度,人员,质量和成果进行现实的定量估计,并对这些估计提供不确定性评估。

5.05。确保对他们从事或提议从事的任何项目的成本,进度,人员,质量和成果进行现实的定量估计,并对这些估计提供不确定性评估。

承诺无法交付的东西肯定会带来商业和法律影响。通常这些来自其他地方的客户,拒绝付款或起诉您的公司。如果您与他人合作,如果您的零件没有交付,他们可能会要求赔偿。诉讼甚至可以来自竞争对手。

关于超级计算机的早期故事,西摩·克雷(Seymour Cray)和Control Data Corporation的团队即将推出产品,而另一家超大型计算机公司告诉其客户,该产品也即将推出。谎言使CDC付出了很多生意,并演变成诉讼,大公司无法提供任何可信的证据证明其要求。结果就是当时的巨额和解金,价值1970年为8000万美元(按通货膨胀调整后,2012年约为2.23亿美元)。你可以在这里读到它:

http://en.wikipedia.org/wiki/Control_Data_Corporation#CDC_6600:_defining_supercomputing


+1表示道德准则,用于回答有关道德的问题。
杰伊·埃尔斯顿

5

只要有足够的时间,资源和灵活性来定义成功,一切皆有可能。如果您只希望获得优于50%的准确度,并且拥有用户的地理位置和少量统计数据,则白色x-mass示例很容易。

在大多数项目中,真正的首要问题不是是否有可能,而是在一定条件下是否合理。

该功能是否增加了足够的价值以保证尝试的费用?

即使这个想法很棒,如果需要很长的开发周期或购买一些更奇特的硬件,在大多数情况下,让客户更好地了解这一点,然后将对话引导回更合理的目标会更好。

如果有人疯狂地给您一张空白的支票而没有最后期限,则一定要告诉他们一切皆有可能,只是让他们知道您必须发明和分发在实现目标过程中涉及的几种技术。

另一方面,当与具有合理资源的合理客户打交道时,有时候没有什么比告诉客户必须同意的某些功能更糟糕的事情了,因为他们可能已经流失并花费了时间/金钱/资源来促进或记录下来,那可能是10%的事情使该项目最初成为绿色。陷入这种情况,您就失去了客户,并且很可能在整个市场中获得了非常口头的坏参考。


4

扮演恶魔的拥护者

具有分析心态的技术人员可以倾向于认为,他们的表现主要是根据已完成请求与已提交请求的记分卡来进行判断的,但实际上,情况并非如此。

在开发甚至开始之前,客户就开始根据其信心水平和承诺意愿对团队绩效形成意见。

造成这种情况的部分原因是,客户可能很难评估承包商的犹豫是否是由于请求的绝对困难或承包商的能力不足所致。

由于没有绝对标准可以衡量请求的难度,因此对客户而言更重要的是,通常要相信承包商在付出100%的努力,而不是满足90%或100%的请求。

假设客户必须在以下两种情况之间进行选择:

承包商A

  • 有信心他们可以满足所有要求
  • 结果:交付的请求中有90%
  • 客户很高兴承包商付出了100%的努力
  • 客户认为未完成的请求是由于不可预见的问题造成的,可能是承包商无法控制的

承包商B

  • 致力于兑现90%的要求。不确定他们能否兑现剩余的10%
  • 结果:交付的请求中有90%
  • 令客户感到失望的是,承包商没有尝试完成其他10%的要求
  • 客户认为未完成的请求的10%是由于承包商的努力或能力不足

在这两种情况下,都传递了相同数量的请求。但是,客户认为“超额使用”的承包商A付出了100%的努力,并以此来验证剩余的请求确实很困难,这要归承包商A所称。

另一方面,客户感到承包商B没有付出100%的努力,并且由于承包商B缺乏努力或能力而无法完成所有请求。

免责声明:我不是在提倡过度投入作为策略。这只是对现实世界中可能的过度承诺可能产生积极结果的一种观察。


3

您应该告诉他们给您时间来创建“峰值解决方案”

尖峰解决方案是一个小的程序,在编码时,它使您能够弄清楚该怎么做,甚至根本不可能,这会在项目中造成不确定性。

例如,假设您从未以编程方式发送SMS,但是您知道有可能。一个棘手的解决方案是制作一个发送SMS的小程序。这样,它不再是不确定性,您可以进一步评估可行性。

这是eXtreme编程文档说明的内容:

创建尖峰解决方案以找出解决棘手的技术或设计问题的答案。峰值解决方案是一个非常简单的程序,用于探索潜在的解决方案。建立峰值只是解决所检查的问题,而忽略所有其他问题。大多数峰值不足以保持,因此请扔掉它。目的是减少技术问题的风险或提高用户故事估计的可靠性。当技术难题威胁到阻碍系统的开发时,请一对开发人员解决该问题一两个星期,并降低潜在的风险。


1

根据我的经验,当用户请求某项内容时,您应该要求他们详细说明用户的实际需求。通常,您永远不会再听到有关该请求的信息。


1
这是使用户不满意的最佳方法。多数情况下,这会导致利润缩水
gna

3
老实说,对于一些内部开发人员来说,这不是一个糟糕的主意。内部工作通常不直接收费(IT只是总预算的一部分),您可能会因为垃圾请求而感到不知所措,因为请求者不会因为向您发送垃圾邮件而浪费任何金钱。
格雷厄姆(Graham)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.