天天看點

阿裡感悟(十三)降低成本的靈活設計

最近在參與一個比較大的項目,需要耗費上千人日,而細分設計和設計評審就花掉了幾百人日,基本上10幾個人寫了幾周的設計文檔,并開了幾周的設計評審會。整個過程模式比較重,是以耗費的人力比較大。

為什麼模式比較重?

參與者衆多。設計評審會時,要求與本會相關的人都參與設計評審,一個屋子裡可能坐着幾十人,哪怕一個小時的會議和你相關的就5分鐘,你也要參加。而且這樣的公司會議太多,如果每個相關的會議都去參加,那就基本上是白天開會,晚上寫代碼的節奏,是以現在當有人找我開會時,我會問是否必須要我參加,能否會前或會後找我溝通确認,可能10分鐘就能解決的問題。

設計文檔内容多。系分設計非常全,需要把所有設計場景都寫上去,首先需要花大量時間寫系分設計文檔,其次需要幾個小時的會才能評審完。而這樣全面的設計文檔,可能需要三個月到半年才能開發完成。

有的設計評審沒有經過小範圍初審,有些設計遺漏了,導緻要反複評審。

​這樣的詳細設計和設計評審雖然模式比較重,但是優點是考慮的很全面,風險在一開始都能大部分暴露出來,缺點就是耗費的人力太多,不夠靈活。是以本文想和大家一起探讨下靈活設計,希望能抛磚引玉!

在談靈活設計前,首先需要思考下到底什麼是軟體設計?在精益思想中對于浪費有這樣的定義,任何不對最終客戶産生價值的行為都是浪費,而設計本身是不對客戶産生任何價值的,那麼為什麼需要進行軟體設計?

大學應用基礎是這麼定義的,軟體設計是從軟體需求規格說明書出發,根據需求分析階段确定的功能,設計軟體系統的整體結構、劃分功能子產品、确定每個子產品的實作算法以及編寫具體的代碼,形成軟體的具體設計方案。我總結下,軟體設計是将需求抽象成軟體系統的過程。

因為好的設計可以降低成本,如減少返工,當需求變更時,能快速響應需求,并且開發成本最低。

在網上找了下定義,緻力于保持系統設計在任何時間都盡可能的簡單、幹淨、以及富有表現力!其實就是減輕設計階段的壓力,最大程度上減少浪費,多餘的設計和考慮不周全的設計都會造成浪費。有些文章談到代碼就是設計,這個有點理想化不好落地,簡單的項目可以這麼做,但是像我們做的網際網路金融産品,業務都極其複雜,光看代碼是很難看懂的。

我總結出的幾個思路,可能比較概念化:

分階段設計。先設計必須要的東西,快速拿到産出,暫時不用的先不要設計,想不清楚的也暫時不要設計。沒事的時候就多想想系統的設計有沒有問題,有問題即時提出來,然後修改掉。

快速讨論設計方案。自己設計出來的東西先找某個同僚簡單過下,如果在設計評審中還有很多問題,那浪費的人日會更多,因為參與設計評審的人很多,不通過還要開複審。一隻筆,一個黑闆擦,一面玻璃闆足以完成一次設計,用筆直接在闆上畫一下自己的設計思路,并和同僚進行讨論,确認之後把設計圖拍照送出到文檔庫,或者用工具visual paradigm畫出來。

不需要的不設計。優先以最小人力解決問題,能用簡單的方法解決問題,就不要用複雜的辦法。比如,能通過打通網絡解決系統間通路問題,就不要走代理,這樣可以節約很大的設計和開發成本。能通過業務解決的問題,就不要想用系統解決,比如人工操作修改資料,和系統啟定時任務批量修改資料。

靈活設計的優缺點

優點:網際網路開發業務變化得非常快,如今天産品經理覺得應該上旗艦版來提高産品的銷售額,但是幾個月後發現由于價格比較貴,購買的人比較少,于是旗艦版就分拆成不同的子產品進行售賣。從我們的經驗來看,一個擴充性非常好的業務設計可會帶來三個問題,第一設計和開發時間比較長,第二代碼不易讀,第三大部分擴充以後都不會用到。 是以靈活設計的思路是隻做必要的設計,需要的時候再重構。

缺點:可能的确是有些場景在設計的時候沒有考慮到,導緻系統在未來很特殊的場景下不能支援業務需求。到時候可能就需要打更新檔或者用很奇怪的方式實作。

減少會議。為了會議的高效,我們之前的做法是會合并幾個會議,在kick off會議之後直接進入設計評審會議,因為定會議室,投影儀,讓參會人員準時參加都需要一定的成本。設計評審會議一般是半個小時到1個小時。設計者講下自己的設計,可以使用ppt或直接在黑闆上畫一下自己的想法。如果是對已有功能的修改,需要先講這塊功能原來是什麼樣,現在需要修改成什麼樣,涉及到哪些修改點,自己是如何設計的。如果設計方案審批不通過,則設計者需返工,因為我們強調簡單設計,是以即使返工,成本也不會很高。同樣為了高效,設計者重新設計的方案不需要再開一次設計評審會議,隻需要把相關人叫到座位旁邊确認下就可以。

減少參與者。隻邀請必須參加的人,非必須單相關的單獨溝通。

高效評審。設計評審中很重要的一點是參加評審的人必須有足夠的耐心和胸懷聽明白别人的設計,設計評審是為了優化設計者的設計方案,而不是為了挑戰設計者,或給設計者挑刺。任何設計方案都有它的優缺點,是以評審人在聽完設計之後,需要先思考下這個設計方案的優缺點是什麼,再想想自己的設計方案是什麼?對于設計者沒有考慮或講到的點,可以通過反問的方式讓對方補充。

繼續閱讀