用鸡讲解技术债务的形成过程

转载 2012年03月21日 13:14:28
 

技术债务,是指在面对需求时,由于仓促实现某些功能特性而对代码库产生了破坏(在此过程中同时破坏了代码库的架构设计)。对于一些经理或客户来说,技术债务仿佛是一个陌生的概念。也许他们知道,只是他们不太想听,我不确定。不管怎样,我想到了一个小故事,在下次提出某些新特性需求时,我会用这个故事告诉他们实现这些特性的代价有多大。


有一个农民,他有三只鸡,每只鸡每天生一个蛋。农民与当地的一个杂货店有生意来往。杂货商每天从农民那里买两个鸡蛋,这样他可以在他的店里出售。一切都有条不紊地进行着,直到有一天杂货商出现在农民的家门口。

杂货商:嘿,今天我想要一些鸡肉。

农民:肉吗?这可不在我们约定的协议范围之内。

杂货商:我知道,但我真的需要肉。这是为我计划的一个企业家禽服务平台做准备的。

农民:什么?

杂货商:一些重要人物。你能给我一些吗?

农民:嗯…这不那么容易,我必须孵化鸡蛋然后等待雏鸡长大。我认为这需要一个月左右的时间。

杂货商:一个月?时间太长了…我更喜欢现在就拿到。

农民:大自然有其自身的规律,你必须等待一段时间。

杂货商:嗯…为什么你不杀一只鸡呢?这样一来,我将得到我想要的肉,你仍然可以每天生产两个鸡蛋。事实上你每天也不需要更多的鸡蛋,不是吗?

农民:嗯…我不认为这是一个好主意。当其它的鸡发生一些意外的状况时,这会让我陷入困境,可能无法提供两个鸡蛋。

杂货商:来吧,不会有什么事情发生的…况且,我真的,真的需要肉!你能给我吗?

农民:好吧,我想我可以…

 

说完,农民拿起屠刀将其中的一只鸡送到了造物主那。杂货商拿着他的肉回到了他的店里。

 

杂货商:嘿!

农民:嘿,怎么啦?

杂货商:听着,上次的肉很好。事实上,它真的很美味,而且卖得非常好。所以现在,也就是明天之前,我至少要拿到一只鸡。

农民:这是不可能的。如果我给你另一只鸡,我就无法按照合约里面的条款每天供应两个鸡蛋了。

杂货商:哎呀,快点啦。客户想要肉,而且我已经答应了明天一定会提供肉的…

农民:不,我不能这样做。如果我这样做,我就不能履行合同,你明白吗?如果我这样做了,鸡蛋就不能保证。

杂货商:但是我真的,真的,真的需要肉!就在明天!否则客户会生气,地球会毁灭,整个世界正如我们所知道的那样会结束!给我一只鸡,现在!

农民:嗯…如果你真的很想要,那你拿走吧!但是我要再次提醒你,从现在开始,我无法保证每天有足够的鸡蛋。明白吗?

杂货商:当然了,这我知道的。但是你是一个聪明的家伙,我想无论如何你会想出办法解决这个问题的。拜拜!

 

杂货商走了,再次回到了他的店铺。

一天后:

 

杂货商:你好!鸡蛋出什么问题了?

农民:你是指什么?

杂货商:鸡蛋,就是指鸡蛋,怎么只有一个鸡蛋?出什么问题了?

农民:出什么问题了?我有三只鸡,你拿走了两只,现在,这里只有一只鸡。一只鸡下一个鸡蛋,我想这是很清楚的事情。

杂货商:但是合约中没有这些!合同规定的条款就摆在这里。你每天欠我两个鸡蛋!现在你要我怎么向我的客户解释?

农民:嗯,对此我是非常清楚的,而且我也无能为力。

杂货商:好吧,好吧,天哪,算了吧,说点别的吧…如果能再拿一些肉走那还不错,我能拿走一些吗?

 

所以,不要当一个农民。当需求来时,拒绝可能对你的代码库造成无法挽回的破坏的需求,一旦你被强迫去做这样的事情,绝对不要对已被破坏的残骸负责。同样,不要当一个杂货商,不要要求一些不可能完成的任务,同时为自己的决定承担责任

相关文章推荐

g++如何编译多个原文件和头文件

我在windows下用Visual studio调试过,可以通过,可以在linux下用g++时候就出现问题了,源文件和头文件如下,怎么才能编译通过呢? (头文件名是:Sales_item.hpp 源...
  • wfdtxz
  • wfdtxz
  • 2012-03-22 22:15
  • 20630

用鸡讲解技术债务的形成过程

技术债务,是指在面对需求时,由于仓促实现某些功能特性而对代码库产生了破坏(在此过程中同时破坏了代码库的架构设计)。对于一些经理或客户来说,技术债务仿佛是一个陌生的概念。也许他们知道,只是他们不太想听,...

用鸡讲解技术债务的形成过程

技术债务,是指在面对需求时,由于仓促实现某些功能特性而对代码库产生了破坏(在此过程中同时破坏了代码库的架构设计)。对于一些经理或客户来说,技术债务仿佛是一个陌生的概念。也许他们知道,只是他们不太想听,...

偿还技术债务

作者:伯克哈特·赫夫纳盖尔 对任何己投入实用的项目(也就是说,有客户在使用其产品),无论要修复缺陷,还是要添加新功能,总是必须修改产品的时候。在那点上,会面临两个可能选择:花合适时间“一次做对”或者取...

技术债务(母鸡的遭遇)

技术债务,是指匆忙的实现一个功能,却对现有的程序库造成了破坏(在实现的过程中污染了代码库的设计),这对于一些项目经理/客户来说就像是天书奇谈。也许他们是明白的,只是不愿意承认罢了,我估计是这样的。不管...

技术债务(母鸡的遭遇)

技术债务, 是指匆忙的实现一个功能,却对现有的程序库造成了破坏(在实现的过程中污染了代码库的设计),这对于一些项目经理/客户来说就像是天书奇谈。也许他们是明 白的,只是不愿意承认罢了,我估计是这样的。...
  • ksy
  • ksy
  • 2012-03-19 09:45
  • 732

Java代码中常见技术债务处理之Exception

写在前面异常处理是代码中常见的处理,本文根据SonarQube在异常方面的规则和常见检查结果,选取说明了常见异常处理中的技术债务,提倡技术债务最少的编码方式。Exception handlers sh...

产品研发记录03:关于技术债务的思考

一、何谓技术债务  技术债务就是传说中的各种坑,这些坑有大有小,不外乎如下几种类型: 代码的坑。   无注释、无排版、各种冗余、各种难以维护的代码;绕来绕去很难看懂的代码;明显性能问题的代码;甚至...

不要让其他人的技术债务影响到你

Jim Bird是一位经验丰富的软件开发经理、项目经理与CTO,专注于软件开发与维护、软件质量与安全等领域中疑难问题的解决。在过去的15年间,Jim曾管理过团队建设并主导过高性能的财务系统的建设。他的...

技术债务:究竟让你付出了多大代价?

技术债务背后的隐含的意思是,走捷径(有意的技术债务)或者犯错(无意的技术债务)都会有开销,而且不处理这些捷径或者错误的话,开销会随着时间而增加。 如果我们有一个财务债务,我们知道我们今天需要还掉多少...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)