How to Avoid a Software Outsourcing Disaster

The following text is a partial translation of the original English article, performed by ChatGPT (gpt-3.5-turbo) and this Jekyll plugin:

软件外包是一场等待发生的灾难,我们都知道。首先,你找到一家承诺能在规定时间和预算内交付、提供最高质量、美观用户界面、最前沿技术和无忧终身支持的公司。于是你支付了第一笔款项,旅程就此开始。团队几乎不能理解你的需求,质量糟糕,你的时间和预算期望严重被违背,而且沮丧的程度也在不断上升。而“最好”的是,你不能离开,否则你之前花掉的所有钱都将付之东流,你将不得不从头开始。你必须与这个团队“结婚”,因为你负担不起“离婚”的代价。有没有一种正确的软件外包方式?

是的,有可能做到正确且真正无忧无虑,但你必须准备好改变你的管理理念。

基本原则是:1)你应该公开而频繁地与外包团队沟通你的关切,2)他们应该公开而频繁地与你沟通风险和问题。这是软件外包中被很多人忽视的两个主要成功因素。

我从魏了子那里学到了这个原则。他在《中国古代兵法经典》(http://amzn.to/2bQVQI2)第239页上说道:

让我演示一些软件外包灾难的实际例子,并解释如果您遵循这个有2500年历史的原则,如何避免这些问题。

它总是95%准备好,但总有一些未实施或出现故障的地方。他们已经做了很多工作,你已经付了很多钱,但市场准备好的产品还没有出现。周复一周,月复一月,积压总是有,你根本无法完成。你开始在噩梦中看到这个项目,而Prozac已经没有帮助了。这听起来怎么样?熟悉吗?

希望你意识到,无论你与软件外包合作伙伴签署了什么样的合同,你已经制定了多少计划,或者承诺了多少,他们都希望将你作为客户保留下来,至少在你的银行账户还有钱的时候是这样。

你想让你的业务成功和蓬勃发展,对吧?他们也希望他们的业务如此。你的成功意味着一个完成并推出给终端用户的产品。他们的成功意味着不断为你编写软件的过程。这两个目标几乎没有共同之处。我甚至可以说它们相互矛盾——当你成功时,他们就失败了。

当然,他们会告诉你他们想要为你完成这个产品,并在将来获得新的合同。他们会说他们的主要动机是让你开心并获得好的推荐。他们会向你保证客户满意比金钱更重要。然而,我建议你足够坚强去面对现实——这都是谎言。

大多数软件外包项目都失败了。绝大多数(参见最新的CHAOS报告)。软件开发人员比你更清楚这一点,主要是因为他们每天都看到发生的情况。你的项目也不例外。因此,让我们忘掉这些美好的承诺,专注于丑陋的现实——你是自己一个人。

牢记我上面提到的原则,这是我的建议:确保团队明白1)你的实时、成本和范围限制,以及2)违反这些限制的后果。这是关于原则的第一部分——你应该公开而频繁地表达你的关切。通常情况下,外包团队并不了解真正的商业情况,只是听到每隔一天就会有“我需要这个尽快”的要求。

“尽快”不是一个截止日期。而且,它是一个非常消极的替代品,而不是一个现实的里程碑。当团队不知道你需要产品的确切日期、需要在那个日期之前准备好什么以及为什么时,它开始对你不利地工作。这里强调的是“为什么”。对于大多数业务所有者来说,回答这个问题很困难。

为什么你需要在6月1日之前准备好产品?只是因为你等得厌烦了?这不是一个合理的答案。你虽然等得厌烦,但你的银行账户里还有钱。他们会继续向你开具发票,而且他们不会尊重你。他们不会把你当作一个强大和目标导向的商业人士对待。你要么不够聪明,无法确定你的时间限制,要么是在向团队隐瞒它们。无论哪种情况,他们都不会欣赏这种行为。

以下是一个适当定义的时间和成本限制可能的说法:

当软件外包公司,你的合作伙伴,听到这个截止日期的定义时,它将成为你真正的合作伙伴。现在,它的目标与你的目标是一致的。如果里程碑被错过,你会受到损失,他们也完全明白。此外,他们也能看到你的苦楚将转嫁到他们的肩上。

停止让他们尽快完成一切。停止一天打两次电话,连续一个小时对他们的糟糕表现大声叫嚷。停止在商务邮件中使用这样的措辞。停止制造这么多噪音。这对你毫无帮助。而且,它只会让情况变得更糟,因为你失去了尊重,他们开始把你当成一头愚蠢且情绪化的摇钱树。

相反,做好你的功课,定义你的现实里程碑。考虑你真正的时间、范围和预算限制。用非常简短而简明的句子写下来。确保你的限制是现实的,并且它们的描述回答了主要问题——为什么

