1 事物的本質(zhì)復(fù)雜性和附屬復(fù)雜性:本質(zhì)復(fù)雜性是只要被解決之問題的核心,由軟件中的難點問題組成。大多數(shù)軟件的問題都包含一些復(fù)雜性。附屬復(fù)雜性是指跟解決方案沒有必要直接關(guān)聯(lián)的那些東西。但無論如何我們?nèi)匀灰鉀Q他們。
2 每人希望在附屬復(fù)雜性上花費(fèi)比本質(zhì)復(fù)雜性更多的時間,但隨著它的街壘,很多組織最終在附屬復(fù)雜性上要花費(fèi)比本質(zhì)復(fù)雜性更多的時間。
3 識別問題是擺脫附屬復(fù)雜性的第一步。思考一下你所使用的過程、策略以及正在處理的技術(shù)難題。認(rèn)識清楚怎樣的改進(jìn)可能從根本上讓你拋棄一些對整個問題貢獻(xiàn)不多卻增加麻煩的東西。
4 80-10-10準(zhǔn)則:
80%的客戶需求可以很快完成;下一個10%需要花費(fèi)很大的努力才能完成,最后的10%卻幾乎不可能完成。
YAGNI
1 YAGNI是“You ain`t Gonna Need it ”你不會需要它的縮寫,也是敏捷開發(fā)對預(yù)想開發(fā)的戰(zhàn)斗宣言。預(yù)想開發(fā)(speculative Development)的例子可謂俯拾即是。程序員們對自己說:“我肯定以后會需要這項額外的功能,所以現(xiàn)在就提前把它實現(xiàn)了吧。”這是滑向深淵的第一步。更好的方式是:只開發(fā)當(dāng)下需要的東西。
2 預(yù)想開發(fā)是一個不易改變的習(xí)慣:當(dāng)你正在行頭上時,真的很難用客觀的眼光來看待自己剛相處的絕妙想法---它究竟是會讓代碼變得更好,還是僅僅增加復(fù)雜度?說起來,這正是結(jié)對編程的好處之一:旁邊有人能對你的妙主意提點客觀的意見,這價值是無限的,因為程序員們總是很難客觀地看待自己的想法,特別是在這個想法剛冒出來的時候。
3 軟件開發(fā),首先是一場溝通博弈!
4 只做當(dāng)下需要的,一開始這會很難,但最終你會得到一個更好的代碼庫。