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