为什么你需要在六月一日之前完成这个?为什么你想花费少于5万美元?为什么你需要所有五个功能在1.0版本中?为什么你希望你的Web应用能够处理1000个并发会话?为什么你需要在第一个发布版本中有一个移动应用?

为自己回答,并确保外包公司理解你的答案。不要隐藏这些信息。

你希望你的网络应用看起来像Pinterest,反应迅速,易于使用,并且在你向朋友展示时让你感到自豪。但是他们为你创建的产品笨拙、缓慢,说实话,丑陋。你要求他们做出一些改变,而他们却一直给你承诺。项目不断消耗你的资金,预算不断增加,但外观和感觉却没有任何改善。它离Pinterest相差甚远,非常远。你的沮丧感与日俱增,而且你看不到任何合理的解决办法。你唯一从朋友那里得到的建议就是重新从头开始,找一个新的网络开发团队。听起来怎么样?我敢打赌你很熟悉这种情况。

我认为这种死胡同的根本原因是对冲突的恐惧。在项目的早期阶段,你尽力与外包公司保持良好的关系,不得罪任何人。你不想控制任何人的工作,因为他们可能会把它看作是侮辱。你不想表达你对质量的担忧,因为它们可能会让团队失去动力。你只是希望他们将来会改进产品,但当未来来临时,一切都太迟了。

再次,谨记这个古老的原则,我建议你从项目的第一天开始,建立一个定期检查结果和表达关切的程序。在我们在Zerocracy的项目中,我们要求我们的客户在GitHub上进行关注、经常审查我们的发布,并将发现的任何不一致之处报告为GitHub问题。我们鼓励项目发起人在项目开始的时候对我们的质量持有悲观消极的态度。我们意识到这是我们可以将”积累的沮丧”风险降至最低的方式。

在你外包给离岸开发人员的项目中也尝试做同样的事情。不要害怕冒犯他们。迭代和增量的批评是比毫无反馈的和平更健康的方法,后者最终会导致战争。找到一种方式,让你的外包团队定期了解你对他们的结果的意见。不要试图为了挽救项目而保持友善。你对自己不利。相反,对你的关切持开放态度。记住上面原则的第一部分——你应该公开、频繁地表达你的关切。这是稳定项目和降低风险的方式。

此外,定期邀请技术评审员对正在开发的产品进行独立意见的生成,这也是一种非常好的做法。阅读我关于这个主题的另一篇文章:你确实需要独立的技术评审!

你打电话给他们,制定计划,宣布里程碑,定义功能,设定优先级,就质量达成共识,然后挂断电话。几天后,你意识到这完全是浪费时间。他们不遵守承诺,因为总是有新的事情发生。有人生病了,有些服务器出故障,有些软件看起来功能失效,有些代码不再起作用,等等。你再次打电话,表达你的沮丧,提出强烈的指责,重构里程碑,重新定义功能,重新设定优先级,几天后又重新开始。经历过这种情况吗?听起来熟悉吗?

根据我的经验,软件外包团队的这种不可预测性和不可靠性在大多数情况下是由项目发起人本人引起的。当你不听他们的话或者他们害怕告诉你真相时,就会发生这种情况,而通常两者是一样的。有人称之为“恐惧驱动开发”。团队害怕你,为了让你作为付费客户继续合作,不得不对你撒谎。

基本上,他们告诉你想听的话——项目即将结束,目前存在的错误容易修复,性能问题不严重,架构质量出色,团队非常有动力与你合作。当你听到以上任何一点时,要自问——你鼓励他们说实话吗?你奖励他们带给你不好但诚实的消息吗?

再次引用上面提到的基本原则,我建议你确保给软件外包合作伙伴的奖惩理由是透明的,并且基于项目目标,而不是你个人的情绪。

在我以前的一篇文章中,我写道,一个快乐的客户是软件开发团队的错误目标。一个提倡这个目标的客户是一个注定会失败的可怕的客户。如果你在团队给你带来好消息时奖励他们,你正在训练他们对你撒谎。如果你期望他们带来好消息,你正在阻止他们告诉你真相,阻碍他们为项目而不是为了你个人做好事情。

你在阻碍他们与你争论。换句话说,你在限制从为你工作的人那里传递给你的信息渠道。你在孤立自己,团队开始反对你,而不是与你合作。

这里有一个实际的建议。首先,定期宣布你合理的目标和限制,就像我上面解释的那样。确保团队理解你的业务计划以及背后的“为什么”原因。其次,定期询问团队成员有关风险和问题的情况。询问他们为什么认为项目目标可能会受到威胁。更好的是,让他们定期记录风险并向你报告。奖励他们在风险清单中诚实。

试试看,你会惊讶于这个风险清单中会包含多少有趣的事情。

Translated by ChatGPT gpt-3.5-turbo/42 on 2023-12-05 at 21:28

sixnines availability badge   GitHub stars