本文將解決各種敏捷中需要辯證思考的問題,包括:寫文件還是不寫文件?擁抱變更還是迭代期內無變更?持續交付的產品因為不完整被客戶鄙視怎麼辦?做架構設計還是不做?突出進度忽略了質量怎麼辦?我們不用文件就能開發但客戶偏偏要文件怎麼辦?自動化測試費力而且測試**可能跟應用**一起被拋棄怎麼辦?……
敏捷開發中一直有幾個根本問題無法回答:什麼是敏捷?怎樣知道我是否敏捷了?應該怎樣推行敏捷?敏捷的未來會怎樣?……
身為投身業界較早的一員,感覺草草收場太有點對不起那些心中一直有疑問的後來者了,那種感覺就像黑暗中僥倖躲過一塊拌腳的石頭,總是想停下來把它除掉。
最近在看一些業界之外的東西,才知道這些問題在很久以前就解決了。答案非常真切,能令接觸敏捷很久的我一看就知道問題已經結束了。
不過,這個答案相當不容易用語言描述,憋了很久還是沒能寫出來,現在和最近的將來都心裡明白但寫不出來。
本系列不是直接描述這些根本問題的答案的,而是最近在微博、部落格上又看到一些關於敏捷實踐的紛爭,而心裡很清楚紛爭的原因,所以特寫此系列幫助後來者辨析一些概念,建立一些基本的思考方法。
興許寫幾篇這個系列,就能幫我把那個系列寫出來了呢。
一直以來都有資料與資訊的辨析。就是說資料是死的,要從中分析得到資訊,才能對人有所幫助。
實際上完整的層次結構是:資料,資訊,知識,智慧型。這個是在《冬吳相對論》的很早一期中順帶提及的,但對我們推廣敏捷很有幫助。
資料,基本上接近客觀事實,不只是指數字,也指那些真實發生的所有事情,對應各種真實的敏捷案例。
資訊,指從實際事情中提煉出來的有意義的實踐,對應我們看到的各種使用者故事、自動化測試、測試驅動等敏捷實踐。
知識,指這些有意義的實踐被文字化描述,廣為傳播。
智慧型,指這些廣為傳播的實踐的背後,所蘊含的真正道理。
資料與資訊,都是受到「因緣」約束的。因是內因,緣是外部條件。
(這個案例不是敏捷開發的,但很直觀)「在一家數碼電視企業,人們大規模地做了軟體**代替真實硬體,來防止太多環節的硬體搗亂」,這整句話就是資料,而「軟體**」就是從中提出的資訊。若把它寫下來傳播,就成了知識。
但是是不是**都適用呢?不是。
當時的內因,在於這家企業的研發團隊很強(是我個人從事一線研發9年中經歷過最強的),能夠完成這一系列**,這個是追求卓越工作的內因;而外部環境中,從前到後硬體環節多達10層有餘,客觀上導致了不**是開發不下去的。
像這種實踐,就存在很大的因緣成分,一旦離開因緣,很難重現。
敏捷開發中的多數實踐要好得多,因為之所以被抽取出來,就是多少存在共性和可推廣性。但這並不表明其可以無限超越因緣限制。
在敏捷開發中大家都很崇拜案例,因為案例是真實的,表明這件事情真正發生過。所以每當一方能指出「某某公司就是使用xx方法,從而才能……的」的時候,都會感覺非常立刻找到了答案,無需多說。
但是案例背後的問題在於:案例太真實了,以至於它們有的只能在乙個地方發生,有的甚至只能發生一次。
而智慧型,則是超越因緣的。(之後我們會看到其實「妙智慧型」就是「般若」才真正超越因緣)
那個團隊為什麼使用軟體**?因為追求卓越工作?因為要克服硬體限制?當然不是。
一家企業不會無緣無故追求卓越(尤其是這種內部技術層面的),而要克服硬體限制,加班加點多測試幾次也能通過。
早在開始,團隊並沒有嘗試軟體**繞過硬體,也在以普通的妥協和加班來換取硬體大發慈悲,直到遇到乙個最不講理的硬體:ic卡。這東西連個顯示介面都沒有,不能單步執行,不能顯示中間狀態,就傻乎乎地以極低的速度執行極少數業務命令,其他一切無視。這是第一次被逼無奈,放棄加班加點或多和ic卡開發者溝通之類的笨方法,開始用**卡代替真實卡。
而在這一活動被證實簡單有效後,其他幾個不太講理的硬體也被**了,最終系統越做越順。曾經有一年聚會的時候,得知當時的市場占有率是60%(之後不詳)。
千萬不要誤解「蠻幹」,在很多情況下「巧幹」很容易產生需求鍍金和過度設計,蠻幹反而最快;但也不能總是蠻幹,有時候撞上南牆,還是要巧幹才行。
那到底蠻幹好還是巧幹好?都不好,他們都屬於「資訊」層面的東西,受到因緣的限制。這個問題一旦這麼問,就無解了。
好的問題是:「到底哪種最快?」每次問這個問題,每次答案可能都不相同,但每次答案卻總是正確的,這是智慧型。
本系列會幫助辨析一些常見的問題,來**如何智慧型地使用敏捷方法。這些。問題包括:
寫文件還是不寫文件?擁抱變更還是迭代期內無變更?持續交付的產品因為不完整被客戶鄙視怎麼辦?做架構設計還是不做?突出進度忽略了質量怎麼辦?我們不用文件就能開發但客戶偏偏要文件怎麼辦?自動化測試費力而且測試**可能跟應用**一起被拋棄怎麼辦?……
這些問題沒有開頭提的那些問題那麼本質,但是也能反映出一些敏捷實踐層面不好解決的問題,在智慧型層面其實早有答案。
這些問題幾乎都是本人在工作中碰到或培訓/諮詢中被問到的問題,若掌握了智慧型層面的內容,這些問題即使被第一次問到而之前從沒考慮過,也能在5分鐘後讓發問人滿意而歸。
每個人在理解了敏捷開發中的智慧型後,都能做到這一點;或者反之:當事人之所以困惑良久而來發問,是因為一直沒能超脫於因緣之外觀察敏捷實踐背後的智慧型。
敏捷開發智慧型敏捷系列之一 序言
這是智慧型敏捷系列的第一篇。之一,之二,之三,之四,之五 本文將解決各種敏捷中需要辯證思考的問題,包括 寫文件還是不寫文件?擁抱變更還是迭代期內無變更?持續交付的產品因為不完整被客戶鄙視怎麼辦?做架構設計還是不做?突出進度忽略了質量怎麼辦?我們不用文件就能開發但客戶偏偏要文件怎麼辦?自動化測試費力而...
敏捷開發般若敏捷系列之一 序言
這是敏捷開發般若敏捷系列的第一篇。之一,之二,之三,之四,之五,之六,之七,之八,之九 作為預熱,之前的智慧型敏捷系列中提到,多數情況下敏捷實踐應該如何,都要 看著辦 而無有定法,但每次思考又有 避免浪費 等相對確定的思維方向,總是徘徊在虛實之間,難以把握。智慧型受到因緣 內因,外緣 所限,所以每次...
敏捷開發般若敏捷系列之一 序言
這是敏捷開發般若敏捷系列的第一篇。之一,之二,之三,之四,之五,之六,之七,之八,之九 作為預熱,之前的智慧型敏捷系列中提到,多數情況下敏捷實踐應該如何,都要 看著辦 而無有定法,但每次思考又有 避免浪費 等相對確定的思維方向,總是徘徊在虛實之間,難以把握。智慧型受到因緣 內因,外緣 所限,所以每次...