2009年10月14日 星期三

Y06 不要只用技術的角度想事情(1)

從程式員的角色成長後,慢慢會接觸到業務與主管等非技術的角色,有時在討論對事物的看法時,他們總會冒出一句:“不要只從技術的角度想事情”。任何事物當然都有不同的切入角度與思考觀點,其他人說這句話時多少都否定說自己提供的僅是片面的想法。然而,只用技術的角度來想事情就表示有缺漏嗎?

在開會時思考系統可以加強的地方時,我想到之前很需要但是沒辦法產生的一份報表(註:不能描述太詳細,就暫時以執行交易種類的次數報表稱之),連帶地想到產生該報表時需要配合記錄Log的各個時間點,並想這個想法整合為一個Log記錄模組的概念。後來將這個概念私下陳述給E主管聽時,他回答說:不要只用技術的角度想事情,不要習慣從bottom-up思考而應該是top-down。意思是說概念要思考能符合客戶的需求且賣得出去才算是成熟的概念。

當時我的腦中忽然發出像是什麼斷掉的聲音,立即有了否定的回答。

現在我需要一份現有系統無法產生的報表,便開始思考要怎麼做才可以滿足自己的需求;發現報表所需要的資料可以從增加特定時間點的Log來取得後,就認為應該有一個專門負責記錄Log的模組來收集各種資料。這個模組概念的產生是由我自己(客戶)需要的報表(需求)所引導出來的,完全符合由上到下、根據使用者需求而出現的想法。

目前其他客戶想要什麼樣的報表我們都不可能知道,即使今天訪談了十個客戶所收集到的報表種類,在找到第十一個客戶時還是有可能要之前沒提過的報表;就算我們想從客戶的角度來思考,也不能肯定思考出來的範圍是不是百分之百。在無法肯定未來變化的現在,我只能以現有模組的角度來定義其中的資料元素(譬如人、事、時、地、物),期望在設計的同時可以有最大範圍的排列組合,而未來客戶想要的報表儘可能地落在設計的範圍裡。



用最小的額外花費涵蓋最大範圍的可能需求,不就是設計的目的嗎?我這麼反問E主管,他沒有反駁。

