現(xiàn)在,很多人認為寫文檔是一件苦差使,特別是研發(fā)人員,覺得寫文檔是一種浪費,和產品開發(fā)工作沒有太大關系,更愿意把寫文檔的時間用來寫代碼畫圖紙。
實際上,一個成功完整的產品開發(fā)項目,最終產出的不只是可交付的實際產品,還包括產品開發(fā)過程中的文檔,以及產品開發(fā)的數(shù)據。文檔在產品開發(fā)項目管理中非常重要,不只是產品的一個組成部分,而且還是產品開發(fā)項目的一種非常重要的管理工具。
文檔是產品的重要組成部分,同時能得到很好的復用。一位著名的軟件工程專家曾說過:只要提供完整的架構、需求與設計文檔,在沒有源代碼的情況下,可以重新開發(fā)出一款與原來一樣的產品。這段話非常有代表性,道出了文檔的真正作用,因為這些文檔是產品最系統(tǒng)最全面的反映,并且不依賴于具體的實現(xiàn)方式,哪怕這些文檔針對的產品不復存在也能根據這些文檔開發(fā)出同樣的產品。再比如,很多開源項目的源代碼和可運行的產品是免費的,但相關的設計文檔和使用說明文檔確實收費的,文檔的重要性由此可見一斑。
文檔是管理者跟蹤和控制項目的一個重要工具。管理都跟蹤和控制項目主要通過面對面的交流與文檔兩種方式,交流具有隨機性、即時性與局限性的特點,而文檔具有延續(xù)性、長期性與全面性的特點,特別是報告與進度文檔能讓管理者對項目的整體情況了如指掌。
文檔在產品開發(fā)項目各角色之間起多種橋梁作用。研發(fā)人員在各個階段中以文檔作為前階段工作成果的體現(xiàn)和后階段工作的依據,這個作用是顯而易見的。研發(fā)過程中研發(fā)人員需制定 一些工作計劃或工作報告,這些計劃和報告都要提供給管理人員,并得到必要的支持。管理人員則可通過這些文檔了解項目安排、進度、資源使用和成果等。研發(fā)人員需為用戶了解系統(tǒng)的使用、操作和維護提供詳細的資料即用戶文檔。
也許有人會說,編寫和維護文檔需要花費大量的時間和精力,并要配備相應的管理人員,這必然會增加公司的運營成本,從短期和單個項目來說確實是這樣,但從長遠和一系列項目來看,其會帶來降低成本、提高質量、提高項目管理水平、提高用戶滿意度等好處。因為一個項目中完整的流程、規(guī)范和經驗可以很容易的復制到另一個新項目中,這其中就是有文檔把項目的整個過程記錄在案,而不是在人的腦袋里,這樣就能在另一個項目中得到很好的復用。
寫文檔的本質是設計出問題的解決方案和規(guī)范項目管理。設計和直接寫代碼的區(qū)別是設計需要站在一個比寫代碼更高的層次上來看問題,當面對一個問題時,很可能另外的問題與之相關聯(lián)(隱式地/顯式地),此時如果寫分析設計文檔,那么相當于充分全面地考慮這個問題,而直接寫代碼往往會讓人沉溺于細節(jié)。由此可見編寫必要的文檔會使自己考慮問題更全面、更系統(tǒng),是一種很好的習慣。
評審與修改文檔比評審與修改具體的實現(xiàn)容易、簡單。在進行系統(tǒng)的相關評審時,看一份架構文檔或系統(tǒng)設計文檔就能對系統(tǒng)的結構、系統(tǒng)的組成及系統(tǒng)的實現(xiàn)思路有一個全面的了解與認識,評審這樣的文檔則比想通過代碼獲得這些信息容易簡單多了。從感情的角度來說,每一個開發(fā)工程師都對自己的代碼有一種依戀感,害怕丟棄已有的代碼和方案;而修改文檔則會讓這種感覺變得非常小。
談了這么多,系統(tǒng)開發(fā)工程師肯定會振振有詞的說:我覺得用代碼來表達解決問題的方案比寫文檔更加方便和直接。就單個問題在很短的時間而言,這是一個站的住腳的理由——代碼的字數(shù)肯定比文檔的敘述要少得多,而且多數(shù)開發(fā)工程師的思維更加適應編程語言。但是如果涉及到多個問題或者幾個系統(tǒng)模塊,時間跨度是幾個版本的時候,上面的理由多少顯得有些蒼白無力。
誠然,文檔不是越多越好,要恰到好處。寫一些質量差、脫離實際的文檔,只會適得其反,寫文檔的人浪費了大量的時間和