現在國內大部分管理軟體公司有幾類,有的靠關係拉單子,有一單作一單,技術對它們來說不重要,而關係永遠是第一。有的專註於使用者需求,摸透使用者業務,這類公司對業務的關注度很高,也就是橫向領域上,業務排在第一。還有一類就是已經在行業很有知名度,要做行業內的專家,公司這時已經認識到了業務和技術的共同重要性,平台概念也主要在這類公司提出。軟體工廠主要針對的也是在第三類軟體公司下的應用。
在《軟體工廠方法》一文中,我介紹了領域工程的基本介紹,領域工程由橫向領域和縱向領域組成。平台概念很早就有,我認為對管理軟體來說,平台就是能夠在縱向領域上研究透業務的基礎上使用橫向領域的成果來一起來搭建一個滿足使用者需求的應用。
1. 縱向領域(vertical domain):根據系統類別而組織的領域。如預算軟體、材料管理、合約管理、企業報表系統等。
2. 橫向領域(horizontal domain):根據軟體組件的類別而組織的領域。比如元模型引擎、報表引擎、工作流程引擎等。
3. 領域之間有3中類型的關係:
a) 包含:比如成本管理軟體包含了材料管理系統
b) 使用:比如管理軟體都使用報表引擎,OA系統都使用工作流程引擎
c) 類似:領域之間側重點不同,但有很多的相似性,通過深入研究一個領域,可以取得對另一個領域的更好理解。比如報表引擎中對於運算式解析和索引部分可能與資料關係計算引擎類似。
大部分書籍也是像以上那樣簡單介紹一下基本定義,以下我從它們在產品線開發中的關係來發表一下看法。
經常有人討論業務和技術的關係,希望爭論出到底哪個更重要。如果從商業角度來說,最終的目標都是通過滿足客戶的需求實現雙贏,而業務和技術都是實現這個大目標的方法和工具而已,業務的深入是讓我們能夠做正確的事情,技術是讓我們能夠使用適合的解決方案來正確的做事情,兩者必須協調一致才能實現最終的目標。
在認識了這兩個領域都很重要的前提下,公司觀點不一樣,投入可能會出現三種情況,先業務後技術,先技術後業務,技術和業務同時進行。
認為業務是技術應用的前提,所以必須完全弄清孵化了業務後才開展技術工作。當業務隨著投入有所進展後,開發技術也越來越多不只是簡單的增刪改了,很多技術其實本應該是由縱向領域去解決的事情了,一年半載就這樣過去了,本想著這樣對付過去了,等業務清楚了再技術重做,但是隨著業務深入,使用者的使用越來越多,銷售和使用者已經沒有時間和機會讓你重新進行縱向領域應用的設計開發了。先業務後技術的方向,會出來產品,但在不是很好管理下即有可能變成了只有業務了,隨著時間推移,會在技術上逐漸走不動了。
認為軟體公司沒有技術是不行的,所以技術優先。在技術上投入,Vista來了研究Vista,新的語言出現了研究新的語言,派專人進行研究,這種方向下會出現兩種結果。如果研究人員本身目標明確,技術可能會成功研究並應用回報公司,也有可能遇到一個本身目標就不明確的研究人員,不知道研究的東西有什麼用處,越研究反而越茫然,結果導致公司誤認為這個對公司沒有什麼價值,最後就不了了之。所以先技術後業務的方向,運氣好的話會皆大歡喜,運氣不好的話會沒有成效,反而可能會由於研究人員的失誤把有用的技術當成沒有的東西而否決了。
認為技術和業務是互相關聯,缺一不可的,所以會在技術和業務上分別投入人力,並隨著回顧兩邊的情況,不斷協調進展。架構架構設計在瞭解部分需求下就可以進行了,技術的實現對業務也會有影響。在並進過程中,會出現先分後合的情況,因為開發產品時,業界已經有很多模式可以應用。比如你做企業管理軟體,做OA,則工作流程引擎,報表引擎等縱向領域必須有,公司可以在這方面先期投入而不用等到使用者馬上要了再來開發。
以上三種方向,我們該採取哪一種呢,我想這個需要視企業情況來看,如果企業發展初期,那麼先業務和技術,先把業務吃透了,提高企業在行業內的知名度比吃透技術要緊,對於已經發展不錯的企業,則應該採用技術和業務並進,不斷的在業務和技術兩方面協調發展。而如果企業已經衣食無憂,那麼可以先技術後也業務,因為在業務不是很明確的情況下,技術也可以帶動業務的發展。
技術和業務並進在第三類公司可能佔多數,所以我們在投入時也需要認清他們的關係,哪些該並行進行,哪些該先後串列,不同領域由哪些人用什麼方法完成,進行過程中如何不斷回顧提煉方法。做開發和其他事情一樣,開始之前沒有具體的目標是絕對不行的,沒有目標,推進研究向前是毫無意義、沒有必要的,但是一旦有了目標就不同了,有了具體目標後就算研究進行不下去了,也有那個具體的目標作為前進路線上的方向,指示著要走向哪裡。有時候目標也會變化,或者更高,或者有所降低,如果目標更高了,當然相應最終結果也會更好。
軟體產品線範圍很廣,有技術、管理、人員各方面的內容,包括縱向領域和橫向領域,每個領域裡面又包含很多領域。我們在開始之前又該如何確定我們的目標呢?一般制定大目標時,都會通過將目標拆解為多個小目標來細化,然後由不同的人各自實現小目標,在實現過程中並不斷的回顧小目標對大目標的影響。
在《軟體工廠方法》中講過產品線的四個核心:範圍、通用性、可變性和擴充點。縱向領域提煉出721,橫向領域為縱向領域提供支援,比如基礎設施的支援(各個需要的引擎)最好先期投入,這樣當業務進展到一定階段時,技術的支援就會很順利了。
如果我們知道了作企業化資訊管理軟體,工作流程、報表必需要存在,那麼我們可以先期投入人力解決這一塊。但是我們又如何保證這些小目標的投入可以給公司帶來真正的回報呢。我想每個小目標都需要先從以下幾點明晰自己的目標:
- 願景和任務:是否能夠使用一句話簡單的說明自己的願景和任務?
- 涉眾:誰是你的客戶
- 問題:關注哪個領域或者問題
- 業務價值: 提供什麼價值?產品的價值是在大蛋糕中的哪一塊?
- 如何度量成功: 用什麼來表示成功?
- 產品線: 給產品線提供了什麼?
以下兩篇為我以前關於技術和業務的簡單觀點,相對於上面的淺顯一些:)
再談技術和業務的關係 業務、技術和語言的關係
歡迎轉載,轉載請註明:轉載自周金根 [ http://zhoujg.cnblogs.com/ ]