1. 程式人生 > >阿里感悟(十三)降低成本的敏捷設計

阿里感悟(十三)降低成本的敏捷設計

作者:方騰飛scrum agile

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

為什麼模式比較重?

  • 參與者眾多。設計評審會時,要求與本會相關的人都參與設計評審,一個屋子裡可能坐著幾十人,哪怕一個小時的會議和你相關的就5分鐘,你也要參加。而且這樣的公司會議太多,如果每個相關的會議都去參加,那就基本上是白天開會,晚上寫程式碼的節奏,所以現在當有人找我開會時,我會問是否必須要我參加,能否會前或會後找我溝通確認,可能10分鐘就能解決的問題。
  • 設計文件內容多。系分設計非常全,需要把所有設計場景都寫上去,首先需要花大量時間寫系分設計文件,其次需要幾個小時的會才能評審完。而這樣全面的設計文件,可能需要三個月到半年才能開發完成。
  • 有的設計評審沒有經過小範圍初審,有些設計遺漏了,導致要反覆評審。

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

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

什麼是軟體設計?

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

為什麼需要軟體設計?

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

什麼是敏捷設計?

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

如何進行敏捷設計?

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

  • 分階段設計。先設計必須要的東西,快速拿到產出,暫時不用的先不要設計,想不清楚的也暫時不要設計。沒事的時候就多想想系統的設計有沒有問題,有問題即時提出來,然後修改掉。
  • 快速討論設計方案。自己設計出來的東西先找某個同事簡單過下,如果在設計評審中還有很多問題,那浪費的人日會更多,因為參與設計評審的人很多,不通過還要開復審。一隻筆,一個黑板擦,一面玻璃板足以完成一次設計,用筆直接在板上畫一下自己的設計思路,並和同事進行討論,確認之後把設計圖拍照提交到文件庫,或者用工具Visual Paradigm畫出來。
  • 不需要的不設計。優先以最小人力解決問題,能用簡單的方法解決問題,就不要用複雜的辦法。比如,能通過打通網路解決系統間訪問問題,就不要走代理,這樣可以節約很大的設計和開發成本。能通過業務解決的問題,就不要想用系統解決,比如人工操作修改資料,和系統啟定時任務批量修改資料。

敏捷設計的優缺點

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

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

敏捷設計評審會議

  • 減少會議。為了會議的高效,我們之前的做法是會合並幾個會議,在Kick Off會議之後直接進入設計評審會議,因為定會議室,投影儀,讓參會人員準時參加都需要一定的成本。設計評審會議一般是半個小時到1個小時。設計者講下自己的設計,可以使用PPT或直接在黑板上畫一下自己的想法。如果是對已有功能的修改,需要先講這塊功能原來是什麼樣,現在需要修改成什麼樣,涉及到哪些修改點,自己是如何設計的。如果設計方案審批不通過,則設計者需返工,因為我們強調簡單設計,所以即使返工,成本也不會很高。同樣為了高效,設計者重新設計的方案不需要再開一次設計評審會議,只需要把相關人叫到座位旁邊確認下就可以。
  • 減少參與者。只邀請必須參加的人,非必須單相關的單獨溝通。
  • 高效評審。設計評審中很重要的一點是參加評審的人必須有足夠的耐心和胸懷聽明白別人的設計,設計評審是為了優化設計者的設計方案,而不是為了挑戰設計者,或給設計者挑刺。任何設計方案都有它的優缺點,所以評審人在聽完設計之後,需要先思考下這個設計方案的優缺點是什麼,再想想自己的設計方案是什麼?對於設計者沒有考慮或講到的點,可以通過反問的方式讓對方補充。


方 騰飛

花名清英,併發網(ifeve.com)創始人,暢銷書《Java併發程式設計的藝術》作者,螞蟻金服技術專家。目前工作於支付寶微貸事業部,關注網際網路金融,併發程式設計和敏捷實踐。微信公眾號aliqinying。