9 則留言:

  1. 如果只是要『應該有一個專門負責記錄Log的模組來收集各種資料。這個模組概念的產生是由我自己(客戶)需要的報表(需求)所引導出來的,完全符合由上到下、根據使用者需求而出現的想法。』如果你是包在原系統內的子系統當然可以,但是你一開始就要擴展到別的系統也要使用就不是那麼簡單,因為你要的是一個獨立的子系統拿去賣,只能告訴你一些現實,這些現實也是客戶會問的(拿去賣,你的需求要變成客戶的需求,是反向的)。
    因為你需要可以讓別的系統呼叫的服務,你可以是非同步呼叫,所以你必須是不會漏失資料的我想到的可用的是MQ,或是你做一個MQ-like系統。
    接下來你要想即時還是非即時的系統,兩個極致的讓你參考Yahoo!奇摩站長工具是即時的,Google Analytics是offline的都有一樣的功能。
    沒拿資料倉儲跟探勘跟你說,是因為你不能理解『目前其他客戶想要什麼樣的報表我們都不可能知道,即使今天訪談了十個客戶所收集到的報表種類,在找到第十一個客戶時還是有可能要之前沒提過的報表;就算我們想從客戶的角度來思考,也不能肯定思考出來的範圍是不是百分之百。』這是怎麼做到的,因為他讓客戶自己操作他自己的報表!

    回覆刪除
  2. 實現能力的強弱, 對產品的標準不一, 眼光的遠近不同, 造成了這個不同..

    你會考慮到未來, 但生意上卻是你搞這麼多, 拖延到我能賺錢的時間. 講到設計, 聽無啦...至於誰對誰錯, 就看你氣夠不夠長來實現來賺錢了.

    不好意思, 拉理拉渣...我也是攻城師.

    你們主管來留言了..

    回覆刪除
  3. 1)從一個概念開始, 未來要延伸定義出哪些報表, 可以用各種不同的搜尋條件定義清單, 再思考清單中的每一種報表對某特定客戶來說具有什麼意義, 有什麼助益.
    2)基本的設計會先在模組內用Data Objetc盛裝, 結束API被呼叫時再進入記錄的程序. 要用同步或非同步都能做到, 甚至以參數設定亦無不可.
    3)要能讓客戶自己操作自己想要的報表, 必須先分析出應記錄的全部必要資料. 例:在時間上僅記錄開始時間而沒有定義結束時間與執行時間, 客戶若想要"與執行時間相關的統計報表"就會超出原本的設計限制.
    4)資料倉儲跟探勘已是很成熟的領域, 加上不操作電腦而無法記錄資料的客戶, 形成[客戶-櫃檯人員-應用程式]的兩層一對多關係(一名客戶進行一種以上的業務, 一種業務對應櫃檯人員一個以上的交易)時, 在思考面與實作面會有什麼樣的變化呢?

    回覆刪除
  4. 您不用客氣. 在程式設計的領域裡, 不就是隨時湧入問題要我們去解決的嗎? 不管是網路上或是工作上每個人所提出的想法, 都是拿來檢測並修改自己思維的好教材.

    在商言商, 公司營運的目的就是要賺錢, 主要能做的不是提高售價(這比較難)或是降低成本. 至少我遇過的經營者不會允許額外排時間把使用者看不到的系統部分做得更好, 這唯有靠自己的決心囉.

    2006年那次的開發, 當別組的人都可以七點前離開時, 我那組因為我的堅持有好幾個月都必須做到半夜. 但是這三年來只要專案上的變化, 只要沒有超出原有的設計限制都能在完全不變動底層的狀況下僅寫不同需求所需要的程式.

    決定想要設計的範圍(物)後就會展開後續需要做的事, 唯有相信自己的設計可以"儘可能"包容未來的變化時, 才會願意付出額外努力去把它做好的.

    回覆刪除
  5. 您的堅持令我感動...我是那個拉里拉渣的攻城師...做到半夜, 身體健康應該相當不錯.

    身力心力都不夠..堅持了一會, 就不夠力, 這方面, 相當仰慕您能堅持.

    回覆刪除
  6. 起初是沒法接受根據一些設計準則弄出來的似是而非說法與作法才去思考, 沒想到一頭栽下後才發現事情不如原來想像的簡單.

    常在提出想法時, 理論型同事會說這跟XXX很像(他說的東西我有八九成不知道是什麼, 因為我真的幾乎不看書), 然後才找出來惡補一下繼續思考.

    堅持真的很難, 尤其在身邊沒有方向相同的人時. 在不知對錯時就只憑著"作為今生工作心得"的目標每天記錄一些. 到今天我也不知是對或是錯, 只是多了幾分自信....

    回覆刪除
  7. 可是有時會想 這樣做真的值得嗎?
    客戶或其它了解這樣的事嗎?
    身體或許會出問題及其它方面的失去
    有時試著問問自己吧

    我到底在追求什麼 (笑

    縱橫棋盤十九路,笑看人生一棋局

    回覆刪除
  8. 做一件事值不值得, 都是每個人自己的價值判斷.

    以往的我是以"快速寫程式完成功能或應付需求改變"作為目標; 如今的我則以"合理的隱藏需求已經包含在之前的程式裡(意指參數化與API化)"作為方向.

    額外投入的設計花費, 只要客戶或開發團隊提出不同的需要, 而自己只要淡淡的說一句"只要改設定檔的哪裡"或"組合這幾個API"就能圓滿解決時, 心裡湧起些許的成就感. :)

    思考不同的變化的初時真的累, 但是函式庫漸有小成時, 可以發現僅需少許變動就能組合出更多樣的變化, 這是我目前保有的小小快樂.

    回覆刪除
  9. 事情原本就很難兩全其美
    專注一方一定會有另一方會失去
    或許該執著於我們所選擇的,你說是吧...

    回覆刪除