? ? ? ? 如果你問任何一家軟件公司里計算機專業出身的攻城獅們,啥叫軟件工程?TA們一定都會下意識的在心中輕嗤一句——你是小白吧?可是真要較真起來呢?……小伙伴們也許會說:“我干嘛非得知道軟件工程是啥,干就完了!”這話沒毛病。可對于我們的組織(/團隊)管理者來說,這個問題很難再繞過去,你打算帶著大家咋干呢?咋干能越干越好?其實這本身探討的并不是一個單純軟件工程定義的問題,而是一個打造組織軟件工程能力的問題。
? ? ? ? 在2019年初HW001號文件中,任老板敲著黑板提出了“全面提升軟件工程能力與實踐,打造可信的高質量產品。”猶記得那時深夜在公眾號里讀到時,讓我激動不已,無法成眠,感慨HW已經走到了正確的路上,而我們什么時候才能撥開那蒸騰的經營數據堆砌出的一片繁榮,不再傲慢,正視自己,拿出真正的高品質產品,才能讓我們活下去,且活得更好,活得更有尊嚴。
? ? ? ? 節后總有小伙伴來與我探討有關軟件工程能力提升的話題,有時信馬由韁的聊得也瑣碎零散,遂決定梳理成文,希望能幫助大家在組織內的軟件工程能力提升工作中找到有力的抓手,更是拋磚引玉,期待大家提出更多的問題,意見與想法,讓我得以繼續思考、改正與成長。
? ? ? ? 軟件工程這一概念在IEEE的軟件工程術語匯編中的定義是:將系統化的、嚴格約束的、可量化的方法應用于軟件的開發、運行和維護,也就是軟件的工程化。工程化的意思是,我們不希望開發軟件是手工作坊似的自由隨意的方式,而是一個工程,工程就意味著他需要有規范的過程,系統的、量化的管理,正確的方法,科學的工具,專業的(工)人,這樣生產出來的軟件才是有質量保證的,讓客戶滿意的,能夠持續演進的,可規模化的,能不斷給我們帶來收益的。
? ? ? ? 因此,如果我們希望提升組織或團隊的軟件工程能力,不妨從下面這四個方面進行考慮:
一、過程
1.我們是否建立了統一的、規范的研發過程,生產交付過程,(設計制造過程,)服務運維過程?
2.這些過程是否滿足目前的業務形態生產與交付的需求?
二、管理
1.我們是否設立了專門的職能負責這些過程的實施推行與持續改善,以及各項目執行過程中對過程的遵從性?
2.無論是研發類項目,還是生產類項目,項目是否是可計劃?進度是否可跟蹤?成本與質量是否可度量?
三、方法與工具
1.我們的軟件是否可用(質量問題)?是否好用(業務符合程度問題)?是否耐用(非功能需求滿足程度問題)?是否易用?(用戶體驗問題)
2.我們在規劃,需求,架構,開發,測試,實施,運維等階段是否能夠采用正確的方法與有效的工具開展工作?
3.是否知曉在上面這些階段中“干得好”的標準是什么?
4.我們能否清晰的識別出我們在項目進行過程中哪些環節或階段出現了問題而影響了業務價值的傳遞,并知道用什么方法與工具能夠盡快解決?
四、人
1.我們對于初級開發與測試人員的培養周期是多久?對他們是否有系統的培養方案與課程?
2.我們目前關鍵崗位人員規模是怎樣的?包括:產品經理,業務領域專家,(業務、技術、數據)架構師,測試運維專家,UCD人員等。是否有專項的培養或引進計劃?
3.我們的工程師文化核心理念是什么?通過哪些機制與專項工作將這樣的文化滲透到組織內?員工對文化的認知與認可程度如何?外界(客戶、伙伴、兄弟部門等)對我們的印象是否是一致的,且與我們希望傳遞的文化氣質相契合?
? ? ? ? 以上只是粗略的列出一些供大家思考的檢查點,那么我們究竟應該先從哪里入手呢?原則上,過程與管理部分是組織的基礎能力(這里特指大規模開發組織,如果你是創業組織,那么完全可以越過這層,直奔目標,快速成事)。在工作有序開展的基礎上,我們再去關注方法與工具,首先通過軟件價值鏈去審視并識別我們在哪些環節或階段上出了問題,將這些問題排定優先級,然后把我們要解決的問題有針對性的設立專項,比如:業務規劃專項,需求管理專項,架構質量專項,自動化測試專項,交付工具鏈專項等等,專項問題解決方案可先在一個或幾個業務線進行試點,然后再組織內全面實施推廣。而人與文化的部分更多與人力資源領域工作相關,這里只贅述一句話——HR與研發/業務的高度有機協作是這一版塊工作成功的關鍵,對組織里HRBP的能力更加是一種考驗。
? ? ? ? 軟件工程能力這個話題著實很大,這樣嘗試梳理之后才發現自己能力有限,無法駕馭,如果上面的文字能帶給大家一些思路,那將成為我的動力,期待咱們后續更加深入的思考與探討!