技術債務,是指匆忙的實現(xiàn)一個功能,卻對現(xiàn)有的程序庫造成了破壞(在實現(xiàn)的過程中污染了代碼庫的設計),這對于一些項目經(jīng)理/客戶來說就像是天書奇談。也許他們是明白的,只是不愿意承認罷了,我估計是這樣的。不管怎樣,我想起來一個小故事,當下次遇到這種情況,需要向他們解釋增加某些新功能的代價時,也可用講這個故事給他們聽。
一個農(nóng)夫有3只母雞。每只母雞每天下一個蛋。農(nóng)夫跟當?shù)氐囊粋€食品店老板做生意。食品店老板每天從農(nóng)夫那里買2個雞蛋放在店里出售。一切都很好,直到有一天,食品店老板出現(xiàn)在農(nóng)夫家里:
食品店老板: 哎呀,今天我需要一些雞肉。
農(nóng)夫: 雞肉?你和我的生意里可不包括這些。
食品店老板: 我知道。但我真的需要一些雞肉。我計劃要做一個B2S(S是胃的縮寫)模式的PaaS(P是肉禽的縮寫)平臺。
農(nóng)夫: 什么?
食品店老板: 非常重要的東西。你可以提供我一些雞肉嗎?
農(nóng)夫: 這樣呀,事情不是那么容易辦到 — 我要孵化雞蛋,等小雞長大了才能給你…少說也要一個月吧。
食品店老板: 一個月?太久了…我以為你現(xiàn)在就能給我呢。
農(nóng)夫: 時間有自己的腳步,你必須耐心一點等。
食品店老板: 可是,為什么你不能在現(xiàn)有的母雞中殺一個呢?這樣一來,我有了雞肉,你每天還能產(chǎn)兩個蛋。這就夠了,不是嗎?
農(nóng)夫: 可是,我不覺得這是一個好主意。這會把我推向一個沒有回旋余地的境況,萬一剩下的雞中有一只突然出了什么意外怎么辦。
食品店老板: 放心啦,不會發(fā)生那樣的事的…我真的非常非常需要雞肉!殺一只雞吧!
農(nóng)夫: 那好吧,我想我可以…
于是,農(nóng)夫拿起一把刀,把他的一只母雞送入了天堂。食品店老板得到了他的雞肉,返回了食品店。
一周后,食品店老板又一次來到了農(nóng)夫家里:
食品店老板: 你好,我來了!
農(nóng)夫: 你好,有什么事?
食品店老板: 你聽我說 — 你的雞肉好極了。事實上,它是如此的鮮美,賣的如此的好,你必須要再給我一只雞。最遲明天早上。
農(nóng)夫: 這是不可能的事。如果我要再殺一只雞給你,我就沒法每天提供你兩個雞蛋了。
食品店老板: 哦,別那么緊張!客戶需要雞肉,我已經(jīng)答應客戶明天早上提供給他們了…
農(nóng)夫: 不行,絕對不能這么干。如果我這么做,我就履行不了我和你的協(xié)議了,你知道嗎?如果我這么做,我就沒法提供你足夠的雞蛋了。
食品店老板: 可是我真的真的需要雞肉!明天早上之前!否則客戶會發(fā)飆的,地球?qū)荩澜缒┤諏絹恚〗o我一只雞吧,現(xiàn)在!
農(nóng)夫: 那好吧,如果你非要這么不顧后果的想要,那就拿去吧!但是,從現(xiàn)在開始,雞蛋我是沒法提供你了,明白?
食品店老板: 當然,當然。但我相信是個很聰明的人,我猜你能找到方法解決這個問題。再見!
食品店老板離開回到了店里。
第二天:
食品店老板: 嗨,雞蛋呢?
農(nóng)夫: 你什么意思?
食品店老板: 雞蛋。你只給了我一個雞蛋。發(fā)生了什么事?
農(nóng)夫: 發(fā)生了什么事?我有3只雞,你拿走了兩只。現(xiàn)在就剩下一只。一只雞,一個雞蛋。我認為我解釋的已經(jīng)很清楚了。
食品店老板: 但是合同里并沒有這些!合同里說的很清楚 — 你每天提供我2給雞蛋!你現(xiàn)在讓我向客戶怎么交代?
農(nóng)夫: 哦,情況我很明白。我無能為力。
食品店老板: 好吧,好吧,不談這事了。咱們聊點其它事情…要是能再得到點雞肉就好了。你再給我一些吧?
所以,千萬別學農(nóng)夫 — 堅決拒絕為了當前利益而長久的破壞你的代碼庫的無理要求,如果你被強迫這樣做,拒絕承擔這樣的任務 — 也不要做食品店老板 — 不要做提出這樣不合理的要求,你要為自己的決定承擔后果。