問題可大可小,形式上是否叫它爲一個項目並不重要,重要的是爲了解決這個問題,項目規劃和方案設計的流程是一致的。就大數據平臺構建的語言環境來講,它能夠是整個平臺體系的搭建方案,也能夠是具體某個組件如調度系統的建設,還能夠是某個具體的功能點或問題改進好比用戶任務腳本的依賴關係分析,系統穩定性的提高等等。html
一篇項目規劃和設計文檔的好壞,每每決定了一個項目總體的調性和可預期的產出結果。可是,這麼重要的文檔,真正能寫好的同窗卻並很少,不少同窗甚至可能都沒有意識到它的重要性,而僅僅是把它看成領導要求的一個軟件流程的規範來簡單應付,怎麼快怎麼來。前端
事實上,撰寫項目規劃和設計文檔,最重要的不是文檔的模版和格式,而是裏面的具體內容,它每每須要結合實際客觀環境因素來綜合考慮,平衡取捨,是一個須要充分腦力活動的工做。儘管如此,在大多數狀況下,仍是有一些相對通用的指導原則能夠幫助咱們更好的完成這項工做。架構
本文側重於方案的需求分析到概要設計部分,由於這部份內容一般是最容易被你們忽視,也最須要方法論和「端正的思想」來指導的 ;)而詳細設計相關內容,考驗更多的是技術的深度,以及如何作到全面周到,我計劃在後續文章中另行闡述。框架
方案規劃設計文檔的好壞,幾乎徹底取決於這一部份內容。但多數同窗在這一部份內容身上,每每花費的時間倒是最少的,常見的方式,就是「直奔主題」,上來就寫具體要作的事post
項目背景不是讓你寫一堆無關痛癢的鋪墊材料。實際上,項目背景的做用是:性能
Why?爲何要在這個時候作這個項目?大數據
換句話說,就是這個項目從產品或業務的角度,最核心的推進力是什麼?再換句話說,痛點是什麼?設計
有痛點天然就有目標,你但願項目最終以什麼方式解決問題,能達成什麼目標。3d
背景和目標的闡述,必需要可以天然合理的推導出下一部份內容:項目的核心需求/功能是什麼。htm
若是項目背景,目標的描述不能起到這個做用,那這一節內容就沒寫好,由於項目方案文檔就缺少了根本的出發點,後續的內容都沒有了好壞對錯判斷的基本依據。
項目核心需求和項目目標有什麼區別?實際上沒有嚴格的區別,只是對須要解決的問題的歸納抽象程度的不一樣,或者描述角度的不一樣。
目標能夠理解爲但願達到的一個狀態,是抽象的,和技術方案無關的偏結果角度的表述方式。
而項目核心需求,能夠理解爲了解決背景描述的問題,爲了實現那幾個目標,進一步推導出來的,在當前系統環境或方案框架體系中:必需要提供的產品功能形態,或者是必須知足的關鍵特性,又或着是不能違背的約束條件。你也能夠理解爲用更技術的語言進行細化描述的項目目標。由於目標和背景的不一樣,可能同一件事推導出來的核心需求也不一樣。
這麼說比較抽象。舉個例子,若是我想構建一個數據交換服務或ETL系統,那麼上述各環節的內容多是(簡化的寫):
講完區別,繼續回來說,這部份內容的要求。不少同窗在寫這部分方案的時候,很容易把需求和實現手段混爲一談。因此:
核心需求的重點是:本質上須要提供什麼能力,而不是具體實現上要作什麼
換個角度說,核心需求的描述方式是:要作成什麼樣,是功能目標而不是實現手段。
在完整的項目文檔中,顯然目標和手段都須要,可是
目標必須先於手段,而非相反
緣由也很簡單,脫離了目標談手段是沒有意義的,很容易致使方向作偏,使得最終的結果產出背離了項目最初真正的需求出發點。
實踐中,作成什麼樣和怎麼作有時候很難絕對分開。一句話的描述方式可能既包含了目標需求也包含了實現手段。那麼,怎麼判斷這部份內容寫得是否知足要求呢。
總結一下,核心需求的根本目標是,讓參與項目的同窗有方向感,可以知道這個項目最終想要經過提供哪些能力,知足哪些約束條件來解決問題,至於怎麼實現,具體要作哪些事,那是下一步才須要回答的問題,簡單來講:先選擇作正確的事,再考慮怎麼把事作正確。
這一部份內容,從實際操做的前後順序來講,未必是第二步,極可能在咱們總結前面的背景,目標,核心區需求的時候,就須要加以收集和分析。
不過,從方案文檔的角度來講,放在這裏,是爲了進一步細化問題,分析目標,核心需求與當前現狀的差距在哪裏,具體有哪些實際問題須要解決。爲後續具體的實現方案,準備必要的輸入信息,肯定工做的優先級,重要性,項目迭代的步驟等等。
須要強調的是,現狀和問題分析,要圍繞前面的核心需求的條目展開,二者是強關聯的,不要相互脫節,各講各的
這塊內容自己沒有太特別的地方,就是如今實際狀況如何,有什麼問題,關鍵是如何把問題收集完整。
因此這部份內容,難的是如何發現問題,不少作技術的同窗每每容易陷入只關心技術難點,只能看到技術問題的局面中,而實際上,更多的問題每每是總體流程如何設計更加合理的問題,而不是技術方案絕對對錯的問題。
儘管行文上不難,但它的重要性,也每每容易被忽略,不少狀況下被簡單對待。實際的狀況是,不少項目的方案計劃每每是在對現狀問題相關信息沒有充分收集和分析的基礎上就作出來的。致使項目方案後期不斷調整,或者一期一期的老是在小步迭代,甚至不斷推翻重來。而最終使用方真正關心的問題卻一直沒有獲得重視和解決。
定完需求目標,分析完問題和現狀,接下來纔是規劃具體作什麼,怎麼作,何時作。
這部份內容,強依託前面的核心需求和問題分析工做,沒有作好前面的準備工做,千萬不要着急開始動手「規劃」方案!!!
那麼具體寫的時候有哪些注意事項呢?
再強調一下,作什麼和怎麼作就是手段,既然是手段,就要寫得足夠具體,具體到有明確的可落地實施的事情,有明確能夠衡量的標準,或者針對當前存在的一個具體問題,不要在這個地方又寫得像目標,沒有明確的可執行的點。
繼續舉上文數據交換服務的例子,針對其中的一個核心需求:
這個內容要寫具體的要作的事項。如下方式來寫可能就是不合格的,由於不夠具體,尚未足夠思考:
如下內容可能就更加明確,更加可落地一些:
若是不是工期嚴格要求,deadline爲導向的項目,總體的依賴和步驟每每纔是在項目規劃階段須要重點闡述的內容,也是有可能對總體產品的進度,風險產生影響的事項
而具體工做工期的安排,說實話,多數狀況下,反到沒有那麼重要。若是總體工做和步調沒考慮周全,工期排得再科學,再精細,也毫無心義。
總結一下,何時作什麼事,最重要的目的,不在於工期的計算,甚至也不是人力資源的安排,而是爲了理順事情依賴關係,控制可能的意外風險,提高項目開發進度的可控性。
方案規劃設計文檔,絕對不是爲了知足流程須要湊數的文檔,也不是頭腦風暴式的簡單記錄。它的根本目標,抽象來講是:明確問題,圈定範圍,肯定重點,闡明路徑。本質是爲了統一認識,控制風險。它應該是一個問題通過思考之後的輸出的答案,而不是問題的調查報告,筆記或備忘錄。
它很像一個議論文體裁,事實,分析,結論缺一不可。因此,不管你的方案文檔寫的多麼翔實,若是隻是相關內容細節的羅列,只議不論,缺少抽象總結,還須要閱讀文檔的同窗再去揣摩項目意圖,或者看完之後對項目所要作的工做爲何要作,重不重要,要作成什麼樣都不明確的話。那它就只是一個不合格的半成品,不能對後續的項目開發工做發揮實質的指導和規劃做用。
上面花了大量篇幅展開討論,目的是說服你接受個人見解。
若是你只須要明確的結論,那麼再總結一下:
整體原則:
再細化到一些注意事項:
兩條輔助判斷依據:
寫項目方案文檔,不是八股文,因此本文的內容並不是絕對的教條,你固然能夠根據項目的實際狀況和複雜程度自行調整,但前提是你真的知道你爲何要這麼作,而不只僅是爲了偷懶
本文多數內容是各類觀點,注意事項,結論和目標,具體如何作到這些,每一個同窗均可以自行思考。固然除了思想和目標端正,每一個環節,其實也有一些具體Tips和checklist可供參考。