技术债务,是指在面对需求时,由于仓促地实现某些功能特性而对代码库产生了破坏(同时,在此过程中破坏了代码库的架构设计)。对于一 些经理或客户来说技术债务仿佛是一个陌生的概念。也许他们知道,只是他们不太想听,我不确定。不管怎样,我想到了一个小故事,在下次某些新的特性需求提出 时,我会用这个故事告诉他们实现这些特性的代价有多大。
有一个农民,他有三只鸡,每只鸡每天生一个蛋。农民与当地的一个杂货店有生意来往。杂货商每天从农民那里买两个鸡蛋,这样他可以在他的店里出售。一切都有条不紊地进行着,直到有一天杂货商出现在农民的家门口。
杂货商:嘿,今天我想要一些鸡肉。
农民:肉吗?这可不在我们约定的协议范围之内。
杂货商:我知道,但我真的需要肉。这是为我计划的一个企业家禽服务平台做准备的。
农民:什么?
杂货商:一些重要人物。你能给我一些吗?
农民:嗯…这不那么容易,我必须孵化鸡蛋然后等待雏鸡长大。我认为这需要一个月左右的时间。
杂货商:一个月?时间太长了…我更喜欢现在就拿到。
农民:大自然有其自身的规律,你必须等待一段时间。
杂货商:嗯…为什么你不杀一只鸡呢?这样一来,我将得到我想要的肉,你仍然可以每天生产两个鸡蛋。事实上你每天也不需要更多的鸡蛋,不是吗?
农民:嗯…我不认为这是一个好主意。当其它的鸡发生一些意外的状况时,这会让我陷入困境,可能无法提供两个鸡蛋。
杂货商:来吧,不会有什么事情发生的…况且,我真的,真的需要肉!你能给我吗?
农民:好吧,我想我可以…
说完,农民拿起屠刀将其中的一只鸡送到了造物主那。杂货商拿着他的肉回到了他的店里。
杂货商:嘿!
农民:嘿,怎么啦?
杂货商:听着,上次的肉很好。事实上,它真的很美味,而且卖得非常好。所以现在,也就是明天之前,我至少要拿到一只鸡。
农民:这是不可能的。如果我给你另一只鸡,我就无法按照合约里面的条款每天供应两个鸡蛋了。
杂货商:哎呀,快点啦。客户想要肉,而且我已经答应了明天一定会提供肉的…
农民:不,我不能这样做。如果我这样做,我就不能履行合同,你明白吗?如果我这样做了,鸡蛋就不能保证。
杂货商:但是我真的,真的,真的需要肉!就在明天!否则客户会生气,地球会毁灭,整个世界正如我们所知道的那样会结束!给我一只鸡,现在!
农民:嗯…如果你真的很想要,那你拿走吧!但是我要再次提醒你,从现在开始,我无法保证每天有足够的鸡蛋。明白吗?
杂货商:当然了,这我知道的。但是你是一个聪明的家伙,我想无论如何你会想出办法解决这个问题的。拜拜!
杂货商走了,再次回到了他的店铺。
一天后:
杂货商:你好!鸡蛋出什么问题了?
农民:你是指什么?
杂货商:鸡蛋,就是指鸡蛋,怎么只有一个鸡蛋?出什么问题了?
农民:出什么问题了?我有三只鸡,你拿走了两只,现在,这里只有一只鸡。一只鸡下一个鸡蛋,我想这是很清楚的事情。
杂货商:但是合约中没有这些!合同规定的条款就摆在这里。你每天欠我两个鸡蛋!现在你要我怎么向我的客户解释?
农民:嗯,对此我是非常清楚的,而且我也无能为力。
杂货商:好吧,好吧,天哪,算了吧,说的别的吧…如果能再拿一些肉走那还不错,我能拿走一些吗?
所以,不要当一个农民。当需求来时,拒绝可能对你的代码库造成无法挽回的破坏的需求,一旦你被强迫去做这样的事情,绝对不要对已被破坏的残骸负责。同样,不要当一个杂货商—不要要求一些不可能完成的任务,同时为自己的决定承担责任。
PS:在写这篇博文时没有任何的鸡受到伤害 ^o^
原文:Andrea Dallera 编译:伯乐在线 – 肖翔