July 11 14:00~15:40
在《了解Force讓你做出好設計》這一篇,Teddy舉了一些Force的例子。今天談一個常見的軟體設計問題,推敲一下從problem找出force,進而推導出solution,或是用來判斷一個solution是否合適。
Context:你正在開發一個web-based資訊系統,主要的功能是收集使用者輸入的資料,並將後端資料庫的資料顯示在瀏覽器上。為了提升使用者體驗,你大量使用AJAX技術。你的系統同時上線人數約在50~100人之間,大部分使用者是透過區域網路存取系統。系統上線幾個月之後,使用者開始覺得系統效能太慢。
Problem:如何提升系統效能?
「如何提升系統效能」是一個常見的軟體設計問題,有經驗的鄉民看到這裡,隨隨便便都可以想到很多solution:
- 硬體升級,最簡單且有效,但卻可能是最花錢的方法。
- 檢查一下資料庫表格該建的index有沒有建好。
- 看看SQL程式有沒有優化的空間。
- …還是硬體升級。
除了憑經驗以外,還有沒有其他方法可以幫助鄉民們思考這個問題?
***
Force可以被視為問題(problem),或是需要(need)的原因。藉由不斷的問why,一直到回答不出來或是問不下去為止,來嘗試尋找force。以下是Teddy針對這個問題所做的練習:
經過分析之後,系統效能不佳可能由以下幾點較為重要的force所引起:
Force:
- 時間匆促或技能不足可能會設計出效率不佳的資料庫與SQL指令。
- 硬體不夠力會讓後端與前端處理資料速度變慢。
- 升級硬體要花一筆不少的錢,而公司很窮…Orz。
- 升級瀏覽器可以提升Javascrip處理速度,但可能造成舊有系統無法執行。
- 一次處理的資料量越多,速度自然會越慢。
- 處理頻率越高,所需的時間越多。
差不多先這樣,再簡化一下,force可歸類為:「時間壓力」、「技術能力不足」、「硬體與網路速度太慢」、「經費有限」、「相容性限制」、「資料量大」、「頻率高」。
現在思考solution的方向就有一個參考依據,比較以下四個solution:
- 在不改程式的情況下,把IE7換成IE9便可達到提升效率的要求,但有些舊有系統會出問題。
- 在不改程式的情況下,花60萬升級資料庫伺服器電腦的硬體便可達到提升效率的要求。
- 花20萬升級資料庫伺服器電腦,再花5天修改10隻SQL程式。花6天針對唯讀資料設計cache機制。
- 修改程式限制使用者一次只能看到10筆資料(但使用者用起來可能會不爽)。
要挑選哪一個solution,或者是混用上述四種solution的內容,將最後的設計結果,代回原本找出的force裡面(原力場)。如果最後的結果(resulting context)是公司(客戶)可以接受的,那這就是一個合適的solution。
***
差不多就這樣子,同樣的方法可以用來設計使用者介面或是探討軟體架構的問題。廣義的說,很多(不敢說全部)設計問題都可以用這種方式來思考。報告完畢。
***
友藏內心獨白:正在打通任督二脈當中。
用思考分析的方式固然不錯,但似乎少了performance tuning中最重要的步驟:profiling by tool。通常bottleneck都發生在意想不到的地方啊~
回覆刪除所以我這一篇適格空抓藥啊 XD。
刪除