讀書筆記 之 軟件生產中的約束理論
寫在前面:個人覺得作為一個項目經理 或者說 開發經理,其管理能力+技術能力二者相應達到一個合理的比例才能勝任。很多企業經常提拔在企業工作時間比較長的,技術能力強的人來擔當這樣的角色。個人認為老員工的確更加理解公司的企業文化,技術能力也相應比較突出,經驗也更加豐富,但是我覺得這個經驗和管理是不同的,更多的是其架構能力,遇到技術問題的解決方法。如果一個人長期關注于技術的積累,但是忽略管理能力的提高,很難成為一個合格的管理者。管理和技術一樣是需要學習的,不是隨著技術經驗的積累成完全正比。衡量管理者的標準就是項目或者產品賺了多少錢,其他的例如人員溝通、開發等等都是保證成功的手段而已,而如何合理運用這些手段的過程就體現了一個管理者的綜合能力。昨天剛好看電視,聽到孫子兵法的一些思想,覺得很好。為將也,需具備"智、信、仁、勇、嚴"。之所以寫在開頭前,一是有感而發,二是這章的后面是各個經理的角色定位。
?
所謂約束 指的是 軟件開發中的 受限資源、瓶頸。
約束理論包含5個過程域:
- 標識系統約束:顧名思義改進的基礎就是充分認識現有系統的瓶頸。
- 確定如何利用系統約束
- 一切問題都要依照既定的方案執行
- 提高約束:如果第三點是執行的話,第四點就是改進了
- 如果在1-4中產生了新的約束,則循環往復直到問題解決。 可以理解問題總在不斷變化的,當初的約束會隨著時間慢慢解決,但是又會產生新的約束。
第二個過程域:在軟件開發中一種明顯的能力受限資源也就是約束 為 如何利用軟件開發人員
開發人員每天法定得到8小時的工資,但是根據某項統計這段時間中會有15%的損耗,正常的效率時間是5.5小時左右,這是管理人員最不愿意聽到的:)。--個人比較同意這個看法,很多管理人員認為8小時就得產生100%的效率,我想說不可能,除非在工作壓力非常之大,許多公司為什么會加班,其實也可以理解為在8小時之外,來彌補這15%左右的損耗,不是嗎?
我們需要做的就是來提高8小時內的效率,盡量使損耗降到最小,從而達到雙贏。書中提到:任何時候都積壓一些需要完成的開發任務可以避免開發人員無事可做。恩,可以理解,人的思維總是有時會開小差,或者會有些靈感的火花,如果沒有足夠多的任務積壓時,小差開到的目的地就是八卦了。
文中提到的其他方式有:
- 最小化通信聯絡的溝通方式。
- 安靜的工作環境
- 最好的開發工具
- 提供支持人員完成非生產工作等
- 充分的培訓
- ……..
軟件開發中的其他約束:功能集、進度、預算、資源。
產品功能:在開發過程中,在各種約束面前,可能產品需要的功能很多,那么需要做的就是分清幾種需求吧:必須具有的功能、有則更好的功能、不會對簽單造成影響的功能、時間要求非常緊迫的功能等。很明顯分清這么幾種功能,并加以和客戶的協商溝通從而達到最佳的目的。使產品的成功對此約束的影響降到最低。這里還有一種需求可能是這樣的,我個人把他稱之為瞬時需求。假設某個需求市場需求特別急迫,如果滿足這個需求那么對于產品市場、公司形象等都是一個促進,那么這種需求做不做呢?那么多銀行推出各種各樣的奧運VISA卡、某電視劇一經推出市場立馬出現相關產品等,當然這種需求需要對市場的準確把握和對各種約束的協調等。
再說進度:文中給出了一個例子假設一個最有可能12天完成的任務,新手的估計可能是5天,有人估計可能是30天,對完成任務有80%把握的開發人員,可能是20天。其實這種估計誤差的存在是合理的。但是錯誤的估計導致的后果可能是項目的取消或者項目的冒進。看完這里我想到一個估計的方法:估計人員的經驗系數×估計人員認為的難度系數×估計時間。可以用多人來估計,恩,最簡單的就是任務承擔人和管理者2者估計的結合了。
除了上面的三種約束,其他2種,相對影響我覺得應該比較小一點。
第三個過程域:服從于約束使用
一切都要服從于保護和利用約束決策。
第四過程域:提升約束
在制造業中通常會引入添加機器等手段,在軟件開發中提升約束通常通過無報酬的加班,聘用更多的開發人員或者倒班制。這些其實很多軟件工程書籍都提到不是很好的辦法,當然也是被實踐所證明了的。文中提出了一個比較有效的辦法是使用更好的開發人員。我覺得還有其它幾個方面:充分激發現有人員的最大激情、流程合理、計劃合理等等。
最后:焦點
一切問題的核心在于 投資回報率。這個公式很簡單(產出-運營支出)/投入。如果投入增加,消除了這些約束那么產出自然增加,最后的公式是 投入回報=(原有產出+增加的產出)-投入/(原有投入+增加的投入)。
總結:系統的總體生產應該根據瓶頸能力進行平衡。應該保護和利用瓶頸,以最大限度地提高瓶頸的產出。
后記:此乃毫無管理經驗之人,在看書時的感想,如果言之不當請批評指正。其實每個人都有自己的成功方式、管理方式、看待問題的方式,所以很多時候大家都是對的。