可交易品質假設

2011 年 2 月 21 日

我常遇到一些開發人員感到沮喪,因為「管理階層想要更多功能,他們不在乎品質」。聽到這種話我總是感到難過,因為這表示開發人員、管理階層和他們的客戶已經輸了。他們會輸是因為他們用「可交易品質假設」來建構情境。

在生活的許多面向,品質是我們用來交換成本的東西。較好的車子會比較貴,所以我們可能會放棄我們想要的法拉利,改買較便宜的車。我應該花更多錢在 Turners 買最新鮮的魚,還是去超市買就好?因此,我們習慣了品質需要付出更多成本的想法。有時候我們願意付錢,有時候我們會選擇較便宜的選項。

偶爾你會聽到這個概念被應用在軟體上,尤其是軟體設計。重構一些不佳的程式碼會花時間,我們寧可增加更多功能。這裡的基本假設是品質是可以交易的,透過降低品質,我們可以在成本、範圍或速度等其他面向獲得好處。

當我們檢視這個假設時,我們必須先思考我們對品質的定義。品質對不同的人來說有不同的意義。在軟體的脈絡中,我們可能會將品質定義為使用者介面的美觀程度、出現的缺陷數量,或是軟體的良好建構程度。

我追隨肯特·貝克,區分內部品質和外部品質。使用者介面的美觀和有效性是外部品質,因為這是系統使用者可以感知到的東西。這是一個可以合理進行權衡的事情 - 我是要花更多功夫讓功能 A 更容易使用,還是應該新增功能 B?

然而,軟體的內部結構並不是使用者可以直接感知到的東西。我無法從使用一個程式來判斷它的內部結構是否建構良好。因此,內部品質是一個較為隱藏的屬性。當有人說我們應該做一些事情來降低系統的設計品質,以建構更多功能時,這個人就是將可交易品質假設應用在內部品質上。

這樣做的問題在於,如果內部品質是可以交易的,那麼就沒有必要對內部品質投入任何心力。如果一個好的設計讓我們無法新增功能,而且對使用者沒有好處,那麼為什麼要做呢?

人們關心內部品質的原因,是因為他們認為另一個假設適用 - DesignStaminaHypothesis。在此假設中,內部品質無法交易,因為降低內部品質會讓我們變慢。的確,不注意設計可以提供短期的速度提升,但這只在相當短的時間範圍內有效 - 遠短於大多數人認為的時間。

但悲劇的是,一旦你將內部品質視為可交易的,你就輸了。人們已經習慣品質是可以交易的,即使在最好的情況下,你也很難克服它。說我們需要花更少時間新增功能來提升品質,只是把蓋子釘死。

相反地,專注於內部品質的真正價值至關重要 - 它是加速的推手。內部品質的目的是加速。當然,這兩者是相輔相成的,這也表示你應該了解花一些時間重構將如何幫助你加速,否則你不應該這麼做。

順帶一提,這是我對軟體工藝隱喻感到不安的另一個來源。當你對人們說「工藝」時,他們會想像精緻的手工藝、皮革鑲板、平滑的接縫 - 因此成本更高。「工藝」一詞強化了可交易品質假設 - 而這對我們這些知道速度需要良好設計的人來說,是一個致命的缺點。