以“質量”為宗旨的企業,通常有一系列的規章制度,甚至是繁重冗余的流程來限制軟件開發過程中各種“有意”或“無意”威脅軟件質量的行為。
以“效率”為宗旨的公司,通常沒有嚴格的內部規章制度,甚至寬松到一個人就能輕松完成從刪除數據庫到跑路的過程。
大多數從事IT行業的人都知道,軟件開發不同于一般勞動。 單純增加人員并不能縮短開發周期。 也就是說,一個人開發一款軟件需要10天的時間。 這并不意味著10個人可以在一天之內發展起來。 并且在軟件開發過程中,由于需要“適應市場的快速發展”,往往會出現需求變化等不可預測的問題。 也就是說,前期所做的所有工作都可能因為某種需求而被推翻。
下面從質量和效率兩個方面來闡述側重點不同帶來的問題。
我們首先假設公理P1:作為IT行業(開發、測試、產品等)的從業者都知道,軟件開發具有一定程度的不可預測性。
那么在這個前提下,偏向“品質”的企業通常會做以下幾件事:
在軟件開發中,有很多方法可以實現一定程度的可預測性。 更常見的方法是增加變更需求的成本。 一旦進入開發階段(包括設計階段),不得隨意改變需求。 這種方式對于開發者來說還是比較友好的。 開發人員不再被需求的隨機變化所困擾,但這也對產品經理提出了更多的要求。 這就需要產品經理具備精湛的業務能力和一定的遠見。 除了增加需求變更的成本之外,前期通常會做很多工作,包括需求評審、文檔設計、設計評審等會議,而中后期則不斷進行代碼評審等工作軟件開發。 這一系列的規章制度可以讓軟件開發不再隨心所欲,而是有規律可循。 顯然效率和質量的區別,這樣的“傳統”開發形式必然會帶來效率的下降。 例如,我見過一些公司每年發布多達2個版本。 這在互聯網飛速發展的今天是難以接受的。
偏好“效率”的企業,俗稱互聯網公司,通常會采用以下方法來提高效率:
目前一些互聯網公司所倡導的“敏捷開發”,實際上是通過縮短開發周期,讓軟件變得更加可預測。 我們一開始就假設公理P1,軟件開發具有一定程度的不可預測性。 而且開發周期越長,不可預測性就越大。 注重質量的公司可能更傾向于增加需求變更的成本,而注重效率的公司則縮短開發周期。 兩者都是為了讓軟件開發變得可控。 但兩種不同的方法會導致兩種不同的傾向。
縮短開發周期確實會讓效率更高,至少可以更快地適應市場需求。 那么為什么說縮短開發周期會降低質量呢?
事實上,這是顯而易見的事實。 縮短開發周期理論上似乎可以縮短開發時間。 完成10項要求需要10天。 完成1個要求不是平均只需要1天嗎? 所以為了提高我的效率,快速響應市場變化,我采用了敏捷開發方式,既滿足了效率要求,又滿足了開發時間。 這種方法似乎并沒有降低軟件開發的質量。 有這種想法的人通常都是從未從事過技術研發的學生。 仍然回到公理 P1,軟件開發具有一定程度的不可預測性。 我在做現在的開發的時候,我采用的設計基本上只適用于現在的商業模式,對于未來我幾乎一無所知。 隨著系統的不斷快速迭代,新的功能不斷地被添加到原有的系統中,修改和舊的功能被一次又一次地刪除。 這對于軟件開發者來說可以說是災難性的。 沒有一個系統架構師能夠滿足未來的所有可能性。 “世間唯一不能破的武功,就是快。” 速度很快,代碼后院快要著火了。
世界上沒有一家公司敢說我不注重質量,我只注重效率。 無論是什么公司,都會采取以下措施來保證軟件質量。
某些懲罰方法簡單而粗暴地將開發人員的錯誤數量與他們的表現聯系起來。 然而,錯誤數量與性能直接相關的情況相對較少。 大多數情況下,是Bug的數量以及是否有新引入的Bug。 比較常見的懲罰方法之一,也能更好地促進軟件質量的提高。
事實上,沒有人能夠完美平衡質量和效率。 當前的互聯網公司大多采用快速迭代的開發方式。 但這并不意味著采用這種方式的公司一定質量低劣。
“快速適應市場變化”本身就是一種需求,而快速迭代的做法其實就是為了滿足這種“需求”。 阿里巴巴集團CTO邢典曾表示,“早期,業務跑得比技術快,技術不斷追趕業務,因為業務增長太快了。 這兩年我感覺技術驅動商業,特別是人工智能的興起。 之后包括我們的程序化交易、廣告平臺、千人、推薦、搜索、很多算法和AI,包括客戶服務等,很多數據智能是用來驅動業務的。”1
“業務跑得比技術跑得快”,意味著要有一個快速迭代的過程。 后來的“技術驅動業務”就是說技術領先于業務,但技術卻在追趕業務。 雖然沒有提到質量,但我相信技術能夠推動業務前進,因為有堅實的技術后盾,而堅實的技術后盾意味著超高的軟件質量。
因此,在質量與效率的權衡中,我們不妨回過頭來重新審視技術的重要性。 在滿足“市場快速變化”需求的同時,不要忘記技術也會負債累累。 你欠的錢越多,它就越不可靠。
[1]《鈦媒體獨家對話:最詳細揭秘阿里云頂層設計及底層邏輯》
質量和效率似乎是永遠的敵人,盡管我們都希望質量和效率兼得。
以“質量”為宗旨的企業,通常有一系列的規章制度,甚至是繁重冗余的流程來限制軟件開發過程中各種“有意”或“無意”威脅軟件質量的行為。
以“效率”為宗旨的公司,通常沒有嚴格的內部規章制度,甚至寬松到一個人就能輕松完成從刪除數據庫到跑路的過程。
大多數從事IT行業的人都知道,軟件開發不同于一般勞動。 單純增加人員并不能縮短開發周期。 也就是說,一個人開發一款軟件需要10天的時間。 這并不意味著10個人可以在一天之內發展起來。 并且在軟件開發過程中,由于需要“適應市場的快速發展”,往往會出現需求變化等不可預測的問題。 也就是說,前期所做的所有工作都可能因為某種需求而被推翻。
下面從質量和效率兩個方面來闡述側重點不同帶來的問題。
我們首先假設公理P1:作為IT行業(開發、測試、產品等)的從業者都知道,軟件開發具有一定程度的不可預測性。
那么在這個前提下,偏向“品質”的企業通常會做以下幾件事:
在軟件開發中,有很多方法可以實現一定程度的可預測性。 一種常見的方法是增加變更需求的成本。 一旦進入開發階段(包括設計階段),不得隨意改變需求。 這種方式對于開發者來說還是比較友好的。 開發人員不再被需求的隨機變化所困擾,但這也對產品經理提出了更多的要求。 這就需要產品經理具備精湛的業務能力和一定的遠見。 除了增加需求變更的成本之外,前期通常會做很多工作,包括需求評審、文檔設計、設計評審等會議,而中后期則不斷進行代碼評審等工作軟件開發。 這一系列的規章制度可以讓軟件開發不再隨心所欲,而是有規律可循。 顯然,這樣的“傳統”開發形式必然會帶來效率的下降。 例如,我見過一些公司一年發布多達2個版本。 這在互聯網飛速發展的今天是難以接受的。
偏好“效率”的企業效率和質量的區別,俗稱互聯網公司,通常會采用以下方法來提高效率:
目前一些互聯網公司所倡導的“敏捷開發”,實際上是通過縮短開發周期,讓軟件變得更加可預測。 我們一開始就假設公理P1,軟件開發具有一定程度的不可預測性。 而且開發周期越長,不可預測性就越大。 注重質量的公司可能更傾向于增加需求變更的成本,而注重效率的公司則縮短開發周期。 兩者都是為了讓軟件開發變得可控。 但兩種不同的方法會導致兩種不同的傾向。
縮短開發周期確實會讓效率更高,至少可以更快地適應市場需求。 那么為什么說縮短開發周期會降低質量呢?
事實上,這是顯而易見的事實。 縮短開發周期理論上似乎可以縮短開發時間。 完成10項要求需要10天。 完成1個要求不是平均只需要1天嗎? 所以為了提高我的效率,快速響應市場變化,我采用了敏捷開發方式,既滿足了效率要求,又滿足了開發時間。 這種方法似乎并沒有降低軟件開發的質量。 有這種想法的人通常都是從未從事過技術研發的學生。 仍然回到公理 P1,軟件開發具有一定程度的不可預測性。 我在做現在的開發的時候,我采用的設計基本上只適用于現在的商業模式,對于未來我幾乎一無所知。 隨著系統不斷快速迭代,新的功能一次又一次地添加到原有的系統中,修改和舊的功能一次又一次地被刪除。 這對于軟件開發者來說可以說是災難性的。 沒有一個系統架構師能夠滿足未來的所有可能性。 “世間唯一不能破的武功,就是快。” 速度很快,代碼后院快要著火了。
世界上沒有一家公司敢說我不注重質量,我只注重效率。 無論是什么公司,都會采取以下措施來保證軟件質量。
某些懲罰方法簡單而粗暴地將開發人員的錯誤數量與他們的表現聯系起來。 然而,錯誤數量與性能直接相關的情況相對較少。 大多數情況下,是Bug的數量以及是否有新引入的Bug。 比較常見的懲罰方法之一,也能更好地促進軟件質量的提高。
事實上,沒有人能夠完美平衡質量和效率。 當前的互聯網公司大多采用快速迭代的開發方式。 但這并不意味著采用這種方式的公司一定質量低劣。
“快速適應市場變化”本身就是一種需求,而快速迭代的做法其實就是為了滿足這種“需求”。 阿里巴巴集團CTO邢典曾表示,“早期,業務跑得比技術快,技術不斷追趕業務,因為業務增長太快了。 這兩年我感覺技術驅動商業,特別是人工智能的興起。 之后包括我們的程序化交易、廣告平臺、千人、推薦、搜索、很多算法和AI,包括客戶服務等等,很多數據智能是用來驅動業務的。”1
“業務跑得比技術快”,意味著要有一個快速迭代的過程。 后來的“技術驅動業務”就是說技術領先于業務,但技術卻在追趕業務。 雖然沒有提到質量,但我相信技術能夠推動業務前進,因為有堅實的技術后盾,而堅實的技術后盾意味著超高的軟件質量。
因此,在質量與效率的權衡中,我們不妨回過頭來重新審視技術的重要性。 在滿足“市場快速變化”需求的同時,不要忘記技術也會負債累累。 你欠的越多,它就越不可靠。
[1]《鈦媒體獨家對話:最詳細揭秘阿里云頂層設計及底層邏輯》