在我們公司的軟件研發體系中,存在著三種截然不同的軟件開發方式。而我,作為公司最老同事之一,也是這三種開發模式的親歷者,曾不只一次的被公司同事問過我關于這三類方式之間的異同點。于是利用空閑時間,對其進行一番整理、分析和對比。
1、全能型
部門經理在接到項目之后,將此項目交給部門內的熟練程序員后,此程序員就自動被委任其為項目經理。從此開始,程序員將根據項目售前方案和銷售合同內容,在項目進行過程中分別擔當起項目經理、功能設計師、數據存貯設計師、程序員、測試員和項目實施人員等諸多角色。并在項目進行的過程中,帶領少量其它程序員和輔助資源來完成此項目的所有工作。
此類項目其功能單一且不復雜,只是為了幫助用戶提升某一項工作的工作效率或解決客戶在其工作中的一些問題,如工作日志信息的采集和分析業務項目、辦公用品的申請和領用等。它們因為其涉及范圍小,使用人員不多,從而具有項目總費用少、開發和實施周期短、對性能要求不高的特點。
在此類開發模式中,程序員由于其工作的全面性,使他們在進入項目組后,能夠得到很快且全面的提升,并會在與客戶交往的過程中,建立起良好的客戶關系處理經驗,為其今后的成長和發展打開良好的基礎。
由于項目需要,程序員需要掌握全面技能,容易造成其在項目開發過程中需要全面的接觸項目管理及人際關系、需求分析、數據庫及對象設計、人機交互和用戶體驗設計、系統設計和開發、測試和系統提升、應用實施和售后維護等諸多截然不同的領域范圍;所以,作為此類程序員,其工作壓力之大,事務之復雜、綜合素質要求之高,是其它模式的程序員所無法對比的,這也是造成此類項目按時完成率極低、尾款回收困難、項目售后工作難做、用戶滿意度差、二次項目獲取困難的根本原因。
同時,由于程序員被大量的非開發性事務所干擾,造成他們無法專心致力于專業技能的學習和提升,也就無法造就一支高效率、高穩定性、配合默契的開發隊伍,這也是造成公司內此類人才大量流失的重要原因。
2、英雄型
部門經理在接到此類項目后,按項目所涉及的領域范疇,將其按領域進行分工。以企業信息協同系統為例,我們將進行如下分工:門戶信息的獲取、聚合、交互和展現工作交給專職于門戶開發的程序員;內部郵件系統的分析、設計、和實現將給郵件開發程序員;日程和事務的設計交給日程開發程序員;工作流應用工作交由工作流客戶化開發程序員等等。
在此類型的開發模式中,程序員將會是某一領域內的英雄式人物!由于他長期且相對穩定的負責著這個有限領域范圍內的一切事務,可以幫助他在一定時期內進行系統而穩定的業務研究和分析工作,進而成長為此領域內的業務專家。而且,通過持續的對其工作進行迭代式開發、升級和完善,可使此產品在產品品質、適用性和用戶體驗等方面得到穩定的提升,進而提升了整個產品的品質。
如果此領域內的工作產品能夠得到合理的規劃和實現,進而將其進行單獨的封裝、應用集成和推廣,就有可能形成一個具有相當競爭力的產品,從而為公司獲取新的銷售機會和利潤點。
但是,此類開發模式中的分工也容易造成程序員涉及業務領域單一和適應性窄的缺陷:由于其長期面對和研究著單一業務領域內的業務活動,而無法更多的接收和參考來自于用戶、企業和其它行業內的非它業務發展需要和趨勢,從而對其在產品領域內的發展產生限制,并造成其產品方向上的不準確或錯誤定位;由于其長期的在單一領域內工作,并在此領域內獲得了公司內的認可,這也將限制他在領域間的流動性。當公司或部門的產品方向和需要調整和改變時,此類程序員就需要被迫改變甚至放棄其在原領域內的所有積累而重新開始,從而造成巨大的浪費。
3、專業型
項目經理在接到項目之后,根據項目組成員的能力、特長職業規劃,對他們進行適當且專業化分工:由業務規劃人員負責項目的需求收集、業務規劃和需求分析;由系統架構師對系統的進行技術構架和支撐性技術的規劃和引進;由數據庫專員負責數據庫對象的設計和性能調優;由功能分析員在人機交互人員輔助下負責功能設計和人機交互模式;由業務邏輯實現專員根據功能設計進行高性能的業務邏輯處理實現和外部接口的設計和實現;由頁面開發人員負責實現人機交互;測試人員負責對系統進行全過程的測試和質量監督;專業化實施人員可快速高效的進行系統實施和在線維護,售后服務工作也將由專人負責;
通過恰當和合理的分工,將軟件研發過程中的各個環節進行拆分,從而將復雜的軟件工程分解成一個個相對獨立且又緊密關聯的工作項,從而有效的降低了軟件開發過程中的困難度和風險性;項目經理把分解后的工作項交給項目組中的合適項目成員,并根據項目組成員的能力、工作難度和工作量,制定出科學的項目計劃;同時,項目組成員在項目經理的協調和管理下進行密切的分工合作,此舉即能調動項目組成員的其工作積極性,又能使他們將工作、興趣和個人職業成長規劃進行有效的結合,從而使其在技能、收入和社會認可度等諸多方面得到快速成長,達到人盡其材,材盡其用的目的。通過使用專業的人做專業的事,公司將在人員分工、資源使用和業務拓展等領域走向專業化、規模化,最終成為專業且強大的產業實體。
但此開發模式也具有相當的局限性!其一,如何合理的利用項目組資源?項目組成員因其性格、能力和興趣各有不同,如何能將他們按項目分工和角色組成需要,進行專業化訓練和培養;其二,因項目組成員長期單一職能的工作,與其它環節的交叉和交流都受到限制,對其未來的全面發展和綜合成長都很不利;其三、各角色之間的分工、合作與工業化生產中的生產線相似,那么,建立與之相適應的質量保證體系,保證各工序之間生產產品的質量,從而從事實上提升軟件產品的整體質量?
通過對這三類開發模式的分析,我們可以看出,它們各有合理性,也又具有的相當的局限性。
全能型開發模式是早期的CS類項目開發的主要模式,其適用于哪些規模小,程序員少的小規模IT開發企業進行小型項目的開發中。但對于那些工期較長、業務范疇廣、復雜度較大的項目,此種開發模板將采用將導致風險最大化,失敗幾乎是其唯一的結局。
英雄型開發模式,因項目組成員領域化的分工和合作,使它在通用型復合類產品開發中具有優勢。通過對產品的各組成部份進行持續的改進和迭代性開發,使產品在功能、性能、用戶體驗等方面得到持續的改善和提升,從而有利于產品拓展并在此過程中做大做強,最終取得競爭優勢。但此開發模式也將導致項目組成員之間的工作協調、技術互用等方面存在諸多不便;另外,因領域的專業性和不可替換性,也就限制了公司在處理關健人員的流動性方面存在諸多困難,并在核心競爭力的保證方面存在著很大風險。
專業型開發模式,通過對人員進行專業化分工,從而在軟件開發過程中最大的利用了人力資源,提升軟件的生產效率,并降低了軟件的從業門檻。此方式在新形式下的項目開發和產品研發中都具有相當的競爭力,也易有利于保證公司的核心競爭力。但采用此種開發模式時,需要完善內部的人員激勵機制,保證各角色的從業人員都有與之適應的職位規劃和發展模式,并能根據項目組成員所處階段的需要,提供相應的技能培訓和交流機會,從而促進其成長,激勵其上進。
總之,采取何種開發模式,要根據公司的實際業務情況,發展規劃和人員構成,進行科學的分析之后,再采取行動、從而得到具有延續性和競爭性,并與自身相匹配的軟件開發模式。
2009/4/20夜